uvd-x402-sdk 2.2.2 → 2.4.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/dist/adapters/index.d.mts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +83 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +83 -5
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{index-OZTSi1rJ.d.ts → index-BYX9BU79.d.ts} +1 -1
- package/dist/{index-I60aHxwu.d.mts → index-BrFeSWKm.d.mts} +1 -1
- package/dist/{index-BG738nMY.d.mts → index-DR2vXt-c.d.mts} +2 -1
- package/dist/{index-BG738nMY.d.ts → index-DR2vXt-c.d.ts} +2 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +247 -139
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +246 -140
- package/dist/index.mjs.map +1 -1
- package/dist/providers/evm/index.d.mts +1 -1
- package/dist/providers/evm/index.d.ts +1 -1
- package/dist/providers/evm/index.js +83 -5
- package/dist/providers/evm/index.js.map +1 -1
- package/dist/providers/evm/index.mjs +83 -5
- 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 +24 -5
- package/dist/providers/solana/index.js.map +1 -1
- package/dist/providers/solana/index.mjs +24 -5
- 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 +83 -5
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +83 -5
- package/dist/react/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +31 -2
- package/dist/utils/index.d.ts +31 -2
- package/dist/utils/index.js +125 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +124 -6
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/adapters/wagmi.ts +4 -1
- package/src/chains/index.ts +23 -5
- package/src/client/X402Client.ts +4 -0
- package/src/index.ts +3 -0
- package/src/providers/evm/index.ts +4 -0
- package/src/types/index.ts +2 -1
- package/src/utils/index.ts +5 -0
- package/src/utils/validation.ts +151 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/types/index.ts","../../../src/providers/stellar/index.ts"],"names":[],"mappings":"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","file":"index.mjs","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 */\nexport type TokenType = 'usdc' | 'eurc' | 'ausd' | 'pyusd';\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 all supported stablecoins) */\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 - Stellar Provider\n *\n * Provides Stellar wallet connection and payment creation via Freighter.\n * Uses Soroban authorization entries for gasless USDC transfers.\n *\n * @example\n * ```ts\n * import { X402Client } from 'uvd-x402-sdk';\n * import { StellarProvider } from 'uvd-x402-sdk/stellar';\n *\n * const client = new X402Client();\n * const stellar = new StellarProvider();\n *\n * // Connect\n * const address = await stellar.connect();\n *\n * // Create payment\n * const paymentPayload = await stellar.createPayment(paymentInfo);\n * ```\n */\n\nimport type {\n ChainConfig,\n PaymentInfo,\n StellarPaymentPayload,\n WalletAdapter,\n} from '../../types';\nimport { X402Error } from '../../types';\n\n/**\n * Browser-compatible text to Uint8Array encoding\n * Avoids Node.js Buffer dependency for browser bundlers\n */\nfunction stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Browser-compatible base64 decoding to Uint8Array\n */\nfunction base64ToUint8Array(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n// Stellar configuration\nconst STELLAR_CONFIG = {\n networkPassphrase: 'Public Global Stellar Network ; September 2015',\n horizonUrl: 'https://horizon.stellar.org',\n sorobanRpcUrl: 'https://mainnet.sorobanrpc.com',\n usdcIssuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',\n};\n\n/**\n * StellarProvider - Wallet adapter for Stellar via Freighter\n */\nexport class StellarProvider implements WalletAdapter {\n readonly id = 'freighter';\n readonly name = 'Freighter';\n readonly networkType = 'stellar' as const;\n\n private publicKey: string | null = null;\n\n /**\n * Check if Freighter wallet is available\n */\n isAvailable(): boolean {\n if (typeof window === 'undefined') return false;\n // Check for Freighter global\n return typeof (window as Window & { freighter?: unknown }).freighter !== 'undefined';\n }\n\n /**\n * Connect to Freighter wallet\n */\n async connect(): Promise<string> {\n const freighterApi = await this.getFreighterApi();\n\n try {\n // Check if Freighter is connected\n const connectionResult = await freighterApi.isConnected();\n if (!connectionResult.isConnected) {\n throw new X402Error(\n 'Freighter wallet not installed. Please install from freighter.app',\n 'WALLET_NOT_FOUND'\n );\n }\n\n // Request access\n const accessResult = await freighterApi.requestAccess();\n if (accessResult.error) {\n throw new X402Error(accessResult.error, 'WALLET_CONNECTION_REJECTED');\n }\n\n // Get address\n const addressResult = await freighterApi.getAddress();\n if (addressResult.error) {\n throw new X402Error(addressResult.error, 'WALLET_CONNECTION_REJECTED');\n }\n\n const address = addressResult.address;\n if (!address) {\n throw new X402Error('Failed to get Stellar public key', 'WALLET_CONNECTION_REJECTED');\n }\n\n // Validate format (G... public key)\n if (!address.startsWith('G') || address.length !== 56) {\n throw new X402Error('Invalid Stellar public key format', 'WALLET_CONNECTION_REJECTED');\n }\n\n this.publicKey = address;\n return address;\n } catch (error: unknown) {\n if (error instanceof X402Error) throw error;\n\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || error.message.includes('cancelled')) {\n throw new X402Error('Connection rejected by user', 'WALLET_CONNECTION_REJECTED');\n }\n }\n\n throw new X402Error(\n `Failed to connect Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'UNKNOWN_ERROR',\n error\n );\n }\n }\n\n /**\n * Disconnect from Freighter\n */\n async disconnect(): Promise<void> {\n this.publicKey = null;\n }\n\n /**\n * Get current address\n */\n getAddress(): string | null {\n return this.publicKey;\n }\n\n /**\n * Get USDC balance\n */\n async getBalance(_chainConfig: ChainConfig): Promise<string> {\n if (!this.publicKey) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n try {\n const response = await fetch(\n `${STELLAR_CONFIG.horizonUrl}/accounts/${this.publicKey}`\n );\n\n if (!response.ok) {\n if (response.status === 404) {\n // Account not activated\n return '0.00';\n }\n throw new Error('Failed to fetch Stellar account');\n }\n\n const account = await response.json();\n\n // Find USDC balance\n const usdcBalance = account.balances.find(\n (b: { asset_code?: string; asset_issuer?: string }) =>\n b.asset_code === 'USDC' && b.asset_issuer === STELLAR_CONFIG.usdcIssuer\n );\n\n if (!usdcBalance) {\n return '0.00';\n }\n\n const balance = parseFloat(usdcBalance.balance);\n return balance.toFixed(2);\n } catch {\n return '0.00';\n }\n }\n\n /**\n * Create Stellar payment (Soroban authorization entry)\n *\n * User signs an authorization that proves they authorized the USDC transfer.\n * Facilitator wraps this in a fee-bump transaction and pays all XLM network fees.\n */\n async signPayment(paymentInfo: PaymentInfo, chainConfig: ChainConfig): Promise<string> {\n if (!this.publicKey) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n const freighterApi = await this.getFreighterApi();\n const stellarSdk = await import('@stellar/stellar-sdk');\n const { Address, xdr, StrKey, nativeToScVal, hash, Networks } = stellarSdk;\n\n // Get recipient\n const recipient = paymentInfo.recipients?.stellar || paymentInfo.recipient;\n\n // Parse amount (7 decimals for Stellar USDC)\n const amountStroops = Math.floor(parseFloat(paymentInfo.amount) * 10_000_000);\n\n try {\n // Get current ledger from Soroban RPC\n const rpcResponse = await fetch(STELLAR_CONFIG.sorobanRpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestLedger',\n }),\n });\n\n const rpcData = await rpcResponse.json();\n if (rpcData.error) {\n throw new Error(`Soroban RPC error: ${rpcData.error.message}`);\n }\n\n const currentLedger = rpcData.result.sequence;\n const signatureExpirationLedger = currentLedger + 60; // ~5 minutes\n\n // Generate random nonce\n const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);\n\n // Build authorization for transfer(from, to, amount)\n const fromAddress = new Address(this.publicKey);\n const toAddress = new Address(recipient);\n const amountScVal = nativeToScVal(BigInt(amountStroops), { type: 'i128' });\n\n const args = [fromAddress.toScVal(), toAddress.toScVal(), amountScVal];\n\n // Create contract address\n const contractIdBytes = StrKey.decodeContract(chainConfig.usdc.address);\n // @ts-ignore - Stellar SDK accepts Uint8Array\n const contractScAddress = Address.contract(contractIdBytes).toScAddress();\n\n // Build authorized invocation\n const contractFn = new xdr.InvokeContractArgs({\n contractAddress: contractScAddress,\n functionName: 'transfer',\n args: args,\n });\n\n const invocation = new xdr.SorobanAuthorizedInvocation({\n function: xdr.SorobanAuthorizedFunction.sorobanAuthorizedFunctionTypeContractFn(contractFn),\n subInvocations: [],\n });\n\n // Build HashIdPreimageSorobanAuthorization for signing\n // Cast to Buffer for hash() - Uint8Array is compatible at runtime\n const networkId = hash(stringToUint8Array(Networks.PUBLIC) as unknown as Buffer);\n\n const preimageData = new xdr.HashIdPreimageSorobanAuthorization({\n networkId: networkId,\n nonce: xdr.Int64.fromString(nonce.toString()),\n signatureExpirationLedger: signatureExpirationLedger,\n invocation: invocation,\n });\n\n const hashIdPreimage = xdr.HashIdPreimage.envelopeTypeSorobanAuthorization(preimageData);\n const preimageXdr = hashIdPreimage.toXDR('base64');\n\n // Sign with Freighter\n const signResult = await freighterApi.signAuthEntry(preimageXdr, {\n networkPassphrase: STELLAR_CONFIG.networkPassphrase,\n });\n\n if (signResult.error) {\n throw new X402Error(signResult.error, 'SIGNATURE_REJECTED');\n }\n\n if (!signResult.signedAuthEntry) {\n throw new X402Error('Freighter did not return signed auth entry', 'PAYMENT_FAILED');\n }\n\n // Build the signed SorobanAuthorizationEntry\n const signatureBytes = base64ToUint8Array(signResult.signedAuthEntry);\n const publicKeyBytes = StrKey.decodeEd25519PublicKey(this.publicKey);\n\n const sigMapEntries = [\n new xdr.ScMapEntry({\n key: xdr.ScVal.scvSymbol('public_key'),\n val: xdr.ScVal.scvBytes(publicKeyBytes),\n }),\n new xdr.ScMapEntry({\n key: xdr.ScVal.scvSymbol('signature'),\n val: xdr.ScVal.scvBytes(signatureBytes as unknown as Buffer),\n }),\n ];\n\n const signatureScVal = xdr.ScVal.scvVec([xdr.ScVal.scvMap(sigMapEntries)]);\n\n const signedAddressCredentials = new xdr.SorobanAddressCredentials({\n address: fromAddress.toScAddress(),\n nonce: xdr.Int64.fromString(nonce.toString()),\n signatureExpirationLedger: signatureExpirationLedger,\n signature: signatureScVal,\n });\n\n const signedCredentials = xdr.SorobanCredentials.sorobanCredentialsAddress(signedAddressCredentials);\n const signedAuthEntry = new xdr.SorobanAuthorizationEntry({\n credentials: signedCredentials,\n rootInvocation: invocation,\n });\n\n const authorizationEntryXdr = signedAuthEntry.toXDR('base64');\n\n const payload: StellarPaymentPayload = {\n from: this.publicKey,\n to: recipient,\n amount: amountStroops.toString(),\n tokenContract: chainConfig.usdc.address,\n authorizationEntryXdr,\n nonce,\n signatureExpirationLedger,\n };\n\n return JSON.stringify(payload);\n } catch (error: unknown) {\n if (error instanceof X402Error) throw error;\n\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || error.message.includes('cancelled')) {\n throw new X402Error('Signature rejected by user', 'SIGNATURE_REJECTED');\n }\n }\n\n throw new X402Error(\n `Failed to create Stellar payment: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'PAYMENT_FAILED',\n error\n );\n }\n }\n\n /**\n * Encode Stellar payment as X-PAYMENT header\n */\n encodePaymentHeader(paymentPayload: string): string {\n const payload = JSON.parse(paymentPayload) as StellarPaymentPayload;\n\n const x402Payload = {\n x402Version: 1,\n scheme: 'exact',\n network: 'stellar',\n payload: {\n from: payload.from,\n to: payload.to,\n amount: payload.amount,\n tokenContract: payload.tokenContract,\n authorizationEntryXdr: payload.authorizationEntryXdr,\n nonce: payload.nonce,\n signatureExpirationLedger: payload.signatureExpirationLedger,\n },\n };\n\n return btoa(JSON.stringify(x402Payload));\n }\n\n // Private helpers\n\n private async getFreighterApi(): Promise<typeof import('@stellar/freighter-api')> {\n const freighterApi = await import('@stellar/freighter-api');\n return freighterApi;\n }\n}\n\nexport default StellarProvider;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/types/index.ts","../../../src/providers/stellar/index.ts"],"names":[],"mappings":"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","file":"index.mjs","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 * - usdt: Tether USD (USDT0 omnichain via LayerZero) - 6 decimals\n */\nexport type TokenType = 'usdc' | 'eurc' | 'ausd' | 'pyusd' | 'usdt';\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 all supported stablecoins) */\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 - Stellar Provider\n *\n * Provides Stellar wallet connection and payment creation via Freighter.\n * Uses Soroban authorization entries for gasless USDC transfers.\n *\n * @example\n * ```ts\n * import { X402Client } from 'uvd-x402-sdk';\n * import { StellarProvider } from 'uvd-x402-sdk/stellar';\n *\n * const client = new X402Client();\n * const stellar = new StellarProvider();\n *\n * // Connect\n * const address = await stellar.connect();\n *\n * // Create payment\n * const paymentPayload = await stellar.createPayment(paymentInfo);\n * ```\n */\n\nimport type {\n ChainConfig,\n PaymentInfo,\n StellarPaymentPayload,\n WalletAdapter,\n} from '../../types';\nimport { X402Error } from '../../types';\n\n/**\n * Browser-compatible text to Uint8Array encoding\n * Avoids Node.js Buffer dependency for browser bundlers\n */\nfunction stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n/**\n * Browser-compatible base64 decoding to Uint8Array\n */\nfunction base64ToUint8Array(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n// Stellar configuration\nconst STELLAR_CONFIG = {\n networkPassphrase: 'Public Global Stellar Network ; September 2015',\n horizonUrl: 'https://horizon.stellar.org',\n sorobanRpcUrl: 'https://mainnet.sorobanrpc.com',\n usdcIssuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',\n};\n\n/**\n * StellarProvider - Wallet adapter for Stellar via Freighter\n */\nexport class StellarProvider implements WalletAdapter {\n readonly id = 'freighter';\n readonly name = 'Freighter';\n readonly networkType = 'stellar' as const;\n\n private publicKey: string | null = null;\n\n /**\n * Check if Freighter wallet is available\n */\n isAvailable(): boolean {\n if (typeof window === 'undefined') return false;\n // Check for Freighter global\n return typeof (window as Window & { freighter?: unknown }).freighter !== 'undefined';\n }\n\n /**\n * Connect to Freighter wallet\n */\n async connect(): Promise<string> {\n const freighterApi = await this.getFreighterApi();\n\n try {\n // Check if Freighter is connected\n const connectionResult = await freighterApi.isConnected();\n if (!connectionResult.isConnected) {\n throw new X402Error(\n 'Freighter wallet not installed. Please install from freighter.app',\n 'WALLET_NOT_FOUND'\n );\n }\n\n // Request access\n const accessResult = await freighterApi.requestAccess();\n if (accessResult.error) {\n throw new X402Error(accessResult.error, 'WALLET_CONNECTION_REJECTED');\n }\n\n // Get address\n const addressResult = await freighterApi.getAddress();\n if (addressResult.error) {\n throw new X402Error(addressResult.error, 'WALLET_CONNECTION_REJECTED');\n }\n\n const address = addressResult.address;\n if (!address) {\n throw new X402Error('Failed to get Stellar public key', 'WALLET_CONNECTION_REJECTED');\n }\n\n // Validate format (G... public key)\n if (!address.startsWith('G') || address.length !== 56) {\n throw new X402Error('Invalid Stellar public key format', 'WALLET_CONNECTION_REJECTED');\n }\n\n this.publicKey = address;\n return address;\n } catch (error: unknown) {\n if (error instanceof X402Error) throw error;\n\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || error.message.includes('cancelled')) {\n throw new X402Error('Connection rejected by user', 'WALLET_CONNECTION_REJECTED');\n }\n }\n\n throw new X402Error(\n `Failed to connect Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'UNKNOWN_ERROR',\n error\n );\n }\n }\n\n /**\n * Disconnect from Freighter\n */\n async disconnect(): Promise<void> {\n this.publicKey = null;\n }\n\n /**\n * Get current address\n */\n getAddress(): string | null {\n return this.publicKey;\n }\n\n /**\n * Get USDC balance\n */\n async getBalance(_chainConfig: ChainConfig): Promise<string> {\n if (!this.publicKey) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n try {\n const response = await fetch(\n `${STELLAR_CONFIG.horizonUrl}/accounts/${this.publicKey}`\n );\n\n if (!response.ok) {\n if (response.status === 404) {\n // Account not activated\n return '0.00';\n }\n throw new Error('Failed to fetch Stellar account');\n }\n\n const account = await response.json();\n\n // Find USDC balance\n const usdcBalance = account.balances.find(\n (b: { asset_code?: string; asset_issuer?: string }) =>\n b.asset_code === 'USDC' && b.asset_issuer === STELLAR_CONFIG.usdcIssuer\n );\n\n if (!usdcBalance) {\n return '0.00';\n }\n\n const balance = parseFloat(usdcBalance.balance);\n return balance.toFixed(2);\n } catch {\n return '0.00';\n }\n }\n\n /**\n * Create Stellar payment (Soroban authorization entry)\n *\n * User signs an authorization that proves they authorized the USDC transfer.\n * Facilitator wraps this in a fee-bump transaction and pays all XLM network fees.\n */\n async signPayment(paymentInfo: PaymentInfo, chainConfig: ChainConfig): Promise<string> {\n if (!this.publicKey) {\n throw new X402Error('Wallet not connected', 'WALLET_NOT_CONNECTED');\n }\n\n const freighterApi = await this.getFreighterApi();\n const stellarSdk = await import('@stellar/stellar-sdk');\n const { Address, xdr, StrKey, nativeToScVal, hash, Networks } = stellarSdk;\n\n // Get recipient\n const recipient = paymentInfo.recipients?.stellar || paymentInfo.recipient;\n\n // Parse amount (7 decimals for Stellar USDC)\n const amountStroops = Math.floor(parseFloat(paymentInfo.amount) * 10_000_000);\n\n try {\n // Get current ledger from Soroban RPC\n const rpcResponse = await fetch(STELLAR_CONFIG.sorobanRpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestLedger',\n }),\n });\n\n const rpcData = await rpcResponse.json();\n if (rpcData.error) {\n throw new Error(`Soroban RPC error: ${rpcData.error.message}`);\n }\n\n const currentLedger = rpcData.result.sequence;\n const signatureExpirationLedger = currentLedger + 60; // ~5 minutes\n\n // Generate random nonce\n const nonce = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);\n\n // Build authorization for transfer(from, to, amount)\n const fromAddress = new Address(this.publicKey);\n const toAddress = new Address(recipient);\n const amountScVal = nativeToScVal(BigInt(amountStroops), { type: 'i128' });\n\n const args = [fromAddress.toScVal(), toAddress.toScVal(), amountScVal];\n\n // Create contract address\n const contractIdBytes = StrKey.decodeContract(chainConfig.usdc.address);\n // @ts-ignore - Stellar SDK accepts Uint8Array\n const contractScAddress = Address.contract(contractIdBytes).toScAddress();\n\n // Build authorized invocation\n const contractFn = new xdr.InvokeContractArgs({\n contractAddress: contractScAddress,\n functionName: 'transfer',\n args: args,\n });\n\n const invocation = new xdr.SorobanAuthorizedInvocation({\n function: xdr.SorobanAuthorizedFunction.sorobanAuthorizedFunctionTypeContractFn(contractFn),\n subInvocations: [],\n });\n\n // Build HashIdPreimageSorobanAuthorization for signing\n // Cast to Buffer for hash() - Uint8Array is compatible at runtime\n const networkId = hash(stringToUint8Array(Networks.PUBLIC) as unknown as Buffer);\n\n const preimageData = new xdr.HashIdPreimageSorobanAuthorization({\n networkId: networkId,\n nonce: xdr.Int64.fromString(nonce.toString()),\n signatureExpirationLedger: signatureExpirationLedger,\n invocation: invocation,\n });\n\n const hashIdPreimage = xdr.HashIdPreimage.envelopeTypeSorobanAuthorization(preimageData);\n const preimageXdr = hashIdPreimage.toXDR('base64');\n\n // Sign with Freighter\n const signResult = await freighterApi.signAuthEntry(preimageXdr, {\n networkPassphrase: STELLAR_CONFIG.networkPassphrase,\n });\n\n if (signResult.error) {\n throw new X402Error(signResult.error, 'SIGNATURE_REJECTED');\n }\n\n if (!signResult.signedAuthEntry) {\n throw new X402Error('Freighter did not return signed auth entry', 'PAYMENT_FAILED');\n }\n\n // Build the signed SorobanAuthorizationEntry\n const signatureBytes = base64ToUint8Array(signResult.signedAuthEntry);\n const publicKeyBytes = StrKey.decodeEd25519PublicKey(this.publicKey);\n\n const sigMapEntries = [\n new xdr.ScMapEntry({\n key: xdr.ScVal.scvSymbol('public_key'),\n val: xdr.ScVal.scvBytes(publicKeyBytes),\n }),\n new xdr.ScMapEntry({\n key: xdr.ScVal.scvSymbol('signature'),\n val: xdr.ScVal.scvBytes(signatureBytes as unknown as Buffer),\n }),\n ];\n\n const signatureScVal = xdr.ScVal.scvVec([xdr.ScVal.scvMap(sigMapEntries)]);\n\n const signedAddressCredentials = new xdr.SorobanAddressCredentials({\n address: fromAddress.toScAddress(),\n nonce: xdr.Int64.fromString(nonce.toString()),\n signatureExpirationLedger: signatureExpirationLedger,\n signature: signatureScVal,\n });\n\n const signedCredentials = xdr.SorobanCredentials.sorobanCredentialsAddress(signedAddressCredentials);\n const signedAuthEntry = new xdr.SorobanAuthorizationEntry({\n credentials: signedCredentials,\n rootInvocation: invocation,\n });\n\n const authorizationEntryXdr = signedAuthEntry.toXDR('base64');\n\n const payload: StellarPaymentPayload = {\n from: this.publicKey,\n to: recipient,\n amount: amountStroops.toString(),\n tokenContract: chainConfig.usdc.address,\n authorizationEntryXdr,\n nonce,\n signatureExpirationLedger,\n };\n\n return JSON.stringify(payload);\n } catch (error: unknown) {\n if (error instanceof X402Error) throw error;\n\n if (error instanceof Error) {\n if (error.message.includes('User rejected') || error.message.includes('cancelled')) {\n throw new X402Error('Signature rejected by user', 'SIGNATURE_REJECTED');\n }\n }\n\n throw new X402Error(\n `Failed to create Stellar payment: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'PAYMENT_FAILED',\n error\n );\n }\n }\n\n /**\n * Encode Stellar payment as X-PAYMENT header\n */\n encodePaymentHeader(paymentPayload: string): string {\n const payload = JSON.parse(paymentPayload) as StellarPaymentPayload;\n\n const x402Payload = {\n x402Version: 1,\n scheme: 'exact',\n network: 'stellar',\n payload: {\n from: payload.from,\n to: payload.to,\n amount: payload.amount,\n tokenContract: payload.tokenContract,\n authorizationEntryXdr: payload.authorizationEntryXdr,\n nonce: payload.nonce,\n signatureExpirationLedger: payload.signatureExpirationLedger,\n },\n };\n\n return btoa(JSON.stringify(x402Payload));\n }\n\n // Private helpers\n\n private async getFreighterApi(): Promise<typeof import('@stellar/freighter-api')> {\n const freighterApi = await import('@stellar/freighter-api');\n return freighterApi;\n }\n}\n\nexport default StellarProvider;\n"]}
|
package/dist/react/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as X402ClientConfig, a as NetworkType, P as PaymentInfo, f as PaymentResult, C as ChainConfig, u as NetworkBalance } from '../index-
|
|
2
|
-
export { W as WalletState } from '../index-
|
|
1
|
+
import { t as X402ClientConfig, a as NetworkType, P as PaymentInfo, f as PaymentResult, C as ChainConfig, u as NetworkBalance } from '../index-DR2vXt-c.mjs';
|
|
2
|
+
export { W as WalletState } from '../index-DR2vXt-c.mjs';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
|
-
import { X as X402Client, b as getChainByName } from '../index-
|
|
5
|
+
import { X as X402Client, b as getChainByName } from '../index-BrFeSWKm.mjs';
|
|
6
6
|
|
|
7
7
|
interface X402ProviderProps {
|
|
8
8
|
children: ReactNode;
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as X402ClientConfig, a as NetworkType, P as PaymentInfo, f as PaymentResult, C as ChainConfig, u as NetworkBalance } from '../index-
|
|
2
|
-
export { W as WalletState } from '../index-
|
|
1
|
+
import { t as X402ClientConfig, a as NetworkType, P as PaymentInfo, f as PaymentResult, C as ChainConfig, u as NetworkBalance } from '../index-DR2vXt-c.js';
|
|
2
|
+
export { W as WalletState } from '../index-DR2vXt-c.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
|
-
import { X as X402Client, b as getChainByName } from '../index-
|
|
5
|
+
import { X as X402Client, b as getChainByName } from '../index-BYX9BU79.js';
|
|
6
6
|
|
|
7
7
|
interface X402ProviderProps {
|
|
8
8
|
children: ReactNode;
|
package/dist/react/index.js
CHANGED
|
@@ -130,7 +130,7 @@ var SUPPORTED_CHAINS = {
|
|
|
130
130
|
ausd: {
|
|
131
131
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
132
132
|
decimals: 6,
|
|
133
|
-
name: "
|
|
133
|
+
name: "Agora Dollar",
|
|
134
134
|
version: "1"
|
|
135
135
|
}
|
|
136
136
|
},
|
|
@@ -174,7 +174,7 @@ var SUPPORTED_CHAINS = {
|
|
|
174
174
|
ausd: {
|
|
175
175
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
176
176
|
decimals: 6,
|
|
177
|
-
name: "
|
|
177
|
+
name: "Agora Dollar",
|
|
178
178
|
version: "1"
|
|
179
179
|
},
|
|
180
180
|
pyusd: {
|
|
@@ -218,7 +218,7 @@ var SUPPORTED_CHAINS = {
|
|
|
218
218
|
ausd: {
|
|
219
219
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
220
220
|
decimals: 6,
|
|
221
|
-
name: "
|
|
221
|
+
name: "Agora Dollar",
|
|
222
222
|
version: "1"
|
|
223
223
|
}
|
|
224
224
|
},
|
|
@@ -256,7 +256,13 @@ var SUPPORTED_CHAINS = {
|
|
|
256
256
|
ausd: {
|
|
257
257
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
258
258
|
decimals: 6,
|
|
259
|
-
name: "
|
|
259
|
+
name: "Agora Dollar",
|
|
260
|
+
version: "1"
|
|
261
|
+
},
|
|
262
|
+
usdt: {
|
|
263
|
+
address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
|
|
264
|
+
decimals: 6,
|
|
265
|
+
name: "USD\u20AE0",
|
|
260
266
|
version: "1"
|
|
261
267
|
}
|
|
262
268
|
},
|
|
@@ -290,6 +296,12 @@ var SUPPORTED_CHAINS = {
|
|
|
290
296
|
decimals: 6,
|
|
291
297
|
name: "USD Coin",
|
|
292
298
|
version: "2"
|
|
299
|
+
},
|
|
300
|
+
usdt: {
|
|
301
|
+
address: "0x01bff41798a0bcf287b996046ca68b395dbc1071",
|
|
302
|
+
decimals: 6,
|
|
303
|
+
name: "USD\u20AE0",
|
|
304
|
+
version: "1"
|
|
293
305
|
}
|
|
294
306
|
},
|
|
295
307
|
x402: {
|
|
@@ -324,6 +336,13 @@ var SUPPORTED_CHAINS = {
|
|
|
324
336
|
name: "USDC",
|
|
325
337
|
// Celo uses "USDC" not "USD Coin" for EIP-712
|
|
326
338
|
version: "2"
|
|
339
|
+
},
|
|
340
|
+
usdt: {
|
|
341
|
+
address: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
|
|
342
|
+
decimals: 6,
|
|
343
|
+
name: "Tether USD",
|
|
344
|
+
// Celo USDT uses "Tether USD" for EIP-712
|
|
345
|
+
version: "1"
|
|
327
346
|
}
|
|
328
347
|
},
|
|
329
348
|
x402: {
|
|
@@ -430,7 +449,7 @@ var SUPPORTED_CHAINS = {
|
|
|
430
449
|
ausd: {
|
|
431
450
|
address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
|
|
432
451
|
decimals: 6,
|
|
433
|
-
name: "
|
|
452
|
+
name: "Agora Dollar",
|
|
434
453
|
version: "1"
|
|
435
454
|
}
|
|
436
455
|
},
|
|
@@ -567,6 +586,64 @@ function getEnabledChains() {
|
|
|
567
586
|
return Object.values(SUPPORTED_CHAINS).filter((chain) => chain.x402.enabled);
|
|
568
587
|
}
|
|
569
588
|
|
|
589
|
+
// src/utils/validation.ts
|
|
590
|
+
var ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
|
|
591
|
+
var SOLANA_ADDRESS_REGEX = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
|
|
592
|
+
var STELLAR_ADDRESS_REGEX = /^G[A-Z2-7]{55}$/;
|
|
593
|
+
var NEAR_ADDRESS_REGEX = /^[a-z0-9._-]+$/;
|
|
594
|
+
function validateRecipient(recipient, networkType) {
|
|
595
|
+
if (!recipient) {
|
|
596
|
+
throw new X402Error(
|
|
597
|
+
"Recipient address is required. The payTo/recipient field cannot be empty. Please provide a valid recipient address where payments should be sent.",
|
|
598
|
+
"INVALID_RECIPIENT"
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
const trimmed = recipient.trim();
|
|
602
|
+
if (trimmed === "") {
|
|
603
|
+
throw new X402Error(
|
|
604
|
+
"Recipient address cannot be empty or whitespace. Please provide a valid recipient address.",
|
|
605
|
+
"INVALID_RECIPIENT"
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
{
|
|
609
|
+
switch (networkType) {
|
|
610
|
+
case "evm":
|
|
611
|
+
if (!ETH_ADDRESS_REGEX.test(trimmed)) {
|
|
612
|
+
throw new X402Error(
|
|
613
|
+
`Invalid EVM recipient address: "${trimmed}". Expected a 40-character hexadecimal address starting with 0x.`,
|
|
614
|
+
"INVALID_RECIPIENT"
|
|
615
|
+
);
|
|
616
|
+
}
|
|
617
|
+
break;
|
|
618
|
+
case "svm":
|
|
619
|
+
case "solana":
|
|
620
|
+
if (!SOLANA_ADDRESS_REGEX.test(trimmed)) {
|
|
621
|
+
throw new X402Error(
|
|
622
|
+
`Invalid Solana recipient address: "${trimmed}". Expected a base58-encoded public key (32-44 characters).`,
|
|
623
|
+
"INVALID_RECIPIENT"
|
|
624
|
+
);
|
|
625
|
+
}
|
|
626
|
+
break;
|
|
627
|
+
case "stellar":
|
|
628
|
+
if (!STELLAR_ADDRESS_REGEX.test(trimmed)) {
|
|
629
|
+
throw new X402Error(
|
|
630
|
+
`Invalid Stellar recipient address: "${trimmed}". Expected a G-prefixed public key (56 characters).`,
|
|
631
|
+
"INVALID_RECIPIENT"
|
|
632
|
+
);
|
|
633
|
+
}
|
|
634
|
+
break;
|
|
635
|
+
case "near":
|
|
636
|
+
if (!NEAR_ADDRESS_REGEX.test(trimmed) || trimmed.length > 64) {
|
|
637
|
+
throw new X402Error(
|
|
638
|
+
`Invalid NEAR recipient address: "${trimmed}". Expected a valid NEAR account ID.`,
|
|
639
|
+
"INVALID_RECIPIENT"
|
|
640
|
+
);
|
|
641
|
+
}
|
|
642
|
+
break;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
570
647
|
// src/client/X402Client.ts
|
|
571
648
|
var X402Client = class {
|
|
572
649
|
// Configuration
|
|
@@ -917,6 +994,7 @@ var X402Client = class {
|
|
|
917
994
|
throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
|
|
918
995
|
}
|
|
919
996
|
const recipient = this.getRecipientForNetwork(paymentInfo, "evm");
|
|
997
|
+
validateRecipient(recipient, "evm");
|
|
920
998
|
const nonceBytes = new Uint8Array(32);
|
|
921
999
|
if (typeof window !== "undefined" && window.crypto) {
|
|
922
1000
|
window.crypto.getRandomValues(nonceBytes);
|