UNPKG

@coinbase/cdp-sdk

Version:

SDK for interacting with the Coinbase Developer Platform Wallet API

47 lines 1.89 kB
import { formatUnits } from "viem"; import { UserInputValidationError } from "../../../errors.js"; import { CreatePaymentTransferQuoteBodySourceType, CreatePaymentTransferQuoteBodyTargetType, } from "../../../openapi-client/index.js"; /** * Funds a Solana account. * * @param apiClient - The API client. * @param options - The options for funding a Solana account. * * @returns A promise that resolves to the fund operation result. */ export async function fund(apiClient, options) { if (options.token !== "sol" && options.token !== "usdc") { throw new UserInputValidationError("Invalid token, must be sol or usdc"); } const decimals = options.token === "sol" ? 9 : 6; const amount = formatUnits(options.amount, decimals); const paymentMethods = await apiClient.getPaymentMethods(); const cardPaymentMethod = paymentMethods.find(method => method.type === "card" && method.actions.includes("source")); if (!cardPaymentMethod) { throw new Error("No card found to fund account"); } const response = await apiClient.createPaymentTransferQuote({ sourceType: CreatePaymentTransferQuoteBodySourceType.payment_method, source: { id: cardPaymentMethod.id, }, targetType: CreatePaymentTransferQuoteBodyTargetType.crypto_rail, target: { currency: options.token, network: "solana", address: options.address, }, amount, currency: options.token, execute: true, }); return { id: response.transfer.id, network: response.transfer.target.network, status: response.transfer.status, targetAmount: response.transfer.targetAmount, targetCurrency: response.transfer.targetCurrency, transactionHash: response.transfer.transactionHash, }; } //# sourceMappingURL=fund.js.map