{"version":3,"sources":["../../src/types/x402-protocol.ts","../../src/utils/helpers.ts"],"names":[],"mappings":";AAQO,IAAM,oBAAA,GACX,yCAAA;AACK,IAAM,mBAAA,GACX,yCAAA;AA2BK,SAAS,gBAAgB,OAAA,EAA0B;AACxD,EAAA,OAAO,OAAA,KAAY,YAAY,OAAA,KAAY,oBAAA;AAC7C;;;AC1BA,IAAM,YAAA,GAAe,8CAAA;AACrB,IAAM,WAAA,GAAc,8CAAA;AAWb,SAAS,oBAAA,CACd,WAAA,EACA,mBAAA,EACA,WAAA,EACQ;AAER,EAAA,MAAM,oBAAoB,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,QAAA;AAAA,IAC7D;AAAA,GACF;AAGA,EAAA,MAAM,cAAA,GAAiC;AAAA,IACrC,WAAA,EAAa,CAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,GAAA,EAAK,WAAA;AAAA,MACL,WAAA,EAAc,mBAAA,CAAoB,KAAA,EAAO,WAAA,IAA0B,EAAA;AAAA,MACnE,QAAA,EACG,mBAAA,CAAoB,KAAA,EAAO,QAAA,IAAuB;AAAA,KACvD;AAAA,IACA,QAAA,EAAU,mBAAA;AAAA,IACV,OAAA,EAAS;AAAA,MACP,WAAA,EAAa;AAAA;AACf,GACF;AAGA,EAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAEnF,EAAA,OAAO,aAAA;AACT;AAUO,SAAS,sBAAA,CACd,aACA,mBAAA,EACQ;AAER,EAAA,MAAM,iBAAA,GAAoB,OAAO,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA,CAAE,SAAS,QAAQ,CAAA;AAGhF,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,WAAA,EAAa,CAAA;AAAA,IACb,QAAQ,mBAAA,CAAoB,MAAA;AAAA,IAC5B,SAAS,mBAAA,CAAoB,OAAA;AAAA,IAC7B,OAAA,EAAS;AAAA,MACP,WAAA,EAAa;AAAA;AACf,GACF;AAGA,EAAA,MAAM,gBAAgB,MAAA,CAAO,IAAA,CAAK,KAAK,SAAA,CAAU,cAAc,CAAC,CAAA,CAAE,QAAA;AAAA,IAChE;AAAA,GACF;AAEA,EAAA,OAAO,aAAA;AACT;AAOO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,IAAI,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC5B,IAAA,OAAO,qCAAA;AAAA,EACT;AACA,EAAA,OAAO,+BAAA;AACT;AAOO,SAAS,oBAAoB,OAAA,EAAyB;AAC3D,EAAA,IAAI,YAAY,oBAAA,EAAsB;AACpC,IAAA,OAAO,qCAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,mBAAA,EAAqB;AACnC,IAAA,OAAO,+BAAA;AAAA,EACT;AAEA,EAAA,OAAO,+BAAA;AACT;AAOO,SAAS,qBAAqB,OAAA,EAA6B;AAChE,EAAA,IAAI,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AACF;AAQO,SAAS,aAAA,CAAc,QAAgB,QAAA,EAA0B;AACtE,EAAA,OAAO,IAAA,CAAK,MAAM,MAAA,GAAS,IAAA,CAAK,IAAI,EAAA,EAAI,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAC9D;AAQO,SAAS,eAAA,CACd,aACA,QAAA,EACQ;AACR,EAAA,OAAO,OAAO,WAAW,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,QAAQ,CAAA;AACpD","file":"index.mjs","sourcesContent":["import type { Network } from \"@payai/x402/types\";\n\n/**\n * Solana-specific x402 Protocol Types (v2)\n * These are Solana-only variants of x402 protocol types\n */\n\n// CAIP-2 network identifiers for Solana\nexport const SOLANA_MAINNET_CAIP2 =\n  \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\" as const;\nexport const SOLANA_DEVNET_CAIP2 =\n  \"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1\" as const;\n\n/**\n * Solana network type - supports both simple and CAIP-2 formats\n * Simple: \"solana\" | \"solana-devnet\" (for user-facing config)\n * CAIP-2: \"solana:chainId\" (used in protocol)\n */\nexport type SolanaNetworkSimple = \"solana\" | \"solana-devnet\";\nexport type SolanaNetworkCAIP2 =\n  | typeof SOLANA_MAINNET_CAIP2\n  | typeof SOLANA_DEVNET_CAIP2;\nexport type SolanaNetwork = SolanaNetworkSimple | SolanaNetworkCAIP2;\n\n/**\n * Check if a network string is a Solana network (any format)\n */\nexport function isSolanaNetwork(network: string): network is SolanaNetwork {\n  return (\n    network === \"solana\" ||\n    network === \"solana-devnet\" ||\n    network.startsWith(\"solana:\")\n  );\n}\n\n/**\n * Check if network is mainnet\n */\nexport function isSolanaMainnet(network: string): boolean {\n  return network === \"solana\" || network === SOLANA_MAINNET_CAIP2;\n}\n\n/**\n * Check if network is devnet\n */\nexport function isSolanaDevnet(network: string): boolean {\n  return network === \"solana-devnet\" || network === SOLANA_DEVNET_CAIP2;\n}\n\n/**\n * Convert simple network name to CAIP-2 format\n */\nexport function toCAIP2Network(network: SolanaNetworkSimple): Network {\n  switch (network) {\n    case \"solana\":\n      return SOLANA_MAINNET_CAIP2;\n    case \"solana-devnet\":\n      return SOLANA_DEVNET_CAIP2;\n  }\n}\n\n/**\n * Convert CAIP-2 network to simple name (for display/config)\n */\nexport function toSimpleNetwork(network: string): SolanaNetworkSimple {\n  if (network === SOLANA_MAINNET_CAIP2 || network === \"solana\") {\n    return \"solana\";\n  }\n  return \"solana-devnet\";\n}\n","import type { VersionedTransaction } from \"@solana/web3.js\";\nimport type { PaymentRequirements, PaymentPayload } from \"@payai/x402/types\";\nimport {\n  type TokenAsset,\n  SOLANA_MAINNET_CAIP2,\n  SOLANA_DEVNET_CAIP2,\n  isSolanaMainnet,\n} from \"../types\";\n\n/**\n * Helper utilities for x402 payment processing (v2)\n */\n\n// USDC token addresses\nconst USDC_MAINNET = \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\nconst USDC_DEVNET = \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\";\n\n/**\n * Create v2 payment payload from a signed transaction\n * Encodes transaction and payment details for PAYMENT-SIGNATURE header\n *\n * @param transaction - Signed Solana VersionedTransaction\n * @param paymentRequirements - The accepted payment requirements\n * @param resourceUrl - URL of the protected resource\n * @returns Base64-encoded payment payload for PAYMENT-SIGNATURE header\n */\nexport function createPaymentPayload(\n  transaction: VersionedTransaction,\n  paymentRequirements: PaymentRequirements,\n  resourceUrl: string,\n): string {\n  // Serialize the signed transaction to base64\n  const base64Transaction = Buffer.from(transaction.serialize()).toString(\n    \"base64\",\n  );\n\n  // Create v2 payment payload\n  const paymentPayload: PaymentPayload = {\n    x402Version: 2,\n    resource: {\n      url: resourceUrl,\n      description: (paymentRequirements.extra?.description as string) || \"\",\n      mimeType:\n        (paymentRequirements.extra?.mimeType as string) || \"application/json\",\n    },\n    accepted: paymentRequirements,\n    payload: {\n      transaction: base64Transaction,\n    },\n  };\n\n  // Encode payment payload as base64 for PAYMENT-SIGNATURE header\n  const paymentHeader = Buffer.from(JSON.stringify(paymentPayload)).toString('base64');\n\n  return paymentHeader;\n}\n\n/**\n * Create v1 payment payload from a signed transaction\n * Encodes transaction for X-PAYMENT header (v1 format)\n *\n * @param transaction - Signed Solana VersionedTransaction\n * @param paymentRequirements - The accepted payment requirements\n * @returns Base64-encoded payment payload for X-PAYMENT header\n */\nexport function createPaymentPayloadV1(\n  transaction: VersionedTransaction,\n  paymentRequirements: PaymentRequirements\n): string {\n  // Serialize the signed transaction to base64\n  const base64Transaction = Buffer.from(transaction.serialize()).toString('base64');\n\n  // Create v1 payment payload (simpler format)\n  const paymentPayload = {\n    x402Version: 1,\n    scheme: paymentRequirements.scheme,\n    network: paymentRequirements.network,\n    payload: {\n      transaction: base64Transaction,\n    },\n  };\n\n  // Encode payment payload as base64 for X-PAYMENT header\n  const paymentHeader = Buffer.from(JSON.stringify(paymentPayload)).toString(\n    \"base64\",\n  );\n\n  return paymentHeader;\n}\n\n/**\n * Get default RPC URL for a given Solana network\n * @param network - Network in any format (simple or CAIP-2)\n * @returns Default RPC URL for the network\n */\nexport function getDefaultRpcUrl(network: string): string {\n  if (isSolanaMainnet(network)) {\n    return \"https://api.mainnet-beta.solana.com\";\n  }\n  return \"https://api.devnet.solana.com\";\n}\n\n/**\n * Get RPC URL for a CAIP-2 network identifier\n * @param network - Network in CAIP-2 format (e.g., \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\")\n * @returns RPC URL for the network\n */\nexport function getRpcUrlForNetwork(network: string): string {\n  if (network === SOLANA_MAINNET_CAIP2) {\n    return \"https://api.mainnet-beta.solana.com\";\n  }\n  if (network === SOLANA_DEVNET_CAIP2) {\n    return \"https://api.devnet.solana.com\";\n  }\n  // Fallback for unknown networks\n  return \"https://api.devnet.solana.com\";\n}\n\n/**\n * Get default USDC token asset for a given Solana network\n * @param network - Network in any format (simple or CAIP-2)\n * @returns USDC token asset configuration\n */\nexport function getDefaultTokenAsset(network: string): TokenAsset {\n  if (isSolanaMainnet(network)) {\n    return {\n      address: USDC_MAINNET,\n      decimals: 6,\n    };\n  }\n  return {\n    address: USDC_DEVNET,\n    decimals: 6,\n  };\n}\n\n/**\n * Convert human-readable amount to token's smallest unit (atomic units)\n * @param amount - Human-readable amount (e.g., 2.5 for 2.5 USDC)\n * @param decimals - Token decimals (e.g., 6 for USDC, 9 for SOL)\n * @returns Amount in atomic units as string\n */\nexport function toAtomicUnits(amount: number, decimals: number): string {\n  return Math.floor(amount * Math.pow(10, decimals)).toString();\n}\n\n/**\n * Convert token's atomic units to human-readable amount\n * @param atomicUnits - Token amount in smallest units (as string or bigint)\n * @param decimals - Token decimals (e.g., 6 for USDC, 9 for SOL)\n * @returns Human-readable amount\n */\nexport function fromAtomicUnits(\n  atomicUnits: string | bigint | number,\n  decimals: number,\n): number {\n  return Number(atomicUnits) / Math.pow(10, decimals);\n}\n"]}