@devlab.group/agent-commerce 2.4.1 → 2.5.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.
Files changed (108) hide show
  1. package/README.md +115 -15
  2. package/dist/ap2.d.ts +24 -12
  3. package/dist/ap2.js +31 -13
  4. package/dist/ap2.js.map +1 -1
  5. package/dist/{chunk-DTKU3Z2M.js → chunk-3OTCFFFT.js} +37 -4
  6. package/dist/chunk-3OTCFFFT.js.map +1 -0
  7. package/dist/{chunk-QPV3EGJO.js → chunk-4K7FIBJM.js} +25 -4
  8. package/dist/chunk-4K7FIBJM.js.map +1 -0
  9. package/dist/{chunk-CXWC5LWM.js → chunk-FKQK5XZA.js} +652 -68
  10. package/dist/chunk-FKQK5XZA.js.map +1 -0
  11. package/dist/chunk-GA3O2A7R.js +92 -0
  12. package/dist/chunk-GA3O2A7R.js.map +1 -0
  13. package/dist/{chunk-WZW5ORZH.js → chunk-VUCMBGUR.js} +3 -3
  14. package/dist/{chunk-WZW5ORZH.js.map → chunk-VUCMBGUR.js.map} +1 -1
  15. package/dist/cli/{ap2-GWSP4LYY.js → ap2-YAPLERSC.js} +34 -15
  16. package/dist/cli/ap2-YAPLERSC.js.map +1 -0
  17. package/dist/cli/{chunk-G2JEY7MB.js → chunk-2J2IQQ4X.js} +8 -7
  18. package/dist/cli/chunk-2J2IQQ4X.js.map +1 -0
  19. package/dist/cli/chunk-2UPPX3FJ.js +311 -0
  20. package/dist/cli/chunk-2UPPX3FJ.js.map +1 -0
  21. package/dist/cli/{chunk-WYOGIANL.js → chunk-4H2QLHQI.js} +4 -4
  22. package/dist/cli/{chunk-WYOGIANL.js.map → chunk-4H2QLHQI.js.map} +1 -1
  23. package/dist/cli/{chunk-OZ4LAWBK.js → chunk-5R7DM5LM.js} +25 -4
  24. package/dist/cli/chunk-5R7DM5LM.js.map +1 -0
  25. package/dist/cli/chunk-663ALDZA.js +92 -0
  26. package/dist/cli/chunk-663ALDZA.js.map +1 -0
  27. package/dist/cli/{chunk-QQ3WY5L3.js → chunk-IDY2735M.js} +36 -104
  28. package/dist/cli/chunk-IDY2735M.js.map +1 -0
  29. package/dist/cli/chunk-JFVRG2HH.js +107 -0
  30. package/dist/cli/chunk-JFVRG2HH.js.map +1 -0
  31. package/dist/cli/chunk-M7NXVRU5.js +8 -0
  32. package/dist/cli/{chunk-ITWNSS2B.js.map → chunk-M7NXVRU5.js.map} +1 -1
  33. package/dist/cli/chunk-NIU5EMSB.js +119 -0
  34. package/dist/cli/chunk-NIU5EMSB.js.map +1 -0
  35. package/dist/cli/{chunk-TNMLDPUO.js → chunk-QA2OPHBF.js} +655 -70
  36. package/dist/cli/chunk-QA2OPHBF.js.map +1 -0
  37. package/dist/cli/{chunk-GJIMDMYT.js → chunk-QLUCNPRT.js} +404 -161
  38. package/dist/cli/chunk-QLUCNPRT.js.map +1 -0
  39. package/dist/cli/chunk-SYQLJXIU.js +105 -0
  40. package/dist/cli/chunk-SYQLJXIU.js.map +1 -0
  41. package/dist/cli/{chunk-3MGAJ5FX.js → chunk-VJ4EO4LE.js} +3 -3
  42. package/dist/cli/{chunk-3MGAJ5FX.js.map → chunk-VJ4EO4LE.js.map} +1 -1
  43. package/dist/cli/{chunk-PIMFPCNZ.js → chunk-Z34UMZBB.js} +234 -85
  44. package/dist/cli/chunk-Z34UMZBB.js.map +1 -0
  45. package/dist/cli/config-BWFMN2ZB.js +12 -0
  46. package/dist/cli/{config-UI4EDG4L.js.map → config-BWFMN2ZB.js.map} +1 -1
  47. package/dist/cli/index.js +258 -11
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/{mcp-PGBRWZVA.js → mcp-KZEMXLHR.js} +5 -4
  50. package/dist/cli/mcp-KZEMXLHR.js.map +1 -0
  51. package/dist/cli/{near-5AY3HWYF.js → near-U6365VFX.js} +15 -4
  52. package/dist/cli/near-U6365VFX.js.map +1 -0
  53. package/dist/cli/payment-providers-SZL36H3Y.js +6 -0
  54. package/dist/cli/payment-providers-SZL36H3Y.js.map +1 -0
  55. package/dist/cli/{provider-I2ESL6RS.js → provider-6TKB5ADJ.js} +26 -15
  56. package/dist/cli/provider-6TKB5ADJ.js.map +1 -0
  57. package/dist/cli/receipts-ZGLJWMQG.js +8 -0
  58. package/dist/cli/receipts-ZGLJWMQG.js.map +1 -0
  59. package/dist/cli/reconcile-IC22MJD5.js +4 -0
  60. package/dist/cli/reconcile-IC22MJD5.js.map +1 -0
  61. package/dist/cli/{run-JK4ERPJV.js → run-ZTYPQI4D.js} +151 -115
  62. package/dist/cli/run-ZTYPQI4D.js.map +1 -0
  63. package/dist/cli/svm-KDSPDFJG.js +48 -0
  64. package/dist/cli/svm-KDSPDFJG.js.map +1 -0
  65. package/dist/cli/{x402-7WBFZQXV.js → x402-WLYBLODI.js} +10 -9
  66. package/dist/cli/x402-WLYBLODI.js.map +1 -0
  67. package/dist/index.d.ts +112 -12
  68. package/dist/index.js +948 -157
  69. package/dist/index.js.map +1 -1
  70. package/dist/mcp.d.ts +1 -2
  71. package/dist/mcp.js +1 -1
  72. package/dist/mpp.js +20 -10
  73. package/dist/mpp.js.map +1 -1
  74. package/dist/{near-D6C42VPE.js → near-FH7HPZV3.js} +15 -4
  75. package/dist/near-FH7HPZV3.js.map +1 -0
  76. package/dist/{protocol-adapter-C9odYl6l.d.ts → protocol-adapter-DEXpdp8m.d.ts} +102 -48
  77. package/dist/{runtime-Cl_BLVZV.d.ts → runtime-Dz2fSO-P.d.ts} +220 -2
  78. package/dist/svm-KNC3PHMS.js +48 -0
  79. package/dist/svm-KNC3PHMS.js.map +1 -0
  80. package/dist/x402.js +5 -5
  81. package/package.json +1 -1
  82. package/dist/authorization-DjAecwuW.d.ts +0 -115
  83. package/dist/chunk-CXWC5LWM.js.map +0 -1
  84. package/dist/chunk-DTKU3Z2M.js.map +0 -1
  85. package/dist/chunk-KA2AX5FH.js +0 -44
  86. package/dist/chunk-KA2AX5FH.js.map +0 -1
  87. package/dist/chunk-QPV3EGJO.js.map +0 -1
  88. package/dist/cli/ap2-GWSP4LYY.js.map +0 -1
  89. package/dist/cli/chunk-G2JEY7MB.js.map +0 -1
  90. package/dist/cli/chunk-GJIMDMYT.js.map +0 -1
  91. package/dist/cli/chunk-ITWNSS2B.js +0 -8
  92. package/dist/cli/chunk-OSTCU6ZK.js +0 -44
  93. package/dist/cli/chunk-OSTCU6ZK.js.map +0 -1
  94. package/dist/cli/chunk-OZ4LAWBK.js.map +0 -1
  95. package/dist/cli/chunk-PIMFPCNZ.js.map +0 -1
  96. package/dist/cli/chunk-QQ3WY5L3.js.map +0 -1
  97. package/dist/cli/chunk-TNMLDPUO.js.map +0 -1
  98. package/dist/cli/config-UI4EDG4L.js +0 -11
  99. package/dist/cli/mcp-PGBRWZVA.js.map +0 -1
  100. package/dist/cli/near-5AY3HWYF.js.map +0 -1
  101. package/dist/cli/provider-I2ESL6RS.js.map +0 -1
  102. package/dist/cli/run-JK4ERPJV.js.map +0 -1
  103. package/dist/cli/svm-3MMYFPC7.js +0 -33
  104. package/dist/cli/svm-3MMYFPC7.js.map +0 -1
  105. package/dist/cli/x402-7WBFZQXV.js.map +0 -1
  106. package/dist/near-D6C42VPE.js.map +0 -1
  107. package/dist/svm-QEUAUNPQ.js +0 -33
  108. package/dist/svm-QEUAUNPQ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/payments/x402/provider/constants.ts","../../src/payments/x402/amount.ts","../../src/payments/x402/provider/fee-payer.ts","../../src/payments/x402/provider/health.ts","../../src/payments/x402/chain.ts","../../src/payments/x402/facilitator.ts","../../src/payments/x402/local-facilitator.ts","../../src/payments/x402/provider/reasons.ts","../../src/payments/x402/provider/offers.ts","../../src/core/canonical-json.ts","../../src/payments/x402/provider/quote.ts","../../src/payments/x402/payload.ts","../../src/payments/x402/provider/requirement.ts","../../src/payments/x402/provider/transfer.ts","../../src/payments/x402/provider/settle.ts","../../src/payments/x402/provider/verify.ts","../../src/payments/x402/provider/index.ts"],"names":["privateKeyToAccount","offer","index","from","nonce","isAddress","x402ExactPermit2ProxyAddress","getAddress"],"mappings":"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","file":"chunk-TNMLDPUO.js","sourcesContent":["// Protocol constants shared by the x402 provider's modules\nimport type { IdGenerator } from '../../../core';\n\nexport const X402_VERSION = 2;\nexport const X402_PROTOCOL_VERSION = String(X402_VERSION);\nexport const DEFAULT_MAX_TIMEOUT_SECONDS = 60;\nexport const DEFAULT_MIME_TYPE = 'application/json';\nexport const HEALTH_TIMEOUT_MS = 4_000;\n\n/** Prefixed random UUIDs, shared with the MPP rail */\nexport const DEFAULT_IDS: IdGenerator = {\n next: (prefix?: string) => `${prefix ? `${prefix}_` : ''}${crypto.randomUUID()}`,\n};\n","/**\n * Exact conversion from display amounts (\"0.01\" USDC) to the integer base\n * units x402 and EIP-3009 carry (\"10000\" at 6 decimals).\n *\n * It never goes through a JS `number`, which cannot represent most decimal\n * fractions. viem's `parseUnits` is not used either: it silently rounds excess\n * fractional digits, and \"0.0000001\" against a 6-decimal asset is a\n * configuration bug that must be refused, not rounded. The reverse direction\n * is viem's `formatUnits`, which is exact.\n */\nimport { CommerceError } from '../../core';\n\nconst DECIMAL_STRING_PATTERN = /^\\d+(?:\\.\\d+)?$/;\n\n/**\n * Parses a canonical decimal display amount (e.g. \"0.01\") into base units\n * for an asset with the given number of decimals, without floating point.\n *\n * Throws `CommerceError('PAYMENT_INVALID')` if the string is not a plain\n * non-negative decimal, or if it carries more fractional digits than the\n * asset supports.\n */\nexport function parseCanonicalAmount(amount: string, decimals: number): bigint {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new CommerceError('INTERNAL_ERROR', `Invalid asset decimals: ${decimals}`);\n }\n if (!DECIMAL_STRING_PATTERN.test(amount)) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n `Amount \"${amount}\" is not a valid non-negative decimal string`,\n {\n details: { amount },\n },\n );\n }\n\n const [integerPart = '0', fractionPart = ''] = amount.split('.');\n\n if (fractionPart.length > decimals) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n `Amount \"${amount}\" has more precision than the asset supports (${decimals} decimals)`,\n { details: { amount, assetDecimals: decimals } },\n );\n }\n\n const paddedFraction = fractionPart.padEnd(decimals, '0');\n const combined = `${integerPart}${paddedFraction}`;\n return BigInt(combined);\n}\n","// The Solana fee payer an offer names, read from the facilitator's `/supported`\nimport type { SupportedResponse } from '@x402/core/types';\nimport { CommerceError } from '../../../core';\nimport { normalizeAddress } from '../addresses';\nimport type { FacilitatorBinding } from '../facilitator';\nimport { X402_VERSION } from './constants';\nimport type { ProviderContext, SvmOffer } from './types';\n\n// How long a `/supported` snapshot names the Solana fee payer of new offers\nconst SUPPORTED_TTL_MS = 60_000;\n\n/** Returns the fee payer lookup, with its `/supported` snapshot, for one provider */\nexport function createSvmFeePayerSource(\n ctx: ProviderContext,\n): (offer: SvmOffer) => Promise<string> {\n const { clock, remoteBinding } = ctx;\n\n // A Solana offer carries the fee payer the facilitator names in `/supported`.\n // A snapshot lasts SUPPORTED_TTL_MS, and a refresh keeps the previous fee\n // payer while the facilitator still lists it, so a challenge and the retry\n // that pays it agree.\n let supportedSnapshot:\n | { readonly at: number; readonly response: Promise<SupportedResponse> }\n | undefined;\n const feePayers = new Map<string, string>();\n\n function currentSupported(): Promise<SupportedResponse> {\n const now = clock.monotonicMs();\n if (supportedSnapshot && now - supportedSnapshot.at < SUPPORTED_TTL_MS) {\n return supportedSnapshot.response;\n }\n const remote = remoteBinding as Extract<FacilitatorBinding, { kind: 'remote' }>;\n const response = remote.supported();\n const snapshot = { at: now, response };\n supportedSnapshot = snapshot;\n // A failed fetch is not kept; the next challenge asks again\n response.catch(() => {\n if (supportedSnapshot === snapshot) supportedSnapshot = undefined;\n });\n return response;\n }\n\n async function svmFeePayer(offer: SvmOffer): Promise<string> {\n let supported: SupportedResponse;\n try {\n supported = await currentSupported();\n } catch (cause) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator ${offer.binding.describe} did not answer /supported, which names the Solana fee payer`,\n { cause },\n );\n }\n const listed = supported.kinds.find(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n )?.extra?.['feePayer'];\n const previous = feePayers.get(offer.network);\n const stillSigns =\n previous !== undefined &&\n (previous === listed || Object.values(supported.signers).some((s) => s.includes(previous)));\n const feePayer = stillSigns ? previous : listed;\n if (typeof feePayer !== 'string' || normalizeAddress(offer.profile, feePayer) === undefined) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator ${offer.binding.describe} names no Solana fee payer for ${offer.network}`,\n );\n }\n feePayers.set(offer.network, feePayer);\n return feePayer;\n }\n\n return svmFeePayer;\n}\n","// Readiness: each offer's chain, asset and facilitator support, cached briefly\n\nimport type { SupportedKind } from '@x402/core/types';\nimport { PERMIT2_ADDRESS, x402ExactPermit2ProxyAddress } from '@x402/evm';\nimport { erc20Abi } from 'viem';\nimport { type AdapterHealth, CommerceError } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { isRecord } from '../../../core/is-record';\nimport { normalizeAddress } from '../addresses';\nimport type { createLocalPublicClient } from '../chain';\nimport type { FacilitatorBinding } from '../facilitator';\nimport { describeDeploymentMode } from '../networks';\nimport { x402OfferName } from '../options';\nimport { HEALTH_TIMEOUT_MS, X402_VERSION } from './constants';\nimport type { NearOffer, Offer, ProviderContext, SvmOffer } from './types';\n\n/** Builds the provider's `health`, which probes every offer and caches the result */\nexport function createHealthCheck(ctx: ProviderContext): () => Promise<AdapterHealth> {\n const { offers, clock, deploymentMode, remoteBinding, svm, near } = ctx;\n\n // One offer's chain, asset and facilitator support. `kinds` fetches the\n // remote facilitator's `/supported` once per probe, shared by every offer.\n async function offerHealth(\n offer: Offer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n if (offer.family === 'svm') return svmOfferHealth(offer, kinds);\n if (offer.family === 'near') return nearOfferHealth(offer, kinds);\n const { profile, rpcOrigin, healthClient, binding } = offer;\n const chainId = await healthClient.getChainId();\n if (chainId !== profile.chainId) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} reports chain id ${chainId}, expected ${profile.chainId} (${profile.displayName})`,\n };\n }\n\n const code = await healthClient.getCode({ address: offer.asset });\n if (!code || code === '0x') {\n return {\n status: 'fail',\n detail: `No contract code found at configured asset address ${offer.asset}`,\n };\n }\n // Decimals scale signed amounts; verify them on-chain, as for Solana and NEAR\n const decimals = await healthClient.readContract({\n address: offer.asset,\n abi: erc20Abi,\n functionName: 'decimals',\n });\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Token ${offer.asset} has ${decimals} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // Permit2 offers settle through two contracts the merchant does not deploy\n if (offer.method === 'permit2') {\n for (const [name, address] of PERMIT2_CONTRACTS) {\n const deployed = await healthClient.getCode({ address });\n if (!deployed || deployed === '0x') {\n return {\n status: 'fail',\n detail: `No ${name} contract code found at ${address} on ${profile.displayName}`,\n };\n }\n }\n }\n const contracts = `asset ${offer.asset}${offer.method === 'permit2' ? ', Permit2 and its x402 proxy' : ''}`;\n\n if (binding.kind === 'remote') {\n // Reachable is not enough: a facilitator that does not carry our\n // scheme on our network fails every payment after the buyer has signed\n const supportsUs = (await kinds()).some(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n );\n if (!supportsUs) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}); no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} reachable, chain id ` +\n `${profile.chainId} (${profile.displayName}), ${contracts} have code, ` +\n `facilitator ${binding.describe} supports exact/${offer.network}`,\n };\n }\n\n // An RPC reports whatever chain id it was started with, so the id cannot\n // prove this is a dev chain. An Anvil-only RPC method must answer before\n // a local facilitator counts as healthy.\n const isAnvil = await probeIsAnvilNode(healthClient);\n if (!isAnvil) {\n return {\n status: 'fail',\n detail:\n `RPC at ${rpcOrigin} reports chain id ${profile.chainId} but does not answer ` +\n '\"anvil_nodeInfo\", so it does not look like a local Anvil dev node. Refusing to treat it ' +\n 'as safe for a local-facilitator dev key.',\n };\n }\n\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} reachable, chain id ` +\n `${profile.chainId}, ${contracts} have code, confirmed Anvil dev node`,\n };\n }\n\n // A Solana offer's cluster, mint and fee payer. The CAIP-2 reference is the\n // start of the genesis hash, so the RPC proves which cluster it serves.\n async function svmOfferHealth(\n offer: SvmOffer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n const { profile, rpcOrigin, binding } = offer;\n // A missing Solana peer fails readiness, not the first paid request\n const svmModule = await svm();\n const genesis = await jsonRpc(offer.rpcUrl, 'getGenesisHash', []);\n const cluster = typeof genesis === 'string' ? `solana:${genesis.slice(0, 32)}` : undefined;\n if (cluster !== offer.network) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} serves ${cluster ?? 'an unknown cluster'}, expected ${offer.network} (${profile.displayName})`,\n };\n }\n const mint = await jsonRpc(offer.rpcUrl, 'getAccountInfo', [\n offer.asset,\n { encoding: 'base64' },\n ]);\n const mintInfo = readMint(mint);\n if (mintInfo === undefined) {\n return {\n status: 'fail',\n detail: `No initialized token mint found at configured asset address ${offer.asset}`,\n };\n }\n const { decimals, tokenProgram } = mintInfo;\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Mint ${offer.asset} has ${decimals} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // Without the payee's token account every payment fails the facilitator's\n // simulation, after the buyer signed\n const payeeAccount = await svmModule.associatedTokenAccount(\n offer.payTo,\n offer.asset,\n tokenProgram,\n );\n const account = await jsonRpc(offer.rpcUrl, 'getAccountInfo', [\n payeeAccount,\n { encoding: 'base64' },\n ]);\n const accountValue = isRecord(account) ? account['value'] : undefined;\n if (!isRecord(accountValue) || accountValue['owner'] !== tokenProgram) {\n return {\n status: 'fail',\n detail: `payTo ${offer.payTo} has no token account for mint ${offer.asset}; create its associated token account (${payeeAccount}) before taking payments`,\n };\n }\n const feePayer = (await kinds()).find(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n )?.extra?.['feePayer'];\n if (typeof feePayer !== 'string' || normalizeAddress(profile, feePayer) === undefined) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}) with a fee payer; no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} serves ${profile.displayName}, ` +\n `mint ${offer.asset} has ${decimals} decimals and a token account for ${offer.payTo}, ` +\n `facilitator ${binding.describe} supports ` +\n `exact/${offer.network} with fee payer ${feePayer}`,\n };\n }\n\n // A NEAR offer's chain, token and merchant registration. The RPC's `status`\n // names the chain it serves; an account suffix such as `.testnet` proves nothing.\n async function nearOfferHealth(\n offer: NearOffer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n const { profile, rpcOrigin, binding, rpcUrl } = offer;\n // A missing NEAR peer fails readiness, not the first paid request\n await near();\n const status = await jsonRpc(rpcUrl, 'status', []);\n const chainId = isRecord(status) ? status['chain_id'] : undefined;\n const expected = offer.network.slice('near:'.length);\n if (chainId !== expected) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} serves chain ${String(chainId ?? 'unknown')}, expected ${expected} (${profile.displayName})`,\n };\n }\n const token = await jsonRpc(rpcUrl, 'query', {\n request_type: 'view_account',\n finality: 'final',\n account_id: offer.asset,\n });\n if (!isRecord(token) || token['code_hash'] === NEAR_EMPTY_CODE_HASH) {\n return {\n status: 'fail',\n detail: `No contract code found at configured asset account ${offer.asset}`,\n };\n }\n const metadata = await nearView(rpcUrl, offer.asset, 'ft_metadata', {});\n const decimals = isRecord(metadata) ? metadata['decimals'] : undefined;\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Token ${offer.asset} has ${String(decimals)} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // An unregistered recipient makes every transfer fail after the relayer\n // paid for it. A token without NEP-145 storage management needs none.\n let registered = true;\n try {\n registered =\n (await nearView(rpcUrl, offer.asset, 'storage_balance_of', {\n account_id: offer.payTo,\n })) !== null;\n } catch (err) {\n if (!/MethodNotFound|MethodResolveError/i.test(redactedErrorText(err))) throw err;\n }\n if (!registered) {\n return {\n status: 'fail',\n detail: `payTo ${offer.payTo} has no storage registered with token ${offer.asset}; register it (NEP-145 storage_deposit) before taking payments`,\n };\n }\n const listed = (await kinds()).some(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n );\n if (!listed) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}); no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} serves ${expected}, ` +\n `token ${offer.asset} has ${decimals} decimals and storage for ${offer.payTo}, ` +\n `facilitator ${binding.describe} supports exact/${offer.network}`,\n };\n }\n\n // Check all offers and report each status; any failure fails readiness.\n // Challenges retain the complete offer list.\n async function computeHealth(): Promise<AdapterHealth> {\n const startedAt = clock.monotonicMs();\n const checkedAt = clock.nowIso();\n let supported: Promise<readonly SupportedKind[]> | undefined;\n const kinds = () => {\n supported ??= (remoteBinding as Extract<FacilitatorBinding, { kind: 'remote' }>)\n .supported()\n .then((response) => response.kinds);\n return supported;\n };\n\n const results = await Promise.all(\n offers.map((offer) =>\n offerHealth(offer, kinds).catch((err: unknown) => ({\n status: 'fail' as const,\n detail: `x402 health check failed: ${redactedErrorText(err)}`,\n })),\n ),\n );\n const failed = results.some((result) => result.status === 'fail');\n const details = offers.flatMap((offer, index) => {\n const result = results[index] as (typeof results)[number];\n if (failed && result.status !== 'fail') return [];\n return [offers.length === 1 ? result.detail : `${x402OfferName(offer)}: ${result.detail}`];\n });\n return {\n status: failed ? 'fail' : 'pass',\n detail: details.join('; '),\n components: offers.map((offer, index) => ({\n name: x402OfferName(offer),\n status: (results[index] as (typeof results)[number]).status,\n })),\n checkedAt,\n durationMs: clock.monotonicMs() - startedAt,\n };\n }\n\n // A probe makes several upstream calls, and `/ready` is unauthenticated.\n // A short TTL plus one shared in-flight probe keeps upstream volume independent\n // of request volume, for library callers as well as the gateway, whose\n // readiness probe adds its own cache on top. Pass and fail share the TTL: a\n // shorter one for fail would bring the load back during an RPC outage,\n // exactly when each call is slowest.\n const HEALTH_CACHE_MS = 5_000;\n let cachedHealth: { at: number; value: AdapterHealth } | undefined;\n let inFlightHealth: Promise<AdapterHealth> | undefined;\n\n async function health(): Promise<AdapterHealth> {\n const now = clock.monotonicMs();\n if (cachedHealth && now - cachedHealth.at < HEALTH_CACHE_MS) {\n return cachedHealth.value;\n }\n if (inFlightHealth) return inFlightHealth;\n\n inFlightHealth = computeHealth()\n .then((value) => {\n cachedHealth = { at: clock.monotonicMs(), value };\n return value;\n })\n .finally(() => {\n inFlightHealth = undefined;\n });\n return inFlightHealth;\n }\n\n return health;\n}\n\nconst PERMIT2_CONTRACTS = [\n ['Permit2', PERMIT2_ADDRESS],\n ['x402 exact Permit2 proxy', x402ExactPermit2ProxyAddress],\n] as const;\n\nconst TOKEN_PROGRAMS: ReadonlySet<string> = new Set([\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',\n]);\n\n// The decimals and owning token program of an initialized SPL Token or\n// Token-2022 mint, from a base64 `getAccountInfo` result: byte 44 holds the\n// decimals, byte 45 the initialized flag\nfunction readMint(\n result: unknown,\n): { readonly decimals: number; readonly tokenProgram: string } | undefined {\n const value = isRecord(result) ? result['value'] : undefined;\n if (!isRecord(value)) return undefined;\n const owner = value['owner'];\n if (typeof owner !== 'string' || !TOKEN_PROGRAMS.has(owner)) return undefined;\n const data = value['data'];\n if (!Array.isArray(data) || typeof data[0] !== 'string') return undefined;\n const bytes = Buffer.from(data[0], 'base64');\n const decimals = bytes[44];\n return bytes.length >= 82 && bytes[45] === 1 && decimals !== undefined\n ? { decimals, tokenProgram: owner }\n : undefined;\n}\n\n// One JSON-RPC call for health(), bounded like the EVM client's\nasync function jsonRpc(rpcUrl: string, method: string, params: unknown): Promise<unknown> {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),\n signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS),\n });\n const body = (await response.json()) as { result?: unknown; error?: unknown };\n if (body.error !== undefined) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `RPC ${method} failed: ${JSON.stringify(body.error)}`,\n );\n }\n return body.result;\n}\n\n// A NEAR contract view call at final finality, its result parsed as JSON\nasync function nearView(\n rpcUrl: string,\n accountId: string,\n method: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const result = await jsonRpc(rpcUrl, 'query', {\n request_type: 'call_function',\n finality: 'final',\n account_id: accountId,\n method_name: method,\n args_base64: Buffer.from(JSON.stringify(args)).toString('base64'),\n });\n const bytes = isRecord(result) ? result['result'] : undefined;\n if (!Array.isArray(bytes)) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `NEAR view ${method} returned no result`,\n );\n }\n return JSON.parse(Buffer.from(bytes as number[]).toString('utf8'));\n}\n\n// The code hash of an account without a contract\nconst NEAR_EMPTY_CODE_HASH = '11111111111111111111111111111111';\n\n/**\n * True only when the RPC answers Anvil's own `anvil_nodeInfo` method. A public\n * node, Base Sepolia included, answers \"method not found\". Never throws.\n */\nasync function probeIsAnvilNode(\n client: ReturnType<typeof createLocalPublicClient>,\n): Promise<boolean> {\n // Anvil-only method, absent from viem's typed PublicRpcSchema, hence the cast\n const request = client.request as unknown as (args: {\n method: string;\n params: unknown[];\n }) => Promise<unknown>;\n try {\n await request({ method: 'anvil_nodeInfo', params: [] });\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * viem clients for the x402 provider, built on the configured `rpcUrl`. The\n * SDK uses the client it is handed, so the provider's chain calls reach no\n * other RPC.\n *\n * `createLocalPublicClient` backs health checks on the configured network.\n * `createLocalFacilitatorClient` handles settlement and defaults to the local\n * chain ID, the only network the gateway's in-process facilitator serves.\n * Deployment tools and test facilitators can pass another chain ID.\n */\nimport {\n type Account,\n type Chain,\n type Client,\n createPublicClient,\n createWalletClient,\n http,\n type PublicActions,\n type PublicClient,\n publicActions,\n type Transport,\n type WalletActions,\n} from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { LOCAL_CHAIN_ID } from './networks';\n\n/** A wallet client that can also read chain state, matching x402's `SignerWallet` */\nexport type LocalFacilitatorClient = Client<\n Transport,\n Chain,\n Account,\n undefined,\n PublicActions<Transport, Chain, Account> & WalletActions<Chain, Account>\n>;\n\n/** CAIP-2 identifier the local dev chain is advertised under */\nexport const LOCAL_NETWORK = `eip155:${LOCAL_CHAIN_ID}`;\n\n/**\n * Chain id carried by a CAIP-2 `eip155` network identifier, or `undefined` for\n * anything else. A caller must never fall back to a default chain id, because\n * the chain id is part of the EIP-712 domain the buyer signed.\n */\nexport function chainIdFromCaip2(network: string): number | undefined {\n const match = /^eip155:(\\d+)$/.exec(network);\n if (!match?.[1]) return undefined;\n const chainId = Number(match[1]);\n return Number.isSafeInteger(chainId) && chainId > 0 ? chainId : undefined;\n}\n\n// `chainId` defaults to the local dev chain; callers on another chain pass its id\nfunction buildLocalChain(rpcUrl: string, chainId: number = LOCAL_CHAIN_ID): Chain {\n return {\n id: chainId,\n name: 'agent-commerce-local',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: { http: [rpcUrl] },\n },\n } satisfies Chain;\n}\n\n/**\n * A read-only viem `PublicClient`.\n *\n * `timeoutMs` goes to viem's `http()` transport, which aborts the underlying\n * `fetch` when it expires rather than only abandoning the wait. Omit it to keep\n * viem's default of 10s.\n */\nexport function createLocalPublicClient(\n rpcUrl: string,\n timeoutMs?: number,\n chainId?: number,\n): PublicClient {\n return createPublicClient({\n chain: buildLocalChain(rpcUrl, chainId),\n transport: http(rpcUrl, timeoutMs !== undefined ? { timeout: timeoutMs } : undefined),\n });\n}\n\n/**\n * A viem `WalletClient` extended with public actions, for the local\n * facilitator signer only: the SDK's settlement both writes and reads through\n * it.\n *\n * LOCAL DEVELOPMENT ONLY. The key behind it pays gas on the dev chain. It is\n * usually an Anvil well-known key, and must never be a merchant, buyer or\n * production key.\n */\nexport function createLocalFacilitatorClient(\n rpcUrl: string,\n signerPrivateKey: `0x${string}`,\n chainId?: number,\n): LocalFacilitatorClient {\n const chain = buildLocalChain(rpcUrl, chainId);\n const account = privateKeyToAccount(signerPrivateKey);\n return createWalletClient({\n account,\n chain,\n transport: http(rpcUrl),\n }).extend(publicActions);\n}\n","/**\n * Shared facilitator interface and remote HTTP binding. The in-process EVM\n * binding lives in `local-facilitator.ts` to keep EVM peers out of this module.\n * `@x402/core` loads statically; `@coinbase/x402` loads only for `auth.type: cdp`.\n * Both bindings use the SDK to verify authorizations and broadcast transfers.\n *\n * Each verify or settle call gets a session with its own `transportFailed()`\n * flag, isolating concurrent payments' transport failures.\n */\nimport { HTTPFacilitatorClient } from '@x402/core/http';\nimport {\n type Network,\n type PaymentPayload,\n type PaymentRequirements,\n SettleError,\n type SettleResponse,\n type SupportedResponse,\n VerifyError,\n type VerifyResponse,\n} from '@x402/core/types';\nimport { CommerceError } from '../../core';\nimport type { FacilitatorAuth } from './guardrails';\n\n/** One verify or one settle, with its own transport-failure flag */\nexport interface FacilitatorSession {\n verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;\n settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;\n /**\n * True when the call produced no verdict: the local binding sets it when an\n * RPC call to the chain fails in transport, the remote binding on every\n * throw other than a 400 refusal of a verify or a settle.\n *\n * The SDK's `exact`/EVM scheme reports its own RPC errors as ordinary\n * verification failures: an unreachable node comes back as\n * `invalid_exact_evm_signature`. Without this flag the buyer would be told\n * their signature is bad for a payment nothing checked.\n */\n transportFailed(): boolean;\n}\n\ninterface BindingBase {\n /** Human-readable, never a credential */\n readonly describe: string;\n open(): FacilitatorSession;\n}\n\nexport type FacilitatorBinding =\n | (BindingBase & { readonly kind: 'local' })\n | (BindingBase & {\n readonly kind: 'remote';\n /**\n * SDK-parsed `/supported` response, including kinds and their `extra`\n * (such as Solana's fee payer), extensions and signers. health() reads\n * it, and so does a Solana challenge, which names the fee payer\n */\n supported(): Promise<SupportedResponse>;\n });\n\n/** Bounds each receipt wait of the in-process facilitator, and each verify or settle request to a remote one */\nexport const SETTLEMENT_CONFIRMATION_TIMEOUT_MS = 60_000;\n/**\n * Bounds a remote `/supported` read, retries included. Readiness and every\n * Solana challenge wait on it, and the SDK retries a 429 for up to 30 s a time.\n */\nexport const SUPPORTED_TIMEOUT_MS = 10_000;\n\nexport interface RemoteFacilitatorOptions {\n readonly url: string;\n readonly auth: FacilitatorAuth;\n}\n\n// The SDK's path-keyed auth-header shape. A flat object throws inside it\ntype AuthHeaderFactory = () => Promise<Record<string, Record<string, string>>>;\n\n/**\n * CDP needs a fresh JWT per request over method, host and path, which a static\n * header cannot express. The optional peer `@coinbase/x402` does the signing.\n * It is imported dynamically, so only `auth.type: cdp` pulls in the CDP SDK and\n * its Solana, axios and JOSE dependencies.\n *\n * The import starts at construction, so a missing peer fails the health check\n * before any payment needs it. A payment that arrives first fails as\n * `PAYMENT_PROVIDER_UNAVAILABLE`, never as a rejection blamed on the buyer.\n */\nfunction cdpAuthHeaders(apiKeyId: string, apiKeySecret: string): AuthHeaderFactory {\n const loading = import('@coinbase/x402').then(\n (mod) => mod.createCdpAuthHeaders(apiKeyId, apiKeySecret),\n (cause: unknown) => {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: facilitator.auth.type is \"cdp\", which needs the optional peer ' +\n '\"@coinbase/x402\". Install it (npm install @coinbase/x402), or use a facilitator ' +\n 'that accepts a static token with auth.type \"bearer\".',\n { cause },\n );\n },\n );\n // Nothing awaits this before the first call, so without a handler a failed\n // import would be an unhandled rejection at startup\n loading.catch(() => {});\n\n return async () => {\n const create = await loading;\n if (!create) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: @coinbase/x402 returned no auth-header factory',\n );\n }\n return (await create()) as Record<string, Record<string, string>>;\n };\n}\n\n/**\n * A 400 from `/verify` whose body names an `invalidReason` is the facilitator\n * refusing the payment, so it returns as an invalid verdict. The SDK throws it\n * as a `VerifyError`, which keeps the status and reason but not `isValid`.\n * A 400 without a reason and every other status, 401, 403, 429 and 5xx\n * included, are rethrown as \"no verdict\".\n */\nfunction verdictFromVerifyError(err: unknown): VerifyResponse {\n if (\n err instanceof VerifyError &&\n err.statusCode === 400 &&\n typeof err.invalidReason === 'string'\n ) {\n return {\n isValid: false,\n invalidReason: err.invalidReason,\n ...(err.payer !== undefined ? { payer: err.payer } : {}),\n };\n }\n throw err;\n}\n\n/**\n * Treat a remote 400 as a refusal only when it names a reason and no\n * transaction. A transaction may have broadcast; other errors have no\n * verdict. `SettleError` does not retain the response's `success`.\n */\nfunction verdictFromSettleError(err: unknown, network: Network): SettleResponse {\n if (\n err instanceof SettleError &&\n err.statusCode === 400 &&\n typeof err.errorReason === 'string' &&\n err.errorReason !== '' &&\n !err.transaction\n ) {\n return {\n success: false,\n errorReason: err.errorReason,\n transaction: '',\n network: err.network ?? network,\n ...(err.payer !== undefined ? { payer: err.payer } : {}),\n };\n }\n throw err;\n}\n\n/**\n * An HTTP facilitator. The SDK client produces the auth headers per request;\n * this module never logs them, and they appear neither in `/.well-known` nor\n * in `describe`.\n */\nexport function createRemoteFacilitatorBinding(\n options: RemoteFacilitatorOptions,\n): FacilitatorBinding {\n const auth = options.auth;\n let createAuthHeaders: AuthHeaderFactory | undefined;\n if (auth.type === 'bearer') {\n createAuthHeaders = async () => {\n // Path-keyed, as the SDK requires (see `AuthHeaderFactory`)\n const headers = { Authorization: `Bearer ${auth.token}` };\n return { verify: headers, settle: headers, supported: headers };\n };\n } else if (auth.type === 'cdp') {\n createAuthHeaders = cdpAuthHeaders(auth.apiKeyId, auth.apiKeySecret);\n }\n\n const client = new HTTPFacilitatorClient({\n url: options.url,\n timeoutMs: SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n ...(createAuthHeaders ? { createAuthHeaders } : {}),\n });\n const supportedClient = new HTTPFacilitatorClient({\n url: options.url,\n timeoutMs: SUPPORTED_TIMEOUT_MS,\n ...(createAuthHeaders ? { createAuthHeaders } : {}),\n });\n\n return {\n kind: 'remote',\n describe: `remote ${new URL(options.url).origin} (auth=${auth.type})`,\n open(): FacilitatorSession {\n let failed = false;\n const watch = async <T>(call: () => Promise<T>): Promise<T> => {\n try {\n return await call();\n } catch (err) {\n // After known 400 refusals, a throw gives no verdict. It may be\n // transport or authentication failure; settlement may have broadcast.\n // Do not record it as a payer refusal.\n failed = true;\n throw err;\n }\n };\n return {\n verify: (payload, requirements) =>\n watch(() => client.verify(payload, requirements).catch(verdictFromVerifyError)),\n settle: (payload, requirements) =>\n watch(() =>\n client\n .settle(payload, requirements)\n .catch((err: unknown) => verdictFromSettleError(err, requirements.network)),\n ),\n transportFailed: () => failed,\n };\n },\n supported: () => withDeadline(supportedClient.getSupported(), SUPPORTED_TIMEOUT_MS),\n };\n}\n\n// The SDK bounds each attempt but not its retry waits. `Promise.race` keeps\n// a handler on the abandoned call, so its later rejection is not unhandled.\nfunction withDeadline<T>(call: Promise<T>, ms: number): Promise<T> {\n let timer: NodeJS.Timeout | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () =>\n reject(\n new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator /supported did not answer within ${ms / 1000} s`,\n ),\n ),\n ms,\n );\n timer.unref();\n });\n return Promise.race([call, deadline]).finally(() => clearTimeout(timer));\n}\n","/**\n * In-process `x402Facilitator` using viem through `@x402/evm`.\n * EVM imports stay here so the remote binding can load without them.\n */\nimport { x402Facilitator } from '@x402/core/facilitator';\nimport type { Network } from '@x402/core/types';\nimport { toFacilitatorEvmSigner } from '@x402/evm';\nimport { registerExactEvmScheme } from '@x402/evm/exact/facilitator';\nimport type { LocalFacilitatorClient } from './chain';\nimport {\n type FacilitatorBinding,\n type FacilitatorSession,\n SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n} from './facilitator';\n\n/**\n * Registers `exact`/EVM for one network, so a payload naming another chain\n * finds no matching scheme\n */\nexport function createLocalFacilitatorBinding(\n client: LocalFacilitatorClient,\n network: string,\n isTransportError: (err: unknown) => boolean,\n): FacilitatorBinding {\n const build = (): { facilitator: x402Facilitator; failed: () => boolean } => {\n let failed = false;\n const watch = <T>(promise: Promise<T>): Promise<T> =>\n promise.catch((err: unknown) => {\n if (isTransportError(err)) failed = true;\n throw err;\n });\n\n // Watch the `FacilitatorEvmSigner` methods for transport failures and expose\n // `client.account.address` as the flat `address` the SDK expects\n const signer = {\n address: client.account.address,\n readContract: (args: Parameters<LocalFacilitatorClient['readContract']>[0]) =>\n watch(client.readContract(args)),\n verifyTypedData: (args: Parameters<LocalFacilitatorClient['verifyTypedData']>[0]) =>\n watch(client.verifyTypedData(args)),\n writeContract: (args: Parameters<LocalFacilitatorClient['writeContract']>[0]) =>\n watch(client.writeContract(args)),\n sendTransaction: (args: Parameters<LocalFacilitatorClient['sendTransaction']>[0]) =>\n watch(client.sendTransaction(args)),\n waitForTransactionReceipt: (\n args: Parameters<LocalFacilitatorClient['waitForTransactionReceipt']>[0],\n ) => watch(client.waitForTransactionReceipt(args)),\n getCode: (args: Parameters<LocalFacilitatorClient['getCode']>[0]) =>\n watch(client.getCode(args)),\n } as unknown as Parameters<typeof toFacilitatorEvmSigner>[0];\n\n // Bound receipt waits so a timeout returns `settlement_pending` with the\n // broadcast hash\n const facilitator = registerExactEvmScheme(new x402Facilitator(), {\n signer: toFacilitatorEvmSigner(signer, {\n confirmationTimeoutMs: SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n }),\n networks: network as Network,\n });\n\n return { facilitator, failed: () => failed };\n };\n\n return {\n kind: 'local',\n describe: 'local (in-process)',\n open(): FacilitatorSession {\n const { facilitator, failed } = build();\n return {\n verify: (payload, requirements) => facilitator.verify(payload, requirements),\n settle: (payload, requirements) => facilitator.settle(payload, requirements),\n transportFailed: failed,\n };\n },\n };\n}\n","/**\n * How the provider reads a facilitator's verify and settle results: which\n * reasons are verdicts, which leave the outcome unknown, and which errors mean\n * no verdict was obtained\n */\nimport {\n BaseError,\n ContractFunctionRevertedError,\n HttpRequestError,\n TimeoutError,\n WaitForTransactionReceiptTimeoutError,\n} from 'viem';\nimport { redactedErrorText } from '../../../core/errors';\n\n// `SettleResponse.errorReason` the SDK uses for \"broadcast, not confirmed\"\nexport const SETTLEMENT_PENDING_REASON = 'settlement_pending';\n/**\n * Each family's catch-all for a throw from the broadcast call, and its reason\n * for a transaction that failed on chain. Only the second carries a\n * transaction reference. A failure the SDK recognizes before the broadcast gets\n * its own reason instead. The EVM Permit2 path appends the thrown message as\n * `: <message>`. On NEAR the second is a failed inner `ft_transfer` receipt.\n */\nconst TRANSACTION_FAILED_REASONS = [\n 'invalid_exact_evm_transaction_failed',\n 'invalid_exact_svm_transaction_failed',\n 'settlement_failed',\n];\nexport const isTransactionFailedReason = (reason: string | undefined): boolean =>\n reason !== undefined &&\n TRANSACTION_FAILED_REASONS.some((known) => reason === known || reason.startsWith(`${known}:`));\n/**\n * The one failure reason per family that names a transaction and proves\n * nothing moved: a reverted EVM receipt, a Solana transaction that failed on\n * chain, or a failed inner NEAR `ft_transfer` receipt. Any other failure that\n * names a transaction may have moved funds. The EVM SDK, for one, reports a\n * mined transfer whose `Transfer` log it cannot match as a failure with the hash.\n */\nexport const ON_CHAIN_FAILURE_REASONS: Readonly<Record<'evm' | 'svm' | 'near', string>> = {\n evm: 'invalid_exact_evm_transaction_failed',\n svm: 'invalid_exact_svm_transaction_failed',\n near: 'settlement_failed',\n};\n/**\n * Solana outcomes that leave the payment unknown: the facilitator is already\n * settling the same transaction for another request, or it confirmed the\n * transaction but could not yet see the transfer\n */\nexport const UNKNOWN_OUTCOME_REASONS: ReadonlySet<string> = new Set([\n 'duplicate_settlement',\n 'post_settlement_transfer_not_confirmed',\n]);\n/**\n * Facilitator configuration and chain-read failures yield no payment verdict,\n * so they count as provider failures rather than buyer refusals. The NEAR SDK\n * returns its reasons before submission. The Solana ones compare the offer the\n * gateway sent with the facilitator's own fee payers, or with the buyer's\n * echo, which the gateway already matched.\n */\nexport const NO_VERDICT_REASONS: ReadonlySet<string> = new Set([\n 'unexpected_verify_error',\n 'invalid_exact_near_no_relayer_configured',\n 'invalid_exact_near_current_block_height_unavailable',\n 'invalid_exact_near_access_key_lookup_failed',\n 'invalid_exact_near_account_lookup_failed',\n 'invalid_exact_near_token_account_lookup_failed',\n 'invalid_exact_near_balance_check_failed',\n 'invalid_exact_near_storage_check_failed',\n 'invalid_exact_svm_payload_missing_fee_payer',\n 'invalid_exact_svm_fee_payer_not_managed_by_facilitator',\n 'invalid_exact_svm_unsupported_scheme',\n 'invalid_exact_svm_network_mismatch',\n]);\n/**\n * NEAR settle failures that are verdicts. The NEAR specification leaves the\n * reason implementation-specific and the transaction empty, even after a\n * submission, so only the SDK's verification reasons, returned before it\n * submits, and a failed inner `ft_transfer` with its hash prove nothing moved.\n */\nconst NEAR_PRE_SUBMISSION_REASONS: ReadonlySet<string> = new Set([\n 'invalid_x402_version',\n 'unsupported_scheme',\n 'invalid_network',\n 'insufficient_funds',\n 'verification_failed',\n]);\nexport const isNearVerdict = (reason: string | undefined): boolean =>\n reason !== undefined &&\n (reason === 'settlement_failed' ||\n reason.startsWith('invalid_exact_near_') ||\n NEAR_PRE_SUBMISSION_REASONS.has(reason));\n/**\n * `invalidReason`/`errorReason` are `z.string()` in the SDK schema, with no\n * length or charset bound. They reach the buyer's error, the persisted events\n * and the merchant's ledger. A remote facilitator controls these values, so\n * they are treated as untrusted input rather than diagnostic text.\n */\n// The SDKs' longest reason, a Solana compute-budget refusal, has 85 characters\nconst MAX_REASON_LENGTH = 128;\nconst REASON_SHAPE = /^[a-z0-9_.-]+$/i;\n\nexport function sanitizeReason(reason: string | undefined, fallback: string): string {\n if (reason === undefined) return fallback;\n const trimmed = reason.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_REASON_LENGTH) return fallback;\n return REASON_SHAPE.test(trimmed) ? trimmed : fallback;\n}\n\n// viem wraps every failed contract call in ContractFunctionExecutionError, so\n// only the cause chain can show a revert. A revert alone does not prove nothing\n// moved, because viem also reports an RPC error on a send as one; settle()\n// relies on the SDK throwing only before the broadcast.\nexport function isOnChainRevertError(err: unknown): boolean {\n return (\n err instanceof BaseError && err.walk((e) => e instanceof ContractFunctionRevertedError) !== null\n );\n}\n\n/**\n * The `instanceof` checks cover what the pinned viem HTTP transport throws\n * (`HttpRequestError` for every fetch failure, including connection refused,\n * or `TimeoutError`) and what `waitForTransactionReceipt` throws when it stops\n * polling after a broadcast. Message matching is only a fallback for errors\n * outside those classes, such as a raw undici error, because message text can\n * change with any viem or undici upgrade.\n */\nexport function isProviderUnavailableError(err: unknown): boolean {\n if (\n err instanceof HttpRequestError ||\n err instanceof TimeoutError ||\n err instanceof WaitForTransactionReceiptTimeoutError\n ) {\n return true;\n }\n const message = redactedErrorText(err).toLowerCase();\n return (\n message.includes('econnrefused') ||\n message.includes('fetch failed') ||\n message.includes('enotfound') ||\n message.includes('etimedout') ||\n message.includes('timed out') ||\n message.includes('network error')\n );\n}\n","// Builds each offer from its options: validation, deployment guardrails and the facilitator binding\nimport type { Network } from '@x402/core/types';\nimport { isAddress } from 'viem';\nimport { CommerceError } from '../../../core';\nimport { normalizeAddress, sameAddress } from '../addresses';\nimport {\n createLocalFacilitatorClient,\n createLocalPublicClient,\n type LocalFacilitatorClient,\n} from '../chain';\nimport { assertDevKeyIsLocalOnly, assertPayToIsNotDevAddress, describeRpc } from '../dev-key-guard';\nimport { createRemoteFacilitatorBinding, type FacilitatorBinding } from '../facilitator';\nimport { resolveX402Deployment } from '../guardrails';\nimport { createLocalFacilitatorBinding } from '../local-facilitator';\nimport { type DeploymentMode, findX402Network } from '../networks';\nimport { HEALTH_TIMEOUT_MS } from './constants';\nimport { isProviderUnavailableError } from './reasons';\nimport type {\n Offer,\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402ProviderOptions,\n} from './types';\n\n/**\n * Resolves provider and resource offers at construction, rejecting\n * misconfiguration before paid requests.\n */\nexport function resolveOffers(\n inputs: readonly X402OfferOptions[],\n options: X402ProviderOptions | X402MultiOfferProviderOptions,\n): {\n readonly offers: readonly Offer[];\n readonly resourceOffers: ReadonlyMap<string, readonly Offer[]>;\n /** Every distinct offer, the provider's first */\n readonly pool: readonly Offer[];\n readonly deploymentMode: DeploymentMode;\n readonly remoteBinding: FacilitatorBinding | undefined;\n} {\n // Share one remote binding, created after the first offer passes validation\n let remoteBinding: FacilitatorBinding | undefined;\n\n let mode: DeploymentMode | undefined;\n // An offer that several lists repeat is built, and health-checked, once\n const built = new Map<string, Offer>();\n const resolveList = (\n list: readonly X402OfferOptions[],\n field: (index: number, name: string) => string,\n ): readonly Offer[] => {\n const seen = new Set<string>();\n return list.map((input, index): Offer => {\n const at = (name: string) => field(index, name);\n // The network decides how the other fields are read. An unknown one\n // fails in `resolveX402Deployment` below.\n const known = findX402Network(input.network, options.customNetworks);\n if (known !== undefined && known.family !== 'evm') {\n const shape =\n known.family === 'svm' ? 'a Solana address (base58, 32 bytes)' : 'a NEAR account ID';\n for (const name of ['asset', 'payTo'] as const) {\n if (normalizeAddress(known, input[name]) === undefined) {\n throw new CommerceError('CONFIG_INVALID', `x402 provider: ${at(name)} is not ${shape}`);\n }\n }\n if (input.assetTransferMethod !== undefined) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('assetTransferMethod')} applies to EVM networks only`,\n );\n }\n } else {\n // Neither address is echoed: a swapped variable could contain a key.\n // Check mixed-case EIP-55 checksums here; config load checks only shape.\n if (!isAddress(input.asset)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('asset')} is not a valid EVM address (0x and 40 hex characters; a mixed-case address needs a valid EIP-55 checksum)`,\n );\n }\n if (!isAddress(input.payTo)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('payTo')} is not a valid EVM address (0x and 40 hex characters; a mixed-case address needs a valid EIP-55 checksum)`,\n );\n }\n // In every facilitator mode. `resolveX402Deployment` below also refuses\n // a dev payTo on any non-local deployment, whatever the RPC host.\n assertPayToIsNotDevAddress(input.rpcUrl, input.payTo);\n // The buyer signs the token's EIP-712 domain under EIP-3009, so the\n // requirement must name it. Permit2 has a domain of its own.\n if (\n (input.assetTransferMethod ?? 'eip3009') === 'eip3009' &&\n (!input.assetName || !input.assetVersion)\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: an EIP-3009 offer needs ${at('assetName')} and ${at('assetVersion')}, the token's EIP-712 domain`,\n );\n }\n }\n if (!Number.isInteger(input.assetDecimals) || input.assetDecimals < 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('assetDecimals')} must be a non-negative integer`,\n );\n }\n // The chain id is signed into the buyer's EIP-712 domain, so a network it\n // cannot be resolved from fails here, never at request time\n const deployment = resolveX402Deployment({\n network: input.network,\n ...(options.customNetworks !== undefined ? { customNetworks: options.customNetworks } : {}),\n payTo: input.payTo,\n asset: input.asset,\n ...(input.assetName !== undefined ? { assetName: input.assetName } : {}),\n ...(input.assetVersion !== undefined ? { assetVersion: input.assetVersion } : {}),\n facilitator: options.facilitator,\n ...(options.allowMainnet !== undefined ? { allowMainnet: options.allowMainnet } : {}),\n ...(options.allowUnauthenticatedFacilitator !== undefined\n ? { allowUnauthenticatedFacilitator: options.allowUnauthenticatedFacilitator }\n : {}),\n // Every EVM offer names its decimals and, under EIP-3009, its domain\n allowOtherEvmToken: true,\n });\n const profile = deployment.profile;\n // Refuse offers mixing local, testnet and mainnet deployment modes\n if (mode !== undefined && deployment.mode !== mode) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: offers mix ${mode} and ${deployment.mode} networks; every offer must be on a ${mode} network`,\n );\n }\n mode = deployment.mode;\n // EVM addresses compare case-insensitively; Solana and NEAR exactly\n const comparable = (value: string) =>\n profile.family === 'evm' ? value.toLowerCase() : value;\n const key = `${input.network}|${comparable(input.asset)}|${comparable(input.payTo)}`;\n if (seen.has(key)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('network')} repeats an earlier offer of the same asset to the same payTo on ${input.network}`,\n );\n }\n seen.add(key);\n const identity = [\n key,\n input.assetTransferMethod ?? 'eip3009',\n input.assetName,\n input.assetVersion,\n input.assetDecimals,\n input.rpcUrl,\n ].join('|');\n const existing = built.get(identity);\n if (existing !== undefined) return existing;\n\n // Construct the signer before requests can reserve replay keys, so an\n // unusable key fails provider construction.\n let binding: FacilitatorBinding;\n if (options.facilitator.mode === 'local') {\n assertDevKeyIsLocalOnly(input.rpcUrl, options.facilitator.signerPrivateKey);\n let client: LocalFacilitatorClient;\n try {\n client = createLocalFacilitatorClient(\n input.rpcUrl,\n options.facilitator.signerPrivateKey as `0x${string}`,\n );\n } catch (cause) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: could not construct a local facilitator signer from ' +\n 'facilitator.signerPrivateKey. It must be a valid 32-byte hex private key.',\n { cause },\n );\n }\n binding = createLocalFacilitatorBinding(client, input.network, isProviderUnavailableError);\n } else {\n remoteBinding ??= createRemoteFacilitatorBinding({\n url: options.facilitator.url,\n auth: options.facilitator.auth,\n });\n binding = remoteBinding;\n }\n\n // health() reads the chain itself, with a timeout. Verification and\n // settlement go through the facilitator instead. Health details can reach\n // logs, so they name the RPC by origin.\n const base = {\n network: input.network as Network,\n assetDecimals: input.assetDecimals,\n rpcUrl: input.rpcUrl,\n rpcOrigin: describeRpc(input.rpcUrl),\n binding,\n };\n const offer: Offer =\n profile.family === 'svm'\n ? { ...base, family: 'svm', profile, asset: input.asset, payTo: input.payTo }\n : profile.family === 'near'\n ? { ...base, family: 'near', profile, asset: input.asset, payTo: input.payTo }\n : {\n ...base,\n family: 'evm',\n profile,\n method: input.assetTransferMethod ?? 'eip3009',\n asset: input.asset as `0x${string}`,\n assetName: input.assetName,\n assetVersion: input.assetVersion,\n payTo: input.payTo as `0x${string}`,\n healthClient: createLocalPublicClient(\n input.rpcUrl,\n HEALTH_TIMEOUT_MS,\n profile.chainId,\n ),\n };\n built.set(identity, offer);\n return offer;\n });\n };\n\n const offers = resolveList(inputs, (index, name) =>\n inputs.length === 1 ? `\"${name}\"` : `\"offers[${index}].${name}\"`,\n );\n const resourceOffers = new Map(\n Object.entries(options.resourceOffers ?? {}).map(([id, list]) => {\n if (list.length === 0) {\n throw new CommerceError('CONFIG_INVALID', `x402 provider: \"resourceOffers.${id}\" is empty`);\n }\n return [id, resolveList(list, (index, name) => `\"resourceOffers.${id}[${index}].${name}\"`)];\n }),\n );\n return {\n offers,\n resourceOffers,\n pool: [...built.values()],\n deploymentMode: mode as DeploymentMode,\n remoteBinding,\n };\n}\n\n/**\n * Uses the network's default token symbol when paying that asset; otherwise\n * uses the resource's currency, the gateway's only label for another token.\n */\nexport function offerCurrency(offer: Offer, quoted: string): string {\n const canonical = offer.profile.canonicalAsset;\n return canonical !== undefined && sameAddress(offer.profile, offer.asset, canonical.address)\n ? canonical.symbol\n : quoted;\n}\n","// RFC 8785 (JCS) serialization for request hashes\n\n// With the `u` flag, a valid surrogate pair is one code point, so this pattern\n// matches only lone surrogates\nconst LONE_SURROGATE = /\\p{Cs}/u;\n\n/**\n * Serializes JSON data using RFC 8785 (JCS) rules. Non-finite numbers, lone\n * surrogates and unsupported primitive values return undefined.\n * JSON.stringify supplies number formatting and string escaping; the default\n * sort orders keys by UTF-16 code units.\n */\nexport function canonicalJson(value: unknown): string | undefined {\n if (typeof value === 'string')\n return LONE_SURROGATE.test(value) ? undefined : JSON.stringify(value);\n if (typeof value === 'number') return Number.isFinite(value) ? JSON.stringify(value) : undefined;\n if (value === null || typeof value === 'boolean') return JSON.stringify(value);\n if (Array.isArray(value)) {\n const items = value.map(canonicalJson);\n return items.includes(undefined) ? undefined : `[${items.join(',')}]`;\n }\n if (typeof value !== 'object') return undefined;\n const members: string[] = [];\n for (const key of Object.keys(value).sort()) {\n const member = canonicalJson((value as Record<string, unknown>)[key]);\n if (member === undefined || LONE_SURROGATE.test(key)) return undefined;\n members.push(`${JSON.stringify(key)}:${member}`);\n }\n return `{${members.join(',')}}`;\n}\n","/**\n * Issues experimental ERC-8409 quotes when the provider enables `quote`.\n *\n * For requests that can be canonicalized, `extensions[\"erc-8409\"]` carries\n * one quote per EVM offer: chain, token, payee and amount in base units.\n * A dedicated issuer key signs the terms and request hash with EIP-712.\n * Quotes are informational; verify() and settle() use the offer without\n * reading the quotes.\n */\nimport { randomBytes } from 'node:crypto';\nimport { type Hex, keccak256, stringToBytes } from 'viem';\nimport { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts';\nimport { type Clock, CommerceError } from '../../../core';\nimport { canonicalJson } from '../../../core/canonical-json';\nimport { isWellKnownDevKey } from '../dev-key-guard';\nimport type { DeploymentMode } from '../networks';\nimport type { EvmOffer, Offer } from './types';\n\n/** Key for quotes in `PaymentRequired.extensions` */\nexport const QUOTE_EXTENSION = 'erc-8409';\n\n/**\n * Request scheme for Keccak-256 hashes of the RFC 8785 (JCS) serialization of\n * `{ \"input\": <input>, \"resource\": <resource id> }`. The input is the validated\n * resource input used to build the backend request. The resource ID identifies\n * the operation and also names the MCP tool and A2A skill.\n */\nexport const QUOTE_REQUEST_SCHEME = 'agent-commerce/request/v1';\n\n/** The ERC's EIP-712 domain, with the chain ID added per quote */\nexport const QUOTE_DOMAIN = { name: 'Signed Service Payment Quotes', version: '1' } as const;\n\n/** The ERC's EIP-712 type; field order is part of the type hash */\nexport const QUOTE_TYPES = {\n ServicePaymentQuote: [\n { name: 'issuer', type: 'address' },\n { name: 'payer', type: 'address' },\n { name: 'recipient', type: 'address' },\n { name: 'asset', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'requestScheme', type: 'string' },\n { name: 'requestHash', type: 'bytes32' },\n { name: 'quoteId', type: 'bytes32' },\n { name: 'validAfter', type: 'uint64' },\n { name: 'validUntil', type: 'uint64' },\n ],\n} as const;\n\n// A zero payer makes a bearer quote; the payment signature identifies the payer\nconst BEARER = '0x0000000000000000000000000000000000000000';\n\n// The JSON Schema x402 v2 requires beside each extension's `info`\nconst QUOTE_INFO_SCHEMA = {\n type: 'object',\n required: ['quotes'],\n properties: {\n quotes: {\n type: 'array',\n items: {\n type: 'object',\n required: ['chainId', 'quote', 'signature'],\n properties: {\n chainId: { type: 'string' },\n // Every field is a string in the ERC's JSON encoding\n quote: {\n type: 'object',\n required: QUOTE_TYPES.ServicePaymentQuote.map((field) => field.name),\n properties: Object.fromEntries(\n QUOTE_TYPES.ServicePaymentQuote.map((field) => [field.name, { type: 'string' }]),\n ),\n },\n signature: { type: 'string' },\n },\n },\n },\n },\n} as const;\n\n// Bound cache memory by evicting the oldest quote when the limit is reached\nconst QUOTE_CACHE_LIMIT = 1024;\n\n/** A quote in the ERC's JSON format, with integers as decimal strings */\nexport interface SignedQuote {\n readonly chainId: string;\n readonly quote: {\n readonly issuer: Hex;\n readonly payer: Hex;\n readonly recipient: Hex;\n readonly asset: Hex;\n readonly amount: string;\n readonly requestScheme: string;\n readonly requestHash: Hex;\n readonly quoteId: Hex;\n readonly validAfter: string;\n readonly validUntil: string;\n };\n readonly signature: Hex;\n}\n\n/** An EVM challenge offer and its `accepts` amount in base units */\nexport interface QuotedOffer {\n readonly offer: EvmOffer;\n readonly amount: string;\n}\n\nexport interface QuoteIssuer {\n readonly issuer: Hex;\n /**\n * Challenge extensions, or undefined when there are no EVM offers, input is\n * missing, or canonicalJson rejects the request\n */\n readonly extensionsFor: (\n resourceId: string,\n input: unknown,\n offers: readonly QuotedOffer[],\n ) => Promise<Record<string, unknown> | undefined>;\n}\n\n/**\n * Creates the issuer during provider construction. Rejects an invalid key,\n * a well-known Anvil key outside the local chain, a key matching an EVM\n * `payTo`, or a configuration without an EVM offer.\n */\nexport function createQuoteIssuer(options: {\n readonly signerPrivateKey: string;\n readonly offers: readonly Offer[];\n readonly deploymentMode: DeploymentMode;\n readonly clock: Clock;\n readonly maxTimeoutSeconds: number;\n}): QuoteIssuer {\n const { signerPrivateKey, offers, deploymentMode, clock, maxTimeoutSeconds } = options;\n let account: PrivateKeyAccount;\n try {\n account = privateKeyToAccount(signerPrivateKey as Hex);\n } catch (cause) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey is not a valid private key (expected \"0x\" followed by 64 hex characters)',\n { cause },\n );\n }\n if (deploymentMode !== 'local' && isWellKnownDevKey(signerPrivateKey)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey is a well-known Anvil development key, so anyone could sign quotes as this gateway. Use a dedicated key outside the local chain.',\n );\n }\n const evmOffers = offers.filter((offer): offer is EvmOffer => offer.family === 'evm');\n if (evmOffers.length === 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote needs an EVM offer; ERC-8409 quotes cover EVM networks only',\n );\n }\n const issuer = account.address;\n if (evmOffers.some((offer) => offer.payTo.toLowerCase() === issuer.toLowerCase())) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey controls a payTo address. Use a dedicated key, not the merchant wallet.',\n );\n }\n\n const cache = new Map<string, SignedQuote>();\n\n async function quoteFor(offer: EvmOffer, amount: string, requestHash: Hex): Promise<SignedQuote> {\n const now = Math.floor(clock.now().getTime() / 1000);\n const { chainId } = offer.profile;\n const key = [\n chainId,\n offer.payTo.toLowerCase(),\n offer.asset.toLowerCase(),\n amount,\n requestHash,\n ].join('|');\n const cached = cache.get(key);\n // Reuse a cached quote while a full payment window remains to avoid\n // signing retries; a cache miss requires a new signature\n if (cached !== undefined && Number(cached.quote.validUntil) - now >= maxTimeoutSeconds) {\n return cached;\n }\n const validUntil = now + 2 * maxTimeoutSeconds;\n const quote = {\n issuer,\n payer: BEARER,\n recipient: offer.payTo,\n asset: offer.asset,\n amount,\n requestScheme: QUOTE_REQUEST_SCHEME,\n requestHash,\n // Use a new ID for each signed body, as the ERC requires\n quoteId: `0x${randomBytes(32).toString('hex')}`,\n validAfter: String(now),\n validUntil: String(validUntil),\n } as const;\n const signature = await account.signTypedData({\n domain: { ...QUOTE_DOMAIN, chainId },\n types: QUOTE_TYPES,\n primaryType: 'ServicePaymentQuote',\n message: {\n ...quote,\n amount: BigInt(amount),\n validAfter: BigInt(now),\n validUntil: BigInt(validUntil),\n },\n });\n const signed: SignedQuote = { chainId: String(chainId), quote, signature };\n cache.delete(key);\n if (cache.size >= QUOTE_CACHE_LIMIT) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n cache.set(key, signed);\n return signed;\n }\n\n return {\n issuer,\n async extensionsFor(resourceId, input, quoted) {\n if (quoted.length === 0) return undefined;\n // Missing or non-canonicalizable input still gets a payment challenge\n // without quotes\n const requestHash = quoteRequestHash(resourceId, input);\n if (requestHash === undefined) return undefined;\n const quotes: SignedQuote[] = [];\n for (const { offer, amount } of quoted) {\n quotes.push(await quoteFor(offer, amount, requestHash));\n }\n return { [QUOTE_EXTENSION]: { info: { quotes }, schema: QUOTE_INFO_SCHEMA } };\n },\n };\n}\n\n/** Hash under {@link QUOTE_REQUEST_SCHEME}, or undefined when canonicalJson rejects the request */\nexport function quoteRequestHash(resourceId: string, input: unknown): Hex | undefined {\n const canonical = canonicalJson({ input, resource: resourceId });\n return canonical === undefined ? undefined : keccak256(stringToBytes(canonical));\n}\n","/**\n * Decodes and validates the base64 `PAYMENT-SIGNATURE` submission.\n *\n * A malformed payload must become a `rejected` verification, never a thrown\n * request, so this returns `undefined` on any failure. That is why it parses\n * the schema itself instead of calling the SDK's `decodePaymentSignatureHeader`,\n * which throws.\n */\nimport { PaymentPayloadV2Schema } from '@x402/core/schemas';\nimport type { PaymentPayload } from '@x402/core/types';\nimport type { ExactEIP3009Payload, ExactPermit2Payload } from '@x402/evm';\nimport { isRecord } from '../../core/is-record';\nimport { isEvmAddress } from './addresses';\n\nexport function decodePaymentSubmission(payloadBase64: string): PaymentPayload | undefined {\n const json = decodeJson(payloadBase64);\n if (json === undefined) return undefined;\n const result = PaymentPayloadV2Schema.safeParse(json);\n return result.success ? (result.data as PaymentPayload) : undefined;\n}\n\n/** Read the declared version before v2 schema validation */\nexport function declaredX402Version(payloadBase64: string): unknown {\n const json = decodeJson(payloadBase64);\n return typeof json === 'object' && json !== null\n ? (json as Record<string, unknown>)['x402Version']\n : undefined;\n}\n\n/**\n * The payload as sent to a facilitator. `resource` is optional in v2 and\n * verify() has already matched it against the offer; hosted facilitators have\n * settled payloads without it, and none has been shown to accept this\n * gateway's `resource://` URL. `extensions` is dropped because quote echoes\n * are not used to verify payment, and a gas-sponsoring extension in a Permit2\n * payload would activate unsupported SDK facilitator behavior.\n */\nexport function forFacilitator<T extends PaymentPayload>(\n payload: T,\n): Omit<T, 'resource' | 'extensions'> {\n const { resource: _resource, extensions: _extensions, ...rest } = payload;\n return rest;\n}\n\nfunction decodeJson(payloadBase64: string): unknown {\n try {\n return JSON.parse(Buffer.from(payloadBase64, 'base64').toString('utf8'));\n } catch {\n return undefined;\n }\n}\n\n/**\n * Narrows a decoded payload to the EIP-3009 `exact`/EVM shape.\n *\n * The SDK facilitator settles any payload carrying `permit2Authorization`\n * through Permit2, so a payload with both shapes is refused: the gateway would\n * check one authorization and the facilitator would settle the other.\n */\nexport function isExactEvmPayload(\n payload: PaymentPayload,\n): payload is PaymentPayload & { payload: ExactEIP3009Payload } {\n const inner = payload.payload;\n return (\n payload.accepted.scheme === 'exact' &&\n isRecord(inner) &&\n isRecord(inner['authorization']) &&\n !('permit2Authorization' in inner) &&\n typeof inner['signature'] === 'string'\n );\n}\n\n// A uint256 in decimal, the form the SDK client writes\nconst UINT256 = /^(0|[1-9]\\d{0,77})$/;\nconst UINT256_MAX = 2n ** 256n - 1n;\n// An EIP-3009 nonce: 32 bytes in hex\nconst BYTES32 = /^0x[0-9a-fA-F]{64}$/;\n\nconst isUint256 = (value: unknown): value is string =>\n typeof value === 'string' && UINT256.test(value) && BigInt(value) <= UINT256_MAX;\n\n/**\n * Checks an EIP-3009 authorization's fields in the forms the SDK client and\n * mppx write: addresses, decimal uint256 strings and a 32-byte hex nonce. A\n * value such as `\"0x2710\"` would otherwise reach the receipt as written.\n */\nexport function hasEip3009Fields(authorization: Readonly<Record<string, unknown>>): boolean {\n return (\n isEvmAddress(authorization['from']) &&\n isEvmAddress(authorization['to']) &&\n isUint256(authorization['value']) &&\n isUint256(authorization['validAfter']) &&\n isUint256(authorization['validBefore']) &&\n typeof authorization['nonce'] === 'string' &&\n BYTES32.test(authorization['nonce'])\n );\n}\n\n/**\n * Checks the Permit2 `exact`/EVM fields used to match the offer and derive\n * the replay key. The facilitator checks the signature and on-chain state.\n */\nexport function isExactPermit2Payload(\n payload: PaymentPayload,\n): payload is PaymentPayload & { payload: ExactPermit2Payload } {\n const inner = payload.payload;\n if (payload.accepted.scheme !== 'exact' || !isRecord(inner)) return false;\n const auth = inner['permit2Authorization'];\n if (!isRecord(auth) || 'authorization' in inner || typeof inner['signature'] !== 'string') {\n return false;\n }\n const { permitted, witness } = auth;\n return (\n isRecord(permitted) &&\n isRecord(witness) &&\n isEvmAddress(auth['from']) &&\n isEvmAddress(auth['spender']) &&\n isEvmAddress(permitted['token']) &&\n isEvmAddress(witness['to']) &&\n isUint256(permitted['amount']) &&\n isUint256(auth['nonce']) &&\n isUint256(auth['deadline']) &&\n isUint256(witness['validAfter'])\n );\n}\n","// The challenge a resource answers with, and the offer a proof selects from it\nimport type { PaymentRequired, PaymentRequirements } from '@x402/core/types';\nimport type { PaymentContext, PaymentRequirement, PaymentVerificationContext } from '../../../core';\nimport {\n REUSE_REJECTED_AUTHORIZATION_METADATA_KEY,\n SETTLE_AFTER_BACKEND_METADATA_KEY,\n} from '../../../core/execution/settlement-order';\nimport { sameAddress } from '../addresses';\nimport { parseCanonicalAmount } from '../amount';\nimport type { X402Network } from '../networks';\nimport { decodePaymentSubmission } from '../payload';\nimport { X402_DEFAULT_PAYMENT_FLOW } from '../payment-flow';\nimport { DEFAULT_MIME_TYPE, X402_PROTOCOL_VERSION, X402_VERSION } from './constants';\nimport type { ProviderContext, SvmOffer } from './types';\n\n// Requirement metadata naming the offer `selectRequirement` chose, by index\nexport const SELECTED_OFFER_KEY = 'x402.offer';\n\n// Use the selected or sole offer; multi-offer challenges require selection\nexport function offerIndexOf(requirement: PaymentRequirement): number | undefined {\n const selected = requirement.metadata?.[SELECTED_OFFER_KEY];\n if (typeof selected === 'number') return selected;\n // An empty list falls through to 'missing_payment_requirements'\n return requirement.challenge.accepts.length <= 1 ? 0 : undefined;\n}\n\n/**\n * Match echoed terms against the offer. Extra client keys and\n * `maxTimeoutSeconds` do not matter; EVM addresses ignore case, Solana's do\n * not. Compare effective payment flows so an upfront proof cannot pay a default\n * authorization offer.\n */\nexport function acceptedMatchesOffer(\n offered: PaymentRequirements,\n accepted: PaymentRequirements,\n network: X402Network | undefined,\n): boolean {\n if (!network) return false;\n const same = (a: string, b: string) => sameAddress(network, a, b);\n const offeredExtra = offered.extra ?? {};\n const acceptedExtra = accepted.extra ?? {};\n const flow = (extra: Record<string, unknown>) =>\n extra['paymentFlow'] ?? X402_DEFAULT_PAYMENT_FLOW;\n return (\n accepted.scheme === offered.scheme &&\n accepted.network === offered.network &&\n accepted.amount === offered.amount &&\n same(accepted.asset, offered.asset) &&\n same(accepted.payTo, offered.payTo) &&\n Object.entries(offeredExtra).every(([key, value]) => acceptedExtra[key] === value) &&\n flow(acceptedExtra) === flow(offeredExtra)\n );\n}\n\n/** Builds the provider's `createRequirement` and `selectRequirement` */\nexport function createRequirementBuilders(\n ctx: ProviderContext,\n svmFeePayer: (offer: SvmOffer) => Promise<string>,\n): {\n readonly createRequirement: (context: PaymentContext) => Promise<PaymentRequirement>;\n readonly selectRequirement: (context: PaymentVerificationContext) => Promise<PaymentRequirement>;\n} {\n const { options, offersFor, clock, ids, maxTimeoutSeconds } = ctx;\n\n async function createRequirement(context: PaymentContext): Promise<PaymentRequirement> {\n const offers = offersFor(context.resource.id);\n const paymentFlow =\n options.resourcePaymentFlows?.[context.resource.id] ??\n options.paymentFlow ??\n X402_DEFAULT_PAYMENT_FLOW;\n\n // x402 requires an explicit non-default flow. Omit the default\n // `authorization` flow here.\n const flow = paymentFlow === 'upfront' ? { paymentFlow } : {};\n const accepts: PaymentRequirements[] = await Promise.all(\n offers.map(async (offer) => ({\n scheme: 'exact',\n network: offer.network,\n asset: offer.asset,\n amount: parseCanonicalAmount(context.amount, offer.assetDecimals).toString(),\n payTo: offer.payTo,\n maxTimeoutSeconds,\n // EIP-3009 needs `name`/`version` for a shared EIP-712 domain without\n // a token `version()` call; Permit2 uses its own domain. EVM clients\n // sign the named `assetTransferMethod`. Solana needs the facilitator's\n // fee payer; NEAR needs no scheme-specific extra because the\n // facilitator chooses its relayer.\n extra:\n offer.family === 'svm'\n ? { feePayer: await svmFeePayer(offer), ...flow }\n : offer.family === 'near'\n ? { ...flow }\n : {\n ...(offer.assetName !== undefined ? { name: offer.assetName } : {}),\n ...(offer.assetVersion !== undefined ? { version: offer.assetVersion } : {}),\n assetTransferMethod: offer.method,\n ...flow,\n },\n })),\n );\n const single = offers.length === 1 ? offers[0] : undefined;\n const extensions = await ctx.quotes?.extensionsFor(\n context.resource.id,\n context.input,\n offers.flatMap((offer, index) => {\n const accepted = accepts[index];\n return offer.family === 'evm' && accepted ? [{ offer, amount: accepted.amount }] : [];\n }),\n );\n\n // The v2 challenge document as sent on the wire. The HTTP adapter\n // base64-encodes it into `PAYMENT-REQUIRED` and MCP passes it through, so\n // both surfaces offer the same challenge.\n //\n // `resource.url` is outside the EIP-3009 signature. A single offer puts its\n // network and payee in it, so the buyer's echo identifies the offer. With\n // several, the URL stays the same whichever one the buyer pays.\n const resourceId = encodeURIComponent(context.resource.id);\n const envelope: PaymentRequired = {\n x402Version: X402_VERSION,\n resource: {\n url: single\n ? `resource://agent-commerce/${encodeURIComponent(single.network)}/${single.payTo}/resources/${resourceId}`\n : `resource://agent-commerce/resources/${resourceId}`,\n description: context.resource.description ?? context.resource.name,\n // The media type the merchant declares, else `application/json`; an HTTP\n // delivery carries the backend's own type when it is text and fits the body\n mimeType: options.resourceMimeTypes?.[context.resource.id] ?? DEFAULT_MIME_TYPE,\n },\n accepts,\n ...(extensions !== undefined ? { extensions } : {}),\n };\n\n const expiresAt = new Date(clock.now().getTime() + maxTimeoutSeconds * 1000).toISOString();\n\n return {\n id: ids.next('payreq'),\n requestId: context.requestId,\n resourceId: context.resource.id,\n provider: 'x402',\n amount: context.amount,\n currency: context.currency,\n // Several offers name several destinations; selection fills these in\n ...(single\n ? { destination: single.payTo, network: single.network, asset: single.asset }\n : {}),\n expiresAt,\n challenge: {\n provider: 'x402',\n version: X402_PROTOCOL_VERSION,\n accepts: accepts as unknown as Record<string, unknown>[],\n envelope: envelope as unknown as Record<string, unknown>,\n },\n metadata: {\n [SETTLE_AFTER_BACKEND_METADATA_KEY]: paymentFlow === 'authorization',\n // The SDK server keeps no record of a payload whose handler or\n // settlement failed and verifies it again; the chain spends it once\n [REUSE_REJECTED_AUTHORIZATION_METADATA_KEY]: true,\n },\n };\n }\n\n /**\n * Selects the unique offer matching `accepted`, leaving zero or multiple\n * matches unchanged for `verify()` to reject. Selection identifies the\n * claimed offer; verification still validates the proof.\n */\n async function selectRequirement(\n context: PaymentVerificationContext,\n ): Promise<PaymentRequirement> {\n const { requirement, submission } = context;\n const offered = requirement.challenge.accepts as unknown as PaymentRequirements[];\n if (offered.length < 2) return requirement;\n const offers = offersFor(requirement.resourceId);\n const payload = decodePaymentSubmission(submission.payload);\n if (!payload) return requirement;\n const matches = offered.flatMap((offer, index) =>\n acceptedMatchesOffer(offer, payload.accepted, offers[index]?.profile) ? [index] : [],\n );\n const index = matches.length === 1 ? matches[0] : undefined;\n const offer = index === undefined ? undefined : offers[index];\n if (index === undefined || !offer) return requirement;\n return {\n ...requirement,\n destination: offer.payTo,\n network: offer.network,\n asset: offer.asset,\n metadata: { ...requirement.metadata, [SELECTED_OFFER_KEY]: index },\n };\n }\n\n return { createRequirement, selectRequirement };\n}\n","// What an EVM payload authorizes: payer, payee, amount and replay key\n\nimport type { PaymentPayload } from '@x402/core/types';\nimport { x402ExactPermit2ProxyAddress } from '@x402/evm';\nimport { getAddress, isAddress } from 'viem';\nimport { hasEip3009Fields, isExactEvmPayload, isExactPermit2Payload } from '../payload';\nimport { computePermit2ReplayKey, computeReplayKey } from '../replay-key';\nimport type { EvmOffer } from './types';\n\n// What a payload authorizes, read the way the offer's method settles it\nexport interface Transfer {\n readonly from: `0x${string}`;\n readonly to: `0x${string}`;\n readonly value: string;\n readonly replayKey: string;\n readonly recipientMismatch: string;\n readonly amountMismatch: string;\n}\n\n/**\n * Reads the payer, payee, amount and replay key, or returns a refusal reason.\n * Enforces the offer's method because the SDK facilitator chooses the method\n * from the payload.\n */\nexport function readTransfer(payload: PaymentPayload, offer: EvmOffer): Transfer | string {\n // verify() refuses an `accepted.network` other than the offer's, so this\n // chain id is the one the authorization is bound to\n const { chainId } = offer.profile;\n if (offer.method === 'eip3009') {\n if (!isExactEvmPayload(payload)) return 'unsupported_scheme';\n const { authorization } = payload.payload;\n const { from, to, value, nonce } = authorization;\n if (!hasEip3009Fields(authorization) || !isAddress(from) || !isAddress(to)) {\n return 'invalid_payload';\n }\n return {\n from: getAddress(from),\n to: getAddress(to),\n value,\n replayKey: computeReplayKey({\n chainId,\n asset: getAddress(offer.asset),\n from: getAddress(from),\n nonce,\n }),\n recipientMismatch: 'invalid_exact_evm_payload_recipient_mismatch',\n amountMismatch: 'invalid_exact_evm_payload_authorization_value_mismatch',\n };\n }\n if (!isExactPermit2Payload(payload)) return 'unsupported_scheme';\n const { from, spender, permitted, witness, nonce } = payload.payload.permit2Authorization;\n // Permit2 lets the spender move the permitted tokens anywhere; only the x402\n // proxy binds the transfer to the signed witness recipient\n if (getAddress(spender) !== getAddress(x402ExactPermit2ProxyAddress)) {\n return 'invalid_permit2_spender';\n }\n if (getAddress(permitted.token) !== getAddress(offer.asset)) return 'permit2_token_mismatch';\n return {\n from: getAddress(from),\n to: getAddress(witness.to),\n value: permitted.amount,\n replayKey: computePermit2ReplayKey({ chainId, owner: getAddress(from), nonce }),\n recipientMismatch: 'invalid_permit2_recipient_mismatch',\n amountMismatch: 'permit2_amount_mismatch',\n };\n}\n","// Settles a verified proof and classifies the facilitator's answer\nimport type { PaymentRequirements, SettleResponse } from '@x402/core/types';\nimport type { PaymentResult, PaymentSettlementContext } from '../../../core';\nimport { CommerceError } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { isTransactionReference } from '../addresses';\nimport { decodePaymentSubmission, forFacilitator } from '../payload';\nimport {\n isNearVerdict,\n isOnChainRevertError,\n isProviderUnavailableError,\n isTransactionFailedReason,\n NO_VERDICT_REASONS,\n ON_CHAIN_FAILURE_REASONS,\n SETTLEMENT_PENDING_REASON,\n sanitizeReason,\n UNKNOWN_OUTCOME_REASONS,\n} from './reasons';\nimport { offerIndexOf } from './requirement';\nimport { readTransfer } from './transfer';\nimport type { ProviderContext } from './types';\n\n/** Builds the provider's `settle`, which throws unless handed a successful verification */\nexport function createSettle(\n ctx: ProviderContext,\n): (context: PaymentSettlementContext) => Promise<PaymentResult> {\n const { offersFor, clock, logger } = ctx;\n\n async function settle(context: PaymentSettlementContext): Promise<PaymentResult> {\n const { requirement, submission, verification } = context;\n\n if (verification.status !== 'verified') {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() called without a successful verify()',\n );\n }\n\n const index = offerIndexOf(requirement);\n const offer = index === undefined ? undefined : offersFor(requirement.resourceId)[index];\n const requirements =\n index === undefined\n ? undefined\n : (requirement.challenge.accepts[index] as PaymentRequirements | undefined);\n if (!offer || !requirements) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() found no payment requirements to settle against',\n );\n }\n\n const payload = decodePaymentSubmission(submission.payload);\n const transfer = payload && offer.family === 'evm' ? readTransfer(payload, offer) : undefined;\n if (!payload || typeof transfer === 'string') {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() received an undecodable payment payload',\n );\n }\n const reference = (value: string) => isTransactionReference(offer.profile, value);\n\n const rejectedSettlement = (rejectionReason: string): PaymentResult => ({\n status: 'rejected',\n provider: 'x402',\n amount: verification.amount,\n currency: verification.currency,\n ...(verification.network !== undefined ? { network: verification.network } : {}),\n ...(verification.asset !== undefined ? { asset: verification.asset } : {}),\n ...(verification.replayKey !== undefined ? { replayKey: verification.replayKey } : {}),\n rejectionReason,\n });\n\n const scope = offer.binding.open();\n let sdkResult: SettleResponse;\n try {\n sdkResult = await scope.settle(forFacilitator(payload), requirements);\n } catch (err) {\n if (isProviderUnavailableError(err) || scope.transportFailed()) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator unreachable during settle()`,\n { cause: err },\n );\n }\n // The pinned SDK returns a result for every failure from gas estimation\n // on, so a throw comes from its checks before anything is sent. A revert\n // there is a real rejection, which releases any mandate the pipeline\n // holds for the purchase. Any other throw goes back as an unavailable\n // provider, which the pipeline records as `settlement-uncertain`, never\n // as a rejection blamed on the buyer.\n if (!isOnChainRevertError(err)) {\n logger.warn(\n { err: redactedErrorText(err) },\n 'x402 settle(): settlement failed with an unclassified error; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n { cause: err },\n );\n }\n logger.warn(\n { err: redactedErrorText(err), rejectionReason: 'transaction_reverted' },\n 'x402 settle(): settlement transaction reverted on chain',\n );\n return rejectedSettlement('transaction_reverted');\n }\n\n // verify() established the payer. The Solana scheme's settlement example\n // names the fee payer there, while x402 v2 defines the payer's wallet.\n const payer = verification.payer ?? sdkResult.payer;\n\n if (!sdkResult.success) {\n // \"Broadcast, never confirmed\" is not \"did not happen\": the transfer may\n // be on-chain, so it throws as an unavailable provider carrying the hash,\n // and the pipeline records the attempt `settlement-uncertain`, not\n // `rejected`. The SDK's catch-all without a hash is treated the same way,\n // because its throw may have followed a broadcast and viem reports an\n // RPC error on the send as a revert.\n if (isTransactionFailedReason(sdkResult.errorReason) && !reference(sdkResult.transaction)) {\n // The appended message can carry an RPC URL\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason) },\n 'x402 settle(): the broadcast failed without a transaction hash; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n );\n }\n // These NEAR SDK checks fail before submission. Release the attempt so\n // a retry using the same access-key nonce can reserve it again.\n if (\n offer.family === 'near' &&\n NO_VERDICT_REASONS.has(sdkResult.errorReason ?? '') &&\n !sdkResult.transaction\n ) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator could not check the payment before submitting it',\n {\n details: {\n settlementNotSubmitted: true,\n reason: sanitizeReason(sdkResult.errorReason, 'facilitator_unavailable'),\n },\n },\n );\n }\n // A broadcast the SDK could not confirm nor record for a retry comes\n // back as its catch-all with the transaction, and a message starting\n // `settlement_pending`\n if (\n sdkResult.errorReason === SETTLEMENT_PENDING_REASON ||\n sdkResult.errorMessage?.startsWith(SETTLEMENT_PENDING_REASON) === true ||\n UNKNOWN_OUTCOME_REASONS.has(sdkResult.errorReason ?? '') ||\n NO_VERDICT_REASONS.has(sdkResult.errorReason ?? '') ||\n scope.transportFailed()\n ) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement was broadcast but could not be confirmed',\n {\n ...(sdkResult.transaction\n ? { details: { transactionHash: sdkResult.transaction } }\n : {}),\n },\n );\n }\n // Only the family's on-chain failure proves a named transaction moved\n // nothing. Any other reason may follow a transfer that landed.\n if (\n sdkResult.transaction &&\n sdkResult.errorReason !== ON_CHAIN_FAILURE_REASONS[offer.family]\n ) {\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason ?? '') },\n 'x402 settle(): the facilitator reported a failure with a transaction; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator reported a failed settlement with a transaction; outcome unknown',\n { details: { transactionHash: sdkResult.transaction } },\n );\n }\n // A `settlement_failed` that reaches here carries its hash\n if (offer.family === 'near' && !isNearVerdict(sdkResult.errorReason)) {\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason ?? '') },\n 'x402 settle(): NEAR facilitator failure reason is not a verdict; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n );\n }\n if (sdkResult.errorReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.errorReason) },\n 'x402 settle(): facilitator failure reason',\n );\n }\n return {\n ...rejectedSettlement(sanitizeReason(sdkResult.errorReason, 'settlement_failed')),\n network: sdkResult.network,\n ...(payer !== undefined ? { payer } : {}),\n // The failed transaction, which the facilitator paid for\n ...(sdkResult.transaction ? { externalReference: sdkResult.transaction } : {}),\n };\n }\n\n // A success names the offer's network and a transaction in its family's\n // form; anything else unlocks nothing, and the outcome stays unknown\n if (!reference(sdkResult.transaction) || sdkResult.network !== offer.network) {\n logger.warn(\n { network: sdkResult.network },\n 'x402 settle(): the facilitator reported a success it did not identify; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator reported a settlement without a valid transaction; outcome unknown',\n );\n }\n\n return {\n status: 'settled',\n provider: 'x402',\n externalReference: sdkResult.transaction,\n ...(payer !== undefined ? { payer } : {}),\n payee: requirements.payTo,\n amount: verification.amount,\n currency: verification.currency,\n network: sdkResult.network,\n ...(verification.asset !== undefined ? { asset: verification.asset } : {}),\n ...(verification.replayKey !== undefined ? { replayKey: verification.replayKey } : {}),\n settledAt: clock.nowIso(),\n // `amount` is the display value; x402's settlement response reports base\n // units. verify() matched an EVM authorization's value to the offer.\n metadata: {\n amountBaseUnits: transfer?.value ?? requirements.amount,\n // The resource's own price, when it names a currency other than the token\n ...(verification.currency !== requirement.currency\n ? { quote: { amount: requirement.amount, currency: requirement.currency } }\n : {}),\n },\n };\n }\n\n return settle;\n}\n","// Checks a proof against the offer it pays, then asks the facilitator for a verdict\nimport type { PaymentRequired, PaymentRequirements, VerifyResponse } from '@x402/core/types';\nimport { formatUnits, getAddress } from 'viem';\nimport type { PaymentResult, PaymentVerificationContext } from '../../../core';\nimport { CommerceError } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { normalizeAddress, sameAddress } from '../addresses';\nimport { declaredX402Version, decodePaymentSubmission, forFacilitator } from '../payload';\nimport { X402_VERSION } from './constants';\nimport { offerCurrency } from './offers';\nimport { isProviderUnavailableError, NO_VERDICT_REASONS, sanitizeReason } from './reasons';\nimport { acceptedMatchesOffer, offerIndexOf } from './requirement';\nimport { readTransfer, type Transfer } from './transfer';\nimport type { ProviderContext } from './types';\n\n/** Builds the provider's `verify`, which never moves funds */\nexport function createVerify(\n ctx: ProviderContext,\n): (context: PaymentVerificationContext) => Promise<PaymentResult> {\n const { offersFor, clock, logger, svm, near } = ctx;\n\n /**\n * Checks a submission against the requirement this provider built, never\n * against `payload.accepted`, the copy the client echoes back. That copy\n * must itself match the offer, or the proof is refused.\n *\n * The `exact` scheme requires the authorized amount to match exactly,\n * including when the buyer offers more. Local refusals use x402 error codes\n * where available.\n */\n async function verify(context: PaymentVerificationContext): Promise<PaymentResult> {\n const { requirement, submission } = context;\n\n const rejected = (reason: string): PaymentResult => ({\n status: 'rejected',\n provider: 'x402',\n amount: requirement.amount,\n currency: requirement.currency,\n ...(requirement.network !== undefined ? { network: requirement.network } : {}),\n ...(requirement.asset !== undefined ? { asset: requirement.asset } : {}),\n rejectionReason: reason,\n });\n\n if (requirement.provider !== 'x402' || requirement.challenge.provider !== 'x402') {\n return rejected('wrong_provider');\n }\n\n // With several offers and none selected, the proof matched no single offer\n const index = offerIndexOf(requirement);\n if (index === undefined) {\n return rejected('invalid_payment_requirements');\n }\n const offer = offersFor(requirement.resourceId)[index];\n const requirements = requirement.challenge.accepts[index] as PaymentRequirements | undefined;\n if (!offer || !requirements) {\n return rejected('missing_payment_requirements');\n }\n\n // Defense in depth only: the pipeline builds a fresh requirement for every\n // request, so this rarely fires. The real expiry is the authorization's\n // own, which the facilitator checks.\n if (\n requirement.expiresAt !== undefined &&\n Date.parse(requirement.expiresAt) < clock.now().getTime()\n ) {\n return rejected('requirement_expired');\n }\n\n // This provider built the requirement, so the asset always matches in\n // normal operation. A corrupted one must still never authorize a transfer\n // of a different asset.\n if (!sameAddress(offer.profile, requirements.asset, offer.asset)) {\n return rejected('wrong_asset');\n }\n\n const payload = decodePaymentSubmission(submission.payload);\n if (!payload) {\n const version = declaredX402Version(submission.payload);\n return rejected(\n typeof version === 'number' && version !== X402_VERSION\n ? 'invalid_x402_version'\n : 'invalid_payload',\n );\n }\n if (payload.x402Version !== X402_VERSION) {\n return rejected('invalid_x402_version');\n }\n // EVM: the authorization names payer, payee and amount. Solana: the\n // facilitator reads the transaction, and the gateway takes its identity.\n // NEAR: the delegate names the transfer, checked here against the offer.\n let transfer: Transfer | undefined;\n let replayKey: string;\n let derivedPayer: string | undefined;\n if (offer.family === 'svm') {\n const identity = (await svm()).svmReplayKey(payload.payload, offer.network);\n if (typeof identity === 'string') return rejected(identity);\n replayKey = identity.replayKey;\n } else if (offer.family === 'near') {\n const inspected = (await near()).inspectNearPayload(payload.payload, {\n network: offer.network,\n asset: offer.asset,\n payTo: offer.payTo,\n amount: requirements.amount,\n });\n if (typeof inspected === 'string') return rejected(inspected);\n replayKey = inspected.replayKey;\n derivedPayer = inspected.payer;\n } else {\n const read = readTransfer(payload, offer);\n if (typeof read === 'string') return rejected(read);\n transfer = read;\n replayKey = read.replayKey;\n derivedPayer = read.from;\n }\n // Reject a different network before calling the facilitator. NEAR's\n // delegate signature itself does not bind the chain.\n if (payload.accepted.network !== offer.network) {\n return rejected('invalid_network');\n }\n // The signature omits flow and resource. Check the echoed offer;\n // `resource` is optional, but must match when present.\n const offeredUrl = (requirement.challenge.envelope as PaymentRequired | undefined)?.resource\n ?.url;\n if (\n !acceptedMatchesOffer(requirements, payload.accepted, offer.profile) ||\n (payload.resource !== undefined && payload.resource.url !== offeredUrl)\n ) {\n return rejected('invalid_payment_requirements');\n }\n let required: bigint;\n try {\n required = BigInt(requirements.amount);\n } catch {\n return rejected('invalid_payload');\n }\n if (transfer) {\n if (transfer.to !== getAddress(offer.payTo)) {\n return rejected(transfer.recipientMismatch);\n }\n let authorizedValue: bigint;\n try {\n authorizedValue = BigInt(transfer.value);\n } catch {\n return rejected('invalid_payload');\n }\n if (authorizedValue !== required) {\n return rejected(transfer.amountMismatch);\n }\n }\n\n const scope = offer.binding.open();\n let sdkResult: VerifyResponse;\n try {\n sdkResult = await scope.verify(forFacilitator(payload), requirements);\n } catch (err) {\n // A throw means no verdict was obtained, so it is never held against the\n // buyer. Only an unclassified one is logged, as it may be an SDK fault.\n if (!isProviderUnavailableError(err) && !scope.transportFailed()) {\n logger.warn({ err: redactedErrorText(err) }, 'x402 verify(): unexpected SDK error');\n }\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator returned no verdict during verify()`,\n { cause: err },\n );\n }\n\n if (!sdkResult.isValid) {\n // An RPC that never answered is not a payment that failed a check\n if (scope.transportFailed() || NO_VERDICT_REASONS.has(sdkResult.invalidReason ?? '')) {\n if (sdkResult.invalidReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.invalidReason) },\n 'x402 verify(): local facilitator transport failure reason',\n );\n }\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator unreachable during verify()`,\n );\n }\n // The raw reason is logged at debug level. Only what the buyer sees and\n // the ledger records is constrained.\n if (sdkResult.invalidReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.invalidReason) },\n 'x402 verify(): facilitator rejection reason',\n );\n }\n return rejected(sanitizeReason(sdkResult.invalidReason, 'invalid_payment'));\n }\n\n // The Solana payer is the facilitator's reading of the transaction\n const payer =\n derivedPayer ??\n (sdkResult.payer !== undefined && normalizeAddress(offer.profile, sdkResult.payer)\n ? sdkResult.payer\n : undefined);\n return {\n status: 'verified',\n provider: 'x402',\n ...(payer !== undefined ? { payer } : {}),\n payee: transfer?.to ?? offer.payTo,\n amount: formatUnits(required, offer.assetDecimals),\n currency: offerCurrency(offer, requirement.currency),\n network: payload.accepted.network,\n asset: offer.family === 'evm' ? getAddress(requirements.asset) : offer.asset,\n replayKey,\n };\n }\n\n return verify;\n}\n","/**\n * x402 payment provider: protocol v2, `exact` scheme. On EVM the buyer signs an\n * EIP-3009 `transferWithAuthorization` or a Permit2 transfer through the x402\n * exact proxy; on Solana, a token transfer whose fee the facilitator pays; on\n * NEAR, a delegated NEP-141 `ft_transfer` that the facilitator's relayer\n * submits.\n *\n * `verify()` never moves funds. `settle()` does, and throws unless it is handed\n * a successful verification. Both run through a facilitator (see\n * `../facilitator.ts`): the SDK's own `x402Facilitator` in this process, or a\n * remote HTTP facilitator.\n */\nimport type { AdapterDescriptor } from '../../../core';\nimport { CommerceError, NOOP_LOGGER, systemClock } from '../../../core';\nimport { PACKAGE_VERSION } from '../../../version';\nimport { DEFAULT_IDS, DEFAULT_MAX_TIMEOUT_SECONDS, X402_VERSION } from './constants';\nimport { createSvmFeePayerSource } from './fee-payer';\nimport { createHealthCheck } from './health';\nimport { resolveOffers } from './offers';\nimport { createQuoteIssuer, QUOTE_EXTENSION, QUOTE_REQUEST_SCHEME } from './quote';\nimport { createRequirementBuilders } from './requirement';\nimport { createSettle } from './settle';\nimport type {\n EvmOffer,\n ProviderContext,\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402PaymentProvider,\n X402ProviderOptions,\n} from './types';\nimport { createVerify } from './verify';\n\nexport { DEFAULT_IDS } from './constants';\nexport type {\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402PaymentProvider,\n X402ProviderOptions,\n} from './types';\n\nexport function createX402PaymentProvider(\n options: X402ProviderOptions | X402MultiOfferProviderOptions,\n): X402PaymentProvider {\n const inputs: readonly X402OfferOptions[] = 'offers' in options ? options.offers : [options];\n if (inputs.length === 0) {\n throw new CommerceError('CONFIG_INVALID', 'x402 provider: \"offers\" is empty');\n }\n // The NEAR facilitator refuses every payment under any other value\n if (\n options.maxTimeoutSeconds !== undefined &&\n (!Number.isInteger(options.maxTimeoutSeconds) || options.maxTimeoutSeconds <= 0)\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: maxTimeoutSeconds must be a positive integer (got ${options.maxTimeoutSeconds})`,\n );\n }\n const {\n offers: defaultOffers,\n resourceOffers,\n pool: offers,\n deploymentMode,\n remoteBinding,\n } = resolveOffers(inputs, options);\n const offersFor = (resourceId: string) => resourceOffers.get(resourceId) ?? defaultOffers;\n const severalOffers = [defaultOffers, ...resourceOffers.values()].some((list) => list.length > 1);\n\n const clock = options.clock ?? systemClock;\n const ids = options.ids ?? DEFAULT_IDS;\n const logger = options.logger ?? NOOP_LOGGER;\n const maxTimeoutSeconds = options.maxTimeoutSeconds ?? DEFAULT_MAX_TIMEOUT_SECONDS;\n\n const quotes = options.quote\n ? createQuoteIssuer({\n signerPrivateKey: options.quote.signerPrivateKey,\n offers,\n deploymentMode,\n clock,\n maxTimeoutSeconds,\n })\n : undefined;\n\n const evmOffers = offers.filter((offer): offer is EvmOffer => offer.family === 'evm');\n const hasSvm = offers.some((offer) => offer.family === 'svm');\n const hasNear = offers.some((offer) => offer.family === 'near');\n const descriptor: AdapterDescriptor = {\n name: 'x402',\n kind: 'payment',\n implementationVersion: PACKAGE_VERSION,\n supportedSpec: `x402/v${X402_VERSION} scheme=exact family=${[\n ...(evmOffers.length > 0 ? ['eip155'] : []),\n ...(hasSvm ? ['solana'] : []),\n ...(hasNear ? ['near'] : []),\n ].join(',')}`,\n capabilities: [\n ...(evmOffers.length > 0 ? ['exact-evm'] : []),\n ...(hasSvm ? ['exact-svm'] : []),\n ...(hasNear ? ['exact-near'] : []),\n `${options.facilitator.mode}-facilitator`,\n ...(evmOffers.some((offer) => offer.method === 'eip3009') ? ['eip-3009'] : []),\n ...(evmOffers.some((offer) => offer.method === 'permit2') ? ['permit2'] : []),\n 'caip-2',\n `mode=${deploymentMode}`,\n 'authorization-flow',\n 'upfront-flow',\n ...(severalOffers ? ['multiple-offers'] : []),\n ...(quotes ? ['erc-8409-quotes'] : []),\n ],\n status: 'stable',\n unsupported: [\n 'permit2 gas sponsoring extensions',\n 'upto scheme',\n 'batch-settlement scheme',\n 'auth-capture scheme',\n ],\n };\n\n // Loaded only with an offer of their family, so no deployment needs the\n // peers of a family it does not offer\n const svmModule = hasSvm\n ? loadOptionalModule(() => import('../svm'), 'Solana offers need @x402/svm and @solana/kit')\n : undefined;\n const nearModule = hasNear\n ? loadOptionalModule(() => import('../near'), 'NEAR offers need @x402/near')\n : undefined;\n const svm = async () => {\n if (!svmModule)\n throw new CommerceError('INTERNAL_ERROR', 'x402 provider: no Solana offer is configured');\n return svmModule;\n };\n const near = async () => {\n if (!nearModule)\n throw new CommerceError('INTERNAL_ERROR', 'x402 provider: no NEAR offer is configured');\n return nearModule;\n };\n\n const ctx: ProviderContext = {\n options,\n offers,\n offersFor,\n deploymentMode,\n remoteBinding,\n clock,\n ids,\n logger,\n maxTimeoutSeconds,\n quotes,\n svm,\n near,\n };\n const { createRequirement, selectRequirement } = createRequirementBuilders(\n ctx,\n createSvmFeePayerSource(ctx),\n );\n const verify = createVerify(ctx);\n const settle = createSettle(ctx);\n const health = createHealthCheck(ctx);\n\n return {\n name: 'x402',\n descriptor,\n createRequirement,\n // A single offer needs no selection\n ...(severalOffers ? { selectRequirement } : {}),\n verify,\n settle,\n health,\n ...(quotes\n ? {\n quote: {\n issuer: quotes.issuer,\n requestScheme: QUOTE_REQUEST_SCHEME,\n extension: QUOTE_EXTENSION,\n },\n }\n : {}),\n };\n}\n\n/**\n * Loads a family's inspection module, refusing with a clear error when its\n * optional peers are missing\n */\nfunction loadOptionalModule<T>(load: () => Promise<T>, missing: string): Promise<T> {\n const loading = load().catch((cause: unknown) => {\n throw new CommerceError('PAYMENT_PROVIDER_UNAVAILABLE', `x402 provider: ${missing}`, {\n cause,\n });\n });\n // verify() and health() report the failure; nothing else awaits it\n loading.catch(() => {});\n return loading;\n}\n"]}
@@ -1,11 +0,0 @@
1
- export { loadConfig, parseConfig, substituteEnv } from './chunk-G2JEY7MB.js';
2
- import './chunk-PIMFPCNZ.js';
3
- import './chunk-AA3FIEAR.js';
4
- import './chunk-WYOGIANL.js';
5
- import './chunk-OZ4LAWBK.js';
6
- import './chunk-FHCFR2GS.js';
7
- import './chunk-TPC4EJLT.js';
8
- import './chunk-QQ3WY5L3.js';
9
- import './chunk-3M6U7ILB.js';
10
- //# sourceMappingURL=config-UI4EDG4L.js.map
11
- //# sourceMappingURL=config-UI4EDG4L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/protocols/mcp/descriptor.ts","../../src/protocols/mcp/tool-mapping.ts","../../src/protocols/mcp/result-mapping.ts","../../src/protocols/mcp/adapter.ts"],"names":[],"mappings":"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","file":"mcp-PGBRWZVA.js","sourcesContent":["/**\n * Adapter self-description. `supportedSpec` lists the modern revision and\n * the newest 2025-era revision. The SDK's legacy fallback also accepts older\n * 2025-era revisions.\n */\nimport { LATEST_PROTOCOL_VERSION } from '@modelcontextprotocol/server';\nimport type { AdapterDescriptor } from '../../core';\nimport { MCP_MODERN_PROTOCOL_REVISION } from './constants';\n\n// List the modern revision followed by the SDK's latest legacy revision\nconst MCP_SUPPORTED_SPEC = `${MCP_MODERN_PROTOCOL_REVISION}, ${LATEST_PROTOCOL_VERSION}`;\n\n// Tool-oriented capabilities this adapter implements\nconst MCP_CAPABILITIES: readonly string[] = ['tools/list', 'tools/call'];\n\n/**\n * MCP surfaces this adapter does not implement, listed so its descriptor never\n * implies blanket protocol compatibility.\n *\n * `dns-rebinding-protection` is delegated rather than missing: the gateway's\n * `onRequest` hook validates Host and Origin for `/mcp` (see adapter.ts), and\n * the adapter provides none on its own.\n */\nexport const MCP_UNSUPPORTED: readonly string[] = [\n 'resources',\n 'prompts',\n 'sampling',\n 'completions',\n 'elicitation',\n 'roots',\n 'logging',\n 'notifications/tools/list_changed',\n 'tasks',\n 'dns-rebinding-protection',\n 'authorization',\n 'sessions',\n 'subscriptions',\n 'pagination',\n 'HTTP+SSE transport',\n // mppx reads challenges and refusals from tool-result `_meta`.\n 'MPP payment-required as JSON-RPC error -32042',\n 'MPP verification failure as JSON-RPC error -32043',\n];\n\nexport function buildDescriptor(implementationVersion: string): AdapterDescriptor {\n return {\n name: 'mcp',\n kind: 'protocol',\n implementationVersion,\n supportedSpec: MCP_SUPPORTED_SPEC,\n capabilities: MCP_CAPABILITIES,\n status: 'stable',\n unsupported: MCP_UNSUPPORTED,\n };\n}\n","/**\n * Maps a canonical `CommerceResource` to an MCP `Tool`: the tool name is the\n * resource id, the description carries a price notice for a paid resource,\n * and the input schema is the canonical JSON Schema plus the reserved\n * `_payment` and `_authorization` properties the resource accepts\n */\n\nimport type { JSONObject, Tool } from '@modelcontextprotocol/server';\nimport {\n AUTHORIZATION_INPUT_FIELD,\n type CommerceResource,\n PAYMENT_INPUT_FIELD,\n type PaymentMethodName,\n} from '../../core';\nimport { isRecord } from '../../core/is-record';\nimport { MPP_MCP_CREDENTIAL_META_KEY } from '../../payments/mpp/transport';\nimport { X402_MCP_PAYMENT_META_KEY } from '../../payments/x402/transport';\nimport { MCP_TOOL_NAME_PATTERN } from './constants';\n\nexport function isValidToolName(id: string): boolean {\n return MCP_TOOL_NAME_PATTERN.test(id);\n}\n\nfunction isPaidResource(resource: CommerceResource): boolean {\n return resource.pricing.type !== 'free';\n}\n\n// The rail a `_payment` proof is labeled with (see `extractReservedInputFields`),\n// `undefined` when the resource lists none\nfunction primaryPaymentMethod(resource: CommerceResource): PaymentMethodName | undefined {\n return resource.paymentMethods[0];\n}\n\n/** Describe the selected rail's `_meta` proof and `_payment` fallback */\nexport function proofCarriers(method: PaymentMethodName | undefined): string {\n const field = `the \"${PAYMENT_INPUT_FIELD}\" argument`;\n if (method === 'x402') return `_meta[\"${X402_MCP_PAYMENT_META_KEY}\"] or ${field}`;\n if (method === 'mpp') return `_meta[\"${MPP_MCP_CREDENTIAL_META_KEY}\"] or ${field}`;\n return field;\n}\n\n// How to supply a proof, generic when the resource names no rail\nfunction paymentProofNote(resource: CommerceResource): string {\n const method = primaryPaymentMethod(resource);\n const rail = method !== undefined ? `an ${method}` : 'a';\n return `Requires ${rail} payment proof in ${proofCarriers(method)}, built from the payment-required response.`;\n}\n\n// Tell callers to omit `_payment` when a wrapper supplies `_meta`\nconst OMIT_NOTE = 'Omit it when the client sends the proof in _meta.';\n\n/**\n * Description for the reserved `_payment` input property, in the proof\n * encoding of the resource's own rail\n */\nfunction paymentInputFieldDescription(resource: CommerceResource): string {\n const method = primaryPaymentMethod(resource);\n if (method === 'x402') {\n return `x402 payment proof (base64 PAYMENT-SIGNATURE value) for a previous payment-required response. ${OMIT_NOTE}`;\n }\n if (method === 'mpp') {\n return `MPP credential (the full \"Authorization: Payment ...\" value) for the challenge in a previous payment-required response. ${OMIT_NOTE}`;\n }\n if (method !== undefined) {\n return `${method} payment proof (base64-encoded) returned from a previous payment-required response.`;\n }\n return 'Payment proof returned from a previous payment-required response.';\n}\n\n// The authorization methods the resource requires, empty when it requires none\nfunction requiredAuthorization(resource: CommerceResource): readonly string[] {\n return resource.authorization?.required ?? [];\n}\n\nfunction authorizationNote(resource: CommerceResource): string {\n const methods = requiredAuthorization(resource);\n return methods.length > 0\n ? ` Also requires ${methods.join(' and ')} authorization in the \"${AUTHORIZATION_INPUT_FIELD}\" input field.`\n : '';\n}\n\n/**\n * Tool description. A paid resource gets a price notice appended, so an agent\n * sees the cost before calling, not only in the input schema.\n */\nexport function buildToolDescription(resource: CommerceResource): string {\n const base = resource.description ?? resource.name;\n switch (resource.pricing.type) {\n case 'free':\n return base;\n case 'fixed': {\n const { amount, currency } = resource.pricing;\n return `${base} Costs ${amount} ${currency} per call. ${paymentProofNote(resource)}${authorizationNote(resource)}`;\n }\n case 'dynamic':\n return `${base} Requires payment (amount determined at request time). ${paymentProofNote(resource)}${authorizationNote(resource)}`;\n }\n}\n\n/**\n * Builds the MCP `Tool.inputSchema` from the canonical `CommerceResource.inputSchema`.\n *\n * Every keyword is carried through except that `type` is forced to the\n * `'object'` MCP requires, `properties` keeps only object-valued entries and\n * `required` only strings. A paid resource gains the optional `_payment`\n * string property, and a resource requiring authorization the optional\n * `_authorization` object. Both are declared because a resource's input schema\n * is closed by default, and a client that validates arguments against it\n * would otherwise refuse to send them.\n */\nexport function buildInputSchema(resource: CommerceResource): Tool['inputSchema'] {\n const base = resource.inputSchema;\n const baseIsObject = isRecord(base);\n\n // Keep object-valued property schemas from the resource's config JSON\n const basePropertyEntries: readonly [string, JSONObject][] =\n baseIsObject && isRecord(base.properties)\n ? Object.entries(base.properties).filter((entry): entry is [string, JSONObject] =>\n isRecord(entry[1]),\n )\n : [];\n const properties: Record<string, JSONObject> = Object.fromEntries(basePropertyEntries);\n\n // Both overwrite a resource-declared property of the same name; config\n // rejects that collision at load time\n if (isPaidResource(resource)) {\n properties[PAYMENT_INPUT_FIELD] = {\n type: 'string',\n description: paymentInputFieldDescription(resource),\n };\n }\n const methods = requiredAuthorization(resource);\n if (methods.length > 0) {\n properties[AUTHORIZATION_INPUT_FIELD] = {\n type: 'object',\n description:\n 'Authorization this resource requires in addition to payment: the method and its serialized proof.',\n properties: {\n method: { type: 'string', enum: [...methods] },\n payload: { type: 'string', minLength: 1 },\n },\n required: ['method', 'payload'],\n };\n }\n\n const required =\n baseIsObject && Array.isArray(base.required)\n ? base.required.filter((v): v is string => typeof v === 'string')\n : [];\n\n const extra = baseIsObject\n ? Object.fromEntries(\n Object.entries(base).filter(\n ([key]) => key !== 'type' && key !== 'properties' && key !== 'required',\n ),\n )\n : {};\n\n return {\n ...extra,\n type: 'object',\n properties,\n ...(required.length > 0 ? { required } : {}),\n };\n}\n","/**\n * Maps pipeline outcomes and errors to MCP tool results through the core wire\n * helpers (`toErrorEnvelope`, `toPaymentRequiredEnvelope`,\n * `toDeliverySummary`). The A2A adapter uses all three and the HTTP route the\n * two envelopes, so each shape is defined once.\n */\n\nimport type { CallToolResult } from '@modelcontextprotocol/server';\nimport {\n type CommerceError,\n DELIVERY_SUMMARY_META_KEY,\n type DeliveredOutcome,\n type ExecutionOutcome,\n type PaymentMethodName,\n type PaymentRequiredOutcome,\n toDeliverySummary,\n toErrorEnvelope,\n toPaymentRequiredEnvelope,\n} from '../../core';\nimport { isRecord } from '../../core/is-record';\nimport {\n MPP_MCP_PAYMENT_REQUIRED_META_KEY,\n MPP_MCP_RECEIPT_META_KEY,\n mcpPaymentRequired,\n receiptObject,\n} from '../../payments/mpp/transport';\nimport {\n settlementFailure,\n settlementResponse,\n settlementResponseFromDetails,\n X402_MCP_ERROR_META_KEY,\n X402_MCP_PAYMENT_RESPONSE_META_KEY,\n x402ErrorCode,\n} from '../../payments/x402/transport';\nimport { proofCarriers } from './tool-mapping';\n\nfunction toRecord(value: object): Record<string, unknown> {\n return value as Record<string, unknown>;\n}\n\nfunction deliveredResult(outcome: DeliveredOutcome): CallToolResult {\n const body = outcome.body;\n const text = typeof body === 'string' ? body : JSON.stringify(body ?? null);\n const payment = outcome.payment;\n const receipt =\n payment?.provider === 'mpp' ? receiptObject(payment.metadata?.['receipt']) : undefined;\n return {\n content: [{ type: 'text', text }],\n ...(isRecord(body) ? { structuredContent: body } : {}),\n _meta: {\n [DELIVERY_SUMMARY_META_KEY]: toRecord(toDeliverySummary(outcome)),\n ...(payment?.provider === 'x402'\n ? { [X402_MCP_PAYMENT_RESPONSE_META_KEY]: settlementResponse(payment) }\n : {}),\n ...(receipt !== undefined ? { [MPP_MCP_RECEIPT_META_KEY]: receipt } : {}),\n },\n };\n}\n\n// The x402 MCP transport requires the first text block to repeat\n// `structuredContent` as JSON; the second gives readers a short explanation\nfunction structuredError(\n structured: Record<string, unknown>,\n sentence: string,\n meta?: Record<string, unknown>,\n): CallToolResult {\n return {\n isError: true,\n content: [\n { type: 'text', text: JSON.stringify(structured) },\n { type: 'text', text: sentence },\n ],\n structuredContent: structured,\n ...(meta !== undefined ? { _meta: meta } : {}),\n };\n}\n\n// Put x402's PaymentRequired fields beside the gateway error envelope so\n// x402 clients can read the challenge from `structuredContent`\nfunction withX402Challenge(\n envelope: Record<string, unknown>,\n challenge: Record<string, unknown>,\n): Record<string, unknown> {\n return { ...challenge, ...envelope };\n}\n\nfunction paymentRequiredResult(outcome: PaymentRequiredOutcome): CallToolResult {\n const envelope = toPaymentRequiredEnvelope(outcome);\n const p = envelope.payment;\n const x402Required = p.provider === 'x402' ? p.envelope : undefined;\n const structured =\n x402Required !== undefined\n ? withX402Challenge(toRecord(envelope), x402Required)\n : toRecord(envelope);\n const mppRequired = p.provider === 'mpp' ? mcpPaymentRequired(p.envelope) : undefined;\n let meta: Record<string, unknown> | undefined;\n if (x402Required !== undefined) meta = { [X402_MCP_ERROR_META_KEY]: x402Required };\n else if (mppRequired !== undefined) meta = { [MPP_MCP_PAYMENT_REQUIRED_META_KEY]: mppRequired };\n return structuredError(\n structured,\n // A challenge with several offers names no single destination\n `Payment required: ${p.amount} ${p.currency}${p.destination !== undefined ? ` to ${p.destination}` : ''} for resource \"${outcome.resourceId}\". Retry with an ${p.provider} payment proof in ${proofCarriers(p.provider)}.`,\n meta,\n );\n}\n\n/** A tool result for an error; `rail` is the payment method the call used, if any */\nexport function errorResult(error: CommerceError, rail?: PaymentMethodName): CallToolResult {\n const envelope = toErrorEnvelope(error);\n const details = error.details;\n const challenge = details?.['challenge'];\n // Include the rail's new challenge when a 402 refusal supplies one\n const refused = error.httpStatus === 402 && isRecord(challenge);\n const x402Required =\n rail === 'x402' && refused\n ? {\n ...challenge,\n error: x402ErrorCode(error.code, details?.['reason'], details?.['network']),\n }\n : undefined;\n const structured =\n x402Required !== undefined\n ? withX402Challenge(toRecord(envelope), x402Required)\n : toRecord(envelope);\n let meta: Record<string, unknown> | undefined;\n if (rail === 'x402') {\n const settlement =\n error.code === 'PAYMENT_SETTLEMENT_FAILED'\n ? settlementFailure(details)\n : settlementResponseFromDetails(details);\n if (settlement !== undefined || x402Required !== undefined) {\n meta = {\n ...(x402Required !== undefined ? { [X402_MCP_ERROR_META_KEY]: x402Required } : {}),\n ...(settlement !== undefined ? { [X402_MCP_PAYMENT_RESPONSE_META_KEY]: settlement } : {}),\n };\n }\n } else if (rail === 'mpp' && refused) {\n // MPP error results carry a challenge but no receipt\n const required = mcpPaymentRequired(challenge, {\n code: error.code,\n reason: details?.['reason'],\n detail: error.message,\n });\n if (required !== undefined) meta = { [MPP_MCP_PAYMENT_REQUIRED_META_KEY]: required };\n }\n return structuredError(structured, `${envelope.code}: ${envelope.message}`, meta);\n}\n\nexport function mapOutcome(outcome: ExecutionOutcome): CallToolResult {\n return outcome.kind === 'delivered' ? deliveredResult(outcome) : paymentRequiredResult(outcome);\n}\n","/**\n * MCP protocol adapter.\n *\n * One MCP tool per mcp-exposed canonical resource. Every `tools/call` builds a\n * `CanonicalRequest` and goes through `context.pipeline.execute()`. This\n * adapter reads payment carriers but leaves verification, settlement and\n * merchant calls to the pipeline.\n *\n * The SDK's `createMcpHandler` serves `2026-07-28` over Streamable HTTP and\n * routes 2025-era requests through its stateless fallback. It creates a\n * low-level `Server` for each request. This adapter converts the gateway's\n * Node request and response to the web types the handler uses, without adding\n * `@modelcontextprotocol/node` as a peer.\n *\n * Tools are registered on the low-level `Server`, not through\n * `McpServer.registerTool`, whose `inputSchema` accepts only a Zod schema or\n * shape. `CommerceResource.inputSchema` and the MCP wire `Tool.inputSchema`\n * are both JSON Schema, so building `Tool` objects directly carries the schema\n * through with no lossy conversion. The SDK marks `Server` `@deprecated` but\n * still documents it for advanced cases such as this one.\n *\n * The gateway's `onRequest` hook validates Host and Origin for every route,\n * including `/mcp`. This adapter has no separate allowlist. When mounted\n * outside the gateway, it provides no Host or Origin checks; its descriptor\n * therefore lists `dns-rebinding-protection` as unsupported.\n */\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport {\n type CallToolResult,\n createMcpHandler,\n type McpHttpHandler,\n ProtocolError,\n ProtocolErrorCode,\n Server,\n type Tool,\n} from '@modelcontextprotocol/server';\nimport {\n type AdapterDescriptor,\n type AdapterHealth,\n type CanonicalRequest,\n CommerceError,\n type CommerceResource,\n extractReservedInputFields,\n type HttpProtocolAdapter,\n type PaymentSubmission,\n type ProtocolAdapterContext,\n toCommerceError,\n} from '../../core';\nimport { toLogInfo } from '../../core/errors';\nimport { isRecord } from '../../core/is-record';\nimport { MPP_MCP_CREDENTIAL_META_KEY } from '../../payments/mpp/transport';\nimport { X402_MCP_PAYMENT_META_KEY, x402McpPaymentSubmission } from '../../payments/x402/transport';\nimport { PACKAGE_VERSION } from '../../version';\nimport { readCappedBody } from '../http';\nimport { MCP_MODERN_PROTOCOL_REVISION, MCP_TOOL_NAME_PATTERN } from './constants';\nimport { buildDescriptor } from './descriptor';\nimport { errorResult, mapOutcome } from './result-mapping';\nimport { buildInputSchema, buildToolDescription, isValidToolName } from './tool-mapping';\n\nexport interface McpAdapterOptions {\n /** Path prefix the gateway mounts this adapter at. Default '/mcp' */\n readonly mountPath?: string;\n /** MCP `Implementation.name` reported during initialize */\n readonly serverName?: string;\n /** MCP `Implementation.version` reported during initialize. Default: this package's version */\n readonly serverVersion?: string;\n}\n\ninterface RegisteredTool {\n readonly resource: CommerceResource;\n readonly tool: Tool;\n}\n\ninterface SkippedResource {\n readonly id: string;\n readonly reason: string;\n}\n\nconst DEFAULT_MOUNT_PATH = '/mcp';\nconst DEFAULT_SERVER_NAME = 'agent-commerce';\n\n/**\n * The SDK can dispatch several `tools/call` requests in one JSON-RPC batch\n * before earlier calls settle. One POST can therefore start concurrent\n * `pipeline.execute()` calls. Limit active calls to 8 per adapter instance.\n */\nconst MAX_CONCURRENT_TOOL_CALLS = 8;\n\n// A second line behind the gateway mount's cap, bounding what this adapter\n// buffers if it is mounted without that guard\nconst MAX_REQUEST_BODY_BYTES = 256 * 1024;\n\n/**\n * Bounds the queue behind the semaphore, per adapter instance. Without it an\n * oversized batch would queue in full and then run in full. 64 is 8x\n * MAX_CONCURRENT_TOOL_CALLS, room for a legitimate burst; calls beyond it fail\n * fast with GATEWAY_BUSY and reach no backend.\n */\nconst MAX_QUEUED_TOOL_CALLS = 64;\n\n// Batch revision used by the SDK when no protocol-version header is sent\nconst MCP_BATCH_PROTOCOL_REVISION = '2025-03-26';\n\n// The tool list is public and stable until restart; cache it for a minute\nconst TOOLS_LIST_CACHE_HINT = { ttlMs: 60_000, cacheScope: 'public' } as const;\n\nclass McpProtocolAdapter implements HttpProtocolAdapter {\n readonly name = 'mcp' as const;\n readonly mountPath: string;\n readonly descriptor: AdapterDescriptor;\n\n private readonly serverName: string;\n private readonly serverVersion: string;\n\n private context: ProtocolAdapterContext | undefined;\n private started = false;\n private tools: readonly RegisteredTool[] = [];\n private toolsByResourceId: ReadonlyMap<string, CommerceResource> = new Map();\n private skipped: readonly SkippedResource[] = [];\n private handler: McpHttpHandler | undefined;\n\n // Counting semaphore on `pipeline.execute()`. It lives on the adapter, not\n // the request, so the cap holds across concurrent `/mcp` requests as well\n // as within one batch.\n private inFlightToolCalls = 0;\n private readonly toolCallWaiters: Array<() => void> = [];\n\n constructor(options: McpAdapterOptions = {}) {\n this.mountPath = options.mountPath ?? DEFAULT_MOUNT_PATH;\n this.serverName = options.serverName ?? DEFAULT_SERVER_NAME;\n this.serverVersion = options.serverVersion ?? PACKAGE_VERSION;\n this.descriptor = buildDescriptor(PACKAGE_VERSION);\n }\n\n async start(context: ProtocolAdapterContext): Promise<void> {\n this.context = context;\n this.started = false;\n\n let resources: readonly CommerceResource[] = [];\n try {\n resources = context.resources.listExposedVia('mcp');\n } catch (err) {\n context.logger.error(\n { err: toLogInfo(err) },\n 'mcp adapter: failed to list mcp-exposed resources',\n );\n resources = [];\n }\n\n const tools: RegisteredTool[] = [];\n const toolsByResourceId = new Map<string, CommerceResource>();\n const skipped: SkippedResource[] = [];\n\n for (const resource of resources) {\n try {\n if (!isValidToolName(resource.id)) {\n skipped.push({\n id: resource.id,\n reason: `resource id is not a legal MCP tool name (must match ${MCP_TOOL_NAME_PATTERN.source})`,\n });\n continue;\n }\n if (toolsByResourceId.has(resource.id)) {\n skipped.push({ id: resource.id, reason: 'duplicate tool name' });\n continue;\n }\n const tool: Tool = {\n name: resource.id,\n description: buildToolDescription(resource),\n inputSchema: buildInputSchema(resource),\n };\n tools.push({ resource, tool });\n toolsByResourceId.set(resource.id, resource);\n } catch (err) {\n skipped.push({\n id: resource.id,\n reason: `failed to build MCP tool: ${toCommerceError(err).message}`,\n });\n }\n }\n\n for (const s of skipped) {\n context.logger.warn({ resourceId: s.id, reason: s.reason }, 'mcp adapter: resource skipped');\n }\n\n this.tools = tools;\n this.toolsByResourceId = toolsByResourceId;\n this.skipped = skipped;\n // Route 2025-era requests through the SDK's stateless fallback\n this.handler = createMcpHandler(\n (ctx) => this.buildServer(ctx.requestInfo?.signal ?? new AbortController().signal),\n {\n legacy: 'stateless',\n // Reporting only: a request the SDK rejects is already answered\n onerror: (err) => context.logger.debug({ err: toLogInfo(err) }, 'mcp adapter: SDK error'),\n },\n );\n this.started = true;\n\n context.logger.info(\n {\n mountPath: this.mountPath,\n toolCount: tools.length,\n skippedCount: skipped.length,\n },\n 'mcp adapter started',\n );\n }\n\n async handleHttp(req: IncomingMessage, res: ServerResponse): Promise<void> {\n try {\n if (!this.started || !this.context || !this.handler) {\n this.writeJsonRpcError(res, 503, 'MCP adapter is not running.');\n return;\n }\n if (req.method !== 'POST') {\n this.writeJsonRpcError(res, 405, 'Method not allowed. This endpoint only accepts POST.');\n return;\n }\n\n // Aborted when the response closes. `handleToolCall` checks it only\n // before `pipeline.execute()`: a call that may already have settled\n // must finish, or the buyer is charged for nothing.\n const abortController = new AbortController();\n res.once('close', () => abortController.abort());\n const read = await readCappedBody(req, MAX_REQUEST_BODY_BYTES);\n if (read.kind === 'too-large') {\n this.writeJsonRpcError(\n res,\n 413,\n `Request body exceeds the ${MAX_REQUEST_BODY_BYTES}-byte limit.`,\n );\n return;\n }\n if (read.kind !== 'ok') {\n this.writeJsonRpcError(res, 400, 'Could not read the request body.');\n return;\n }\n const body = parseJson(read.text);\n const version = req.headers['mcp-protocol-version'];\n if (Array.isArray(body) && version !== undefined && version !== MCP_BATCH_PROTOCOL_REVISION) {\n this.writeJsonRpcError(\n res,\n 400,\n `Invalid Request: JSON-RPC batches are supported only in MCP ${MCP_BATCH_PROTOCOL_REVISION}.`,\n );\n return;\n }\n const malformed = isModernRequest(req) ? undefined : malformedToolCall(body);\n if (malformed !== undefined) {\n this.writeJsonRpcError(res, 200, malformed.message, -32602, malformed.id);\n return;\n }\n const response = await this.handler.fetch(\n toWebRequest(req, read.text, abortController.signal),\n );\n await writeWebResponse(response, res);\n } catch (err) {\n this.context?.logger.error({ err: toLogInfo(err) }, 'mcp adapter: request handling failed');\n this.writeJsonRpcError(res, 500, 'Internal server error.');\n }\n }\n\n async health(): Promise<AdapterHealth> {\n const checkedAt = this.context?.clock.nowIso() ?? new Date().toISOString();\n if (!this.started || !this.context) {\n return { status: 'fail', detail: 'MCP adapter has not been started.', checkedAt };\n }\n const toolCount = this.tools.length;\n if (this.skipped.length > 0) {\n const detail = `${toolCount} tool(s) registered; ${this.skipped.length} resource(s) skipped: ${this.skipped\n .map((s) => `${s.id} (${s.reason})`)\n .join('; ')}`;\n return { status: 'warn', detail, checkedAt };\n }\n return { status: 'pass', detail: `${toolCount} tool(s) registered.`, checkedAt };\n }\n\n async stop(): Promise<void> {\n this.started = false;\n const handler = this.handler;\n this.handler = undefined;\n try {\n await handler?.close();\n } catch {\n // Best effort: stop() must be idempotent and never throw\n }\n this.context = undefined;\n }\n\n // Use general JSON-RPC codes for transport errors\n private writeJsonRpcError(\n res: ServerResponse,\n status: number,\n message: string,\n code = status >= 500 ? -32603 : -32600,\n id: string | number | null = null,\n ): void {\n if (res.headersSent) return;\n res.writeHead(status, {\n 'content-type': 'application/json',\n // RFC 9110 requires Allow on a 405, and this endpoint takes only POST\n ...(status === 405 ? { allow: 'POST' } : {}),\n });\n res.end(JSON.stringify({ jsonrpc: '2.0', error: { code, message }, id }));\n }\n\n private buildServer(signal: AbortSignal): Server {\n const server = new Server(\n { name: this.serverName, version: this.serverVersion },\n { capabilities: { tools: {} }, cacheHints: { 'tools/list': TOOLS_LIST_CACHE_HINT } },\n );\n server.setRequestHandler('tools/list', async (request) => {\n // A cursor is invalid because this list is not paginated\n if (request.params?.cursor !== undefined) {\n throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'Invalid cursor.');\n }\n return { tools: this.tools.map((t) => t.tool) };\n });\n server.setRequestHandler('tools/call', async (request) =>\n this.handleToolCall(\n request.params.name,\n request.params.arguments ?? {},\n request.params._meta,\n signal,\n ),\n );\n return server;\n }\n\n private async handleToolCall(\n resourceId: string,\n rawArgs: Record<string, unknown>,\n meta: Record<string, unknown> | undefined,\n signal: AbortSignal,\n ): Promise<CallToolResult> {\n const context = this.context;\n if (!context) {\n return errorResult(new CommerceError('INTERNAL_ERROR', 'MCP adapter is not running.'));\n }\n // Clients can call names absent from `tools/list`. Return the same MCP\n // error for unknown and non-MCP resources without revealing the latter\n const resource = this.toolsByResourceId.get(resourceId);\n if (!resource) {\n throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Unknown tool \"${resourceId}\".`);\n }\n try {\n const requestId = context.ids.next('mcp');\n const fields = extractReservedInputFields(rawArgs, resource, requestId);\n const { input, authorization } = fields;\n // Client wrappers attach proofs in `_meta`; that proof takes priority\n // over a possible `_payment` placeholder in the arguments\n const payment = paymentFromMeta(meta, resource) ?? fields.payment;\n const request: CanonicalRequest = {\n requestId,\n resourceId,\n input,\n protocol: 'mcp',\n receivedAt: context.clock.nowIso(),\n ...(payment !== undefined ? { payment } : {}),\n ...(authorization !== undefined ? { authorization } : {}),\n };\n await this.acquireToolCallSlot(signal);\n try {\n // The last cancellation point: a queued call whose caller has left\n // must not start a pipeline run, while a started one may reach\n // settle() and must finish\n if (signal.aborted) {\n // No error code names \"the caller left\". PROTOCOL_UNSUPPORTED is the\n // closest non-retryable one; GATEWAY_BUSY would invite a retry\n // nobody is left to make.\n return errorResult(\n new CommerceError(\n 'PROTOCOL_UNSUPPORTED',\n 'Client disconnected before this call started.',\n ),\n );\n }\n const outcome = await context.pipeline.execute(request);\n return mapOutcome(outcome);\n } finally {\n // Always released: a stranded permit shrinks the cap for good and\n // eventually deadlocks the adapter\n this.releaseToolCallSlot();\n }\n } catch (err) {\n const error = toCommerceError(err);\n context.logger.warn({ resourceId, err: toLogInfo(error) }, 'mcp adapter: execution failed');\n return errorResult(error, resource.paymentMethods[0]);\n }\n }\n\n /**\n * Takes a permit, or queues for one when MAX_CONCURRENT_TOOL_CALLS are in\n * flight. Throws when the queue is full or the caller disconnected while\n * queued; a throw never leaks a permit.\n */\n private async acquireToolCallSlot(signal: AbortSignal): Promise<void> {\n if (this.inFlightToolCalls < MAX_CONCURRENT_TOOL_CALLS) {\n this.inFlightToolCalls++;\n return;\n }\n if (this.toolCallWaiters.length >= MAX_QUEUED_TOOL_CALLS) {\n // Load shedding is transient, so GATEWAY_BUSY tells the caller to back\n // off and retry\n throw new CommerceError(\n 'GATEWAY_BUSY',\n 'Too many tool calls already queued on this adapter; retry later.',\n );\n }\n // Resolved by releaseToolCallSlot, which hands its permit straight to the\n // oldest waiter, so a call arriving later cannot take it first\n await new Promise<void>((resolve) => this.toolCallWaiters.push(resolve));\n if (signal.aborted) {\n // This waiter now holds a permit it will not use; pass it on\n this.releaseToolCallSlot();\n // Non-retryable, for the same reason as the check in handleToolCall\n throw new CommerceError('PROTOCOL_UNSUPPORTED', 'Client disconnected while queued.');\n }\n }\n\n private releaseToolCallSlot(): void {\n const next = this.toolCallWaiters.shift();\n // Handing the permit over leaves the in-flight count unchanged\n if (next !== undefined) next();\n else this.inFlightToolCalls--;\n }\n}\n\n// Pass the Node request body to the SDK as a stream. The gateway's socket\n// byte limit still applies, and the signal reports client disconnects.\nfunction toWebRequest(req: IncomingMessage, body: string, signal: AbortSignal): Request {\n const headers = new Headers();\n for (const [name, value] of Object.entries(req.headers)) {\n if (value !== undefined) headers.set(name, Array.isArray(value) ? value.join(', ') : value);\n }\n return new Request(new URL(req.url ?? '/', 'http://localhost'), {\n method: req.method ?? 'POST',\n headers,\n body,\n signal,\n });\n}\n\n/**\n * Let the SDK validate requests with `Mcp-Method` or a modern version header;\n * malformed headers and `_meta` may require an HTTP 400 response\n */\nfunction isModernRequest(req: IncomingMessage): boolean {\n if (req.headers['mcp-method'] !== undefined) return true;\n const version = req.headers['mcp-protocol-version'];\n // ISO revision dates sort lexically.\n return typeof version === 'string' && version >= MCP_MODERN_PROTOCOL_REVISION;\n}\n\n// Undefined for a body that is not JSON; the SDK answers that with -32700\nfunction parseJson(body: string): unknown {\n try {\n return JSON.parse(body);\n } catch {\n return undefined;\n }\n}\n\n// Give malformed tool calls without modern headers a short -32602 response\nfunction malformedToolCall(message: unknown): { id: string | number; message: string } | undefined {\n if (!isRecord(message) || message['method'] !== 'tools/call') return undefined;\n const id = message['id'];\n if (typeof id !== 'string' && typeof id !== 'number') return undefined;\n const params = message['params'];\n let problem: string | undefined;\n if (!isRecord(params)) problem = 'params must be an object';\n else if (typeof params['name'] !== 'string') problem = '\"name\" must be a string';\n else if (params['arguments'] !== undefined && !isRecord(params['arguments'])) {\n problem = '\"arguments\" must be an object';\n } else if (params['_meta'] !== undefined && !isRecord(params['_meta'])) {\n problem = '\"_meta\" must be an object';\n }\n return problem === undefined\n ? undefined\n : { id, message: `Invalid tools/call params: ${problem}.` };\n}\n\n// Stream the SDK's response body, including SSE, to the Node response\nasync function writeWebResponse(response: Response, res: ServerResponse): Promise<void> {\n res.writeHead(response.status, Object.fromEntries(response.headers));\n if (response.body !== null) {\n for await (const chunk of response.body) {\n if (res.destroyed) break;\n res.write(chunk);\n }\n }\n res.end();\n}\n\n// Read a proof from the selected rail's MCP `_meta` carrier\nfunction paymentFromMeta(\n meta: Record<string, unknown> | undefined,\n resource: CommerceResource,\n): PaymentSubmission | undefined {\n const method = resource.paymentMethods[0];\n if (method === 'x402') {\n const payload = x402McpPaymentSubmission(meta?.[X402_MCP_PAYMENT_META_KEY]);\n if (payload !== undefined) return { method, payload };\n }\n const credential = meta?.[MPP_MCP_CREDENTIAL_META_KEY];\n if (method === 'mpp' && isRecord(credential)) {\n // The MPP provider converts this object to an Authorization value\n return { method, payload: JSON.stringify(credential) };\n }\n return undefined;\n}\n\nexport function createMcpAdapter(options?: McpAdapterOptions): HttpProtocolAdapter {\n return new McpProtocolAdapter(options);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/payments/x402/near.ts"],"names":[],"mappings":";;;;AAeA,IAAM,0BAAA,GAA6B,IAAA;AAEnC,IAAM,SAAA,GAAY,EAAA;AAeX,SAAS,kBAAA,CACd,SACA,KAAA,EACiE;AACjE,EAAA,MAAM,UAAU,QAAA,CAAS,OAAO,CAAA,GAAI,OAAA,CAAQ,sBAAsB,CAAA,GAAI,MAAA;AACtE,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,SAAS,0BAAA,EAA4B;AAC9E,IAAA,OAAO,kCAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,uBAAA,CAAwB,OAAO,CAAA,CAAE,QAAA;AAAA,EAC9C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,mDAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,WAAA,CAAY,OAAO,CAAA,EAAG,OAAO,mDAAA;AAClC,EAAA,IAAI,QAAA,CAAS,WAAA,KAAgB,CAAA,EAAG,OAAO,yCAAA;AACvC,EAAA,MAAM,OAAO,QAAA,CAAS,YAAA;AACtB,EAAA,IAAI,CAAC,MAAM,OAAO,wCAAA;AAClB,EAAA,IAAI,IAAA,CAAK,UAAA,KAAe,aAAA,EAAe,OAAO,wCAAA;AAC9C,EAAA,IAAI,QAAA,CAAS,UAAA,KAAe,KAAA,CAAM,KAAA,EAAO;AACvC,IAAA,OAAO,oDAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,mBAAA,CAAoB,KAAK,IAAI,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,6CAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,KAAA,CAAM,KAAA,EAAO,OAAO,+CAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,4CAAA;AACzC,EAAA,IAAI,IAAA,CAAK,OAAA,KAAY,SAAA,EAAW,OAAO,6CAAA;AACvC,EAAA,OAAO;AAAA,IACL,OAAO,QAAA,CAAS,QAAA;AAAA,IAChB,WAAW,oBAAA,CAAqB;AAAA,MAC9B,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,OAAO,QAAA,CAAS;AAAA,KACjB;AAAA,GACH;AACF;AAOA,SAAS,YAAY,OAAA,EAA0B;AAC7C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,KAAM,SAAS,OAAO,KAAA;AACjD,EAAA,IAAI;AACF,IAAA,uBAAA,CAAwB,KAAA,CAAM,SAAS,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAC,CAAA;AAC9E,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"near-5AY3HWYF.js","sourcesContent":["/**\n * NEAR `exact` payload inspection: bounded decoding of the NEP-366 signed\n * delegate action, the transfer it authorizes and its replay identity. The\n * provider loads this module only for a NEAR offer, so other deployments never\n * import `@x402/near`.\n *\n * The facilitator checks the signature, the access key and its nonce, the\n * delegate window and chain state. The gateway checks the transfer the buyer\n * signed against the offer, so a proof for other terms never reaches it.\n */\nimport { decodeSignedDelegateB64, parseFtTransferArgs } from '@x402/near';\nimport { isRecord } from '../../core/is-record';\nimport { computeNearReplayKey } from './replay-key';\n\n// One `ft_transfer` delegate is a few hundred bytes; this bounds the decoder\nconst MAX_SIGNED_DELEGATE_BASE64 = 4096;\n// NEP-141 requires exactly one yoctoNEAR on `ft_transfer`\nconst ONE_YOCTO = 1n;\n\nexport interface NearTransferTerms {\n readonly network: string;\n /** The NEP-141 token contract the delegate must call */\n readonly asset: string;\n readonly payTo: string;\n /** Atomic units, as the offer states them */\n readonly amount: string;\n}\n\n/**\n * Returns the payer and replay key if the NEAR `exact` payload matches the\n * offer, or a refusal reason using the SDK facilitator's codes.\n */\nexport function inspectNearPayload(\n payload: unknown,\n terms: NearTransferTerms,\n): { readonly payer: string; readonly replayKey: string } | string {\n const encoded = isRecord(payload) ? payload['signedDelegateAction'] : undefined;\n if (typeof encoded !== 'string' || encoded.length > MAX_SIGNED_DELEGATE_BASE64) {\n return 'invalid_exact_near_payload_shape';\n }\n let delegate: ReturnType<typeof decodeSignedDelegateB64>['delegate'];\n try {\n delegate = decodeSignedDelegateB64(encoded).delegate;\n } catch {\n return 'invalid_exact_near_payload_signed_delegate_action';\n }\n if (!isCanonical(encoded)) return 'invalid_exact_near_payload_signed_delegate_action';\n if (delegate.actionCount !== 1) return 'invalid_exact_near_payload_action_count';\n const call = delegate.functionCall;\n if (!call) return 'invalid_exact_near_payload_action_kind';\n if (call.methodName !== 'ft_transfer') return 'invalid_exact_near_payload_method_name';\n if (delegate.receiverId !== terms.asset) {\n return 'invalid_exact_near_payload_token_contract_mismatch';\n }\n let args: ReturnType<typeof parseFtTransferArgs>;\n try {\n args = parseFtTransferArgs(call.args);\n } catch {\n return 'invalid_exact_near_payload_ft_transfer_args';\n }\n if (args.receiver_id !== terms.payTo) return 'invalid_exact_near_payload_recipient_mismatch';\n if (args.amount !== terms.amount) return 'invalid_exact_near_payload_amount_mismatch';\n if (call.deposit !== ONE_YOCTO) return 'invalid_exact_near_payload_attached_deposit';\n return {\n payer: delegate.senderId,\n replayKey: computeNearReplayKey({\n network: terms.network,\n senderId: delegate.senderId,\n publicKey: delegate.publicKey,\n nonce: delegate.nonce,\n }),\n };\n}\n\n/**\n * One delegate, one encoding: canonical base64, and no bytes after the signed\n * delegate. The SDK decoder ignores such bytes, so the check decodes the\n * payload without its last byte: a canonical encoding then runs short.\n */\nfunction isCanonical(encoded: string): boolean {\n const bytes = Buffer.from(encoded, 'base64');\n if (bytes.toString('base64') !== encoded) return false;\n try {\n decodeSignedDelegateB64(bytes.subarray(0, bytes.length - 1).toString('base64'));\n return false;\n } catch {\n return true;\n }\n}\n"]}