UNPKG

zebec-instant-card-sdk

Version:

An sdk for interacting with zebec instant card program in solana.

331 lines (330 loc) 12.3 kB
/// <reference types="@coral-xyz/anchor/node_modules/@solana/web3.js" /> import { Address } from "@coral-xyz/anchor"; import { Commitment, Connection, PublicKey, Transaction, VersionedTransaction } from "@solana/web3.js"; import { ZebecCardInstructions } from "./instructions"; import { TransactionPayload } from "./payload"; import { BigIntString, DecimalString, EmailString, PercentString, PublicKeyString } from "./types"; /** * Jupiter quote routes info */ export type RouteInfo = { swapInfo: { ammKey: PublicKeyString; label: string; inputMint: PublicKeyString; outputMint: PublicKeyString; inAmount: BigIntString; outAmount: BigIntString; feeAmount: BigIntString; feeMint: PublicKeyString; }; percent: number; }; /** * Juptier quote info */ export type QuoteInfo = { inputMint: PublicKeyString; inAmount: BigIntString; outputMint: PublicKeyString; outAmount: BigIntString; otherAmountThreshold: BigIntString; swapMode: "ExactIn" | "ExactOut"; slippageBps: number; platformFee: string | null; priceImpactPct: PercentString; routePlan: RouteInfo[]; contextSlot: number; timeTaken: number; } | { error: string; }; /** * Info stored in buyerPda */ export type CardPurchaseInfo = { address: PublicKeyString; index: bigint; buyerAddress: PublicKeyString; amount: DecimalString; purchaseAt: number; }; export type FeeTier = { minAmount: DecimalString; maxAmount: DecimalString; feePercent: PercentString; }; export type ProviderConfig = { minCardAmount: DecimalString; maxCardAmount: DecimalString; feeTiers: FeeTier[]; }; /** * Info stored in cardPda */ export type CardConfigInfo = { address: PublicKeyString; index: bigint; zicOwner: PublicKeyString; nativeFeePercent: PercentString; nonNativeFeePercent: PercentString; revenueFeePercent: PercentString; usdcMint: PublicKeyString; revenueVault: PublicKeyString; commissionVault: PublicKeyString; cardVault: PublicKeyString; totalCardSold: DecimalString; providerConfig: ProviderConfig; dailyCardPurchaseLimit: DecimalString; }; export type TokenFeeRecord = { tokenAddress: PublicKeyString; fee: PercentString; }; export type TokenFeeRecordList = TokenFeeRecord[]; export type UserPurchaseRecordInfo = { address: PublicKeyString; owner: PublicKeyString; lastCardBoughtTimestamp: number; totalCardBoughtPerDay: DecimalString; }; export type CardBotConfigInfo = { botAdmin: PublicKeyString; }; export type BotUserCustodyInfo = { userId: string; lastCardBoughtTimestamp: number; totalCardBoughtPerDay: DecimalString; }; export type OnRampConfigInfo = { onRampAdmin: PublicKeyString; zbcnToken: PublicKeyString; }; export type OnRampUserCustodyInfo = { userId: string; }; export type InitCardConfigParams = { zicOwnerAddress: Address; cardVaultAddress: Address; revenueVaultAddress: Address; commissionVaultAddress: Address; usdcAddress: Address; revenueFeePercent: PercentString; nativeFeePercent: PercentString; nonNativeFeePercent: PercentString; minCardAmount: DecimalString; maxCardAmount: DecimalString; dailyCardPurchaseLimit: DecimalString; feeTiers: Array<FeeTier>; }; export type SetCardConfigParams = { zicOwnerAddress: Address; newZicOwnerAddress: Address; cardVaultAddress: Address; revenueVaultAddress: Address; commissionVaultAddress: Address; revenueFeePercent: PercentString; nativeFeePercent: PercentString; nonNativeFeePercent: PercentString; minCardAmount: DecimalString; maxCardAmount: DecimalString; dailyCardPurchaseLimit: DecimalString; feeTiers: Array<FeeTier>; }; export type SetCustomFeesParams = { zicOwnerAddress: PublicKeyString; tokenFeeList: TokenFeeRecordList; }; export type DeleteCustomFeesParams = { zicOwnerAddress: PublicKeyString; tokenAddressList: PublicKeyString[]; }; export type SwapMode = "ExactOut" | "ExactIn"; export type SwapAndDepositParams = { userAddress: Address; quoteInfo: QuoteInfo; }; export type DepositParams = { userAddress: Address; mintAddress: Address; amount: DecimalString; }; export type WithdrawParams = { userAddress: Address; mintAddress: Address; amount: DecimalString; }; export type CardType = "silver" | "carbon"; export type BuyCardParams = { mintAddress: Address; buyerAddress: Address; nextBuyerCounter: bigint; amount: DecimalString; cardType: CardType; buyerEmail: EmailString; }; export type BuyCardDirectParams = { buyerAddress: Address; nextBuyerCounter: bigint; amount: DecimalString; cardType: CardType; buyerEmail: EmailString; mintAddress: Address; }; export type SwapAndBuyCardDirectParams = { quoteInfo: QuoteInfo; buyerAddress: Address; nextBuyerCounter: bigint; cardType: CardType; buyerEmail: EmailString; }; export type GetQuoteInfoParams = { inputMintAddress: Address; outputMintAddress: Address; inputAmount: DecimalString; slippagePercent: PercentString; swapMode?: SwapMode; }; export type GenerateYieldParams = { userAddress: Address; mintAddress: Address; amount: DecimalString; }; export type WithdrawYieldParams = { userAddress: Address; mintAddress: Address; amount: DecimalString; withdrawAll?: boolean; }; export type InitBotConfigParams = { zicOwnerAddress: PublicKeyString; botAdminAddress: PublicKeyString; }; export type InitBotUserCustodyParams = { botAdminAddress: PublicKeyString; usdcMintAddress: PublicKeyString; userId: string; }; export type SetNewBotAdminParams = { newBotAdminAddress: PublicKeyString; zicOwnerAddress: PublicKeyString; }; export type BuyCardThroughBotParams = { botAdminAddress: PublicKeyString; usdcMintAddress: PublicKeyString; userId: string; cardType: CardType; amount: DecimalString; }; export type InitOnRampConfigParams = { zicOwnerAddress: PublicKeyString; onRampAdminAddress: PublicKeyString; zbcnAddress: PublicKeyString; }; export type InitOnRampUserCustodyParams = { onRampAdminAddress: PublicKeyString; userId: string; }; export type SetNewOnRampAdminParams = { zicOwnerAddress: PublicKeyString; newOnRampAdminAddress: PublicKeyString; }; export type OnRampTransferZbcnParams = { onRampAdminAddress: PublicKeyString; senderUserId: string; receiverAddress: PublicKeyString; amount: DecimalString; durationInDays: number; }; /** * Data emitted from Deposit Event */ export type DepositToUserPdaEvent = { from: PublicKeyString; to: PublicKeyString; amount: DecimalString; }; export type CardPurchaseEvent = { index: bigint; from: PublicKeyString; to: PublicKeyString; amount: DecimalString; }; /** * Zebec card service for interacting with zebec instant card program * * @example * * ``` * const connection = new Connection(process.env.RPC_URL || clusterApiUrl("mainnet-beta")); * const wallet = useWallet(); * const provider = getAnchorProvider(connection, wallet); * const program = ZebecCardProgramFactory.getProgram(provider); * const instructions = new ZebecCardInstructions(program); * const service = new ZebecCardService(instructions, connection, wallet.signTranaction); * * // or * const provider = getZebecConnectionProvider(connection); * const program = ZebecCardProgramFactory.getProgram(provider); * const instructions = new ZebecCardInstructions(program); * const service = new ZebecCardService(instructions, connection); * ``` */ export declare class ZebecCardService { readonly instructions: ZebecCardInstructions; private readonly _connection; private readonly _signTransaction?; static deriveCardConfigPda(cardProgramId: Address): PublicKey; static deriveTokenFeeMapPda(cardProgramId: Address): PublicKey; static deriveCardPurchaseInfoPda(buyerAddress: Address, cardProgramId: Address, buyerCounter: bigint): PublicKey; static deriveUserVaultPda(userAddress: Address, cardProgramId: Address): PublicKey; static deriveUserPurchaseRecordPda(userAddress: Address, cardProgramId: Address): PublicKey; static deriveFlexlendUserPda(userAddress: Address, flexlendProgramId: Address): PublicKey; static deriveFlexlendPromotionReservePda(reserveAdminAddress: Address, flexlendProgramId: Address): PublicKey; static deriveCardBotConfigPda(cardProgramId: Address): PublicKey; static deriveBotUserCustodyPda(userId: string, cardProgramId: Address): PublicKey; static deriveOnRampConfigPda(cardProgramId: Address): PublicKey; static deriveOnRampUserCustodyPda(userId: string, cardProgramId: Address): PublicKey; static deriveReloadableCardPda(cardProgramId: Address): PublicKey; private readonly _programId; constructor(instructions: ZebecCardInstructions, _connection: Connection, _signTransaction?: (<T extends Transaction | VersionedTransaction>(transaction: T) => Promise<T>) | undefined); private _createPayload; initCardConfig(params: InitCardConfigParams): Promise<TransactionPayload>; setCardConfig(params: SetCardConfigParams): Promise<TransactionPayload>; setCustomFees(params: SetCustomFeesParams): Promise<TransactionPayload>; deleteCustomFees(params: DeleteCustomFeesParams): Promise<TransactionPayload>; swapAndDeposit(params: SwapAndDepositParams): Promise<TransactionPayload>; deposit(params: DepositParams): Promise<TransactionPayload>; withdraw(params: WithdrawParams): Promise<TransactionPayload>; buyCard(params: BuyCardParams): Promise<TransactionPayload>; swapAndBuyCardDirect(params: SwapAndBuyCardDirectParams): Promise<TransactionPayload>; buyCardDirect(params: BuyCardDirectParams): Promise<TransactionPayload>; private _checkAmountIsWithinDailyCardLimit; private _checkAmountIsWithinProviderRange; initBotConfig(params: InitBotConfigParams): Promise<TransactionPayload>; initBotUserCustody(params: InitBotUserCustodyParams): Promise<TransactionPayload>; setBotAdmin(params: SetNewBotAdminParams): Promise<TransactionPayload>; buyCardThroughBot(params: BuyCardThroughBotParams): Promise<TransactionPayload>; private _checkAmountIsWithinDailyCardLimitForBot; generateYield(params: GenerateYieldParams): Promise<TransactionPayload>; withdrawYield(params: WithdrawYieldParams): Promise<TransactionPayload>; initOnRampConfig(params: InitOnRampConfigParams): Promise<TransactionPayload>; setOnRampAdmin(params: SetNewOnRampAdminParams): Promise<TransactionPayload>; initOnRampUserCustody(params: InitOnRampUserCustodyParams): Promise<TransactionPayload>; onRampTransferZbcn(params: OnRampTransferZbcnParams): Promise<TransactionPayload>; getQuoteInfo(params: GetQuoteInfoParams): Promise<QuoteInfo>; getUserVaultBalance(userAddress: Address, mintAddress: Address, commitment?: Commitment): Promise<DecimalString>; getNextBuyerCounter(): Promise<bigint>; getCardConfigInfo(commitment?: Commitment): Promise<CardConfigInfo>; getCardPurchaseInfo(cardPurchaseInfoPda: Address, commitment?: Commitment): Promise<CardPurchaseInfo>; getUserPurchaseRecord(userPurchaseRecordKey: Address, commitment?: Commitment): Promise<UserPurchaseRecordInfo>; getCustomTokenFees(commitment?: Commitment): Promise<TokenFeeRecordList>; getCardBotConfigInfo(commitment?: Commitment): Promise<CardBotConfigInfo>; getBotUserCustodyInfo(userCustody: Address, commitment?: Commitment): Promise<BotUserCustodyInfo>; getOnRampConfigInfo(commitment?: Commitment): Promise<OnRampConfigInfo>; getOnRampUserCustodyInfo(onRampUserCustody: Address, commitment?: Commitment): Promise<OnRampUserCustodyInfo>; getAllCardPurchaseInfo(buyerAddress: Address): Promise<Array<CardPurchaseInfo>>; addDepositToUserPdaEventLister(callback: (event: DepositToUserPdaEvent, slot: number, signature: string) => void): number; addCardPurchaseEventLister(callback: (event: CardPurchaseEvent, slot: number, signature: string) => void): number; removeEventLister(eventListener: number): Promise<void>; }