/** * x402 Protocol Implementation * * This module implements the x402 payment protocol from scratch, * following the specification at https://github.com/coinbase/x402 */ import { PrivateKeyAccount, Address } from "viem"; export declare const SUPPORTED_NETWORKS: { readonly "eip155:8453": { readonly chain: { blockExplorers: { readonly default: { readonly name: "Basescan"; readonly url: "https://basescan.org"; readonly apiUrl: "https://api.basescan.org/api"; }; }; blockTime: 2000; contracts: { readonly disputeGameFactory: { readonly 1: { readonly address: "0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e"; }; }; readonly l2OutputOracle: { readonly 1: { readonly address: "0x56315b90c40730925ec5485cf004d835058518A0"; }; }; readonly multicall3: { readonly address: "0xca11bde05977b3631167028862be2a173976ca11"; readonly blockCreated: 5022; }; readonly portal: { readonly 1: { readonly address: "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e"; readonly blockCreated: 17482143; }; }; readonly l1StandardBridge: { readonly 1: { readonly address: "0x3154Cf16ccdb4C6d922629664174b904d80F2C35"; readonly blockCreated: 17482143; }; }; readonly gasPriceOracle: { readonly address: "0x420000000000000000000000000000000000000F"; }; readonly l1Block: { readonly address: "0x4200000000000000000000000000000000000015"; }; readonly l2CrossDomainMessenger: { readonly address: "0x4200000000000000000000000000000000000007"; }; readonly l2Erc721Bridge: { readonly address: "0x4200000000000000000000000000000000000014"; }; readonly l2StandardBridge: { readonly address: "0x4200000000000000000000000000000000000010"; }; readonly l2ToL1MessagePasser: { readonly address: "0x4200000000000000000000000000000000000016"; }; }; ensTlds?: readonly string[] | undefined; id: 8453; name: "Base"; nativeCurrency: { readonly name: "Ether"; readonly symbol: "ETH"; readonly decimals: 18; }; experimental_preconfirmationTime?: number | undefined | undefined; rpcUrls: { readonly default: { readonly http: readonly ["https://mainnet.base.org"]; }; }; sourceId: 1; testnet?: boolean | undefined | undefined; custom?: Record | undefined; extendSchema?: Record | undefined; fees?: import("viem").ChainFees | undefined; formatters: { readonly block: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcBlock, action?: string | undefined) => { baseFeePerGas: bigint | null; blobGasUsed: bigint; difficulty: bigint; excessBlobGas: bigint; extraData: import("viem").Hex; gasLimit: bigint; gasUsed: bigint; hash: `0x${string}` | null; logsBloom: `0x${string}` | null; miner: import("abitype").Address; mixHash: import("viem").Hash; nonce: `0x${string}` | null; number: bigint | null; parentBeaconBlockRoot?: `0x${string}` | undefined; parentHash: import("viem").Hash; receiptsRoot: import("viem").Hex; sealFields: import("viem").Hex[]; sha3Uncles: import("viem").Hash; size: bigint; stateRoot: import("viem").Hash; timestamp: bigint; totalDifficulty: bigint | null; transactions: `0x${string}`[] | import("viem/chains").OpStackTransaction[]; transactionsRoot: import("viem").Hash; uncles: import("viem").Hash[]; withdrawals?: import("viem").Withdrawal[] | undefined | undefined; withdrawalsRoot?: `0x${string}` | undefined; } & {}; type: "block"; }; readonly transaction: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcTransaction, action?: string | undefined) => ({ blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: boolean; mint?: bigint | undefined | undefined; sourceHash: import("viem").Hex; type: "deposit"; } | { r: import("viem").Hex; s: import("viem").Hex; v: bigint; to: import("abitype").Address | null; from: import("abitype").Address; gas: bigint; nonce: number; value: bigint; blockHash: `0x${string}` | null; blockNumber: bigint | null; hash: import("viem").Hash; input: import("viem").Hex; transactionIndex: number | null; typeHex: import("viem").Hex | null; accessList?: undefined | undefined; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId?: number | undefined; yParity?: undefined | undefined; type: "legacy"; gasPrice: bigint; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas?: undefined | undefined; maxPriorityFeePerGas?: undefined | undefined; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip2930"; gasPrice: bigint; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas?: undefined | undefined; maxPriorityFeePerGas?: undefined | undefined; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip1559"; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx /** * Fetch with x402 payment support * Automatically handles 402 responses and payment */ ? /** * Fetch with x402 payment support * Automatically handles 402 responses and payment */: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes: readonly import("viem").Hex[]; chainId: number; type: "eip4844"; gasPrice?: undefined | undefined; maxFeePerBlobGas: bigint; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList: import("viem").SignedAuthorizationList; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip7702"; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; }) & {}; type: "transaction"; }; readonly transactionReceipt: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcTransactionReceipt, action?: string | undefined) => { blobGasPrice?: bigint | undefined; blobGasUsed?: bigint | undefined; blockHash: import("viem").Hash; blockNumber: bigint; contractAddress: import("abitype").Address | null | undefined; cumulativeGasUsed: bigint; effectiveGasPrice: bigint; from: import("abitype").Address; gasUsed: bigint; logs: import("viem").Log[]; logsBloom: import("viem").Hex; root?: `0x${string}` | undefined; status: "success" | "reverted"; to: import("abitype").Address | null; transactionHash: import("viem").Hash; transactionIndex: number; type: import("viem").TransactionType; l1GasPrice: bigint | null; l1GasUsed: bigint | null; l1Fee: bigint | null; l1FeeScalar: number | null; } & {}; type: "transactionReceipt"; }; }; prepareTransactionRequest?: ((args: import("viem").PrepareTransactionRequestParameters, options: { phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters"; }) => Promise) | [fn: ((args: import("viem").PrepareTransactionRequestParameters, options: { phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters"; }) => Promise) | undefined, options: { runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[]; }] | undefined; serializers: { readonly transaction: typeof import("viem/chains").serializeTransactionOpStack; }; verifyHash?: ((client: import("viem").Client, parameters: import("viem").VerifyHashActionParameters) => Promise) | undefined; }; readonly name: "Base"; readonly usdcAddress: Address; }; readonly "eip155:84532": { readonly chain: { blockExplorers: { readonly default: { readonly name: "Basescan"; readonly url: "https://sepolia.basescan.org"; readonly apiUrl: "https://api-sepolia.basescan.org/api"; }; }; blockTime: 2000; contracts: { readonly disputeGameFactory: { readonly 11155111: { readonly address: "0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1"; }; }; readonly l2OutputOracle: { readonly 11155111: { readonly address: "0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254"; }; }; readonly portal: { readonly 11155111: { readonly address: "0x49f53e41452c74589e85ca1677426ba426459e85"; readonly blockCreated: 4446677; }; }; readonly l1StandardBridge: { readonly 11155111: { readonly address: "0xfd0Bf71F60660E2f608ed56e1659C450eB113120"; readonly blockCreated: 4446677; }; }; readonly multicall3: { readonly address: "0xca11bde05977b3631167028862be2a173976ca11"; readonly blockCreated: 1059647; }; readonly gasPriceOracle: { readonly address: "0x420000000000000000000000000000000000000F"; }; readonly l1Block: { readonly address: "0x4200000000000000000000000000000000000015"; }; readonly l2CrossDomainMessenger: { readonly address: "0x4200000000000000000000000000000000000007"; }; readonly l2Erc721Bridge: { readonly address: "0x4200000000000000000000000000000000000014"; }; readonly l2StandardBridge: { readonly address: "0x4200000000000000000000000000000000000010"; }; readonly l2ToL1MessagePasser: { readonly address: "0x4200000000000000000000000000000000000016"; }; }; ensTlds?: readonly string[] | undefined; id: 84532; name: "Base Sepolia"; nativeCurrency: { readonly name: "Sepolia Ether"; readonly symbol: "ETH"; readonly decimals: 18; }; experimental_preconfirmationTime?: number | undefined | undefined; rpcUrls: { readonly default: { readonly http: readonly ["https://sepolia.base.org"]; }; }; sourceId: 11155111; testnet: true; custom?: Record | undefined; extendSchema?: Record | undefined; fees?: import("viem").ChainFees | undefined; formatters: { readonly block: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcBlock, action?: string | undefined) => { baseFeePerGas: bigint | null; blobGasUsed: bigint; difficulty: bigint; excessBlobGas: bigint; extraData: import("viem").Hex; gasLimit: bigint; gasUsed: bigint; hash: `0x${string}` | null; logsBloom: `0x${string}` | null; miner: import("abitype").Address; mixHash: import("viem").Hash; nonce: `0x${string}` | null; number: bigint | null; parentBeaconBlockRoot?: `0x${string}` | undefined; parentHash: import("viem").Hash; receiptsRoot: import("viem").Hex; sealFields: import("viem").Hex[]; sha3Uncles: import("viem").Hash; size: bigint; stateRoot: import("viem").Hash; timestamp: bigint; totalDifficulty: bigint | null; transactions: `0x${string}`[] | import("viem/chains").OpStackTransaction[]; transactionsRoot: import("viem").Hash; uncles: import("viem").Hash[]; withdrawals?: import("viem").Withdrawal[] | undefined | undefined; withdrawalsRoot?: `0x${string}` | undefined; } & {}; type: "block"; }; readonly transaction: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcTransaction, action?: string | undefined) => ({ blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: boolean; mint?: bigint | undefined | undefined; sourceHash: import("viem").Hex; type: "deposit"; } | { r: import("viem").Hex; s: import("viem").Hex; v: bigint; to: import("abitype").Address | null; from: import("abitype").Address; gas: bigint; nonce: number; value: bigint; blockHash: `0x${string}` | null; blockNumber: bigint | null; hash: import("viem").Hash; input: import("viem").Hex; transactionIndex: number | null; typeHex: import("viem").Hex | null; accessList?: undefined | undefined; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId?: number | undefined; yParity?: undefined | undefined; type: "legacy"; gasPrice: bigint; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas?: undefined | undefined; maxPriorityFeePerGas?: undefined | undefined; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip2930"; gasPrice: bigint; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas?: undefined | undefined; maxPriorityFeePerGas?: undefined | undefined; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip1559"; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList?: undefined | undefined; blobVersionedHashes: readonly import("viem").Hex[]; chainId: number; type: "eip4844"; gasPrice?: undefined | undefined; maxFeePerBlobGas: bigint; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; } | { blockHash: `0x${string}` | null; blockNumber: bigint | null; from: import("abitype").Address; gas: bigint; hash: import("viem").Hash; input: import("viem").Hex; nonce: number; r: import("viem").Hex; s: import("viem").Hex; to: import("abitype").Address | null; transactionIndex: number | null; typeHex: import("viem").Hex | null; v: bigint; value: bigint; yParity: number; accessList: import("viem").AccessList; authorizationList: import("viem").SignedAuthorizationList; blobVersionedHashes?: undefined | undefined; chainId: number; type: "eip7702"; gasPrice?: undefined | undefined; maxFeePerBlobGas?: undefined | undefined; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; isSystemTx?: undefined | undefined; mint?: undefined | undefined; sourceHash?: undefined | undefined; }) & {}; type: "transaction"; }; readonly transactionReceipt: { exclude: [] | undefined; format: (args: import("viem/chains").OpStackRpcTransactionReceipt, action?: string | undefined) => { blobGasPrice?: bigint | undefined; blobGasUsed?: bigint | undefined; blockHash: import("viem").Hash; blockNumber: bigint; contractAddress: import("abitype").Address | null | undefined; cumulativeGasUsed: bigint; effectiveGasPrice: bigint; from: import("abitype").Address; gasUsed: bigint; logs: import("viem").Log[]; logsBloom: import("viem").Hex; root?: `0x${string}` | undefined; status: "success" | "reverted"; to: import("abitype").Address | null; transactionHash: import("viem").Hash; transactionIndex: number; type: import("viem").TransactionType; l1GasPrice: bigint | null; l1GasUsed: bigint | null; l1Fee: bigint | null; l1FeeScalar: number | null; } & {}; type: "transactionReceipt"; }; }; prepareTransactionRequest?: ((args: import("viem").PrepareTransactionRequestParameters, options: { phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters"; }) => Promise) | [fn: ((args: import("viem").PrepareTransactionRequestParameters, options: { phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters"; }) => Promise) | undefined, options: { runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[]; }] | undefined; serializers: { readonly transaction: typeof import("viem/chains").serializeTransactionOpStack; }; verifyHash?: ((client: import("viem").Client, parameters: import("viem").VerifyHashActionParameters) => Promise) | undefined; readonly network: "base-sepolia"; }; readonly name: "Base Sepolia"; readonly usdcAddress: Address; }; }; export type NetworkId = keyof typeof SUPPORTED_NETWORKS; export interface PaymentRequirement { scheme: string; network: NetworkId; maxAmountRequired: string; resource: string; description?: string; mimeType?: string; payToAddress: Address; requiredDeadlineSeconds: number; usdcAddress: Address; extra?: Record; } export interface PaymentRequiredResponse { x402Version: number; accepts: PaymentRequirement[]; error?: string; } export interface PaymentPayload { x402Version: number; scheme: string; network: NetworkId; payload: { signature: `0x${string}`; authorization: { from: Address; to: Address; value: bigint; validAfter: bigint; validBefore: bigint; nonce: `0x${string}`; }; }; } /** * Parse the x402 payment requirements from a 402 response */ export declare function parsePaymentRequired(response: Response): Promise; /** * Create a payment signature for an x402 request * Uses EIP-3009 transferWithAuthorization for USDC */ export declare function createPaymentSignature(account: PrivateKeyAccount, requirement: PaymentRequirement, x402Version?: number): Promise; /** * Encode the payment payload as a header value */ export declare function encodePaymentHeader(payload: PaymentPayload): string; /** * Fetch with x402 payment support * Automatically handles 402 responses and payment */ export declare function x402Fetch(account: PrivateKeyAccount, url: string, options?: RequestInit): Promise; /** * Check if a URL requires x402 payment */ export declare function checkX402Endpoint(url: string, method?: string): Promise<{ requiresPayment: boolean; requirements?: PaymentRequiredResponse; }>; /** * Discover x402 endpoints from a domain * Checks .well-known/x402 and DNS TXT records */ export declare function discoverX402Endpoints(originUrl: string): Promise<{ found: boolean; source?: string; data?: unknown; }>; /** * Get USDC balance for an address on a specific network */ export declare function getUsdcBalance(address: Address, network?: NetworkId): Promise; //# sourceMappingURL=index.d.ts.map