@funkit/connect
Version:
Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.
132 lines (131 loc) • 6.6 kB
TypeScript
import { type CheckoutHistoryItem, type CheckoutRefundState, CheckoutState, type DirectExecution } from '@funkit/api-base';
import { type ApiFunkitCheckoutQuoteResult, type CheckoutQuoteResponse } from '@funkit/utils';
import { type Config } from '@wagmi/core';
import { type Address, type Hex } from 'viem';
import type { UseConfigReturnType } from 'wagmi';
import type { ServerCheckoutConfig } from '~/domains/clientMetadata';
import type { FunkitCheckoutQuoteResult } from '~/domains/quote';
import { type FunkitCheckoutActionParams, type FunkitCheckoutConfig } from '../providers/FunkitCheckoutContext';
export declare const MOONPAY_TIME_ESTIMATE_MS = 120000;
export declare const BROKERAGE_TIME_ESTIMATE_MS = 0;
export declare const BANK_TIME_ESTIMATE_MS = 0;
export declare const DUMMY_TRANSFER_PARAMS: {
toAddress: "0x000000000000000000000000000000000000dEaD";
tokenAmount: number;
};
type ValidateCheckoutConfigReturn = Promise<{
config: FunkitCheckoutConfig;
isValid: true;
message: string;
} | {
isValid: false;
message: string;
}>;
/**
* Validates the checkout configuration.
* @param config - The checkout configuration to validate.
* @returns An object indicating whether the configuration is valid and a message if it is not.
*/
export declare function validateCheckoutConfig(config: Partial<FunkitCheckoutConfig>): ValidateCheckoutConfigReturn;
export declare const hasSufficientBalance: (wagmiConfig: UseConfigReturnType, walletAddress: string, tokenAddress: string, tokenChainId: string, requiredAssetAmount: number) => Promise<{
balance: number;
result: boolean;
tokenTicker: string;
} | {
balance: number;
result: boolean;
tokenTicker: null;
}>;
export declare const hasGasToken: (wagmiConfig: UseConfigReturnType, walletAddress: string, chainId: string) => Promise<boolean>;
export type TokenInfo = {
symbol: string;
tokenAddress: null | Address;
tokenUnitPriceUsd: null | number;
pickedChainId: string;
};
export declare function getTimeFromNowSeconds(startTimeMs: number, durationMs: number): number;
export declare function getCheckoutReceivedAmount({ config, quote, }: {
config: FunkitCheckoutConfig | ServerCheckoutConfig;
quote: ApiFunkitCheckoutQuoteResult | null;
}): number;
export declare function getCheckoutReceivedAmountFormatted({ config, quote, }: {
config: FunkitCheckoutConfig | ServerCheckoutConfig;
quote: ApiFunkitCheckoutQuoteResult | null;
}): string;
/**
* Given a checkout config, returns the display string for the checkout item.
* Arbitrary action checkouts: Display the targetAssetAmount
* - not 100% accurate since userOp will consume some tokens, but FINE now.
* - e.g. "2.1234 aArbUSDCn" or "Staked VRTX"
* Basic buy checkouts: Display the targetAssetAmount with the targetAssetTicker.
* - e.g. "0.12345 ETH"
* Ideally, should be used via the hook `useCheckoutItemDisplay` to handle the customer cutomization check.
*/
export declare function getCheckoutItemDisplay({ checkoutConfig, hideAmount, overrideAmount, }: {
checkoutConfig: FunkitCheckoutConfig | ServerCheckoutConfig;
hideAmount?: boolean;
overrideAmount?: number;
}): string;
/**
* Given the result of a quote, calculate the effective fees (in source asset).
*
* _These are only the fees from our base quote, **not** including the initial transfer / brokerage / card processing fees._
*/
export declare function getBaseQuoteTotalFeesFromAmount(baseQuote: CheckoutQuoteResponse): number;
/**
* Given the result of a quote, calculate the effective fees (in source asset).
*
* _These also including the initial transfer / brokerage / card processing fees._
*/
export declare function getQuoteTotalFeesFromAmount(finalQuote: FunkitCheckoutQuoteResult): number;
/**
* Given the result of a quote, calculate the effective exchange rate (target asset / source asset).
*/
export declare function getQuoteExchangeRate(config: FunkitCheckoutConfig, baseQuote: CheckoutQuoteResponse): number;
/**
* Given the result of a quote, estimate the maximum targetAssetAmount for which the checkout should succeed.
* The result is then reduced by 1% to further reduce the risk of insufficient funds.
*
* NOTE: This assumes fees are (roughly) constant, at least when the target amount does not change much.
* Only the API could give us a true number here.
*
* @param sourceAssetBalance - Total source asset balance
* @param config - Checkout config
* @param quoteResult - Failed quote results
*/
export declare function getMaxTargetAssetAmountEstimate(sourceAssetBalance: number, config: FunkitCheckoutConfig, quoteResult: FunkitCheckoutQuoteResult): number;
export declare function getTokenDecimals(wagmiConfig: Config, chainId: string, tokenAddress: Address): Promise<number>;
export declare function evaluateCheckoutGenerateActionsParams(config: FunkitCheckoutConfig): Promise<FunkitCheckoutActionParams[]>;
export declare function isCheckoutCrFlow(config: FunkitCheckoutConfig): boolean;
/**
* @param config can be either be a config from live checkoutItem OR from checkout history's clientMetadata
*/
export declare function isCheckoutPostActionRequired(config: FunkitCheckoutConfig | ServerCheckoutConfig): boolean;
/**
* @returns whether we should show the checkout to the user (ie. supported in current sdk version & not cancelled)
*/
export declare const isCheckoutValid: (checkout: CheckoutHistoryItem | MergedCheckoutHistoryItem) => boolean;
export declare const isCheckoutHistoryDirectExecution: (checkoutId: string) => boolean;
export type MergedCheckoutHistoryItem = {
directExecution: boolean;
/** For direction execution this is the tx hash, for checkouts it is the deposit address */
id: Hex;
refundState?: CheckoutRefundState;
state: CheckoutState;
} & ((CheckoutHistoryItem & {
directExecution: false;
}) | (DirectExecution & {
directExecution: true;
}));
export declare function toMergedCheckoutHistoryItem(item: CheckoutHistoryItem | DirectExecution): MergedCheckoutHistoryItem;
export declare function isVaultDepositCheckout(checkoutConfig: FunkitCheckoutConfig, sourceHolding: {
chainId: string;
tokenAddress: string;
}): boolean;
/** some additional staking token will be performed after swap. We need to calculate the final destination token amount */
export declare function computeDisplayDestinationToken(checkoutConfig: FunkitCheckoutConfig | ServerCheckoutConfig | undefined, displayAssetAmount: number): {
stakingTokenAmount: number;
stakingTokenSymbol: string;
stakingTokenIcon: string;
};
export {};