uvd-x402-sdk 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +282 -15
- package/dist/adapters/index.d.mts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +168 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +168 -0
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{index-MTBgC_SL.d.mts → index-BHwtdJrt.d.mts} +45 -4
- package/dist/{index-MTBgC_SL.d.ts → index-BHwtdJrt.d.ts} +45 -4
- package/dist/{index-Db8dWNam.d.ts → index-CkDdnSNx.d.mts} +33 -2
- package/dist/{index-D0N_SYpK.d.mts → index-UTj85ZDJ.d.ts} +33 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +210 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +207 -1
- package/dist/index.mjs.map +1 -1
- package/dist/providers/evm/index.d.mts +19 -3
- package/dist/providers/evm/index.d.ts +19 -3
- package/dist/providers/evm/index.js +228 -12
- package/dist/providers/evm/index.js.map +1 -1
- package/dist/providers/evm/index.mjs +228 -12
- package/dist/providers/evm/index.mjs.map +1 -1
- package/dist/providers/near/index.d.mts +1 -1
- package/dist/providers/near/index.d.ts +1 -1
- package/dist/providers/near/index.js.map +1 -1
- package/dist/providers/near/index.mjs.map +1 -1
- package/dist/providers/solana/index.d.mts +1 -1
- package/dist/providers/solana/index.d.ts +1 -1
- package/dist/providers/solana/index.js +168 -0
- package/dist/providers/solana/index.js.map +1 -1
- package/dist/providers/solana/index.mjs +168 -0
- package/dist/providers/solana/index.mjs.map +1 -1
- package/dist/providers/stellar/index.d.mts +1 -1
- package/dist/providers/stellar/index.d.ts +1 -1
- package/dist/providers/stellar/index.js.map +1 -1
- package/dist/providers/stellar/index.mjs.map +1 -1
- package/dist/react/index.d.mts +3 -3
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.js +168 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +168 -0
- package/dist/react/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +168 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +168 -0
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +5 -2
- package/src/chains/index.ts +255 -1
- package/src/index.ts +9 -0
- package/src/providers/evm/index.ts +64 -16
- package/src/types/index.ts +46 -3
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/index.ts","../../src/chains/index.ts","../../src/client/X402Client.ts","../../src/react/index.tsx"],"names":["ethers","createContext","useState","useEffect","useCallback","useMemo","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * uvd-x402-sdk - Type Definitions\n *\n * Core TypeScript interfaces for the x402 payment SDK.\n * These types define the contract between the SDK and consuming applications.\n */\n\n// ============================================================================\n// CHAIN CONFIGURATION TYPES\n// ============================================================================\n\n/**\n * Network type categorization\n * - 'evm': Ethereum Virtual Machine compatible chains (use EIP-712)\n * - 'svm': Solana Virtual Machine chains (Solana, Fogo) (use SPL tokens)\n * - 'stellar': Stellar network (use Soroban)\n * - 'near': NEAR Protocol (use NEP-366)\n *\n * @deprecated 'solana' type is deprecated, use 'svm' instead\n */\nexport type NetworkType = 'evm' | 'svm' | 'solana' | 'stellar' | 'near';\n\n/**\n * USDC token configuration for a specific chain\n */\nexport interface USDCConfig {\n /** Contract/mint address */\n address: string;\n /** Token decimals (6 for most chains, 7 for Stellar) */\n decimals: number;\n /** Token name for EIP-712 domain (e.g., \"USD Coin\" or \"USDC\") */\n name: string;\n /** Token version for EIP-712 domain */\n version: string;\n}\n\n/**\n * Native currency configuration\n */\nexport interface NativeCurrency {\n name: string;\n symbol: string;\n decimals: number;\n}\n\n/**\n * Complete chain configuration\n */\nexport interface ChainConfig {\n /** Numeric chain ID (0 for non-EVM chains) */\n chainId: number;\n /** Hex-encoded chain ID for wallet_switchEthereumChain */\n chainIdHex: string;\n /** Internal chain identifier (e.g., 'base', 'solana') */\n name: string;\n /** Human-readable display name */\n displayName: string;\n /** Network type for routing */\n networkType: NetworkType;\n /** Primary RPC endpoint URL */\n rpcUrl: string;\n /** Block explorer base URL */\n explorerUrl: string;\n /** Native currency info */\n nativeCurrency: NativeCurrency;\n /** USDC token configuration */\n usdc: USDCConfig;\n /** x402 facilitator configuration */\n x402: {\n facilitatorUrl: string;\n enabled: boolean;\n };\n}\n\n// ============================================================================\n// WALLET TYPES\n// ============================================================================\n\n/**\n * Current wallet connection state\n */\nexport interface WalletState {\n /** Whether a wallet is currently connected */\n connected: boolean;\n /** Connected wallet address (null if not connected) */\n address: string | null;\n /** Current chain ID (null for non-EVM or disconnected) */\n chainId: number | null;\n /** Current network name */\n network: string | null;\n /** Network type of connected wallet */\n networkType: NetworkType | null;\n /** USDC balance on current chain (null if unknown) */\n balance: string | null;\n}\n\n/**\n * Wallet adapter interface for different wallet types\n */\nexport interface WalletAdapter {\n /** Unique identifier for this wallet type */\n readonly id: string;\n /** Display name */\n readonly name: string;\n /** Network type this adapter supports */\n readonly networkType: NetworkType;\n\n /** Check if this wallet is available/installed */\n isAvailable(): boolean;\n\n /** Connect to the wallet */\n connect(chainName?: string): Promise<string>;\n\n /** Disconnect from the wallet */\n disconnect(): Promise<void>;\n\n /** Switch to a different chain (EVM only) */\n switchChain?(chainName: string): Promise<void>;\n\n /** Sign a payment payload */\n signPayment(paymentInfo: PaymentInfo, chainConfig: ChainConfig): Promise<string>;\n\n /** Check USDC balance */\n getBalance(chainConfig: ChainConfig): Promise<string>;\n\n /** Get current address */\n getAddress(): string | null;\n\n /** Get current chain ID (EVM only) */\n getChainId?(): number | null;\n}\n\n/**\n * EIP-712 domain for typed data signing\n */\nexport interface EIP712Domain {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n}\n\n/**\n * EIP-712 type definitions\n */\nexport interface EIP712Types {\n [typeName: string]: Array<{ name: string; type: string }>;\n}\n\n// ============================================================================\n// PAYMENT TYPES\n// ============================================================================\n\n/**\n * Payment information returned by backend on 402 response\n */\nexport interface PaymentInfo {\n /** Default recipient address */\n recipient: string;\n /** Network-specific recipient addresses */\n recipients?: {\n evm?: string;\n solana?: string;\n near?: string;\n stellar?: string;\n };\n /** Facilitator address (for Solana fee payer) */\n facilitator?: string;\n /** Amount in USD (e.g., \"10.00\") */\n amount: string;\n /** Token symbol (usually \"USDC\") */\n token?: string;\n /** Network hint from backend */\n network?: string;\n /** Supported chain IDs */\n supportedChains?: number[];\n}\n\n/**\n * Simple payment request from application\n */\nexport interface PaymentRequest {\n /** Amount in USDC (e.g., \"10.00\") */\n amount: string;\n /** Override recipient address (optional) */\n recipient?: string;\n /** Application-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Result of a payment operation\n */\nexport interface PaymentResult {\n /** Whether payment was successful */\n success: boolean;\n /** Base64-encoded X-PAYMENT header value */\n paymentHeader: string;\n /** Transaction hash (if available) */\n transactionHash?: string;\n /** Network where payment was made */\n network: string;\n /** Payer address */\n payer?: string;\n /** Error message (if success is false) */\n error?: string;\n}\n\n// ============================================================================\n// PAYLOAD TYPES (Internal)\n// ============================================================================\n\n/**\n * EVM payment payload (ERC-3009 TransferWithAuthorization)\n */\nexport interface EVMPaymentPayload {\n from: string;\n to: string;\n value: string;\n validAfter: number;\n validBefore: number;\n nonce: string;\n v: number;\n r: string;\n s: string;\n chainId: number;\n token: string;\n}\n\n/**\n * Solana payment payload (partially-signed transaction)\n */\nexport interface SolanaPaymentPayload {\n /** Base64-encoded serialized transaction */\n transaction: string;\n}\n\n/**\n * Stellar payment payload (Soroban authorization)\n */\nexport interface StellarPaymentPayload {\n /** Sender G... public key */\n from: string;\n /** Recipient G... public key */\n to: string;\n /** Amount in stroops (7 decimals) */\n amount: string;\n /** USDC SAC contract address */\n tokenContract: string;\n /** Base64 XDR-encoded SorobanAuthorizationEntry */\n authorizationEntryXdr: string;\n /** Random 64-bit nonce */\n nonce: number;\n /** Ledger when authorization expires */\n signatureExpirationLedger: number;\n}\n\n/**\n * NEAR payment payload (NEP-366 meta-transaction)\n */\nexport interface NEARPaymentPayload {\n /** Base64 Borsh-encoded SignedDelegateAction */\n signedDelegateAction: string;\n network: 'near';\n}\n\n/**\n * Union type for all payment payloads\n */\nexport type PaymentPayload =\n | EVMPaymentPayload\n | SolanaPaymentPayload\n | StellarPaymentPayload\n | NEARPaymentPayload;\n\n// ============================================================================\n// X402 HEADER TYPES (v1 and v2)\n// ============================================================================\n\n/**\n * x402 protocol version\n */\nexport type X402Version = 1 | 2;\n\n/**\n * CAIP-2 chain identifiers for x402 v2\n * @see https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md\n */\nexport const CAIP2_IDENTIFIERS: Record<string, string> = {\n // EVM chains\n base: 'eip155:8453',\n ethereum: 'eip155:1',\n polygon: 'eip155:137',\n arbitrum: 'eip155:42161',\n optimism: 'eip155:10',\n avalanche: 'eip155:43114',\n celo: 'eip155:42220',\n hyperevm: 'eip155:999',\n unichain: 'eip155:130',\n monad: 'eip155:143',\n // SVM chains\n solana: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n fogo: 'svm:fogo',\n // Stellar\n stellar: 'stellar:pubnet',\n // NEAR\n near: 'near:mainnet',\n};\n\n/**\n * Reverse mapping from CAIP-2 to chain name\n */\nexport const CAIP2_TO_CHAIN: Record<string, string> = Object.fromEntries(\n Object.entries(CAIP2_IDENTIFIERS).map(([k, v]) => [v, k])\n);\n\n/**\n * x402 v1 header structure (network as string)\n */\nexport interface X402HeaderV1 {\n x402Version: 1;\n scheme: 'exact';\n network: string;\n payload: X402PayloadData;\n}\n\n/**\n * x402 v2 payment option\n */\nexport interface X402PaymentOption {\n network: string; // CAIP-2 format\n asset: string;\n amount: string;\n facilitator?: string;\n}\n\n/**\n * x402 v2 header structure (CAIP-2 network, accepts array)\n */\nexport interface X402HeaderV2 {\n x402Version: 2;\n scheme: 'exact';\n network: string; // CAIP-2 format\n payload: X402PayloadData;\n accepts?: X402PaymentOption[];\n}\n\n/**\n * Union type for both v1 and v2 headers\n */\nexport type X402Header = X402HeaderV1 | X402HeaderV2;\n\n/**\n * EVM-specific payload in x402 header\n */\nexport interface X402EVMPayload {\n signature: string;\n authorization: {\n from: string;\n to: string;\n value: string;\n validAfter: string;\n validBefore: string;\n nonce: string;\n };\n}\n\n/**\n * Solana-specific payload in x402 header\n */\nexport interface X402SolanaPayload {\n transaction: string;\n}\n\n/**\n * Stellar-specific payload in x402 header\n */\nexport interface X402StellarPayload {\n from: string;\n to: string;\n amount: string;\n tokenContract: string;\n authorizationEntryXdr: string;\n nonce: number;\n signatureExpirationLedger: number;\n}\n\n/**\n * NEAR-specific payload in x402 header\n */\nexport interface X402NEARPayload {\n signedDelegateAction: string;\n}\n\n/**\n * Union of all x402 payload types\n */\nexport type X402PayloadData =\n | X402EVMPayload\n | X402SolanaPayload\n | X402StellarPayload\n | X402NEARPayload;\n\n// ============================================================================\n// CLIENT CONFIGURATION\n// ============================================================================\n\n/**\n * Multi-payment configuration for supporting multiple networks\n */\nexport interface MultiPaymentConfig {\n /** Networks to support (e.g., ['base', 'solana', 'stellar', 'near']) */\n networks: string[];\n /** Default network if user hasn't selected one */\n defaultNetwork?: string;\n /** Whether to auto-detect user's preferred network based on wallet */\n autoDetect?: boolean;\n}\n\n/**\n * SDK client configuration options\n */\nexport interface X402ClientConfig {\n /** Facilitator URL (default: https://facilitator.ultravioletadao.xyz) */\n facilitatorUrl?: string;\n /** Default chain to connect to */\n defaultChain?: string;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Enable debug logging */\n debug?: boolean;\n /** Custom chain configurations (override defaults) */\n customChains?: Record<string, Partial<ChainConfig>>;\n /** Wallet preference order */\n walletPreference?: string[];\n /** Custom RPC URLs (override defaults) */\n rpcOverrides?: Record<string, string>;\n /**\n * x402 protocol version to use\n * - 1: Classic format with network as string (e.g., \"base\")\n * - 2: CAIP-2 format with accepts array (e.g., \"eip155:8453\")\n * - 'auto': Auto-detect from 402 response (default)\n */\n x402Version?: X402Version | 'auto';\n /** Multi-payment configuration for supporting multiple networks */\n multiPayment?: MultiPaymentConfig;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<Pick<X402ClientConfig, 'facilitatorUrl' | 'defaultChain' | 'autoConnect' | 'debug' | 'x402Version'>> = {\n facilitatorUrl: 'https://facilitator.ultravioletadao.xyz',\n defaultChain: 'base',\n autoConnect: false,\n debug: false,\n x402Version: 'auto',\n};\n\n// ============================================================================\n// BALANCE TYPES\n// ============================================================================\n\n/**\n * Balance information for a single network\n */\nexport interface NetworkBalance {\n /** Chain name */\n chainName: string;\n /** Human-readable display name */\n displayName: string;\n /** Formatted balance (e.g., \"15.50\") or null if loading/error */\n balance: string | null;\n /** Whether balance is currently being fetched */\n isLoading: boolean;\n /** Error message if fetch failed */\n error: string | null;\n}\n\n// ============================================================================\n// EVENT TYPES\n// ============================================================================\n\n/**\n * Events emitted by the SDK client\n */\nexport type X402Event =\n | 'connect'\n | 'disconnect'\n | 'chainChanged'\n | 'accountChanged'\n | 'balanceChanged'\n | 'paymentStarted'\n | 'paymentSigned'\n | 'paymentCompleted'\n | 'paymentFailed';\n\n/**\n * Event data types\n */\nexport interface X402EventData {\n connect: WalletState;\n disconnect: void;\n chainChanged: { chainId: number; chainName: string };\n accountChanged: { address: string };\n balanceChanged: { balance: string };\n paymentStarted: { amount: string; network: string };\n paymentSigned: { paymentHeader: string };\n paymentCompleted: PaymentResult;\n paymentFailed: { error: string; code: X402ErrorCode };\n}\n\n/**\n * Event handler type\n */\nexport type X402EventHandler<E extends X402Event> = (data: X402EventData[E]) => void;\n\n// ============================================================================\n// ERROR TYPES\n// ============================================================================\n\n/**\n * Error codes for categorizing errors\n */\nexport type X402ErrorCode =\n | 'WALLET_NOT_FOUND'\n | 'WALLET_NOT_CONNECTED'\n | 'WALLET_CONNECTION_REJECTED'\n | 'WALLET_CONNECTION_TIMEOUT'\n | 'CHAIN_NOT_SUPPORTED'\n | 'CHAIN_SWITCH_REJECTED'\n | 'INSUFFICIENT_BALANCE'\n | 'SIGNATURE_REJECTED'\n | 'PAYMENT_FAILED'\n | 'PAYMENT_TIMEOUT'\n | 'NETWORK_ERROR'\n | 'INVALID_CONFIG'\n | 'INVALID_AMOUNT'\n | 'INVALID_RECIPIENT'\n | 'UNKNOWN_ERROR';\n\n/**\n * SDK-specific error class\n */\nexport class X402Error extends Error {\n public readonly code: X402ErrorCode;\n public readonly details?: unknown;\n\n constructor(message: string, code: X402ErrorCode, details?: unknown) {\n super(message);\n this.name = 'X402Error';\n this.code = code;\n this.details = details;\n\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, X402Error);\n }\n }\n}\n","/**\n * uvd-x402-sdk - Chain Registry\n *\n * Complete configuration for all 15 supported blockchain networks.\n * EVM chains (11): Use ERC-3009 TransferWithAuthorization\n * SVM chains (2): Solana and Fogo - Use SPL tokens with partially-signed transactions\n * Stellar (1): Uses Soroban authorization entries\n * NEAR (1): Uses NEP-366 meta-transactions\n */\n\nimport type { ChainConfig, NetworkType } from '../types';\n\n/**\n * Default facilitator URL for x402 payments\n */\nexport const DEFAULT_FACILITATOR_URL = 'https://facilitator.ultravioletadao.xyz';\n\n/**\n * All supported chains configuration\n *\n * To add a new chain:\n * 1. Add chain config below with all required fields\n * 2. Verify USDC contract supports ERC-3009 (transferWithAuthorization) for EVM chains\n * 3. Test on testnet first before enabling\n */\nexport const SUPPORTED_CHAINS: Record<string, ChainConfig> = {\n // ============================================================================\n // EVM CHAINS (10 networks)\n // ============================================================================\n\n base: {\n chainId: 8453,\n chainIdHex: '0x2105',\n name: 'base',\n displayName: 'Base',\n networkType: 'evm',\n rpcUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n avalanche: {\n chainId: 43114,\n chainIdHex: '0xa86a',\n name: 'avalanche',\n displayName: 'Avalanche C-Chain',\n networkType: 'evm',\n rpcUrl: 'https://avalanche-c-chain-rpc.publicnode.com',\n explorerUrl: 'https://snowtrace.io',\n nativeCurrency: {\n name: 'Avalanche',\n symbol: 'AVAX',\n decimals: 18,\n },\n usdc: {\n address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n ethereum: {\n chainId: 1,\n chainIdHex: '0x1',\n name: 'ethereum',\n displayName: 'Ethereum',\n networkType: 'evm',\n rpcUrl: 'https://eth.llamarpc.com',\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n polygon: {\n chainId: 137,\n chainIdHex: '0x89',\n name: 'polygon',\n displayName: 'Polygon',\n networkType: 'evm',\n rpcUrl: 'https://polygon-rpc.com',\n explorerUrl: 'https://polygonscan.com',\n nativeCurrency: {\n name: 'Polygon',\n symbol: 'POL',\n decimals: 18,\n },\n usdc: {\n address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n arbitrum: {\n chainId: 42161,\n chainIdHex: '0xa4b1',\n name: 'arbitrum',\n displayName: 'Arbitrum One',\n networkType: 'evm',\n rpcUrl: 'https://arb1.arbitrum.io/rpc',\n explorerUrl: 'https://arbiscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n optimism: {\n chainId: 10,\n chainIdHex: '0xa',\n name: 'optimism',\n displayName: 'Optimism',\n networkType: 'evm',\n rpcUrl: 'https://mainnet.optimism.io',\n explorerUrl: 'https://optimistic.etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n celo: {\n chainId: 42220,\n chainIdHex: '0xa4ec',\n name: 'celo',\n displayName: 'Celo',\n networkType: 'evm',\n rpcUrl: 'https://forno.celo.org',\n explorerUrl: 'https://celoscan.io',\n nativeCurrency: {\n name: 'Celo',\n symbol: 'CELO',\n decimals: 18,\n },\n usdc: {\n address: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',\n decimals: 6,\n name: 'USDC', // Celo uses \"USDC\" not \"USD Coin\" for EIP-712\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n hyperevm: {\n chainId: 999,\n chainIdHex: '0x3e7',\n name: 'hyperevm',\n displayName: 'HyperEVM',\n networkType: 'evm',\n rpcUrl: 'https://rpc.hyperliquid.xyz/evm',\n explorerUrl: 'https://hyperevmscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',\n decimals: 6,\n name: 'USDC', // HyperEVM uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n unichain: {\n chainId: 130,\n chainIdHex: '0x82',\n name: 'unichain',\n displayName: 'Unichain',\n networkType: 'evm',\n rpcUrl: 'https://unichain-rpc.publicnode.com',\n explorerUrl: 'https://uniscan.xyz',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x078d782b760474a361dda0af3839290b0ef57ad6',\n decimals: 6,\n name: 'USDC', // Unichain uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n monad: {\n chainId: 143,\n chainIdHex: '0x8f',\n name: 'monad',\n displayName: 'Monad',\n networkType: 'evm',\n rpcUrl: 'https://rpc.monad.xyz',\n explorerUrl: 'https://monad.socialscan.io',\n nativeCurrency: {\n name: 'Monad',\n symbol: 'MON',\n decimals: 18,\n },\n usdc: {\n address: '0x754704bc059f8c67012fed69bc8a327a5aafb603',\n decimals: 6,\n name: 'USDC', // Monad uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // SVM CHAINS (2 networks) - Solana Virtual Machine\n // ============================================================================\n\n solana: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'solana',\n displayName: 'Solana',\n networkType: 'svm',\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io',\n nativeCurrency: {\n name: 'Solana',\n symbol: 'SOL',\n decimals: 9,\n },\n usdc: {\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC SPL token mint\n decimals: 6,\n name: 'USD Coin',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n fogo: {\n chainId: 0, // Non-EVM (SVM)\n chainIdHex: '0x0',\n name: 'fogo',\n displayName: 'Fogo',\n networkType: 'svm',\n rpcUrl: 'https://rpc.fogo.nightly.app/',\n explorerUrl: 'https://explorer.fogo.nightly.app',\n nativeCurrency: {\n name: 'Fogo',\n symbol: 'FOGO',\n decimals: 9,\n },\n usdc: {\n address: 'uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG', // Fogo USDC mint\n decimals: 6,\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // STELLAR (1 network)\n // ============================================================================\n\n stellar: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'stellar',\n displayName: 'Stellar',\n networkType: 'stellar',\n rpcUrl: 'https://horizon.stellar.org',\n explorerUrl: 'https://stellar.expert/explorer/public',\n nativeCurrency: {\n name: 'Lumens',\n symbol: 'XLM',\n decimals: 7, // Stellar uses 7 decimals (stroops)\n },\n usdc: {\n address: 'CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75', // Soroban Asset Contract\n decimals: 7, // Stellar USDC uses 7 decimals\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // NEAR (1 network) - Uses NEP-366 meta-transactions\n // ============================================================================\n\n near: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'near',\n displayName: 'NEAR Protocol',\n networkType: 'near',\n rpcUrl: 'https://rpc.mainnet.near.org',\n explorerUrl: 'https://nearblocks.io',\n nativeCurrency: {\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24, // NEAR uses 24 decimals (yoctoNEAR)\n },\n usdc: {\n address: '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', // Native Circle USDC\n decimals: 6,\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true, // NEP-366 meta-transactions supported\n },\n },\n};\n\n/**\n * Default chain for new users\n */\nexport const DEFAULT_CHAIN = 'base';\n\n/**\n * Get chain config by chain ID\n */\nexport function getChainById(chainId: number): ChainConfig | undefined {\n return Object.values(SUPPORTED_CHAINS).find(chain => chain.chainId === chainId);\n}\n\n/**\n * Get chain config by name (case-insensitive)\n */\nexport function getChainByName(name: string): ChainConfig | undefined {\n return SUPPORTED_CHAINS[name.toLowerCase()];\n}\n\n/**\n * Check if a chain is supported\n */\nexport function isChainSupported(chainIdOrName: number | string): boolean {\n if (typeof chainIdOrName === 'number') {\n return Object.values(SUPPORTED_CHAINS).some(chain => chain.chainId === chainIdOrName);\n }\n return chainIdOrName.toLowerCase() in SUPPORTED_CHAINS;\n}\n\n/**\n * Get list of enabled chains\n */\nexport function getEnabledChains(): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(chain => chain.x402.enabled);\n}\n\n/**\n * Get list of chains by network type\n */\nexport function getChainsByNetworkType(networkType: NetworkType): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(\n chain => chain.networkType === networkType && chain.x402.enabled\n );\n}\n\n/**\n * Get all EVM chain IDs (for wallet_switchEthereumChain)\n */\nexport function getEVMChainIds(): number[] {\n return getChainsByNetworkType('evm').map(chain => chain.chainId);\n}\n\n/**\n * Get list of SVM chains (Solana, Fogo)\n */\nexport function getSVMChains(): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(\n chain => chain.networkType === 'svm' && chain.x402.enabled\n );\n}\n\n/**\n * Check if a chain is SVM-based (Solana Virtual Machine)\n */\nexport function isSVMChain(chainName: string): boolean {\n const chain = getChainByName(chainName);\n return chain?.networkType === 'svm';\n}\n\n/**\n * Get network type from chain name\n */\nexport function getNetworkType(chainName: string): NetworkType | undefined {\n const chain = getChainByName(chainName);\n return chain?.networkType;\n}\n\n/**\n * Format transaction URL for block explorer\n */\nexport function getExplorerTxUrl(chainName: string, txHash: string): string | null {\n const chain = getChainByName(chainName);\n if (!chain) return null;\n\n switch (chain.networkType) {\n case 'evm':\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'svm':\n case 'solana': // @deprecated\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'stellar':\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'near':\n return `${chain.explorerUrl}/txns/${txHash}`;\n default:\n return null;\n }\n}\n\n/**\n * Format address URL for block explorer\n */\nexport function getExplorerAddressUrl(chainName: string, address: string): string | null {\n const chain = getChainByName(chainName);\n if (!chain) return null;\n\n switch (chain.networkType) {\n case 'evm':\n return `${chain.explorerUrl}/address/${address}`;\n case 'svm':\n case 'solana': // @deprecated\n return `${chain.explorerUrl}/account/${address}`;\n case 'stellar':\n return `${chain.explorerUrl}/account/${address}`;\n case 'near':\n return `${chain.explorerUrl}/address/${address}`;\n default:\n return null;\n }\n}\n","/**\n * uvd-x402-sdk - Main Client\n *\n * The X402Client is the primary entry point for the SDK.\n * It manages wallet connections, chain switching, and payment creation.\n */\n\nimport { ethers } from 'ethers';\nimport type {\n ChainConfig,\n NetworkType,\n PaymentInfo,\n PaymentResult,\n WalletState,\n X402ClientConfig,\n X402Event,\n X402EventData,\n X402EventHandler,\n EVMPaymentPayload,\n} from '../types';\nimport { X402Error, DEFAULT_CONFIG } from '../types';\nimport {\n SUPPORTED_CHAINS,\n getChainByName,\n getChainById,\n getEnabledChains,\n} from '../chains';\n\n/**\n * X402Client - Main SDK client for x402 payments\n *\n * @example\n * ```ts\n * import { X402Client } from 'uvd-x402-sdk';\n *\n * const client = new X402Client({ defaultChain: 'base' });\n *\n * // Connect wallet\n * await client.connect('base');\n *\n * // Create payment\n * const result = await client.createPayment({\n * recipient: '0x...',\n * amount: '10.00',\n * });\n *\n * // Use result.paymentHeader in your API request\n * ```\n */\nexport class X402Client {\n // Configuration\n private readonly config: Required<Pick<X402ClientConfig, 'facilitatorUrl' | 'defaultChain' | 'autoConnect' | 'debug'>> & X402ClientConfig;\n\n // Wallet state\n private provider: ethers.BrowserProvider | null = null;\n private signer: ethers.Signer | null = null;\n private connectedAddress: string | null = null;\n private currentChainId: number | null = null;\n private currentNetwork: NetworkType | null = null;\n private currentChainName: string | null = null;\n\n // Event emitter\n private eventHandlers: Map<X402Event, Set<X402EventHandler<X402Event>>> = new Map();\n\n constructor(config: X402ClientConfig = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n // Apply custom RPC overrides\n if (config.rpcOverrides) {\n for (const [chainName, rpcUrl] of Object.entries(config.rpcOverrides)) {\n if (SUPPORTED_CHAINS[chainName]) {\n SUPPORTED_CHAINS[chainName].rpcUrl = rpcUrl;\n }\n }\n }\n\n // Apply custom chain configurations\n if (config.customChains) {\n for (const [chainName, chainConfig] of Object.entries(config.customChains)) {\n if (SUPPORTED_CHAINS[chainName]) {\n Object.assign(SUPPORTED_CHAINS[chainName], chainConfig);\n }\n }\n }\n\n this.log('X402Client initialized', { config: this.config });\n }\n\n // ============================================================================\n // PUBLIC API - Wallet Connection\n // ============================================================================\n\n /**\n * Connect to a wallet on the specified chain\n */\n async connect(chainName?: string): Promise<string> {\n const targetChain = chainName || this.config.defaultChain;\n const chain = getChainByName(targetChain);\n\n if (!chain) {\n throw new X402Error(`Unsupported chain: ${targetChain}`, 'CHAIN_NOT_SUPPORTED');\n }\n\n if (!chain.x402.enabled) {\n throw new X402Error(`Chain ${targetChain} is not enabled for x402 payments`, 'CHAIN_NOT_SUPPORTED');\n }\n\n this.log(`Connecting wallet on ${chain.displayName}...`);\n\n // Route to appropriate connection method based on network type\n switch (chain.networkType) {\n case 'evm':\n return this.connectEVMWallet(chain);\n case 'solana':\n throw new X402Error(\n 'Solana support requires importing from \"uvd-x402-sdk/solana\"',\n 'CHAIN_NOT_SUPPORTED'\n );\n case 'stellar':\n throw new X402Error(\n 'Stellar support requires importing from \"uvd-x402-sdk/stellar\"',\n 'CHAIN_NOT_SUPPORTED'\n );\n case 'near':\n throw new X402Error('NEAR is not yet supported by the facilitator', 'CHAIN_NOT_SUPPORTED');\n default:\n throw new X402Error(`Unknown network type for chain ${targetChain}`, 'CHAIN_NOT_SUPPORTED');\n }\n }\n\n /**\n * Disconnect the current wallet\n */\n async disconnect(): Promise<void> {\n this.provider = null;\n this.signer = null;\n this.connectedAddress = null;\n this.currentChainId = null;\n this.currentNetwork = null;\n this.currentChainName = null;\n\n this.emit('disconnect', undefined);\n this.log('Wallet disconnected');\n }\n\n /**\n * Switch to a different chain (EVM only)\n */\n async switchChain(chainName: string): Promise<void> {\n const chain = getChainByName(chainName);\n\n if (!chain) {\n throw new X402Error(`Unsupported chain: ${chainName}`, 'CHAIN_NOT_SUPPORTED');\n }\n\n if (chain.networkType !== 'evm') {\n throw new X402Error(\n 'switchChain is only supported for EVM networks. Reconnect with connect() for other networks.',\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n\n if (!this.provider) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n await this.switchEVMChain(chain);\n }\n\n // ============================================================================\n // PUBLIC API - Payment Creation\n // ============================================================================\n\n /**\n * Create a payment authorization\n *\n * @param paymentInfo - Payment information from 402 response\n * @returns Payment result with encoded X-PAYMENT header\n */\n async createPayment(paymentInfo: PaymentInfo): Promise<PaymentResult> {\n if (!this.connectedAddress) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n if (!this.currentChainName) {\n throw new X402Error('Chain not set', 'CHAIN_NOT_SUPPORTED');\n }\n\n const chain = getChainByName(this.currentChainName);\n if (!chain) {\n throw new X402Error(`Chain ${this.currentChainName} not found`, 'CHAIN_NOT_SUPPORTED');\n }\n\n this.emit('paymentStarted', { amount: paymentInfo.amount, network: chain.name });\n this.log('Creating payment...', { paymentInfo, chain: chain.name });\n\n try {\n // Route to appropriate payment method\n switch (chain.networkType) {\n case 'evm':\n return await this.createEVMPayment(paymentInfo, chain);\n default:\n throw new X402Error(\n `Payment creation for ${chain.networkType} requires the appropriate provider`,\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n } catch (error) {\n const x402Error = error instanceof X402Error\n ? error\n : new X402Error(\n error instanceof Error ? error.message : 'Unknown error',\n 'PAYMENT_FAILED',\n error\n );\n\n this.emit('paymentFailed', { error: x402Error.message, code: x402Error.code });\n throw x402Error;\n }\n }\n\n /**\n * Check USDC balance on current chain\n */\n async getBalance(): Promise<string> {\n if (!this.connectedAddress || !this.currentChainName) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n const chain = getChainByName(this.currentChainName);\n if (!chain) {\n throw new X402Error(`Chain ${this.currentChainName} not found`, 'CHAIN_NOT_SUPPORTED');\n }\n\n switch (chain.networkType) {\n case 'evm':\n return this.getEVMBalance(chain);\n default:\n throw new X402Error(\n `Balance check for ${chain.networkType} requires the appropriate provider`,\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n }\n\n // ============================================================================\n // PUBLIC API - Getters\n // ============================================================================\n\n /**\n * Get current wallet state\n */\n getState(): WalletState {\n return {\n connected: this.connectedAddress !== null,\n address: this.connectedAddress,\n chainId: this.currentChainId,\n network: this.currentChainName,\n networkType: this.currentNetwork,\n balance: null, // Call getBalance() separately\n };\n }\n\n /**\n * Get connected wallet address\n */\n getAddress(): string | null {\n return this.connectedAddress;\n }\n\n /**\n * Get current chain ID\n */\n getChainId(): number | null {\n return this.currentChainId;\n }\n\n /**\n * Get current chain name\n */\n getChainName(): string | null {\n return this.currentChainName;\n }\n\n /**\n * Get current chain display name\n */\n getChainDisplayName(): string | null {\n if (!this.currentChainName) return null;\n const chain = getChainByName(this.currentChainName);\n return chain?.displayName ?? null;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.connectedAddress !== null;\n }\n\n /**\n * Get list of enabled chains\n */\n getEnabledChains(): ChainConfig[] {\n return getEnabledChains();\n }\n\n /**\n * Get chain config by name\n */\n getChain(name: string): ChainConfig | undefined {\n return getChainByName(name);\n }\n\n // ============================================================================\n // PUBLIC API - Events\n // ============================================================================\n\n /**\n * Subscribe to an event\n */\n on<E extends X402Event>(event: E, handler: X402EventHandler<E>): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set());\n }\n this.eventHandlers.get(event)!.add(handler as X402EventHandler<X402Event>);\n\n // Return unsubscribe function\n return () => this.off(event, handler);\n }\n\n /**\n * Unsubscribe from an event\n */\n off<E extends X402Event>(event: E, handler: X402EventHandler<E>): void {\n this.eventHandlers.get(event)?.delete(handler as X402EventHandler<X402Event>);\n }\n\n // ============================================================================\n // PRIVATE - EVM Wallet Connection\n // ============================================================================\n\n private async connectEVMWallet(chain: ChainConfig): Promise<string> {\n // Check for injected provider\n if (typeof window === 'undefined' || !window.ethereum) {\n throw new X402Error(\n 'No Ethereum wallet found. Please install MetaMask or another EVM wallet.',\n 'WALLET_NOT_FOUND'\n );\n }\n\n try {\n this.provider = new ethers.BrowserProvider(window.ethereum);\n\n // Request account access\n await this.provider.send('eth_requestAccounts', []);\n\n // Switch to target chain\n await this.switchEVMChain(chain);\n\n // Get signer and address\n this.signer = await this.provider.getSigner();\n this.connectedAddress = await this.signer.getAddress();\n this.currentChainId = chain.chainId;\n this.currentNetwork = 'evm';\n this.currentChainName = chain.name;\n\n // Setup event listeners\n this.setupEVMEventListeners();\n\n const state = this.getState();\n this.emit('connect', state);\n this.log('EVM wallet connected', { address: this.connectedAddress, chain: chain.name });\n\n return this.connectedAddress;\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || (error as { code?: number }).code === 4001) {\n throw new X402Error('Connection rejected by user', 'WALLET_CONNECTION_REJECTED');\n }\n }\n throw new X402Error(\n `Failed to connect wallet: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'UNKNOWN_ERROR',\n error\n );\n }\n }\n\n private async switchEVMChain(chain: ChainConfig): Promise<void> {\n if (!this.provider) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n try {\n await this.provider.send('wallet_switchEthereumChain', [{ chainId: chain.chainIdHex }]);\n } catch (switchError: unknown) {\n // Chain not added - try to add it\n if ((switchError as { code?: number }).code === 4902) {\n try {\n await this.provider.send('wallet_addEthereumChain', [\n {\n chainId: chain.chainIdHex,\n chainName: chain.displayName,\n nativeCurrency: chain.nativeCurrency,\n rpcUrls: [chain.rpcUrl],\n blockExplorerUrls: [chain.explorerUrl],\n },\n ]);\n } catch (addError) {\n throw new X402Error(\n `Failed to add ${chain.displayName} network`,\n 'CHAIN_SWITCH_REJECTED',\n addError\n );\n }\n } else if ((switchError as { code?: number }).code === 4001) {\n throw new X402Error('Network switch rejected by user', 'CHAIN_SWITCH_REJECTED');\n } else {\n throw new X402Error(\n `Failed to switch to ${chain.displayName}`,\n 'CHAIN_SWITCH_REJECTED',\n switchError\n );\n }\n }\n\n this.currentChainId = chain.chainId;\n this.currentChainName = chain.name;\n this.emit('chainChanged', { chainId: chain.chainId, chainName: chain.name });\n }\n\n private setupEVMEventListeners(): void {\n if (typeof window === 'undefined' || !window.ethereum) return;\n\n window.ethereum.on?.('accountsChanged', ((...args: unknown[]) => {\n const accounts = args[0] as string[];\n if (accounts.length === 0) {\n this.disconnect();\n } else if (accounts[0] !== this.connectedAddress) {\n this.connectedAddress = accounts[0];\n this.emit('accountChanged', { address: accounts[0] });\n }\n }) as (...args: unknown[]) => void);\n\n window.ethereum.on?.('chainChanged', ((...args: unknown[]) => {\n const chainIdHex = args[0] as string;\n const chainId = parseInt(chainIdHex, 16);\n const chain = getChainById(chainId);\n if (chain) {\n this.currentChainId = chainId;\n this.currentChainName = chain.name;\n this.emit('chainChanged', { chainId, chainName: chain.name });\n }\n }) as (...args: unknown[]) => void);\n }\n\n // ============================================================================\n // PRIVATE - EVM Payment Creation\n // ============================================================================\n\n private async createEVMPayment(paymentInfo: PaymentInfo, chain: ChainConfig): Promise<PaymentResult> {\n if (!this.signer) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n // Get recipient address for EVM\n const recipient = this.getRecipientForNetwork(paymentInfo, 'evm');\n\n // Generate random nonce\n const nonceBytes = new Uint8Array(32);\n if (typeof window !== 'undefined' && window.crypto) {\n window.crypto.getRandomValues(nonceBytes);\n } else {\n for (let i = 0; i < 32; i++) {\n nonceBytes[i] = Math.floor(Math.random() * 256);\n }\n }\n const nonce = ethers.hexlify(nonceBytes);\n\n // Set validity window (5 minutes for congested networks, 1 minute otherwise)\n const validAfter = 0;\n const validityWindowSeconds = chain.name === 'base' ? 300 : 60;\n const validBefore = Math.floor(Date.now() / 1000) + validityWindowSeconds;\n\n // EIP-712 domain\n const domain = {\n name: chain.usdc.name,\n version: chain.usdc.version,\n chainId: chain.chainId,\n verifyingContract: chain.usdc.address,\n };\n\n // EIP-712 types for TransferWithAuthorization (ERC-3009)\n const types = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n };\n\n // Parse amount\n const value = ethers.parseUnits(paymentInfo.amount, chain.usdc.decimals);\n const from = await this.signer.getAddress();\n const to = ethers.getAddress(recipient);\n\n // Message to sign\n const message = {\n from,\n to,\n value,\n validAfter,\n validBefore,\n nonce,\n };\n\n this.log('Signing EIP-712 message...', { domain, message });\n\n // Sign the EIP-712 message\n let signature: string;\n try {\n signature = await this.signer.signTypedData(domain, types, message);\n } catch (error: unknown) {\n if (error instanceof Error && (error.message.includes('User rejected') || (error as { code?: number }).code === 4001)) {\n throw new X402Error('Signature rejected by user', 'SIGNATURE_REJECTED');\n }\n throw new X402Error(\n `Failed to sign payment: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'PAYMENT_FAILED',\n error\n );\n }\n\n const sig = ethers.Signature.from(signature);\n\n // Construct payload\n const payload: EVMPaymentPayload = {\n from,\n to,\n value: value.toString(),\n validAfter,\n validBefore,\n nonce,\n v: sig.v,\n r: sig.r,\n s: sig.s,\n chainId: chain.chainId,\n token: chain.usdc.address,\n };\n\n // Encode as X-PAYMENT header\n const paymentHeader = this.encodeEVMPaymentHeader(payload, chain);\n\n this.emit('paymentSigned', { paymentHeader });\n\n const result: PaymentResult = {\n success: true,\n paymentHeader,\n network: chain.name,\n payer: from,\n };\n\n this.emit('paymentCompleted', result);\n this.log('Payment created successfully', { network: chain.name, from });\n\n return result;\n }\n\n private encodeEVMPaymentHeader(payload: EVMPaymentPayload, chain: ChainConfig): string {\n // Reconstruct full signature from v, r, s\n const fullSignature = payload.r + payload.s.slice(2) + payload.v.toString(16).padStart(2, '0');\n\n // Format in x402 standard format\n const x402Payload = {\n x402Version: 1,\n scheme: 'exact',\n network: chain.name,\n payload: {\n signature: fullSignature,\n authorization: {\n from: payload.from,\n to: payload.to,\n value: payload.value,\n validAfter: payload.validAfter.toString(),\n validBefore: payload.validBefore.toString(),\n nonce: payload.nonce,\n },\n },\n };\n\n // Base64 encode\n const jsonString = JSON.stringify(x402Payload);\n return btoa(jsonString);\n }\n\n // ============================================================================\n // PRIVATE - EVM Balance Check\n // ============================================================================\n\n private async getEVMBalance(chain: ChainConfig): Promise<string> {\n // Use public RPC for balance check (more reliable than wallet provider)\n const publicProvider = new ethers.JsonRpcProvider(chain.rpcUrl);\n\n const usdcAbi = ['function balanceOf(address owner) view returns (uint256)'];\n const usdcContract = new ethers.Contract(chain.usdc.address, usdcAbi, publicProvider);\n\n try {\n const balance = await usdcContract.balanceOf(this.connectedAddress);\n const formatted = ethers.formatUnits(balance, chain.usdc.decimals);\n return parseFloat(formatted).toFixed(2);\n } catch {\n return '0.00';\n }\n }\n\n // ============================================================================\n // PRIVATE - Utilities\n // ============================================================================\n\n private getRecipientForNetwork(paymentInfo: PaymentInfo, network: NetworkType): string {\n // Map SVM to solana for recipient lookup\n const lookupNetwork = network === 'svm' ? 'solana' : network;\n const recipients = paymentInfo.recipients as Record<string, string> | undefined;\n if (recipients?.[lookupNetwork]) {\n return recipients[lookupNetwork];\n }\n return paymentInfo.recipient;\n }\n\n private emit<E extends X402Event>(event: E, data: X402EventData[E]): void {\n this.eventHandlers.get(event)?.forEach(handler => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in ${event} handler:`, error);\n }\n });\n }\n\n private log(message: string, data?: unknown): void {\n if (this.config.debug) {\n console.log(`[X402Client] ${message}`, data ?? '');\n }\n }\n}\n\n// Type augmentation for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n removeListener?: (event: string, handler: (...args: unknown[]) => void) => void;\n };\n }\n}\n","/**\n * uvd-x402-sdk - React Hooks\n *\n * Provides React hooks for easy integration with x402 payments.\n *\n * @example\n * ```tsx\n * import { X402Provider, useX402, useBalance, usePayment } from 'uvd-x402-sdk/react';\n *\n * function App() {\n * return (\n * <X402Provider config={{ defaultChain: 'base' }}>\n * <PaymentButton amount=\"10.00\" recipient=\"0x...\" />\n * </X402Provider>\n * );\n * }\n *\n * function PaymentButton({ amount, recipient }) {\n * const { connect, isConnected, address } = useX402();\n * const { balance, isLoading: balanceLoading } = useBalance();\n * const { pay, isPaying } = usePayment();\n *\n * if (!isConnected) {\n * return <button onClick={() => connect('base')}>Connect Wallet</button>;\n * }\n *\n * return (\n * <button\n * onClick={() => pay({ amount, recipient })}\n * disabled={isPaying}\n * >\n * Pay ${amount} USDC\n * </button>\n * );\n * }\n * ```\n */\n\nimport { createContext, useContext, useCallback, useState, useEffect, useMemo, type ReactNode } from 'react';\nimport { X402Client } from '../client';\nimport type {\n X402ClientConfig,\n WalletState,\n PaymentInfo,\n PaymentResult,\n ChainConfig,\n NetworkBalance,\n} from '../types';\nimport { getEnabledChains, getChainByName } from '../chains';\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\ninterface X402ContextValue {\n client: X402Client;\n state: WalletState;\n connect: (chainName?: string) => Promise<string>;\n disconnect: () => Promise<void>;\n switchChain: (chainName: string) => Promise<void>;\n getBalance: () => Promise<string>;\n}\n\nconst X402Context = createContext<X402ContextValue | null>(null);\n\n// ============================================================================\n// PROVIDER\n// ============================================================================\n\ninterface X402ProviderProps {\n children: ReactNode;\n config?: X402ClientConfig;\n}\n\n/**\n * X402Provider - Context provider for x402 SDK\n *\n * Wrap your app with this provider to use the x402 hooks.\n */\nexport function X402Provider({ children, config }: X402ProviderProps) {\n const [client] = useState(() => new X402Client(config));\n const [state, setState] = useState<WalletState>(() => client.getState());\n\n useEffect(() => {\n // Subscribe to events\n const unsubConnect = client.on('connect', (newState) => {\n setState(newState);\n });\n\n const unsubDisconnect = client.on('disconnect', () => {\n setState(client.getState());\n });\n\n const unsubChainChanged = client.on('chainChanged', () => {\n setState(client.getState());\n });\n\n const unsubAccountChanged = client.on('accountChanged', () => {\n setState(client.getState());\n });\n\n return () => {\n unsubConnect();\n unsubDisconnect();\n unsubChainChanged();\n unsubAccountChanged();\n };\n }, [client]);\n\n const connect = useCallback(\n async (chainName?: string) => {\n const address = await client.connect(chainName);\n setState(client.getState());\n return address;\n },\n [client]\n );\n\n const disconnect = useCallback(async () => {\n await client.disconnect();\n setState(client.getState());\n }, [client]);\n\n const switchChain = useCallback(\n async (chainName: string) => {\n await client.switchChain(chainName);\n setState(client.getState());\n },\n [client]\n );\n\n const getBalance = useCallback(() => client.getBalance(), [client]);\n\n const value = useMemo(\n () => ({\n client,\n state,\n connect,\n disconnect,\n switchChain,\n getBalance,\n }),\n [client, state, connect, disconnect, switchChain, getBalance]\n );\n\n return <X402Context.Provider value={value}>{children}</X402Context.Provider>;\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\n/**\n * useX402 - Main hook for x402 functionality\n *\n * Returns wallet state and connection methods.\n */\nexport function useX402() {\n const context = useContext(X402Context);\n if (!context) {\n throw new Error('useX402 must be used within an X402Provider');\n }\n\n const { client, state, connect, disconnect, switchChain, getBalance } = context;\n\n return {\n // State\n isConnected: state.connected,\n address: state.address,\n chainId: state.chainId,\n network: state.network,\n networkType: state.networkType,\n\n // Methods\n connect,\n disconnect,\n switchChain,\n getBalance,\n\n // Client access for advanced usage\n client,\n };\n}\n\n/**\n * useBalance - Hook for USDC balance management\n */\nexport function useBalance() {\n const { client, isConnected, network } = useX402();\n const [balance, setBalance] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchBalance = useCallback(async () => {\n if (!isConnected) {\n setBalance(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const bal = await client.getBalance();\n setBalance(bal);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch balance');\n setBalance(null);\n } finally {\n setIsLoading(false);\n }\n }, [client, isConnected]);\n\n // Auto-fetch on connection/network change\n useEffect(() => {\n fetchBalance();\n }, [fetchBalance, network]);\n\n return {\n balance,\n isLoading,\n error,\n refetch: fetchBalance,\n };\n}\n\n/**\n * usePayment - Hook for creating payments\n */\nexport function usePayment() {\n const { client, isConnected } = useX402();\n const [isPaying, setIsPaying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [lastResult, setLastResult] = useState<PaymentResult | null>(null);\n\n const pay = useCallback(\n async (paymentInfo: PaymentInfo): Promise<PaymentResult> => {\n if (!isConnected) {\n throw new Error('Wallet not connected');\n }\n\n setIsPaying(true);\n setError(null);\n\n try {\n const result = await client.createPayment(paymentInfo);\n setLastResult(result);\n return result;\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Payment failed';\n setError(message);\n throw err;\n } finally {\n setIsPaying(false);\n }\n },\n [client, isConnected]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setLastResult(null);\n }, []);\n\n return {\n pay,\n isPaying,\n error,\n lastResult,\n reset,\n };\n}\n\n/**\n * useChains - Hook for chain information\n */\nexport function useChains() {\n const { network: currentNetwork } = useX402();\n\n const chains = useMemo(() => getEnabledChains(), []);\n\n const currentChain = useMemo(\n () => (currentNetwork ? getChainByName(currentNetwork) : null),\n [currentNetwork]\n );\n\n const evmChains = useMemo(\n () => chains.filter((c) => c.networkType === 'evm'),\n [chains]\n );\n\n const nonEvmChains = useMemo(\n () => chains.filter((c) => c.networkType !== 'evm'),\n [chains]\n );\n\n return {\n chains,\n currentChain,\n evmChains,\n nonEvmChains,\n getChain: getChainByName,\n };\n}\n\n/**\n * useNetworkBalances - Hook for fetching balances across all networks\n */\nexport function useNetworkBalances() {\n const { address, isConnected, networkType } = useX402();\n const [balances, setBalances] = useState<Map<string, NetworkBalance>>(new Map());\n const [isLoading, setIsLoading] = useState(false);\n\n const fetchAllBalances = useCallback(async () => {\n if (!isConnected || !address) {\n setBalances(new Map());\n return;\n }\n\n setIsLoading(true);\n const chains = getEnabledChains();\n\n // Filter to compatible chains\n const compatibleChains = chains.filter((chain) => {\n // EVM address starts with 0x\n if (address.startsWith('0x')) {\n return chain.networkType === 'evm';\n }\n // Otherwise match by network type\n return chain.networkType === networkType;\n });\n\n const newBalances = new Map<string, NetworkBalance>();\n\n // Initialize loading states\n compatibleChains.forEach((chain) => {\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: null,\n isLoading: true,\n error: null,\n });\n });\n setBalances(new Map(newBalances));\n\n // Fetch in parallel\n await Promise.allSettled(\n compatibleChains.map(async (chain) => {\n try {\n const provider = new (await import('ethers')).JsonRpcProvider(chain.rpcUrl);\n const usdcAbi = ['function balanceOf(address) view returns (uint256)'];\n const contract = new (await import('ethers')).Contract(\n chain.usdc.address,\n usdcAbi,\n provider\n );\n const balance = await contract.balanceOf(address);\n const formatted = parseFloat(\n (await import('ethers')).formatUnits(balance, chain.usdc.decimals)\n ).toFixed(2);\n\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: formatted,\n isLoading: false,\n error: null,\n });\n } catch (err) {\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: null,\n isLoading: false,\n error: err instanceof Error ? err.message : 'Failed',\n });\n }\n setBalances(new Map(newBalances));\n })\n );\n\n setIsLoading(false);\n }, [address, isConnected, networkType]);\n\n useEffect(() => {\n fetchAllBalances();\n }, [fetchAllBalances]);\n\n // Find network with highest balance\n const highestBalanceNetwork = useMemo(() => {\n let maxBalance = 0;\n let maxChain: string | null = null;\n\n balances.forEach((nb, chainName) => {\n if (nb.balance !== null && !nb.error) {\n const bal = parseFloat(nb.balance);\n if (bal > maxBalance) {\n maxBalance = bal;\n maxChain = chainName;\n }\n }\n });\n\n return maxChain;\n }, [balances]);\n\n return {\n balances,\n isLoading,\n refetch: fetchAllBalances,\n highestBalanceNetwork,\n };\n}\n\n// Re-export types for convenience\nexport type { WalletState, PaymentInfo, PaymentResult, ChainConfig, NetworkBalance };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts","../../src/chains/index.ts","../../src/client/X402Client.ts","../../src/react/index.tsx"],"names":["ethers","createContext","useState","useEffect","useCallback","useMemo","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * uvd-x402-sdk - Type Definitions\n *\n * Core TypeScript interfaces for the x402 payment SDK.\n * These types define the contract between the SDK and consuming applications.\n */\n\n// ============================================================================\n// CHAIN CONFIGURATION TYPES\n// ============================================================================\n\n/**\n * Network type categorization\n * - 'evm': Ethereum Virtual Machine compatible chains (use EIP-712)\n * - 'svm': Solana Virtual Machine chains (Solana, Fogo) (use SPL tokens)\n * - 'stellar': Stellar network (use Soroban)\n * - 'near': NEAR Protocol (use NEP-366)\n *\n * @deprecated 'solana' type is deprecated, use 'svm' instead\n */\nexport type NetworkType = 'evm' | 'svm' | 'solana' | 'stellar' | 'near';\n\n/**\n * Supported stablecoin token types\n * - usdc: USD Coin (Circle) - 6 decimals\n * - eurc: Euro Coin (Circle) - 6 decimals\n * - ausd: Agora USD (Agora Finance) - 6 decimals\n * - pyusd: PayPal USD (PayPal/Paxos) - 6 decimals\n * - gho: GHO Stablecoin (Aave) - 18 decimals\n * - crvusd: Curve USD (Curve Finance) - 18 decimals\n */\nexport type TokenType = 'usdc' | 'eurc' | 'ausd' | 'pyusd' | 'gho' | 'crvusd';\n\n/**\n * Token configuration for EIP-712 signing and transfers\n */\nexport interface TokenConfig {\n /** Contract/mint address */\n address: string;\n /** Token decimals (6 for most stablecoins, 18 for GHO/crvUSD) */\n decimals: number;\n /** Token name for EIP-712 domain (e.g., \"USD Coin\" or \"USDC\") */\n name: string;\n /** Token version for EIP-712 domain */\n version: string;\n}\n\n/**\n * USDC token configuration for a specific chain\n * @deprecated Use TokenConfig instead. This is kept for backward compatibility.\n */\nexport interface USDCConfig {\n /** Contract/mint address */\n address: string;\n /** Token decimals (6 for most chains, 7 for Stellar) */\n decimals: number;\n /** Token name for EIP-712 domain (e.g., \"USD Coin\" or \"USDC\") */\n name: string;\n /** Token version for EIP-712 domain */\n version: string;\n}\n\n/**\n * Native currency configuration\n */\nexport interface NativeCurrency {\n name: string;\n symbol: string;\n decimals: number;\n}\n\n/**\n * Complete chain configuration\n */\nexport interface ChainConfig {\n /** Numeric chain ID (0 for non-EVM chains) */\n chainId: number;\n /** Hex-encoded chain ID for wallet_switchEthereumChain */\n chainIdHex: string;\n /** Internal chain identifier (e.g., 'base', 'solana') */\n name: string;\n /** Human-readable display name */\n displayName: string;\n /** Network type for routing */\n networkType: NetworkType;\n /** Primary RPC endpoint URL */\n rpcUrl: string;\n /** Block explorer base URL */\n explorerUrl: string;\n /** Native currency info */\n nativeCurrency: NativeCurrency;\n /** USDC token configuration */\n usdc: USDCConfig;\n /**\n * Multi-token configurations (EVM chains only)\n * Maps token type to its configuration for this chain.\n * Not all tokens are available on all chains.\n */\n tokens?: Partial<Record<TokenType, TokenConfig>>;\n /** x402 facilitator configuration */\n x402: {\n facilitatorUrl: string;\n enabled: boolean;\n };\n}\n\n// ============================================================================\n// WALLET TYPES\n// ============================================================================\n\n/**\n * Current wallet connection state\n */\nexport interface WalletState {\n /** Whether a wallet is currently connected */\n connected: boolean;\n /** Connected wallet address (null if not connected) */\n address: string | null;\n /** Current chain ID (null for non-EVM or disconnected) */\n chainId: number | null;\n /** Current network name */\n network: string | null;\n /** Network type of connected wallet */\n networkType: NetworkType | null;\n /** USDC balance on current chain (null if unknown) */\n balance: string | null;\n}\n\n/**\n * Wallet adapter interface for different wallet types\n */\nexport interface WalletAdapter {\n /** Unique identifier for this wallet type */\n readonly id: string;\n /** Display name */\n readonly name: string;\n /** Network type this adapter supports */\n readonly networkType: NetworkType;\n\n /** Check if this wallet is available/installed */\n isAvailable(): boolean;\n\n /** Connect to the wallet */\n connect(chainName?: string): Promise<string>;\n\n /** Disconnect from the wallet */\n disconnect(): Promise<void>;\n\n /** Switch to a different chain (EVM only) */\n switchChain?(chainName: string): Promise<void>;\n\n /**\n * Sign a payment payload\n * For EVM chains, supports multi-token via paymentInfo.tokenType\n */\n signPayment(paymentInfo: PaymentInfo, chainConfig: ChainConfig): Promise<string>;\n\n /**\n * Check token balance (defaults to USDC for backward compatibility)\n * EVM providers may accept optional tokenType parameter\n */\n getBalance(chainConfig: ChainConfig, tokenType?: TokenType): Promise<string>;\n\n /** Get current address */\n getAddress(): string | null;\n\n /** Get current chain ID (EVM only) */\n getChainId?(): number | null;\n}\n\n/**\n * EIP-712 domain for typed data signing\n */\nexport interface EIP712Domain {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n}\n\n/**\n * EIP-712 type definitions\n */\nexport interface EIP712Types {\n [typeName: string]: Array<{ name: string; type: string }>;\n}\n\n// ============================================================================\n// PAYMENT TYPES\n// ============================================================================\n\n/**\n * Payment information returned by backend on 402 response\n */\nexport interface PaymentInfo {\n /** Default recipient address */\n recipient: string;\n /** Network-specific recipient addresses */\n recipients?: {\n evm?: string;\n solana?: string;\n near?: string;\n stellar?: string;\n };\n /** Facilitator address (for Solana fee payer) */\n facilitator?: string;\n /** Amount in USD (e.g., \"10.00\") */\n amount: string;\n /** Token symbol (usually \"USDC\") */\n token?: string;\n /**\n * Token type for multi-token support\n * Defaults to 'usdc' if not specified for backward compatibility\n */\n tokenType?: TokenType;\n /** Network hint from backend */\n network?: string;\n /** Supported chain IDs */\n supportedChains?: number[];\n}\n\n/**\n * Simple payment request from application\n */\nexport interface PaymentRequest {\n /** Amount in USDC (e.g., \"10.00\") */\n amount: string;\n /** Override recipient address (optional) */\n recipient?: string;\n /** Application-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Result of a payment operation\n */\nexport interface PaymentResult {\n /** Whether payment was successful */\n success: boolean;\n /** Base64-encoded X-PAYMENT header value */\n paymentHeader: string;\n /** Transaction hash (if available) */\n transactionHash?: string;\n /** Network where payment was made */\n network: string;\n /** Payer address */\n payer?: string;\n /** Error message (if success is false) */\n error?: string;\n}\n\n// ============================================================================\n// PAYLOAD TYPES (Internal)\n// ============================================================================\n\n/**\n * EVM payment payload (ERC-3009 TransferWithAuthorization)\n */\nexport interface EVMPaymentPayload {\n from: string;\n to: string;\n value: string;\n validAfter: number;\n validBefore: number;\n nonce: string;\n v: number;\n r: string;\n s: string;\n chainId: number;\n token: string;\n}\n\n/**\n * Solana payment payload (partially-signed transaction)\n */\nexport interface SolanaPaymentPayload {\n /** Base64-encoded serialized transaction */\n transaction: string;\n}\n\n/**\n * Stellar payment payload (Soroban authorization)\n */\nexport interface StellarPaymentPayload {\n /** Sender G... public key */\n from: string;\n /** Recipient G... public key */\n to: string;\n /** Amount in stroops (7 decimals) */\n amount: string;\n /** USDC SAC contract address */\n tokenContract: string;\n /** Base64 XDR-encoded SorobanAuthorizationEntry */\n authorizationEntryXdr: string;\n /** Random 64-bit nonce */\n nonce: number;\n /** Ledger when authorization expires */\n signatureExpirationLedger: number;\n}\n\n/**\n * NEAR payment payload (NEP-366 meta-transaction)\n */\nexport interface NEARPaymentPayload {\n /** Base64 Borsh-encoded SignedDelegateAction */\n signedDelegateAction: string;\n network: 'near';\n}\n\n/**\n * Union type for all payment payloads\n */\nexport type PaymentPayload =\n | EVMPaymentPayload\n | SolanaPaymentPayload\n | StellarPaymentPayload\n | NEARPaymentPayload;\n\n// ============================================================================\n// X402 HEADER TYPES (v1 and v2)\n// ============================================================================\n\n/**\n * x402 protocol version\n */\nexport type X402Version = 1 | 2;\n\n/**\n * CAIP-2 chain identifiers for x402 v2\n * @see https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md\n */\nexport const CAIP2_IDENTIFIERS: Record<string, string> = {\n // EVM chains\n base: 'eip155:8453',\n ethereum: 'eip155:1',\n polygon: 'eip155:137',\n arbitrum: 'eip155:42161',\n optimism: 'eip155:10',\n avalanche: 'eip155:43114',\n celo: 'eip155:42220',\n hyperevm: 'eip155:999',\n unichain: 'eip155:130',\n monad: 'eip155:143',\n // SVM chains\n solana: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n fogo: 'svm:fogo',\n // Stellar\n stellar: 'stellar:pubnet',\n // NEAR\n near: 'near:mainnet',\n};\n\n/**\n * Reverse mapping from CAIP-2 to chain name\n */\nexport const CAIP2_TO_CHAIN: Record<string, string> = Object.fromEntries(\n Object.entries(CAIP2_IDENTIFIERS).map(([k, v]) => [v, k])\n);\n\n/**\n * x402 v1 header structure (network as string)\n */\nexport interface X402HeaderV1 {\n x402Version: 1;\n scheme: 'exact';\n network: string;\n payload: X402PayloadData;\n}\n\n/**\n * x402 v2 payment option\n */\nexport interface X402PaymentOption {\n network: string; // CAIP-2 format\n asset: string;\n amount: string;\n facilitator?: string;\n}\n\n/**\n * x402 v2 header structure (CAIP-2 network, accepts array)\n */\nexport interface X402HeaderV2 {\n x402Version: 2;\n scheme: 'exact';\n network: string; // CAIP-2 format\n payload: X402PayloadData;\n accepts?: X402PaymentOption[];\n}\n\n/**\n * Union type for both v1 and v2 headers\n */\nexport type X402Header = X402HeaderV1 | X402HeaderV2;\n\n/**\n * EVM-specific payload in x402 header\n */\nexport interface X402EVMPayload {\n signature: string;\n authorization: {\n from: string;\n to: string;\n value: string;\n validAfter: string;\n validBefore: string;\n nonce: string;\n };\n}\n\n/**\n * Solana-specific payload in x402 header\n */\nexport interface X402SolanaPayload {\n transaction: string;\n}\n\n/**\n * Stellar-specific payload in x402 header\n */\nexport interface X402StellarPayload {\n from: string;\n to: string;\n amount: string;\n tokenContract: string;\n authorizationEntryXdr: string;\n nonce: number;\n signatureExpirationLedger: number;\n}\n\n/**\n * NEAR-specific payload in x402 header\n */\nexport interface X402NEARPayload {\n signedDelegateAction: string;\n}\n\n/**\n * Union of all x402 payload types\n */\nexport type X402PayloadData =\n | X402EVMPayload\n | X402SolanaPayload\n | X402StellarPayload\n | X402NEARPayload;\n\n// ============================================================================\n// CLIENT CONFIGURATION\n// ============================================================================\n\n/**\n * Multi-payment configuration for supporting multiple networks\n */\nexport interface MultiPaymentConfig {\n /** Networks to support (e.g., ['base', 'solana', 'stellar', 'near']) */\n networks: string[];\n /** Default network if user hasn't selected one */\n defaultNetwork?: string;\n /** Whether to auto-detect user's preferred network based on wallet */\n autoDetect?: boolean;\n}\n\n/**\n * SDK client configuration options\n */\nexport interface X402ClientConfig {\n /** Facilitator URL (default: https://facilitator.ultravioletadao.xyz) */\n facilitatorUrl?: string;\n /** Default chain to connect to */\n defaultChain?: string;\n /** Auto-connect on initialization */\n autoConnect?: boolean;\n /** Enable debug logging */\n debug?: boolean;\n /** Custom chain configurations (override defaults) */\n customChains?: Record<string, Partial<ChainConfig>>;\n /** Wallet preference order */\n walletPreference?: string[];\n /** Custom RPC URLs (override defaults) */\n rpcOverrides?: Record<string, string>;\n /**\n * x402 protocol version to use\n * - 1: Classic format with network as string (e.g., \"base\")\n * - 2: CAIP-2 format with accepts array (e.g., \"eip155:8453\")\n * - 'auto': Auto-detect from 402 response (default)\n */\n x402Version?: X402Version | 'auto';\n /** Multi-payment configuration for supporting multiple networks */\n multiPayment?: MultiPaymentConfig;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: Required<Pick<X402ClientConfig, 'facilitatorUrl' | 'defaultChain' | 'autoConnect' | 'debug' | 'x402Version'>> = {\n facilitatorUrl: 'https://facilitator.ultravioletadao.xyz',\n defaultChain: 'base',\n autoConnect: false,\n debug: false,\n x402Version: 'auto',\n};\n\n// ============================================================================\n// BALANCE TYPES\n// ============================================================================\n\n/**\n * Balance information for a single network\n */\nexport interface NetworkBalance {\n /** Chain name */\n chainName: string;\n /** Human-readable display name */\n displayName: string;\n /** Formatted balance (e.g., \"15.50\") or null if loading/error */\n balance: string | null;\n /** Whether balance is currently being fetched */\n isLoading: boolean;\n /** Error message if fetch failed */\n error: string | null;\n}\n\n// ============================================================================\n// EVENT TYPES\n// ============================================================================\n\n/**\n * Events emitted by the SDK client\n */\nexport type X402Event =\n | 'connect'\n | 'disconnect'\n | 'chainChanged'\n | 'accountChanged'\n | 'balanceChanged'\n | 'paymentStarted'\n | 'paymentSigned'\n | 'paymentCompleted'\n | 'paymentFailed';\n\n/**\n * Event data types\n */\nexport interface X402EventData {\n connect: WalletState;\n disconnect: void;\n chainChanged: { chainId: number; chainName: string };\n accountChanged: { address: string };\n balanceChanged: { balance: string };\n paymentStarted: { amount: string; network: string };\n paymentSigned: { paymentHeader: string };\n paymentCompleted: PaymentResult;\n paymentFailed: { error: string; code: X402ErrorCode };\n}\n\n/**\n * Event handler type\n */\nexport type X402EventHandler<E extends X402Event> = (data: X402EventData[E]) => void;\n\n// ============================================================================\n// ERROR TYPES\n// ============================================================================\n\n/**\n * Error codes for categorizing errors\n */\nexport type X402ErrorCode =\n | 'WALLET_NOT_FOUND'\n | 'WALLET_NOT_CONNECTED'\n | 'WALLET_CONNECTION_REJECTED'\n | 'WALLET_CONNECTION_TIMEOUT'\n | 'CHAIN_NOT_SUPPORTED'\n | 'CHAIN_SWITCH_REJECTED'\n | 'INSUFFICIENT_BALANCE'\n | 'SIGNATURE_REJECTED'\n | 'PAYMENT_FAILED'\n | 'PAYMENT_TIMEOUT'\n | 'NETWORK_ERROR'\n | 'INVALID_CONFIG'\n | 'INVALID_AMOUNT'\n | 'INVALID_RECIPIENT'\n | 'UNKNOWN_ERROR';\n\n/**\n * SDK-specific error class\n */\nexport class X402Error extends Error {\n public readonly code: X402ErrorCode;\n public readonly details?: unknown;\n\n constructor(message: string, code: X402ErrorCode, details?: unknown) {\n super(message);\n this.name = 'X402Error';\n this.code = code;\n this.details = details;\n\n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, X402Error);\n }\n }\n}\n","/**\n * uvd-x402-sdk - Chain Registry\n *\n * Complete configuration for all 15 supported blockchain networks.\n * EVM chains (11): Use ERC-3009 TransferWithAuthorization\n * SVM chains (2): Solana and Fogo - Use SPL tokens with partially-signed transactions\n * Stellar (1): Uses Soroban authorization entries\n * NEAR (1): Uses NEP-366 meta-transactions\n */\n\nimport type { ChainConfig, NetworkType, TokenType, TokenConfig } from '../types';\n\n/**\n * Default facilitator URL for x402 payments\n */\nexport const DEFAULT_FACILITATOR_URL = 'https://facilitator.ultravioletadao.xyz';\n\n/**\n * All supported chains configuration\n *\n * To add a new chain:\n * 1. Add chain config below with all required fields\n * 2. Verify USDC contract supports ERC-3009 (transferWithAuthorization) for EVM chains\n * 3. Test on testnet first before enabling\n */\nexport const SUPPORTED_CHAINS: Record<string, ChainConfig> = {\n // ============================================================================\n // EVM CHAINS (10 networks)\n // ============================================================================\n\n base: {\n chainId: 8453,\n chainIdHex: '0x2105',\n name: 'base',\n displayName: 'Base',\n networkType: 'evm',\n rpcUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n eurc: {\n address: '0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42',\n decimals: 6,\n name: 'EURC',\n version: '2',\n },\n gho: {\n address: '0x6Bb7a212910682DCFdbd5BCBb3e28FB4E8da10Ee',\n decimals: 18,\n name: 'Gho Token',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n avalanche: {\n chainId: 43114,\n chainIdHex: '0xa86a',\n name: 'avalanche',\n displayName: 'Avalanche C-Chain',\n networkType: 'evm',\n rpcUrl: 'https://avalanche-c-chain-rpc.publicnode.com',\n explorerUrl: 'https://snowtrace.io',\n nativeCurrency: {\n name: 'Avalanche',\n symbol: 'AVAX',\n decimals: 18,\n },\n usdc: {\n address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n eurc: {\n address: '0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD',\n decimals: 6,\n name: 'EURC',\n version: '2',\n },\n ausd: {\n address: '0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a',\n decimals: 6,\n name: 'Agora USD',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n ethereum: {\n chainId: 1,\n chainIdHex: '0x1',\n name: 'ethereum',\n displayName: 'Ethereum',\n networkType: 'evm',\n rpcUrl: 'https://eth.llamarpc.com',\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n eurc: {\n address: '0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c',\n decimals: 6,\n name: 'EURC',\n version: '2',\n },\n ausd: {\n address: '0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a',\n decimals: 6,\n name: 'Agora USD',\n version: '1',\n },\n pyusd: {\n address: '0x6c3ea9036406852006290770BEdFcAbA0e23A0e8',\n decimals: 6,\n name: 'PayPal USD',\n version: '1',\n },\n gho: {\n address: '0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f',\n decimals: 18,\n name: 'Gho Token',\n version: '1',\n },\n crvusd: {\n address: '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E',\n decimals: 18,\n name: 'Curve.Fi USD Stablecoin',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n polygon: {\n chainId: 137,\n chainIdHex: '0x89',\n name: 'polygon',\n displayName: 'Polygon',\n networkType: 'evm',\n rpcUrl: 'https://polygon-rpc.com',\n explorerUrl: 'https://polygonscan.com',\n nativeCurrency: {\n name: 'Polygon',\n symbol: 'POL',\n decimals: 18,\n },\n usdc: {\n address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n ausd: {\n address: '0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a',\n decimals: 6,\n name: 'Agora USD',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n arbitrum: {\n chainId: 42161,\n chainIdHex: '0xa4b1',\n name: 'arbitrum',\n displayName: 'Arbitrum One',\n networkType: 'evm',\n rpcUrl: 'https://arb1.arbitrum.io/rpc',\n explorerUrl: 'https://arbiscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n ausd: {\n address: '0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a',\n decimals: 6,\n name: 'Agora USD',\n version: '1',\n },\n gho: {\n address: '0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33',\n decimals: 18,\n name: 'Gho Token',\n version: '1',\n },\n crvusd: {\n address: '0x498Bf2B1e120FeD3ad3D42EA2165E9b73f99C1e5',\n decimals: 18,\n name: 'Curve.Fi USD Stablecoin',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n optimism: {\n chainId: 10,\n chainIdHex: '0xa',\n name: 'optimism',\n displayName: 'Optimism',\n networkType: 'evm',\n rpcUrl: 'https://mainnet.optimism.io',\n explorerUrl: 'https://optimistic.etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n decimals: 6,\n name: 'USD Coin',\n version: '2',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n celo: {\n chainId: 42220,\n chainIdHex: '0xa4ec',\n name: 'celo',\n displayName: 'Celo',\n networkType: 'evm',\n rpcUrl: 'https://forno.celo.org',\n explorerUrl: 'https://celoscan.io',\n nativeCurrency: {\n name: 'Celo',\n symbol: 'CELO',\n decimals: 18,\n },\n usdc: {\n address: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',\n decimals: 6,\n name: 'USDC', // Celo uses \"USDC\" not \"USD Coin\" for EIP-712\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',\n decimals: 6,\n name: 'USDC', // Celo uses \"USDC\" not \"USD Coin\" for EIP-712\n version: '2',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n hyperevm: {\n chainId: 999,\n chainIdHex: '0x3e7',\n name: 'hyperevm',\n displayName: 'HyperEVM',\n networkType: 'evm',\n rpcUrl: 'https://rpc.hyperliquid.xyz/evm',\n explorerUrl: 'https://hyperevmscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',\n decimals: 6,\n name: 'USDC', // HyperEVM uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',\n decimals: 6,\n name: 'USDC', // HyperEVM uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n unichain: {\n chainId: 130,\n chainIdHex: '0x82',\n name: 'unichain',\n displayName: 'Unichain',\n networkType: 'evm',\n rpcUrl: 'https://unichain-rpc.publicnode.com',\n explorerUrl: 'https://uniscan.xyz',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n },\n usdc: {\n address: '0x078d782b760474a361dda0af3839290b0ef57ad6',\n decimals: 6,\n name: 'USDC', // Unichain uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0x078d782b760474a361dda0af3839290b0ef57ad6',\n decimals: 6,\n name: 'USDC', // Unichain uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n monad: {\n chainId: 143,\n chainIdHex: '0x8f',\n name: 'monad',\n displayName: 'Monad',\n networkType: 'evm',\n rpcUrl: 'https://rpc.monad.xyz',\n explorerUrl: 'https://monad.socialscan.io',\n nativeCurrency: {\n name: 'Monad',\n symbol: 'MON',\n decimals: 18,\n },\n usdc: {\n address: '0x754704bc059f8c67012fed69bc8a327a5aafb603',\n decimals: 6,\n name: 'USDC', // Monad uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n tokens: {\n usdc: {\n address: '0x754704bc059f8c67012fed69bc8a327a5aafb603',\n decimals: 6,\n name: 'USDC', // Monad uses \"USDC\" not \"USD Coin\"\n version: '2',\n },\n ausd: {\n address: '0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a',\n decimals: 6,\n name: 'Agora USD',\n version: '1',\n },\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // SVM CHAINS (2 networks) - Solana Virtual Machine\n // ============================================================================\n\n solana: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'solana',\n displayName: 'Solana',\n networkType: 'svm',\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io',\n nativeCurrency: {\n name: 'Solana',\n symbol: 'SOL',\n decimals: 9,\n },\n usdc: {\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC SPL token mint\n decimals: 6,\n name: 'USD Coin',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n fogo: {\n chainId: 0, // Non-EVM (SVM)\n chainIdHex: '0x0',\n name: 'fogo',\n displayName: 'Fogo',\n networkType: 'svm',\n rpcUrl: 'https://rpc.fogo.nightly.app/',\n explorerUrl: 'https://explorer.fogo.nightly.app',\n nativeCurrency: {\n name: 'Fogo',\n symbol: 'FOGO',\n decimals: 9,\n },\n usdc: {\n address: 'uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG', // Fogo USDC mint\n decimals: 6,\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // STELLAR (1 network)\n // ============================================================================\n\n stellar: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'stellar',\n displayName: 'Stellar',\n networkType: 'stellar',\n rpcUrl: 'https://horizon.stellar.org',\n explorerUrl: 'https://stellar.expert/explorer/public',\n nativeCurrency: {\n name: 'Lumens',\n symbol: 'XLM',\n decimals: 7, // Stellar uses 7 decimals (stroops)\n },\n usdc: {\n address: 'CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75', // Soroban Asset Contract\n decimals: 7, // Stellar USDC uses 7 decimals\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true,\n },\n },\n\n // ============================================================================\n // NEAR (1 network) - Uses NEP-366 meta-transactions\n // ============================================================================\n\n near: {\n chainId: 0, // Non-EVM\n chainIdHex: '0x0',\n name: 'near',\n displayName: 'NEAR Protocol',\n networkType: 'near',\n rpcUrl: 'https://rpc.mainnet.near.org',\n explorerUrl: 'https://nearblocks.io',\n nativeCurrency: {\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24, // NEAR uses 24 decimals (yoctoNEAR)\n },\n usdc: {\n address: '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', // Native Circle USDC\n decimals: 6,\n name: 'USDC',\n version: '1',\n },\n x402: {\n facilitatorUrl: DEFAULT_FACILITATOR_URL,\n enabled: true, // NEP-366 meta-transactions supported\n },\n },\n};\n\n/**\n * Default chain for new users\n */\nexport const DEFAULT_CHAIN = 'base';\n\n/**\n * Get chain config by chain ID\n */\nexport function getChainById(chainId: number): ChainConfig | undefined {\n return Object.values(SUPPORTED_CHAINS).find(chain => chain.chainId === chainId);\n}\n\n/**\n * Get chain config by name (case-insensitive)\n */\nexport function getChainByName(name: string): ChainConfig | undefined {\n return SUPPORTED_CHAINS[name.toLowerCase()];\n}\n\n/**\n * Check if a chain is supported\n */\nexport function isChainSupported(chainIdOrName: number | string): boolean {\n if (typeof chainIdOrName === 'number') {\n return Object.values(SUPPORTED_CHAINS).some(chain => chain.chainId === chainIdOrName);\n }\n return chainIdOrName.toLowerCase() in SUPPORTED_CHAINS;\n}\n\n/**\n * Get list of enabled chains\n */\nexport function getEnabledChains(): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(chain => chain.x402.enabled);\n}\n\n/**\n * Get list of chains by network type\n */\nexport function getChainsByNetworkType(networkType: NetworkType): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(\n chain => chain.networkType === networkType && chain.x402.enabled\n );\n}\n\n/**\n * Get all EVM chain IDs (for wallet_switchEthereumChain)\n */\nexport function getEVMChainIds(): number[] {\n return getChainsByNetworkType('evm').map(chain => chain.chainId);\n}\n\n/**\n * Get list of SVM chains (Solana, Fogo)\n */\nexport function getSVMChains(): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(\n chain => chain.networkType === 'svm' && chain.x402.enabled\n );\n}\n\n/**\n * Check if a chain is SVM-based (Solana Virtual Machine)\n */\nexport function isSVMChain(chainName: string): boolean {\n const chain = getChainByName(chainName);\n return chain?.networkType === 'svm';\n}\n\n/**\n * Get network type from chain name\n */\nexport function getNetworkType(chainName: string): NetworkType | undefined {\n const chain = getChainByName(chainName);\n return chain?.networkType;\n}\n\n/**\n * Format transaction URL for block explorer\n */\nexport function getExplorerTxUrl(chainName: string, txHash: string): string | null {\n const chain = getChainByName(chainName);\n if (!chain) return null;\n\n switch (chain.networkType) {\n case 'evm':\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'svm':\n case 'solana': // @deprecated\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'stellar':\n return `${chain.explorerUrl}/tx/${txHash}`;\n case 'near':\n return `${chain.explorerUrl}/txns/${txHash}`;\n default:\n return null;\n }\n}\n\n/**\n * Format address URL for block explorer\n */\nexport function getExplorerAddressUrl(chainName: string, address: string): string | null {\n const chain = getChainByName(chainName);\n if (!chain) return null;\n\n switch (chain.networkType) {\n case 'evm':\n return `${chain.explorerUrl}/address/${address}`;\n case 'svm':\n case 'solana': // @deprecated\n return `${chain.explorerUrl}/account/${address}`;\n case 'stellar':\n return `${chain.explorerUrl}/account/${address}`;\n case 'near':\n return `${chain.explorerUrl}/address/${address}`;\n default:\n return null;\n }\n}\n\n// ============================================================================\n// MULTI-TOKEN SUPPORT FUNCTIONS\n// ============================================================================\n\n/**\n * Get token configuration for a specific chain and token type\n * Falls back to USDC config if token not found (for backward compatibility)\n *\n * @param chainName - Chain name (e.g., 'ethereum', 'base')\n * @param tokenType - Token type (e.g., 'usdc', 'eurc', 'gho')\n * @returns Token configuration or undefined if chain not found\n */\nexport function getTokenConfig(\n chainName: string,\n tokenType: TokenType = 'usdc'\n): TokenConfig | undefined {\n const chain = getChainByName(chainName);\n if (!chain) return undefined;\n\n // Try to get from tokens map first (new multi-token support)\n if (chain.tokens && chain.tokens[tokenType]) {\n return chain.tokens[tokenType];\n }\n\n // Fall back to usdc config for backward compatibility\n if (tokenType === 'usdc') {\n return chain.usdc;\n }\n\n return undefined;\n}\n\n/**\n * Get list of supported tokens for a chain\n *\n * @param chainName - Chain name (e.g., 'ethereum', 'base')\n * @returns Array of supported token types, or empty array if chain not found\n */\nexport function getSupportedTokens(chainName: string): TokenType[] {\n const chain = getChainByName(chainName);\n if (!chain) return [];\n\n // If tokens map exists, return its keys\n if (chain.tokens) {\n return Object.keys(chain.tokens) as TokenType[];\n }\n\n // Default to just USDC for chains without explicit tokens map\n return ['usdc'];\n}\n\n/**\n * Check if a token is supported on a specific chain\n *\n * @param chainName - Chain name (e.g., 'ethereum', 'base')\n * @param tokenType - Token type (e.g., 'usdc', 'eurc', 'gho')\n * @returns true if token is supported on the chain\n */\nexport function isTokenSupported(chainName: string, tokenType: TokenType): boolean {\n const chain = getChainByName(chainName);\n if (!chain) return false;\n\n // Check tokens map\n if (chain.tokens && chain.tokens[tokenType]) {\n return true;\n }\n\n // USDC is always supported (backward compatibility)\n if (tokenType === 'usdc') {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get all chains that support a specific token\n *\n * @param tokenType - Token type (e.g., 'usdc', 'eurc', 'gho')\n * @returns Array of chain configs that support the token\n */\nexport function getChainsByToken(tokenType: TokenType): ChainConfig[] {\n return Object.values(SUPPORTED_CHAINS).filter(chain => {\n if (!chain.x402.enabled) return false;\n if (chain.tokens && chain.tokens[tokenType]) return true;\n if (tokenType === 'usdc') return true; // USDC is universal\n return false;\n });\n}\n","/**\n * uvd-x402-sdk - Main Client\n *\n * The X402Client is the primary entry point for the SDK.\n * It manages wallet connections, chain switching, and payment creation.\n */\n\nimport { ethers } from 'ethers';\nimport type {\n ChainConfig,\n NetworkType,\n PaymentInfo,\n PaymentResult,\n WalletState,\n X402ClientConfig,\n X402Event,\n X402EventData,\n X402EventHandler,\n EVMPaymentPayload,\n} from '../types';\nimport { X402Error, DEFAULT_CONFIG } from '../types';\nimport {\n SUPPORTED_CHAINS,\n getChainByName,\n getChainById,\n getEnabledChains,\n} from '../chains';\n\n/**\n * X402Client - Main SDK client for x402 payments\n *\n * @example\n * ```ts\n * import { X402Client } from 'uvd-x402-sdk';\n *\n * const client = new X402Client({ defaultChain: 'base' });\n *\n * // Connect wallet\n * await client.connect('base');\n *\n * // Create payment\n * const result = await client.createPayment({\n * recipient: '0x...',\n * amount: '10.00',\n * });\n *\n * // Use result.paymentHeader in your API request\n * ```\n */\nexport class X402Client {\n // Configuration\n private readonly config: Required<Pick<X402ClientConfig, 'facilitatorUrl' | 'defaultChain' | 'autoConnect' | 'debug'>> & X402ClientConfig;\n\n // Wallet state\n private provider: ethers.BrowserProvider | null = null;\n private signer: ethers.Signer | null = null;\n private connectedAddress: string | null = null;\n private currentChainId: number | null = null;\n private currentNetwork: NetworkType | null = null;\n private currentChainName: string | null = null;\n\n // Event emitter\n private eventHandlers: Map<X402Event, Set<X402EventHandler<X402Event>>> = new Map();\n\n constructor(config: X402ClientConfig = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n // Apply custom RPC overrides\n if (config.rpcOverrides) {\n for (const [chainName, rpcUrl] of Object.entries(config.rpcOverrides)) {\n if (SUPPORTED_CHAINS[chainName]) {\n SUPPORTED_CHAINS[chainName].rpcUrl = rpcUrl;\n }\n }\n }\n\n // Apply custom chain configurations\n if (config.customChains) {\n for (const [chainName, chainConfig] of Object.entries(config.customChains)) {\n if (SUPPORTED_CHAINS[chainName]) {\n Object.assign(SUPPORTED_CHAINS[chainName], chainConfig);\n }\n }\n }\n\n this.log('X402Client initialized', { config: this.config });\n }\n\n // ============================================================================\n // PUBLIC API - Wallet Connection\n // ============================================================================\n\n /**\n * Connect to a wallet on the specified chain\n */\n async connect(chainName?: string): Promise<string> {\n const targetChain = chainName || this.config.defaultChain;\n const chain = getChainByName(targetChain);\n\n if (!chain) {\n throw new X402Error(`Unsupported chain: ${targetChain}`, 'CHAIN_NOT_SUPPORTED');\n }\n\n if (!chain.x402.enabled) {\n throw new X402Error(`Chain ${targetChain} is not enabled for x402 payments`, 'CHAIN_NOT_SUPPORTED');\n }\n\n this.log(`Connecting wallet on ${chain.displayName}...`);\n\n // Route to appropriate connection method based on network type\n switch (chain.networkType) {\n case 'evm':\n return this.connectEVMWallet(chain);\n case 'solana':\n throw new X402Error(\n 'Solana support requires importing from \"uvd-x402-sdk/solana\"',\n 'CHAIN_NOT_SUPPORTED'\n );\n case 'stellar':\n throw new X402Error(\n 'Stellar support requires importing from \"uvd-x402-sdk/stellar\"',\n 'CHAIN_NOT_SUPPORTED'\n );\n case 'near':\n throw new X402Error('NEAR is not yet supported by the facilitator', 'CHAIN_NOT_SUPPORTED');\n default:\n throw new X402Error(`Unknown network type for chain ${targetChain}`, 'CHAIN_NOT_SUPPORTED');\n }\n }\n\n /**\n * Disconnect the current wallet\n */\n async disconnect(): Promise<void> {\n this.provider = null;\n this.signer = null;\n this.connectedAddress = null;\n this.currentChainId = null;\n this.currentNetwork = null;\n this.currentChainName = null;\n\n this.emit('disconnect', undefined);\n this.log('Wallet disconnected');\n }\n\n /**\n * Switch to a different chain (EVM only)\n */\n async switchChain(chainName: string): Promise<void> {\n const chain = getChainByName(chainName);\n\n if (!chain) {\n throw new X402Error(`Unsupported chain: ${chainName}`, 'CHAIN_NOT_SUPPORTED');\n }\n\n if (chain.networkType !== 'evm') {\n throw new X402Error(\n 'switchChain is only supported for EVM networks. Reconnect with connect() for other networks.',\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n\n if (!this.provider) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n await this.switchEVMChain(chain);\n }\n\n // ============================================================================\n // PUBLIC API - Payment Creation\n // ============================================================================\n\n /**\n * Create a payment authorization\n *\n * @param paymentInfo - Payment information from 402 response\n * @returns Payment result with encoded X-PAYMENT header\n */\n async createPayment(paymentInfo: PaymentInfo): Promise<PaymentResult> {\n if (!this.connectedAddress) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n if (!this.currentChainName) {\n throw new X402Error('Chain not set', 'CHAIN_NOT_SUPPORTED');\n }\n\n const chain = getChainByName(this.currentChainName);\n if (!chain) {\n throw new X402Error(`Chain ${this.currentChainName} not found`, 'CHAIN_NOT_SUPPORTED');\n }\n\n this.emit('paymentStarted', { amount: paymentInfo.amount, network: chain.name });\n this.log('Creating payment...', { paymentInfo, chain: chain.name });\n\n try {\n // Route to appropriate payment method\n switch (chain.networkType) {\n case 'evm':\n return await this.createEVMPayment(paymentInfo, chain);\n default:\n throw new X402Error(\n `Payment creation for ${chain.networkType} requires the appropriate provider`,\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n } catch (error) {\n const x402Error = error instanceof X402Error\n ? error\n : new X402Error(\n error instanceof Error ? error.message : 'Unknown error',\n 'PAYMENT_FAILED',\n error\n );\n\n this.emit('paymentFailed', { error: x402Error.message, code: x402Error.code });\n throw x402Error;\n }\n }\n\n /**\n * Check USDC balance on current chain\n */\n async getBalance(): Promise<string> {\n if (!this.connectedAddress || !this.currentChainName) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n const chain = getChainByName(this.currentChainName);\n if (!chain) {\n throw new X402Error(`Chain ${this.currentChainName} not found`, 'CHAIN_NOT_SUPPORTED');\n }\n\n switch (chain.networkType) {\n case 'evm':\n return this.getEVMBalance(chain);\n default:\n throw new X402Error(\n `Balance check for ${chain.networkType} requires the appropriate provider`,\n 'CHAIN_NOT_SUPPORTED'\n );\n }\n }\n\n // ============================================================================\n // PUBLIC API - Getters\n // ============================================================================\n\n /**\n * Get current wallet state\n */\n getState(): WalletState {\n return {\n connected: this.connectedAddress !== null,\n address: this.connectedAddress,\n chainId: this.currentChainId,\n network: this.currentChainName,\n networkType: this.currentNetwork,\n balance: null, // Call getBalance() separately\n };\n }\n\n /**\n * Get connected wallet address\n */\n getAddress(): string | null {\n return this.connectedAddress;\n }\n\n /**\n * Get current chain ID\n */\n getChainId(): number | null {\n return this.currentChainId;\n }\n\n /**\n * Get current chain name\n */\n getChainName(): string | null {\n return this.currentChainName;\n }\n\n /**\n * Get current chain display name\n */\n getChainDisplayName(): string | null {\n if (!this.currentChainName) return null;\n const chain = getChainByName(this.currentChainName);\n return chain?.displayName ?? null;\n }\n\n /**\n * Check if wallet is connected\n */\n isConnected(): boolean {\n return this.connectedAddress !== null;\n }\n\n /**\n * Get list of enabled chains\n */\n getEnabledChains(): ChainConfig[] {\n return getEnabledChains();\n }\n\n /**\n * Get chain config by name\n */\n getChain(name: string): ChainConfig | undefined {\n return getChainByName(name);\n }\n\n // ============================================================================\n // PUBLIC API - Events\n // ============================================================================\n\n /**\n * Subscribe to an event\n */\n on<E extends X402Event>(event: E, handler: X402EventHandler<E>): () => void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, new Set());\n }\n this.eventHandlers.get(event)!.add(handler as X402EventHandler<X402Event>);\n\n // Return unsubscribe function\n return () => this.off(event, handler);\n }\n\n /**\n * Unsubscribe from an event\n */\n off<E extends X402Event>(event: E, handler: X402EventHandler<E>): void {\n this.eventHandlers.get(event)?.delete(handler as X402EventHandler<X402Event>);\n }\n\n // ============================================================================\n // PRIVATE - EVM Wallet Connection\n // ============================================================================\n\n private async connectEVMWallet(chain: ChainConfig): Promise<string> {\n // Check for injected provider\n if (typeof window === 'undefined' || !window.ethereum) {\n throw new X402Error(\n 'No Ethereum wallet found. Please install MetaMask or another EVM wallet.',\n 'WALLET_NOT_FOUND'\n );\n }\n\n try {\n this.provider = new ethers.BrowserProvider(window.ethereum);\n\n // Request account access\n await this.provider.send('eth_requestAccounts', []);\n\n // Switch to target chain\n await this.switchEVMChain(chain);\n\n // Get signer and address\n this.signer = await this.provider.getSigner();\n this.connectedAddress = await this.signer.getAddress();\n this.currentChainId = chain.chainId;\n this.currentNetwork = 'evm';\n this.currentChainName = chain.name;\n\n // Setup event listeners\n this.setupEVMEventListeners();\n\n const state = this.getState();\n this.emit('connect', state);\n this.log('EVM wallet connected', { address: this.connectedAddress, chain: chain.name });\n\n return this.connectedAddress;\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || (error as { code?: number }).code === 4001) {\n throw new X402Error('Connection rejected by user', 'WALLET_CONNECTION_REJECTED');\n }\n }\n throw new X402Error(\n `Failed to connect wallet: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'UNKNOWN_ERROR',\n error\n );\n }\n }\n\n private async switchEVMChain(chain: ChainConfig): Promise<void> {\n if (!this.provider) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n try {\n await this.provider.send('wallet_switchEthereumChain', [{ chainId: chain.chainIdHex }]);\n } catch (switchError: unknown) {\n // Chain not added - try to add it\n if ((switchError as { code?: number }).code === 4902) {\n try {\n await this.provider.send('wallet_addEthereumChain', [\n {\n chainId: chain.chainIdHex,\n chainName: chain.displayName,\n nativeCurrency: chain.nativeCurrency,\n rpcUrls: [chain.rpcUrl],\n blockExplorerUrls: [chain.explorerUrl],\n },\n ]);\n } catch (addError) {\n throw new X402Error(\n `Failed to add ${chain.displayName} network`,\n 'CHAIN_SWITCH_REJECTED',\n addError\n );\n }\n } else if ((switchError as { code?: number }).code === 4001) {\n throw new X402Error('Network switch rejected by user', 'CHAIN_SWITCH_REJECTED');\n } else {\n throw new X402Error(\n `Failed to switch to ${chain.displayName}`,\n 'CHAIN_SWITCH_REJECTED',\n switchError\n );\n }\n }\n\n this.currentChainId = chain.chainId;\n this.currentChainName = chain.name;\n this.emit('chainChanged', { chainId: chain.chainId, chainName: chain.name });\n }\n\n private setupEVMEventListeners(): void {\n if (typeof window === 'undefined' || !window.ethereum) return;\n\n window.ethereum.on?.('accountsChanged', ((...args: unknown[]) => {\n const accounts = args[0] as string[];\n if (accounts.length === 0) {\n this.disconnect();\n } else if (accounts[0] !== this.connectedAddress) {\n this.connectedAddress = accounts[0];\n this.emit('accountChanged', { address: accounts[0] });\n }\n }) as (...args: unknown[]) => void);\n\n window.ethereum.on?.('chainChanged', ((...args: unknown[]) => {\n const chainIdHex = args[0] as string;\n const chainId = parseInt(chainIdHex, 16);\n const chain = getChainById(chainId);\n if (chain) {\n this.currentChainId = chainId;\n this.currentChainName = chain.name;\n this.emit('chainChanged', { chainId, chainName: chain.name });\n }\n }) as (...args: unknown[]) => void);\n }\n\n // ============================================================================\n // PRIVATE - EVM Payment Creation\n // ============================================================================\n\n private async createEVMPayment(paymentInfo: PaymentInfo, chain: ChainConfig): Promise<PaymentResult> {\n if (!this.signer) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n // Get recipient address for EVM\n const recipient = this.getRecipientForNetwork(paymentInfo, 'evm');\n\n // Generate random nonce\n const nonceBytes = new Uint8Array(32);\n if (typeof window !== 'undefined' && window.crypto) {\n window.crypto.getRandomValues(nonceBytes);\n } else {\n for (let i = 0; i < 32; i++) {\n nonceBytes[i] = Math.floor(Math.random() * 256);\n }\n }\n const nonce = ethers.hexlify(nonceBytes);\n\n // Set validity window (5 minutes for congested networks, 1 minute otherwise)\n const validAfter = 0;\n const validityWindowSeconds = chain.name === 'base' ? 300 : 60;\n const validBefore = Math.floor(Date.now() / 1000) + validityWindowSeconds;\n\n // EIP-712 domain\n const domain = {\n name: chain.usdc.name,\n version: chain.usdc.version,\n chainId: chain.chainId,\n verifyingContract: chain.usdc.address,\n };\n\n // EIP-712 types for TransferWithAuthorization (ERC-3009)\n const types = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n };\n\n // Parse amount\n const value = ethers.parseUnits(paymentInfo.amount, chain.usdc.decimals);\n const from = await this.signer.getAddress();\n const to = ethers.getAddress(recipient);\n\n // Message to sign\n const message = {\n from,\n to,\n value,\n validAfter,\n validBefore,\n nonce,\n };\n\n this.log('Signing EIP-712 message...', { domain, message });\n\n // Sign the EIP-712 message\n let signature: string;\n try {\n signature = await this.signer.signTypedData(domain, types, message);\n } catch (error: unknown) {\n if (error instanceof Error && (error.message.includes('User rejected') || (error as { code?: number }).code === 4001)) {\n throw new X402Error('Signature rejected by user', 'SIGNATURE_REJECTED');\n }\n throw new X402Error(\n `Failed to sign payment: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'PAYMENT_FAILED',\n error\n );\n }\n\n const sig = ethers.Signature.from(signature);\n\n // Construct payload\n const payload: EVMPaymentPayload = {\n from,\n to,\n value: value.toString(),\n validAfter,\n validBefore,\n nonce,\n v: sig.v,\n r: sig.r,\n s: sig.s,\n chainId: chain.chainId,\n token: chain.usdc.address,\n };\n\n // Encode as X-PAYMENT header\n const paymentHeader = this.encodeEVMPaymentHeader(payload, chain);\n\n this.emit('paymentSigned', { paymentHeader });\n\n const result: PaymentResult = {\n success: true,\n paymentHeader,\n network: chain.name,\n payer: from,\n };\n\n this.emit('paymentCompleted', result);\n this.log('Payment created successfully', { network: chain.name, from });\n\n return result;\n }\n\n private encodeEVMPaymentHeader(payload: EVMPaymentPayload, chain: ChainConfig): string {\n // Reconstruct full signature from v, r, s\n const fullSignature = payload.r + payload.s.slice(2) + payload.v.toString(16).padStart(2, '0');\n\n // Format in x402 standard format\n const x402Payload = {\n x402Version: 1,\n scheme: 'exact',\n network: chain.name,\n payload: {\n signature: fullSignature,\n authorization: {\n from: payload.from,\n to: payload.to,\n value: payload.value,\n validAfter: payload.validAfter.toString(),\n validBefore: payload.validBefore.toString(),\n nonce: payload.nonce,\n },\n },\n };\n\n // Base64 encode\n const jsonString = JSON.stringify(x402Payload);\n return btoa(jsonString);\n }\n\n // ============================================================================\n // PRIVATE - EVM Balance Check\n // ============================================================================\n\n private async getEVMBalance(chain: ChainConfig): Promise<string> {\n // Use public RPC for balance check (more reliable than wallet provider)\n const publicProvider = new ethers.JsonRpcProvider(chain.rpcUrl);\n\n const usdcAbi = ['function balanceOf(address owner) view returns (uint256)'];\n const usdcContract = new ethers.Contract(chain.usdc.address, usdcAbi, publicProvider);\n\n try {\n const balance = await usdcContract.balanceOf(this.connectedAddress);\n const formatted = ethers.formatUnits(balance, chain.usdc.decimals);\n return parseFloat(formatted).toFixed(2);\n } catch {\n return '0.00';\n }\n }\n\n // ============================================================================\n // PRIVATE - Utilities\n // ============================================================================\n\n private getRecipientForNetwork(paymentInfo: PaymentInfo, network: NetworkType): string {\n // Map SVM to solana for recipient lookup\n const lookupNetwork = network === 'svm' ? 'solana' : network;\n const recipients = paymentInfo.recipients as Record<string, string> | undefined;\n if (recipients?.[lookupNetwork]) {\n return recipients[lookupNetwork];\n }\n return paymentInfo.recipient;\n }\n\n private emit<E extends X402Event>(event: E, data: X402EventData[E]): void {\n this.eventHandlers.get(event)?.forEach(handler => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in ${event} handler:`, error);\n }\n });\n }\n\n private log(message: string, data?: unknown): void {\n if (this.config.debug) {\n console.log(`[X402Client] ${message}`, data ?? '');\n }\n }\n}\n\n// Type augmentation for window.ethereum\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n removeListener?: (event: string, handler: (...args: unknown[]) => void) => void;\n };\n }\n}\n","/**\n * uvd-x402-sdk - React Hooks\n *\n * Provides React hooks for easy integration with x402 payments.\n *\n * @example\n * ```tsx\n * import { X402Provider, useX402, useBalance, usePayment } from 'uvd-x402-sdk/react';\n *\n * function App() {\n * return (\n * <X402Provider config={{ defaultChain: 'base' }}>\n * <PaymentButton amount=\"10.00\" recipient=\"0x...\" />\n * </X402Provider>\n * );\n * }\n *\n * function PaymentButton({ amount, recipient }) {\n * const { connect, isConnected, address } = useX402();\n * const { balance, isLoading: balanceLoading } = useBalance();\n * const { pay, isPaying } = usePayment();\n *\n * if (!isConnected) {\n * return <button onClick={() => connect('base')}>Connect Wallet</button>;\n * }\n *\n * return (\n * <button\n * onClick={() => pay({ amount, recipient })}\n * disabled={isPaying}\n * >\n * Pay ${amount} USDC\n * </button>\n * );\n * }\n * ```\n */\n\nimport { createContext, useContext, useCallback, useState, useEffect, useMemo, type ReactNode } from 'react';\nimport { X402Client } from '../client';\nimport type {\n X402ClientConfig,\n WalletState,\n PaymentInfo,\n PaymentResult,\n ChainConfig,\n NetworkBalance,\n} from '../types';\nimport { getEnabledChains, getChainByName } from '../chains';\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\ninterface X402ContextValue {\n client: X402Client;\n state: WalletState;\n connect: (chainName?: string) => Promise<string>;\n disconnect: () => Promise<void>;\n switchChain: (chainName: string) => Promise<void>;\n getBalance: () => Promise<string>;\n}\n\nconst X402Context = createContext<X402ContextValue | null>(null);\n\n// ============================================================================\n// PROVIDER\n// ============================================================================\n\ninterface X402ProviderProps {\n children: ReactNode;\n config?: X402ClientConfig;\n}\n\n/**\n * X402Provider - Context provider for x402 SDK\n *\n * Wrap your app with this provider to use the x402 hooks.\n */\nexport function X402Provider({ children, config }: X402ProviderProps) {\n const [client] = useState(() => new X402Client(config));\n const [state, setState] = useState<WalletState>(() => client.getState());\n\n useEffect(() => {\n // Subscribe to events\n const unsubConnect = client.on('connect', (newState) => {\n setState(newState);\n });\n\n const unsubDisconnect = client.on('disconnect', () => {\n setState(client.getState());\n });\n\n const unsubChainChanged = client.on('chainChanged', () => {\n setState(client.getState());\n });\n\n const unsubAccountChanged = client.on('accountChanged', () => {\n setState(client.getState());\n });\n\n return () => {\n unsubConnect();\n unsubDisconnect();\n unsubChainChanged();\n unsubAccountChanged();\n };\n }, [client]);\n\n const connect = useCallback(\n async (chainName?: string) => {\n const address = await client.connect(chainName);\n setState(client.getState());\n return address;\n },\n [client]\n );\n\n const disconnect = useCallback(async () => {\n await client.disconnect();\n setState(client.getState());\n }, [client]);\n\n const switchChain = useCallback(\n async (chainName: string) => {\n await client.switchChain(chainName);\n setState(client.getState());\n },\n [client]\n );\n\n const getBalance = useCallback(() => client.getBalance(), [client]);\n\n const value = useMemo(\n () => ({\n client,\n state,\n connect,\n disconnect,\n switchChain,\n getBalance,\n }),\n [client, state, connect, disconnect, switchChain, getBalance]\n );\n\n return <X402Context.Provider value={value}>{children}</X402Context.Provider>;\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\n/**\n * useX402 - Main hook for x402 functionality\n *\n * Returns wallet state and connection methods.\n */\nexport function useX402() {\n const context = useContext(X402Context);\n if (!context) {\n throw new Error('useX402 must be used within an X402Provider');\n }\n\n const { client, state, connect, disconnect, switchChain, getBalance } = context;\n\n return {\n // State\n isConnected: state.connected,\n address: state.address,\n chainId: state.chainId,\n network: state.network,\n networkType: state.networkType,\n\n // Methods\n connect,\n disconnect,\n switchChain,\n getBalance,\n\n // Client access for advanced usage\n client,\n };\n}\n\n/**\n * useBalance - Hook for USDC balance management\n */\nexport function useBalance() {\n const { client, isConnected, network } = useX402();\n const [balance, setBalance] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchBalance = useCallback(async () => {\n if (!isConnected) {\n setBalance(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const bal = await client.getBalance();\n setBalance(bal);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch balance');\n setBalance(null);\n } finally {\n setIsLoading(false);\n }\n }, [client, isConnected]);\n\n // Auto-fetch on connection/network change\n useEffect(() => {\n fetchBalance();\n }, [fetchBalance, network]);\n\n return {\n balance,\n isLoading,\n error,\n refetch: fetchBalance,\n };\n}\n\n/**\n * usePayment - Hook for creating payments\n */\nexport function usePayment() {\n const { client, isConnected } = useX402();\n const [isPaying, setIsPaying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [lastResult, setLastResult] = useState<PaymentResult | null>(null);\n\n const pay = useCallback(\n async (paymentInfo: PaymentInfo): Promise<PaymentResult> => {\n if (!isConnected) {\n throw new Error('Wallet not connected');\n }\n\n setIsPaying(true);\n setError(null);\n\n try {\n const result = await client.createPayment(paymentInfo);\n setLastResult(result);\n return result;\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Payment failed';\n setError(message);\n throw err;\n } finally {\n setIsPaying(false);\n }\n },\n [client, isConnected]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setLastResult(null);\n }, []);\n\n return {\n pay,\n isPaying,\n error,\n lastResult,\n reset,\n };\n}\n\n/**\n * useChains - Hook for chain information\n */\nexport function useChains() {\n const { network: currentNetwork } = useX402();\n\n const chains = useMemo(() => getEnabledChains(), []);\n\n const currentChain = useMemo(\n () => (currentNetwork ? getChainByName(currentNetwork) : null),\n [currentNetwork]\n );\n\n const evmChains = useMemo(\n () => chains.filter((c) => c.networkType === 'evm'),\n [chains]\n );\n\n const nonEvmChains = useMemo(\n () => chains.filter((c) => c.networkType !== 'evm'),\n [chains]\n );\n\n return {\n chains,\n currentChain,\n evmChains,\n nonEvmChains,\n getChain: getChainByName,\n };\n}\n\n/**\n * useNetworkBalances - Hook for fetching balances across all networks\n */\nexport function useNetworkBalances() {\n const { address, isConnected, networkType } = useX402();\n const [balances, setBalances] = useState<Map<string, NetworkBalance>>(new Map());\n const [isLoading, setIsLoading] = useState(false);\n\n const fetchAllBalances = useCallback(async () => {\n if (!isConnected || !address) {\n setBalances(new Map());\n return;\n }\n\n setIsLoading(true);\n const chains = getEnabledChains();\n\n // Filter to compatible chains\n const compatibleChains = chains.filter((chain) => {\n // EVM address starts with 0x\n if (address.startsWith('0x')) {\n return chain.networkType === 'evm';\n }\n // Otherwise match by network type\n return chain.networkType === networkType;\n });\n\n const newBalances = new Map<string, NetworkBalance>();\n\n // Initialize loading states\n compatibleChains.forEach((chain) => {\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: null,\n isLoading: true,\n error: null,\n });\n });\n setBalances(new Map(newBalances));\n\n // Fetch in parallel\n await Promise.allSettled(\n compatibleChains.map(async (chain) => {\n try {\n const provider = new (await import('ethers')).JsonRpcProvider(chain.rpcUrl);\n const usdcAbi = ['function balanceOf(address) view returns (uint256)'];\n const contract = new (await import('ethers')).Contract(\n chain.usdc.address,\n usdcAbi,\n provider\n );\n const balance = await contract.balanceOf(address);\n const formatted = parseFloat(\n (await import('ethers')).formatUnits(balance, chain.usdc.decimals)\n ).toFixed(2);\n\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: formatted,\n isLoading: false,\n error: null,\n });\n } catch (err) {\n newBalances.set(chain.name, {\n chainName: chain.name,\n displayName: chain.displayName,\n balance: null,\n isLoading: false,\n error: err instanceof Error ? err.message : 'Failed',\n });\n }\n setBalances(new Map(newBalances));\n })\n );\n\n setIsLoading(false);\n }, [address, isConnected, networkType]);\n\n useEffect(() => {\n fetchAllBalances();\n }, [fetchAllBalances]);\n\n // Find network with highest balance\n const highestBalanceNetwork = useMemo(() => {\n let maxBalance = 0;\n let maxChain: string | null = null;\n\n balances.forEach((nb, chainName) => {\n if (nb.balance !== null && !nb.error) {\n const bal = parseFloat(nb.balance);\n if (bal > maxBalance) {\n maxBalance = bal;\n maxChain = chainName;\n }\n }\n });\n\n return maxChain;\n }, [balances]);\n\n return {\n balances,\n isLoading,\n refetch: fetchAllBalances,\n highestBalanceNetwork,\n };\n}\n\n// Re-export types for convenience\nexport type { WalletState, PaymentInfo, PaymentResult, ChainConfig, NetworkBalance };\n"]}
|