{"version":3,"sources":["../../src/utils/index.ts","../../src/utils/payload-converter.ts"],"sourcesContent":["export {\n  // Payload conversion\n  convertV1ToV2,\n  convertV2ToV1,\n  convertPayloadToVersion,\n  detectPayloadVersion,\n  normalizePaymentHeader,\n  \n  // Network conversion\n  networkV1ToV2,\n  networkV2ToV1,\n  NETWORK_V1_TO_V2,\n  NETWORK_V2_TO_V1,\n  \n  // Network detection\n  isSolanaNetwork,\n  isEvmNetwork,\n  \n  // Amount utilities\n  toAtomicUnits,\n  fromAtomicUnits,\n  formatUsd,\n  \n  // Types\n  type X402Version,\n  type V1PaymentPayload,\n  type V2PaymentPayload,\n  type PaymentPayload,\n} from './payload-converter';\n","/**\n * Utility to convert x402 payment payloads between v1 and v2 formats.\n * \n * V1 PaymentPayload format:\n * {\n *   \"x402Version\": 1,\n *   \"scheme\": \"exact\",\n *   \"network\": \"solana\",\n *   \"payload\": { ... }\n * }\n * \n * V2 PaymentPayload format:\n * {\n *   \"x402Version\": 2,\n *   \"resource\": { \"url\": \"...\", \"description\": \"...\", \"mimeType\": \"...\" },\n *   \"accepted\": { \"scheme\": \"exact\", \"network\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\", ... },\n *   \"payload\": { ... }\n * }\n */\n\n// Network name mappings between v1 (simple names) and v2 (CAIP-2)\nexport const NETWORK_V1_TO_V2: Record<string, string> = {\n  'solana': 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n  'solana-devnet': 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n  'base': 'eip155:8453',\n  'base-sepolia': 'eip155:84532',\n  'ethereum': 'eip155:1',\n  'polygon': 'eip155:137',\n  'avalanche': 'eip155:43114',\n  'skale-base': 'eip155:1187947933',\n  'skale-base-sepolia': 'eip155:324705682',\n  'peaq': 'eip155:3338',\n  'sei': 'eip155:1329',\n  'telos': 'eip155:40',\n};\n\nexport const NETWORK_V2_TO_V1: Record<string, string> = Object.fromEntries(\n  Object.entries(NETWORK_V1_TO_V2).map(([k, v]) => [v, k])\n);\n\n/**\n * Convert CAIP-2 network identifier to simple v1 network name\n */\nexport function networkV2ToV1(caip2Network: string): string {\n  if (!caip2Network) return 'solana';\n  \n  // Direct lookup\n  if (NETWORK_V2_TO_V1[caip2Network]) {\n    return NETWORK_V2_TO_V1[caip2Network];\n  }\n  \n  // Handle partial matches for Solana\n  if (caip2Network.startsWith('solana:')) {\n    const chainId = caip2Network.split(':')[1];\n    if (chainId === '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp') return 'solana';\n    if (chainId === 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1') return 'solana-devnet';\n    return 'solana';\n  }\n  \n  // Handle EVM chains by chain ID\n  if (caip2Network.startsWith('eip155:')) {\n    const chainId = caip2Network.split(':')[1];\n    const mapping: Record<string, string> = {\n      '1': 'ethereum',\n      '137': 'polygon',\n      '8453': 'base',\n      '84532': 'base-sepolia',\n      '43114': 'avalanche',\n      '1187947933': 'skale-base',\n      '324705682': 'skale-base-sepolia',\n      '3338': 'peaq',\n      '1329': 'sei',\n      '40': 'telos',\n    };\n    return mapping[chainId] || caip2Network;\n  }\n  \n  return caip2Network;\n}\n\n/**\n * Convert simple v1 network name to CAIP-2 identifier\n */\nexport function networkV1ToV2(v1Network: string): string {\n  if (!v1Network) return 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';\n  return NETWORK_V1_TO_V2[v1Network] || v1Network;\n}\n\nexport type X402Version = 1 | 2;\n\nexport interface V1PaymentPayload {\n  x402Version: 1;\n  scheme: string;\n  network: string;\n  payload: {\n    transaction?: string;\n    signature?: string;\n    authorization?: unknown;\n  };\n  facilitatorUrl?: string;\n}\n\nexport interface V2PaymentPayload {\n  x402Version: 2;\n  resource: {\n    url: string;\n    description?: string;\n    mimeType?: string;\n  };\n  accepted: {\n    scheme: string;\n    network: string;\n    amount?: string;\n    maxAmountRequired?: string;\n    asset?: string;\n    payTo?: string;\n    maxTimeoutSeconds?: number;\n    extra?: Record<string, unknown>;\n  };\n  payload: {\n    transaction?: string;\n    signature?: string;\n    authorization?: unknown;\n  };\n  facilitatorUrl?: string;\n}\n\nexport type PaymentPayload = V1PaymentPayload | V2PaymentPayload;\n\n/**\n * Detect x402 version from payload\n */\nexport function detectPayloadVersion(payload: unknown): X402Version | null {\n  if (!payload || typeof payload !== 'object') return null;\n  \n  const p = payload as Record<string, unknown>;\n  \n  if (p.x402Version === 1) return 1;\n  if (p.x402Version === 2) return 2;\n  \n  // Heuristics if x402Version is missing\n  if ('accepted' in p && 'resource' in p) return 2;\n  if ('scheme' in p && 'network' in p && !('accepted' in p)) return 1;\n  \n  return null;\n}\n\n/**\n * Convert v2 payment payload to v1 format\n */\nexport function convertV2ToV1(v2Payload: V2PaymentPayload): V1PaymentPayload {\n  const accepted = v2Payload.accepted || {};\n  \n  return {\n    x402Version: 1,\n    scheme: accepted.scheme || 'exact',\n    network: networkV2ToV1(accepted.network),\n    payload: v2Payload.payload,\n  };\n}\n\n/**\n * Convert v1 payment payload to v2 format\n */\nexport function convertV1ToV2(\n  v1Payload: V1PaymentPayload,\n  resourceInfo: { url?: string; description?: string; mimeType?: string } = {}\n): V2PaymentPayload {\n  return {\n    x402Version: 2,\n    resource: {\n      url: resourceInfo.url || '',\n      description: resourceInfo.description || '',\n      mimeType: resourceInfo.mimeType || 'application/json',\n    },\n    accepted: {\n      scheme: v1Payload.scheme || 'exact',\n      network: networkV1ToV2(v1Payload.network),\n    },\n    payload: v1Payload.payload,\n  };\n}\n\n/**\n * Convert payment payload to target version\n */\nexport function convertPayloadToVersion(\n  payload: PaymentPayload,\n  targetVersion: X402Version,\n  options: { resourceInfo?: { url?: string; description?: string; mimeType?: string } } = {}\n): PaymentPayload | null {\n  const sourceVersion = detectPayloadVersion(payload);\n  \n  if (!sourceVersion) {\n    console.warn('[payload-converter] Could not detect source payload version');\n    return null;\n  }\n  \n  // No conversion needed\n  if (sourceVersion === targetVersion) {\n    return payload;\n  }\n  \n  // V2 -> V1\n  if (sourceVersion === 2 && targetVersion === 1) {\n    return convertV2ToV1(payload as V2PaymentPayload);\n  }\n  \n  // V1 -> V2\n  if (sourceVersion === 1 && targetVersion === 2) {\n    return convertV1ToV2(payload as V1PaymentPayload, options.resourceInfo);\n  }\n  \n  return null;\n}\n\n/**\n * Normalize payment header for target x402 version\n */\nexport function normalizePaymentHeader(\n  base64Header: string,\n  targetVersion: X402Version,\n  options: { resourceInfo?: { url?: string; description?: string; mimeType?: string } } = {}\n): { header: string; payload: PaymentPayload } | null {\n  if (!base64Header) return null;\n  \n  try {\n    const decoded = JSON.parse(\n      typeof window !== 'undefined' \n        ? atob(base64Header) \n        : Buffer.from(base64Header, 'base64').toString()\n    );\n    const converted = convertPayloadToVersion(decoded, targetVersion, options);\n    \n    if (!converted) {\n      return null;\n    }\n    \n    const encoded = typeof window !== 'undefined'\n      ? btoa(JSON.stringify(converted))\n      : Buffer.from(JSON.stringify(converted)).toString('base64');\n    \n    return {\n      header: encoded,\n      payload: converted,\n    };\n  } catch (e) {\n    console.error('[payload-converter] Failed to normalize header:', e);\n    return null;\n  }\n}\n\n/**\n * Check if network is Solana-based\n */\nexport function isSolanaNetwork(network: string): boolean {\n  return network === 'solana' || \n         network === 'solana-devnet' || \n         network.startsWith('solana:');\n}\n\n/**\n * Check if network is EVM-based\n */\nexport function isEvmNetwork(network: string): boolean {\n  const evmNetworks = ['base', 'base-sepolia', 'ethereum', 'polygon', 'avalanche', 'skale-base', 'skale-base-sepolia', 'skale-bite', 'peaq', 'sei', 'telos'];\n  return evmNetworks.includes(network) || network.startsWith('eip155:');\n}\n\n// ============================================================================\n// Amount Conversion Utilities\n// ============================================================================\n\n/**\n * Convert USD amount to atomic units\n * @param usd - Amount in USD (e.g., 0.05)\n * @param decimals - Token decimals (default: 6 for USDC)\n * @returns Atomic units as string\n */\nexport function toAtomicUnits(usd: number, decimals: number = 6): string {\n  return Math.floor(usd * Math.pow(10, decimals)).toString();\n}\n\n/**\n * Convert atomic units to USD amount\n * @param atomic - Atomic units (string or bigint)\n * @param decimals - Token decimals (default: 6 for USDC)\n * @returns USD amount as number\n */\nexport function fromAtomicUnits(atomic: string | bigint, decimals: number = 6): number {\n  const value = typeof atomic === 'bigint' ? atomic : BigInt(atomic);\n  return Number(value) / Math.pow(10, decimals);\n}\n\n/**\n * Format USD amount for display\n * @param usd - Amount in USD\n * @param maxDecimals - Maximum decimal places (default: 4)\n * @returns Formatted string\n */\nexport function formatUsd(usd: number, maxDecimals: number = 4): string {\n  if (usd < 0.0001) return '<$0.0001';\n  return `$${usd.toFixed(maxDecimals).replace(/\\.?0+$/, '')}`;\n}\n"],"mappings":"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","names":[]}