@coinbase/cdp-sdk
Version:
SDK for interacting with the Coinbase Developer Platform Wallet API
143 lines (136 loc) • 4.45 kB
text/typescript
/**
* 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";