UNPKG

@coinbase/agentkit

Version:

Coinbase AgentKit core primitives

82 lines (81 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCdpClient = getCdpClient; exports.validateNetworkSupport = validateNetworkSupport; exports.handleEvmFaucet = handleEvmFaucet; exports.handleSvmFaucet = handleSvmFaucet; const cdp_sdk_1 = require("@coinbase/cdp-sdk"); const cdpShared_1 = require("../../wallet-providers/cdpShared"); /** * Gets or creates a CDP client from the wallet provider or environment variables. * * @param walletProvider - The wallet provider to get the client from. * @returns The CDP client. */ function getCdpClient(walletProvider) { if ((0, cdpShared_1.isWalletProviderWithClient)(walletProvider)) { return walletProvider.getClient(); } const apiKeyId = process.env.CDP_API_KEY_ID; const apiKeySecret = process.env.CDP_API_KEY_SECRET; if (!apiKeyId || !apiKeySecret) { throw new Error("Faucet requires CDP_API_KEY_ID and CDP_API_KEY_SECRET environment variables to be set."); } return new cdp_sdk_1.CdpClient({ apiKeyId, apiKeySecret }); } /** * Validates that the network and protocol family are supported for faucet operations. * * @param network - The network to validate. * @param networkId - The network ID to validate. */ function validateNetworkSupport(network, networkId) { const supportedProtocols = ["evm", "svm"]; if (!supportedProtocols.includes(network.protocolFamily)) { throw new Error("Faucet is only supported on Ethereum and Solana protocol families."); } const supportedEvmNetworks = ["base-sepolia", "ethereum-sepolia"]; const supportedSvmNetworks = ["solana-devnet"]; const isEvmSupported = network.protocolFamily === "evm" && supportedEvmNetworks.includes(networkId); const isSvmSupported = network.protocolFamily === "svm" && supportedSvmNetworks.includes(networkId); if (!isEvmSupported && !isSvmSupported) { const supportedNetworks = network.protocolFamily === "evm" ? supportedEvmNetworks.join(" or ") : supportedSvmNetworks.join(" or "); throw new Error(`Faucet is only supported on ${supportedNetworks} ${network.protocolFamily} networks.`); } } /** * Handles faucet requests for EVM networks. * * @param cdpClient - The CDP client to use. * @param address - The address to request funds from. * @param networkId - The network ID to request funds from. * @param args - The arguments to request funds from. * @returns The transaction hash. */ async function handleEvmFaucet(cdpClient, address, networkId, args) { const token = (args.assetId || "eth"); const faucetTx = await cdpClient.evm.requestFaucet({ address, token, network: networkId, }); return `Received ${args.assetId || "ETH"} from the faucet. Transaction hash: ${faucetTx.transactionHash}`; } /** * Handles faucet requests for Solana networks. * * @param cdpClient - The CDP client to use. * @param address - The address to request funds from. * @param args - The arguments to request funds from. * @returns The transaction hash. */ async function handleSvmFaucet(cdpClient, address, args) { const token = (args.assetId || "sol"); const faucetTx = await cdpClient.solana.requestFaucet({ address, token, }); return `Received ${args.assetId || "SOL"} from the faucet. Transaction signature hash: ${faucetTx.signature}`; }