UNPKG

@coinbase/cdp-sdk

Version:

SDK for interacting with the Coinbase Developer Platform Wallet API

143 lines (136 loc) • 4.45 kB
/** * x402 support for the CDP SDK. * * Import from `@coinbase/cdp-sdk/x402` to access: * - **Resource server**: `createX402Server` — add x402 payment gating to HTTP endpoints * - **Payment client**: `CdpX402Client` — pay for x402-protected APIs * - **Facilitator**: `createCdpFacilitatorClient` — CDP-hosted payment facilitator * - **Spend controls**: guardrails for autonomous agents * - **Builder codes**: optional `builderCode` on client/server for ERC-8021 attribution * - **Signer adapters**: bridge CDP accounts into existing x402 setups * * ## Quick start * * ### Gate an endpoint * * ```typescript * import { createX402Server } from "@coinbase/cdp-sdk/x402"; * import { paymentMiddlewareFromHTTPServer } from "@x402/express"; * * // Set: CDP_API_KEY_ID, CDP_API_KEY_SECRET, CDP_WALLET_SECRET * const server = await createX402Server({ * routes: { "GET /report": { price: "$0.01", description: "AI-generated report" } }, * }); * app.use(paymentMiddlewareFromHTTPServer(server)); * console.log("Receiving EVM payments at", server.payToEvmAddress); * console.log("Receiving Solana payments at", server.payToSvmAddress); * ``` * * ### Pay for an x402-protected API * * ```typescript * import { CdpX402Client } from "@coinbase/cdp-sdk/x402"; * import { wrapFetchWithPayment } from "@x402/fetch"; * * // Set: CDP_API_KEY_ID, CDP_API_KEY_SECRET, CDP_WALLET_SECRET * const client = new CdpX402Client(); * const fetchWithPayment = wrapFetchWithPayment(fetch, client); * const response = await fetchWithPayment("https://api.example.com/report"); * ``` * * ### Use a CDP-managed wallet with an existing x402Client * * ```typescript * import { CdpClient } from "@coinbase/cdp-sdk"; * import { x402Client } from "@x402/core/client"; * import { registerExactEvmScheme } from "@x402/evm/exact/client"; * import { fromCdpEvmAccount } from "@coinbase/cdp-sdk/x402"; * * const cdp = new CdpClient(); * const account = await cdp.evm.getOrCreateAccount({ name: "my-signer" }); * * const client = new x402Client(); * registerExactEvmScheme(client, { signer: fromCdpEvmAccount(account) }); * ``` * * @module */ // Resource server export { createX402Server, X402Server, CDP_SERVER_DEFAULT_EVM_NETWORKS, CDP_SERVER_DEFAULT_SVM_NETWORKS, CDP_SERVER_DEFAULT_NETWORKS, CDP_SERVER_DEVELOPMENT_EVM_NETWORKS, CDP_SERVER_DEVELOPMENT_SVM_NETWORKS, CDP_SERVER_DEVELOPMENT_NETWORKS, } from "./server.js"; export type { CdpX402ServerConfig, CdpRouteConfig, CdpPaymentScheme, CdpPaymentFlow, PayToConfig, RoutesConfig, RouteConfig, } from "./server.js"; export { getCdpDefaultSchemes, getCdpExtensionRegistrations, CDP_EXTENSION_GAS_SPONSORING_EIP2612, CDP_EXTENSION_GAS_SPONSORING_ERC20_APPROVAL, CDP_EXTENSION_BAZAAR, CDP_EXTENSION_BUILDER_CODE, CDP_SUPPORTED_EXTENSIONS, buildBazaarDeclaration, } from "./server-extensions.js"; export type { CdpSchemeRegistration } from "./server-extensions.js"; // Main client export { CdpX402Client } from "./client.js"; export type { CdpX402ClientConfig, CdpX402WalletAddresses, WalletConfig, NetworkConfig, SchemesConfig, } from "./client.js"; // Facilitator export { createCdpFacilitatorClient, CDP_FACILITATOR_URL } from "./facilitator.js"; export type { CdpFacilitatorClientArgs } from "./facilitator.js"; // Spend controls export { applySpendControls, getSpendControlsRegistry } from "./guardrails/apply.js"; export type { SpendControlsRegistry, ResolvedSpendControls } from "./guardrails/apply.js"; export { SpendControlError, SpendControlErrorCodes, parseDuration, parseAmount, } from "./guardrails/types.js"; export type { SpendControls, SpendLedgerEntry, SpendStore, Amount, Duration, Asset, Address, SpendControlErrorCode, SpendControlErrorDetails, } from "./guardrails/types.js"; export { SpendTracker } from "./guardrails/spend-tracker.js"; export type { SpendTrackerOptions, RecordSpendInput, TotalSpendQuery, } from "./guardrails/spend-tracker.js"; export { normalizeAsset, normalizeNetwork, normalizePayee } from "./guardrails/normalize.js"; // Signer adapters (for x402 Dev migration) export { fromCdpEvmAccount, fromCdpSmartWallet, cdpSolanaAccountToSvmSigner, } from "./account-signers.js"; export type { CdpEvmAccount, CdpSmartAccount, CdpSolanaAccount } from "./account-signers.js"; // Constants export { getDefaultEvmRpcUrls } from "./constants.js";