@coinbase/agentkit
Version:
Coinbase AgentKit core primitives
82 lines (81 loc) • 3.4 kB
JavaScript
;
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}`;
}