agentcash 0.17.0 → 0.17.1

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 (57) hide show
  1. package/dist/cjs/run-server.cjs +11951 -24158
  2. package/dist/esm/{add-skill-DPQR466Y.js → add-skill-CFGMBWS4.js} +4 -4
  3. package/dist/esm/{bridge-JNIOVDD3.js → bridge-4SWPSBWP.js} +3 -3
  4. package/dist/esm/{check-LR3CSSJF.js → check-PGUEDKO5.js} +4 -4
  5. package/dist/esm/{chunk-O4R5W5G4.js → chunk-574342U7.js} +2 -2
  6. package/dist/esm/{chunk-7WQMJKJR.js → chunk-6IYTF6NV.js} +2 -2
  7. package/dist/esm/{chunk-7YQDCZ3N.js → chunk-6YIG64RH.js} +2 -2
  8. package/dist/esm/{chunk-H5V6L7NG.js → chunk-CCWBMXQT.js} +3 -3
  9. package/dist/esm/chunk-CCWBMXQT.js.map +1 -0
  10. package/dist/esm/{chunk-ORF2OXB7.js → chunk-G6MIWS35.js} +3 -3
  11. package/dist/esm/{chunk-WPCEYCCK.js → chunk-H7ES5FU5.js} +2 -2
  12. package/dist/esm/{chunk-Q5YKPVXL.js → chunk-MCJ446SE.js} +2 -2
  13. package/dist/esm/{chunk-7VILIGSP.js → chunk-QFYKR3H3.js} +2 -2
  14. package/dist/esm/{chunk-RT7PTEMC.js → chunk-XU7NVHOY.js} +2 -2
  15. package/dist/esm/{chunk-6M7F5KOU.js → chunk-YIECO2O4.js} +9 -2
  16. package/dist/esm/{chunk-6M7F5KOU.js.map → chunk-YIECO2O4.js.map} +1 -1
  17. package/dist/esm/{chunk-M3YTSL6T.js → chunk-YOY6D3SX.js} +3 -3
  18. package/dist/esm/{discover-EIFUI6QT.js → discover-OGK3JBEU.js} +3 -3
  19. package/dist/esm/{fetch-BO4HOM62.js → fetch-SC43UYLV.js} +17 -10
  20. package/dist/esm/fetch-SC43UYLV.js.map +1 -0
  21. package/dist/esm/index.js +21 -21
  22. package/dist/esm/index.js.map +1 -1
  23. package/dist/esm/{install-UWNAPNKE.js → install-ONQHFNPS.js} +3 -3
  24. package/dist/esm/{onboard-PBXGWWPK.js → onboard-VZ4MNINC.js} +3 -3
  25. package/dist/esm/{origins-ZXQOPPWV.js → origins-YOHZN3QI.js} +4 -4
  26. package/dist/esm/{register-KCAOKKJC.js → register-NMKUVK6Z.js} +2 -2
  27. package/dist/esm/{report-error-PBDX2ATE.js → report-error-HQBVDKDU.js} +3 -3
  28. package/dist/esm/{search-PQ7AGO6O.js → search-H32FUHXO.js} +4 -4
  29. package/dist/esm/{server-XRYGME55.js → server-MKLACHXU.js} +23 -20
  30. package/dist/esm/server-MKLACHXU.js.map +1 -0
  31. package/dist/esm/{server-N6J25ZGU.js → server-YVMRCPCF.js} +2 -2
  32. package/dist/esm/{try-3CZ3JFD2.js → try-NEU56CHG.js} +3 -3
  33. package/package.json +4 -4
  34. package/dist/esm/chunk-H5V6L7NG.js.map +0 -1
  35. package/dist/esm/fetch-BO4HOM62.js.map +0 -1
  36. package/dist/esm/server-XRYGME55.js.map +0 -1
  37. /package/dist/esm/{add-skill-DPQR466Y.js.map → add-skill-CFGMBWS4.js.map} +0 -0
  38. /package/dist/esm/{bridge-JNIOVDD3.js.map → bridge-4SWPSBWP.js.map} +0 -0
  39. /package/dist/esm/{check-LR3CSSJF.js.map → check-PGUEDKO5.js.map} +0 -0
  40. /package/dist/esm/{chunk-O4R5W5G4.js.map → chunk-574342U7.js.map} +0 -0
  41. /package/dist/esm/{chunk-7WQMJKJR.js.map → chunk-6IYTF6NV.js.map} +0 -0
  42. /package/dist/esm/{chunk-7YQDCZ3N.js.map → chunk-6YIG64RH.js.map} +0 -0
  43. /package/dist/esm/{chunk-ORF2OXB7.js.map → chunk-G6MIWS35.js.map} +0 -0
  44. /package/dist/esm/{chunk-WPCEYCCK.js.map → chunk-H7ES5FU5.js.map} +0 -0
  45. /package/dist/esm/{chunk-Q5YKPVXL.js.map → chunk-MCJ446SE.js.map} +0 -0
  46. /package/dist/esm/{chunk-7VILIGSP.js.map → chunk-QFYKR3H3.js.map} +0 -0
  47. /package/dist/esm/{chunk-RT7PTEMC.js.map → chunk-XU7NVHOY.js.map} +0 -0
  48. /package/dist/esm/{chunk-M3YTSL6T.js.map → chunk-YOY6D3SX.js.map} +0 -0
  49. /package/dist/esm/{discover-EIFUI6QT.js.map → discover-OGK3JBEU.js.map} +0 -0
  50. /package/dist/esm/{install-UWNAPNKE.js.map → install-ONQHFNPS.js.map} +0 -0
  51. /package/dist/esm/{onboard-PBXGWWPK.js.map → onboard-VZ4MNINC.js.map} +0 -0
  52. /package/dist/esm/{origins-ZXQOPPWV.js.map → origins-YOHZN3QI.js.map} +0 -0
  53. /package/dist/esm/{register-KCAOKKJC.js.map → register-NMKUVK6Z.js.map} +0 -0
  54. /package/dist/esm/{report-error-PBDX2ATE.js.map → report-error-HQBVDKDU.js.map} +0 -0
  55. /package/dist/esm/{search-PQ7AGO6O.js.map → search-H32FUHXO.js.map} +0 -0
  56. /package/dist/esm/{server-N6J25ZGU.js.map → server-YVMRCPCF.js.map} +0 -0
  57. /package/dist/esm/{try-3CZ3JFD2.js.map → try-NEU56CHG.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/operations/fetch/auth.ts","../../src/shared/protocols/x402/index.ts","../../src/shared/protocols/x402/builder-code.ts","../../src/shared/protocols/x402/patched-exact-svm-scheme.ts","../../src/shared/protocols/x402/policies.ts","../../src/shared/protocols/detect.ts","../../src/shared/protocols/mpp/handle-payment.ts","../../src/shared/protocols/before-payment.ts","../../src/shared/protocols/mpp/session/handle-session-payment.ts","../../src/shared/protocols/mpp/session/run-request-session.ts","../../src/shared/protocols/mpp/session/run-streaming-session.ts","../../src/shared/protocols/mpp/session/utils.ts","../../src/shared/protocols/pick.ts","../../src/shared/protocols/x402/choose-payment-requirement.ts","../../src/shared/protocols/x402/handle-payment.ts","../../src/operations/fetch/payment.ts","../../src/operations/fetch/index.ts"],"sourcesContent":["import { encodeSIWxHeader } from '@x402/extensions/sign-in-with-x';\n\nimport { fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n getSiwxExtension,\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/protocols/x402';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function attemptSiwxAuth(\n response: Response,\n authRetryRequest: Request,\n paymentRetryRequest: Request,\n options: ExecuteFetchOptions\n) {\n const { surface, wallets } = options;\n const { timeout, paymentNetwork } = options.params;\n\n if (!response.headers.has('payment-required')) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const siwxExtension = getSiwxExtension(\n paymentRequiredResult.value.extensions,\n paymentNetwork\n );\n\n if (!siwxExtension) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const payloadResult = await safeCreateSIWxPayload(\n surface,\n siwxExtension,\n wallets\n );\n\n if (payloadResult.isErr()) {\n return payloadResult;\n }\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n authRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n paymentRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n return (await safeFetch(surface, authRetryRequest, timeout)).andThen(\n authResponse =>\n fetchOk({\n response: authResponse,\n paymentRetryRequest,\n })\n );\n}\n","import {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@agentcash/neverthrow';\n\nimport type { SelectPaymentRequirements } from '@x402/core/client';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { toClientEvmSigner } from '@x402/evm';\nimport { toClientSvmSigner } from '@x402/svm';\n\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { UptoEvmScheme } from '@x402/evm/upto/client';\nimport { createBuilderCodeExtension } from './builder-code';\nimport { PatchedExactSvmScheme } from './patched-exact-svm-scheme';\nimport { capUptoDeadline } from './policies';\n\nimport { createSIWxPayload } from '@x402/extensions/sign-in-with-x';\n\nimport type { BaseX402Error } from './types';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type {\n CompleteSIWxInfo,\n SIWxExtensionInfo,\n SolanaSigner,\n SupportedChain,\n} from '@x402/extensions/sign-in-with-x';\nimport type { Wallets } from '@/wallet';\nimport { Network, networkToCaip2 } from '@agentcash/networks';\nimport type { Network as PaymentNetwork } from '@agentcash/networks';\nimport { createPublicClient, http } from 'viem';\nimport { base } from 'viem/chains';\n\nconst errorType = 'x402';\n\nexport const x402Ok = <T>(value: T) => ok(value);\nexport const x402Err = (cause: string, error: BaseX402Error) =>\n err(errorType, cause, error);\n\nconst x402ResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseX402Error\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst x402ResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseX402Error\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const x402ProbeClient = new x402HTTPClient(new x402Client());\n\nexport const safeGetPaymentRequired = (surface: string, response: Response) => {\n // Read the body from a clone so the caller's Response stays unconsumed.\n // Dual-protocol 402s (x402 header + MPP `WWW-Authenticate`) reuse the same\n // Response downstream, and mppx >=0.6 clones it internally when creating a\n // credential — consuming it here would make that clone throw.\n const probe = response.clone();\n return x402ResultFromPromise(\n surface,\n probe.json().then(\n json =>\n x402ProbeClient.getPaymentRequiredResponse(\n name => response.headers.get(name),\n json\n ),\n () =>\n x402ProbeClient.getPaymentRequiredResponse(name =>\n response.headers.get(name)\n )\n ),\n error => ({\n cause: 'parse_payment_required',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse payment required',\n })\n );\n};\n\nexport const getSiwxExtension = (\n extensions: PaymentRequired['extensions'],\n paymentNetwork?: PaymentNetwork\n): CompleteSIWxInfo | undefined => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo; supportedChains?: SupportedChain[] }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n const chain = siwx.supportedChains?.find(c =>\n paymentNetwork\n ? c.chainId === networkToCaip2(paymentNetwork)\n : c.chainId.startsWith('eip155:')\n );\n\n return {\n ...siwx.info,\n chainId: chain?.chainId ?? 'eip155:8453',\n type: chain?.type ?? 'eip191',\n signatureScheme: chain?.signatureScheme,\n };\n};\n\nexport const safeCreatePaymentPayload = (\n surface: string,\n wallets: Wallets,\n paymentRequired: PaymentRequired,\n paymentRequirementsSelector?: SelectPaymentRequirements\n) => {\n const client = new x402HTTPClient(\n x402Client\n .fromConfig({\n schemes: [\n {\n network: networkToCaip2(Network.BASE),\n client: new ExactEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.BASE),\n client: new UptoEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.SOLANA),\n client: new PatchedExactSvmScheme(toClientSvmSigner(wallets.svm)),\n },\n ],\n policies: [capUptoDeadline],\n paymentRequirementsSelector,\n })\n .registerExtension(createBuilderCodeExtension())\n );\n return x402ResultFromPromise(\n surface,\n client.createPaymentPayload(paymentRequired),\n error => ({\n cause: 'create_payment_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create payment payload',\n })\n );\n};\n\nexport const safeGetPaymentSettlement = (\n surface: string,\n response: Response\n) => {\n return x402ResultFromThrowable(\n surface,\n () =>\n x402ProbeClient.getPaymentSettleResponse(name =>\n response.headers.get(name)\n ),\n error => ({\n cause: 'get_payment_settlement',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to get payment settlement',\n })\n );\n};\n\nexport const safeCreateSIWxPayload = (\n surface: string,\n serverInfo: CompleteSIWxInfo,\n wallets: Wallets\n) => {\n return x402ResultFromPromise(\n surface,\n createSIWxPayload(\n serverInfo,\n serverInfo.chainId.startsWith('eip155:')\n ? wallets.evm\n : (wallets.svm as unknown as SolanaSigner)\n ),\n error => ({\n cause: 'create_siwx_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create SIWX payload',\n })\n );\n};\n","import {\n BUILDER_CODE_PATTERN,\n BuilderCodeClientExtension,\n} from '@x402/extensions/builder-code';\n\n/**\n * AgentCash's ERC-8021 builder code, sent as the client service code (`s`) on\n * every x402 payment so settlements driven by agentcash are attributed onchain.\n * Builder codes are registered at https://dashboard.base.org (Settings →\n * Builder Codes).\n */\nexport const AGENTCASH_BUILDER_CODE = 'agentcash';\n\n/**\n * Client extension attributing payments to agentcash. An operator can attach\n * their own code alongside ours via AGENTCASH_BUILDER_CODE_EXTRA; invalid\n * codes are dropped rather than failing the payment.\n */\nexport const createBuilderCodeExtension = () => {\n const extra = process.env.AGENTCASH_BUILDER_CODE_EXTRA?.trim();\n const codes =\n extra && BUILDER_CODE_PATTERN.test(extra)\n ? [AGENTCASH_BUILDER_CODE, extra]\n : AGENTCASH_BUILDER_CODE;\n return new BuilderCodeClientExtension(codes);\n};\n","import {\n getSetComputeUnitLimitInstruction,\n setTransactionMessageComputeUnitPrice,\n} from '@solana-program/compute-budget';\nimport { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';\nimport {\n fetchMint,\n findAssociatedTokenPda,\n getTransferCheckedInstruction,\n TOKEN_2022_PROGRAM_ADDRESS,\n} from '@solana-program/token-2022';\nimport {\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase64EncodedWireTransaction,\n partiallySignTransactionMessageWithSigners,\n pipe,\n prependTransactionMessageInstruction,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n type Address,\n} from '@solana/kit';\n\nimport type {\n PaymentPayload,\n PaymentRequirements,\n SchemeNetworkClient,\n} from '@x402/core/types';\nimport {\n DEFAULT_COMPUTE_UNIT_LIMIT,\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n createRpcClient,\n type ClientSvmConfig,\n type ClientSvmSigner,\n type ExactSvmPayloadV2,\n} from '@x402/svm';\n\ntype BlockhashLifetime = Parameters<\n typeof setTransactionMessageLifetimeUsingBlockhash\n>[0];\n\ninterface PatchedPaymentExtra {\n feePayer?: Address;\n recentBlockhash?:\n | string\n | Partial<{\n blockhash: string;\n lastValidBlockHeight: bigint | number | string;\n }>;\n lastValidBlockHeight?: bigint | number | string;\n}\n\nfunction parseLastValidBlockHeight(\n value: bigint | number | string | undefined\n): bigint | undefined {\n if (typeof value === 'bigint') {\n return value;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return BigInt(value);\n }\n\n if (typeof value === 'string' && value.length > 0) {\n return BigInt(value);\n }\n\n return undefined;\n}\n\nfunction asBlockhash(blockhash: string): BlockhashLifetime['blockhash'] {\n return blockhash as BlockhashLifetime['blockhash'];\n}\n\n/**\n * Local compatibility patch for Coinbase ExactSvmScheme.\n *\n * Changes from upstream:\n * - omits the trailing memo instruction\n * - prefers paymentRequirements.extra.recentBlockhash when provided\n */\nexport class PatchedExactSvmScheme implements SchemeNetworkClient {\n readonly scheme = 'exact';\n\n constructor(\n private readonly signer: ClientSvmSigner,\n private readonly config?: ClientSvmConfig\n ) {}\n\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements\n ): Promise<Pick<PaymentPayload, 'x402Version' | 'payload'>> {\n const rpc = createRpcClient(\n paymentRequirements.network,\n this.config?.rpcUrl\n );\n\n const tokenMint = await fetchMint(\n rpc,\n paymentRequirements.asset as Address\n );\n const tokenProgramAddress = tokenMint.programAddress;\n\n if (\n tokenProgramAddress.toString() !== TOKEN_PROGRAM_ADDRESS.toString() &&\n tokenProgramAddress.toString() !== TOKEN_2022_PROGRAM_ADDRESS.toString()\n ) {\n throw new Error('Asset was not created by a known token program');\n }\n\n const [sourceATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: this.signer.address,\n tokenProgram: tokenProgramAddress,\n });\n\n const [destinationATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: paymentRequirements.payTo as Address,\n tokenProgram: tokenProgramAddress,\n });\n\n const transferIx = getTransferCheckedInstruction(\n {\n source: sourceATA,\n mint: paymentRequirements.asset as Address,\n destination: destinationATA,\n authority: this.signer,\n amount: BigInt(paymentRequirements.amount),\n decimals: tokenMint.data.decimals,\n },\n { programAddress: tokenProgramAddress }\n );\n\n const extra = paymentRequirements.extra as PatchedPaymentExtra;\n const feePayer = extra.feePayer;\n\n if (!feePayer) {\n throw new Error(\n 'feePayer is required in paymentRequirements.extra for SVM transactions'\n );\n }\n\n const latestBlockhash = await this.resolveBlockhashLifetime(rpc, extra);\n\n const tx = pipe(\n createTransactionMessage({ version: 0 }),\n tx =>\n setTransactionMessageComputeUnitPrice(\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n tx\n ),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx =>\n prependTransactionMessageInstruction(\n getSetComputeUnitLimitInstruction({\n units: DEFAULT_COMPUTE_UNIT_LIMIT,\n }),\n tx\n ),\n tx => appendTransactionMessageInstructions([transferIx], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx)\n );\n\n const signedTransaction =\n await partiallySignTransactionMessageWithSigners(tx);\n const base64EncodedWireTransaction =\n getBase64EncodedWireTransaction(signedTransaction);\n\n const payload: ExactSvmPayloadV2 = {\n transaction: base64EncodedWireTransaction,\n };\n\n return {\n x402Version,\n payload,\n };\n }\n\n private async resolveBlockhashLifetime(\n rpc: ReturnType<typeof createRpcClient>,\n extra: PatchedPaymentExtra\n ): Promise<BlockhashLifetime> {\n const providedLastValidBlockHeight = parseLastValidBlockHeight(\n extra.lastValidBlockHeight\n );\n\n if (typeof extra.recentBlockhash === 'string') {\n if (providedLastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: providedLastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n if (\n extra.recentBlockhash &&\n typeof extra.recentBlockhash === 'object' &&\n typeof extra.recentBlockhash.blockhash === 'string'\n ) {\n const lastValidBlockHeight =\n parseLastValidBlockHeight(extra.recentBlockhash.lastValidBlockHeight) ??\n providedLastValidBlockHeight;\n\n if (lastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n return (await rpc.getLatestBlockhash().send()).value;\n }\n}\n","import type { PaymentPolicy } from '@x402/core/client';\n\n/**\n * Maximum deadline (in seconds) we accept for `upto` payment requirements.\n *\n * The `upto` Permit2 signature is bound by `paymentRequirements.maxTimeoutSeconds`,\n * which the SDK passes straight through from the merchant's 402 response with no\n * upper bound. Within that window, the (merchant + facilitator) pair can settle\n * for any amount in `[0, cap]` — and the only on-chain check is the deadline.\n *\n * A long deadline therefore extends the window of facilitator-discretion settlement\n * at the signed cap. 7 days lets a long-running agent keep working without\n * re-signing, but bounds the trust window if a merchant declares an unreasonably\n * large `maxTimeoutSeconds` (accidentally or otherwise).\n *\n * `exact` requirements are unaffected: their amount is fixed in the signature, so\n * a long validity window is just an annoyance, not a discretion surface.\n */\nexport const MAX_UPTO_DEADLINE_SECONDS = 7 * 24 * 60 * 60; // 7 days\n\n/**\n * Caps `maxTimeoutSeconds` on `upto` requirements at {@link MAX_UPTO_DEADLINE_SECONDS}.\n * Leaves `exact` and any other scheme untouched. Pass to `x402Client.fromConfig({ policies })`.\n */\nexport const capUptoDeadline: PaymentPolicy = (_x402Version, requirements) =>\n requirements.map(r =>\n r.scheme === 'upto' && r.maxTimeoutSeconds > MAX_UPTO_DEADLINE_SECONDS\n ? { ...r, maxTimeoutSeconds: MAX_UPTO_DEADLINE_SECONDS }\n : r\n );\n","import { PaymentProtocol } from './types';\n\nexport function detectPaymentProtocols(response: Response): PaymentProtocol[] {\n const protocols: PaymentProtocol[] = [];\n\n const wwwAuth = response.headers.get('WWW-Authenticate');\n if (wwwAuth?.startsWith('Payment')) {\n protocols.push(PaymentProtocol.MPP);\n }\n\n const paymentRequired = response.headers.get('payment-required');\n if (paymentRequired) {\n protocols.push(PaymentProtocol.X402);\n }\n // If we couldn't detect either explicitly, default to x402\n if (protocols.length === 0) {\n protocols.push(PaymentProtocol.X402);\n }\n return protocols;\n}\n","import type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { safeFetch, safeReadResponseText } from '@/shared/neverthrow/fetch';\nimport {\n assertTempoUsdc,\n safeGetMppChallenge,\n safeCreateMppCredential,\n safeGetMppReceipt,\n mppErr,\n mppOk,\n} from '@/shared/protocols/mpp';\n\nimport { PaymentProtocol } from '../types';\nimport { Network } from '@agentcash/networks';\nimport { formatUsd } from '@/shared/utils';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '@/shared/protocols/types';\nimport { beforePayment } from '../before-payment';\nimport { handleMppSessionPayment } from './session/handle-session-payment';\n\nexport async function handleMppPayment(params: HandlePaymentParams) {\n const { response, request, options } = params;\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n // Prevent retry loops\n if (request.headers.has('Authorization')) {\n return mppErr(surface, {\n cause: 'mpp_payment_already_attempted',\n message: 'MPP payment already attempted',\n });\n }\n\n // Parse the challenge from the WWW-Authenticate header\n const challengeResult = safeGetMppChallenge(surface, response);\n\n if (challengeResult.isErr()) {\n return challengeResult;\n }\n\n const challenge = challengeResult.value;\n\n if (challenge.intent === 'session') {\n return handleMppSessionPayment(challenge, params);\n }\n\n const amount = Number(formatUnits(BigInt(challenge.request.amount), 6));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) {\n return tokenCheck;\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput: {\n address: wallets.evm.address,\n network: Network.TEMPO,\n tokenAddress,\n },\n amount,\n protocol: PaymentProtocol.MPP,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n\n const credentialResult = await safeCreateMppCredential(\n surface,\n wallets,\n response\n );\n\n if (credentialResult.isErr()) {\n return credentialResult;\n }\n\n const credential = credentialResult.value;\n\n // Set Authorization header on cloned request\n request.headers.set('Authorization', credential);\n\n // Retry the fetch with the credential\n const paidFetchResult = await safeFetch(surface, request, timeout);\n if (paidFetchResult.isErr()) {\n return paidFetchResult;\n }\n\n const paidResponse = paidFetchResult.value;\n\n // If the server still returns 402, the payment was rejected\n if (paidResponse.status === 402) {\n const body = await safeReadResponseText(surface, paidResponse).unwrapOr('');\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP payment was rejected by the server (402)${detail}`,\n });\n }\n\n // Parse the receipt for transaction hash\n const receiptResult = safeGetMppReceipt(surface, paidResponse);\n\n return mppOk<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price: formatUsd(amount),\n payment: receiptResult.isOk()\n ? {\n success: true,\n transactionHash: receiptResult.value.reference,\n }\n : null,\n },\n });\n}\n","import { err, ok } from '@agentcash/neverthrow';\n\nimport { getBalance } from '../balance';\nimport { getDepositLink } from '../utils';\nimport { getSettings } from '../settings';\n\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch/types';\n\nimport type { GetBalanceInput } from '@agentcash/balance';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\nimport type { PaymentProtocol } from './types';\n\ninterface BeforePaymentProps {\n options: ExecuteFetchOptions;\n balanceInput: GetBalanceInput;\n protocol: PaymentProtocol;\n amount: number;\n}\n\nexport const beforePayment = async (props: BeforePaymentProps) => {\n const { options, balanceInput, amount } = props;\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n if (amount > maxAmount) {\n return err('before_payment', options.surface, {\n cause: 'amount_exceeds_max_amount' as const,\n message: `Endpoint requested $${amount} which exceeds the maximum allowed amount of $${maxAmount}. Pass a higher maxAmount on this call, or use update_settings to raise the default permanently.`,\n });\n }\n\n const balanceResult = await getBalance(\n options.surface,\n balanceInput,\n options.flags\n );\n\n if (balanceResult.isErr()) {\n return balanceResult;\n }\n\n const balance = balanceResult.value.balance;\n\n if (balance < amount) {\n return err('before_payment', options.surface, {\n cause: 'insufficient_balance' as const,\n message: insufficientBalanceErrorMessage(props, balance),\n });\n }\n\n return ok(true);\n};\n\nconst insufficientBalanceErrorMessage = (\n props: BeforePaymentProps,\n balance: number\n) => {\n const { options, balanceInput, amount } = props;\n return [\n `You are attempting to use an endpoint via ${props.protocol} that costs ${amount} USDC on ${balanceInput.network}.`,\n `Your current balance is ${balance} USDC.`,\n `You can bridge between accounts or deposit at ${getDepositLink(balanceInput.address, options.flags, balanceInput.network)} to top up your balance.`,\n `Before bridging, you can check the users account with npx agentcash@latest accounts or if you are within the MCP, you can use the list_accounts tool.`,\n ].join('\\n');\n};\n","import type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { sessionManager } from 'mppx/client';\n\nimport { Network } from '@agentcash/networks';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport { formatUsd, tokenStringToNumber } from '@/shared/utils';\n\nimport { beforePayment } from '../../before-payment';\nimport type { HandlePaymentParams } from '../../types';\nimport { PaymentProtocol } from '../../types';\nimport {\n assertTempoUsdc,\n createTempoClient,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport { runRequestSession } from './run-request-session';\nimport { runStreamingSession } from './run-streaming-session';\nimport { createSessionChannelStore } from './session-store';\nimport type { SessionChallenge } from './types';\nimport {\n USDC_DECIMALS,\n bufferRequestForReplay,\n formatDepositCap,\n resolveDepositUsd,\n} from './utils';\n\nexport async function handleMppSessionPayment(\n challenge: SessionChallenge,\n { request, options }: HandlePaymentParams\n) {\n const { surface, wallets } = options;\n\n const tickCostAtomic = BigInt(challenge.request.amount);\n const tickCostUsd = Number(formatUnits(tickCostAtomic, USDC_DECIMALS));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) return tokenCheck;\n\n const depositUsd = resolveDepositUsd(\n challenge.request.suggestedDeposit,\n tickCostUsd,\n options\n );\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput: {\n address: wallets.evm.address,\n network: Network.TEMPO,\n tokenAddress,\n },\n amount: depositUsd,\n protocol: PaymentProtocol.MPP,\n });\n if (beforePaymentResult.isErr()) return beforePaymentResult;\n\n const replayInitResult = await mppResultFromPromise(\n surface,\n bufferRequestForReplay(request),\n e =>\n sessionRequestFailedErr(\n e,\n 'Failed to buffer request body for session replay'\n )\n );\n if (replayInitResult.isErr()) return replayInitResult;\n\n const sm = sessionManager({\n account: wallets.evm,\n client: createTempoClient(),\n maxDeposit: formatDepositCap(depositUsd),\n decimals: USDC_DECIMALS,\n // Persist the channel (with its TIP-1034 descriptor) per wallet so it can be\n // reused across requests/restarts and closed later via sessions_close — and\n // only ever by the wallet that opened it.\n channelStore: createSessionChannelStore(wallets.evm.address),\n });\n\n const isStreaming =\n challenge.meta?.streaming === 'true' || options.params.stream === true;\n\n const sessionResult = isStreaming\n ? await runStreamingSession(\n surface,\n sm,\n request.url,\n replayInitResult.value\n )\n : await runRequestSession(surface, sm, request.url, replayInitResult.value);\n if (sessionResult.isErr()) return sessionResult;\n\n const { response: finalResponse, receipt } = sessionResult.value;\n\n const price = receipt\n ? formatUsd(tokenStringToNumber(receipt.spent, USDC_DECIMALS))\n : `from ${formatUsd(tickCostUsd)}/tick`;\n\n return mppOk<ExecuteFetchResult>({\n response: finalResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price,\n payment: receipt ? { success: true, channelId: receipt.channelId } : null,\n },\n });\n}\n","import { safeReadResponseText } from '@/shared/neverthrow/fetch';\n\nimport {\n mppErr,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport type { SessionManager, SessionOutcome } from './types';\n\nexport async function runRequestSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit\n) {\n const fetchResult = await mppResultFromPromise(\n surface,\n sm.fetch(url, init),\n e => sessionRequestFailedErr(e)\n );\n if (fetchResult.isErr()) return fetchResult;\n\n const paymentResponse = fetchResult.value;\n\n if (paymentResponse.status === 402) {\n const body = await safeReadResponseText(surface, paymentResponse).unwrapOr(\n ''\n );\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP session payment was rejected by the server (402)${detail}`,\n });\n }\n\n return mppOk<SessionOutcome>({\n response: paymentResponse,\n receipt: paymentResponse.receipt,\n });\n}\n","import { mppErr, mppOk } from '../index';\nimport type { SessionManager, SessionOutcome, SessionReceipt } from './types';\n\nconst MAX_BUFFERED_BYTES = 50 * 1024 * 1024;\n\nexport async function runStreamingSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit\n) {\n let latestReceipt: SessionReceipt | null = null;\n\n const { signal, ...rest } = init;\n const sseResult = await sm.sse(url, {\n ...rest,\n ...(signal ? { signal } : {}),\n onReceipt: receipt => {\n latestReceipt = receipt;\n },\n });\n\n const chunks: string[] = [];\n let bytes = 0;\n for await (const chunk of sseResult) {\n bytes += chunk.length;\n chunks.push(chunk);\n if (bytes > MAX_BUFFERED_BYTES) {\n return mppErr(surface, {\n cause: 'mpp_session_response_too_large',\n message: `Streaming response exceeded the ${MAX_BUFFERED_BYTES}-byte buffering cap (got ${bytes} bytes).`,\n });\n }\n }\n\n // mppx's `sm.sse()` yields the `data:` payloads of `message` events\n // (voucher/receipt events are consumed internally), so join with `\\n`\n // to keep object-yielding streams valid NDJSON.\n const response = new Response(chunks.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain',\n 'Cache-Control': 'private',\n },\n });\n\n return mppOk<SessionOutcome>({ response, receipt: latestReceipt });\n}\n","import {\n DEFAULT_MAX_AMOUNT,\n type ExecuteFetchOptions,\n} from '@/operations/fetch/types';\nimport { getSettings } from '@/shared/settings';\nimport { tokenStringToNumber } from '@/shared/utils';\n\nexport const USDC_DECIMALS = 6;\nconst DEFAULT_TICK_BUDGET = 10;\n\nexport function resolveDepositUsd(\n suggestedDeposit: string | undefined,\n tickCostUsd: number,\n options: ExecuteFetchOptions\n): number {\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n const desired =\n suggestedDeposit !== undefined\n ? tokenStringToNumber(suggestedDeposit, USDC_DECIMALS)\n : tickCostUsd * DEFAULT_TICK_BUDGET;\n return Math.min(desired, maxAmount);\n}\n\n// toFixed rather than toString so very small deposits don't serialize in\n// scientific notation, which viem's parseUnits rejects.\nexport function formatDepositCap(depositUsd: number): string {\n if (!Number.isFinite(depositUsd) || depositUsd <= 0) {\n return '0';\n }\n return depositUsd.toFixed(USDC_DECIMALS);\n}\n\nexport async function bufferRequestForReplay(\n request: Request\n): Promise<RequestInit> {\n const init: RequestInit = {\n method: request.method,\n headers: new Headers(request.headers),\n credentials: request.credentials,\n redirect: request.redirect,\n referrer: request.referrer === '' ? undefined : request.referrer,\n integrity: request.integrity || undefined,\n signal: request.signal,\n };\n\n const hasBody =\n request.method !== 'GET' &&\n request.method !== 'HEAD' &&\n request.body !== null;\n\n if (hasBody) {\n init.body = await request.arrayBuffer();\n }\n\n return init;\n}\n","import { safeGetMppChallenge } from '@/shared/protocols/mpp';\n\nimport { log } from '@/shared/log';\nimport { getBalance } from '@/shared/balance';\nimport { Network } from '@agentcash/networks';\n\nimport { PaymentProtocol } from './types';\n\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\n/**\n * Pick the preferred protocol by comparing wallet balances.\n * Falls back to 'mpp' if both balances fail to fetch.\n */\nexport async function pickByBalance(\n response: Response,\n options: ExecuteFetchOptions\n): Promise<PaymentProtocol> {\n const { surface, wallets, flags } = options;\n\n // Get x402 (USDC on Base and Solana) balances in parallel\n const x402Balances = await Promise.all([\n getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.BASE,\n },\n flags\n ),\n getBalance(\n surface,\n {\n address: wallets.svm.address,\n network: Network.SOLANA,\n },\n flags\n ),\n ]);\n\n const x402Balance = x402Balances.reduce(\n (acc, balance) => acc + (balance.isOk() ? balance.value.balance : 0),\n 0\n );\n\n // Get MPP (Tempo) balance — need token address from the challenge\n let mppBalance = 0;\n const challengeResult = safeGetMppChallenge(surface, response);\n if (challengeResult.isOk()) {\n const currency = challengeResult.value.request.currency;\n if (currency) {\n const tempoResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.TEMPO,\n },\n flags\n );\n if (tempoResult.isOk()) {\n mppBalance = tempoResult.value.balance ?? 0;\n }\n }\n }\n\n log.info(`Protocol selection — x402: $${x402Balance}, mpp: $${mppBalance}`);\n return x402Balance >= mppBalance ? PaymentProtocol.X402 : PaymentProtocol.MPP;\n}\n","import { getBalance } from '@/shared/balance';\nimport { caip2ToNetwork, Network, networkToCaip2 } from '@agentcash/networks';\n\nimport type { PaymentRequirements } from '@x402/core/types';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\ninterface ChoosePaymentRequirementParams {\n paymentRequirements: PaymentRequirements[];\n options: ExecuteFetchOptions;\n}\n\n// Prefer `upto` over `exact` when a server offers both on the same network.\n// `upto` authorizes a maximum via Permit2 and settles for actual usage, which\n// matches usage-priced endpoints (e.g. per-token LLM inference) better than\n// `exact`, which charges the upper bound regardless. Servers that surface\n// both schemes — like Surplus Intelligence — explicitly recommend preferring\n// `upto`. Falls back to the first match when `upto` isn't offered.\nexport const preferUpto = (\n requirements: PaymentRequirements[]\n): PaymentRequirements | undefined => {\n return requirements.find(pr => pr.scheme === 'upto') ?? requirements[0];\n};\n\nexport const choosePaymentRequirement = async ({\n paymentRequirements,\n options,\n}: ChoosePaymentRequirementParams) => {\n const { surface, wallets, flags } = options;\n const { paymentNetwork } = options.params;\n if (paymentNetwork) {\n const caip2 = networkToCaip2(paymentNetwork);\n return preferUpto(paymentRequirements.filter(pr => pr.network === caip2));\n }\n\n const requirementsWithBalance = await Promise.all(\n paymentRequirements.map(async pr => {\n const network = caip2ToNetwork(pr.network);\n if (network === null) {\n return {\n balance: 0,\n requirement: pr,\n };\n }\n if (network === Network.SOLANA) {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.svm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n } else {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n }\n })\n );\n const bestNetwork = requirementsWithBalance.sort(\n (a, b) => b.balance - a.balance\n )[0]!.requirement.network;\n return preferUpto(\n paymentRequirements.filter(pr => pr.network === bestNetwork)\n );\n};\n","import { caip2ToNetwork, Network } from '@agentcash/networks';\n\nimport { choosePaymentRequirement } from './choose-payment-requirement';\n\nimport { safeFetch, safeReadResponseText } from '@/shared/neverthrow/fetch';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n x402Ok,\n x402ProbeClient,\n} from '@/shared/protocols/x402';\nimport { tokenStringToNumber, formatUsd } from '@/shared/utils';\n\nimport { beforePayment } from '../before-payment';\n\nimport { PaymentProtocol } from '../types';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '../types';\nimport type { BaseX402Error } from './types';\n\nexport const isPermit2AllowanceFailureBody = (body: string): boolean =>\n body.includes('permit2') && body.includes('allowance_required');\n\nexport const buildPermit2AllowanceErrorMessage = (params: {\n walletAddress: string;\n scheme: string;\n}): string => {\n const { walletAddress, scheme } = params;\n return [\n `Payment failed: this endpoint's \\`${scheme}\\` scheme settles via the Permit2 contract, but your agentcash wallet (${walletAddress}) has not approved Permit2 to spend USDC.`,\n '',\n 'The clean fix is server-side. The merchant should adopt the EIP-2612 gas-sponsoring extension — agentcash will then auto-sign an off-chain permit on each call and the facilitator pays the approval gas, with no setup required from the user. See https://docs.x402.org/extensions/eip2612-gas-sponsoring',\n '',\n `Until the merchant adopts that extension, you can do a one-time \\`USDC.approve(0x000000000022D473030F116dDEE9F6B43aC78BA3, MAX_UINT256)\\` on Base from this wallet (requires a small amount of ETH for gas, ~$0.01–0.10). After that, all future Permit2-based payments from this wallet work without further on-chain transactions.`,\n ].join('\\n');\n};\n\nexport async function handleX402Payment({\n response,\n request,\n options,\n}: HandlePaymentParams) {\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n if (paymentRequired.x402Version === 1) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint uses the x402 v1 format, which is not supported by agentcash. Only x402 v2 servers (with an `accepts` array in the Payment-Required header) are supported.',\n });\n }\n\n if (!paymentRequired.accepts || !Array.isArray(paymentRequired.accepts)) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint has a missing or malformed accepts array in the Payment-Required header.',\n });\n }\n\n // Check amount against maxAmount before any payment logic\n const accept = await choosePaymentRequirement({\n options,\n paymentRequirements: paymentRequired.accepts,\n });\n\n if (accept) {\n const amount = tokenStringToNumber(accept.amount);\n\n const typedNetwork = caip2ToNetwork(accept.network)!;\n if (!typedNetwork) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message: `Invalid network: ${accept.network}`,\n });\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput:\n typedNetwork === Network.SOLANA\n ? {\n address: wallets.svm.address,\n network: Network.SOLANA,\n }\n : {\n address: wallets.evm.address,\n network: typedNetwork,\n },\n amount,\n protocol: PaymentProtocol.X402,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n }\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n surface,\n wallets,\n paymentRequired,\n accept ? () => accept : undefined\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n const paymentHeaders =\n x402ProbeClient.encodePaymentSignatureHeader(paymentPayload);\n\n if (\n request.headers.has('PAYMENT-SIGNATURE') ||\n request.headers.has('X-PAYMENT')\n ) {\n return x402Err(surface, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n for (const [key, value] of Object.entries(paymentHeaders)) {\n request.headers.set(key, value);\n }\n request.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n const paidResult = await safeFetch(surface, request, timeout);\n if (paidResult.isErr()) {\n return paidResult;\n }\n const paidResponse = paidResult.value;\n\n const permit2Error = await detectPermit2AllowanceError(\n surface,\n paidResponse,\n {\n walletAddress: wallets.evm.address,\n scheme: paymentPayload.accepted.scheme,\n }\n );\n if (permit2Error) {\n return x402Err(surface, permit2Error);\n }\n\n const settlementResult = safeGetPaymentSettlement(surface, paidResponse);\n\n const settlement = settlementResult.isOk() ? settlementResult.value : null;\n\n const maxAmount = tokenStringToNumber(paymentPayload.accepted.amount);\n const settledAmount = settlement?.amount\n ? tokenStringToNumber(settlement.amount)\n : null;\n const isUpTo = paymentPayload.accepted.scheme === 'upto';\n\n const price =\n settledAmount != null\n ? formatUsd(settledAmount)\n : isUpTo\n ? `up to ${formatUsd(maxAmount)}`\n : formatUsd(maxAmount);\n\n return x402Ok<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.X402,\n network: caip2ToNetwork(paymentPayload.accepted.network)!,\n price,\n payment: settlement\n ? {\n success: settlement.success,\n transactionHash: settlement.transaction,\n }\n : null,\n },\n });\n}\n\nasync function detectPermit2AllowanceError(\n surface: string,\n response: Response,\n context: { walletAddress: string; scheme: string }\n): Promise<BaseX402Error | null> {\n if (response.ok) {\n return null;\n }\n const body = await safeReadResponseText(surface, response).unwrapOr('');\n if (!isPermit2AllowanceFailureBody(body)) {\n return null;\n }\n return {\n cause: 'permit2_allowance_required',\n message: buildPermit2AllowanceErrorMessage(context),\n };\n}\n","import { detectPaymentProtocols } from '@/shared/protocols/detect';\nimport { handleMppPayment } from '@/shared/protocols/mpp/handle-payment';\nimport { pickByBalance } from '@/shared/protocols/pick';\nimport { PaymentProtocol } from '@/shared/protocols/types';\nimport { handleX402Payment } from '@/shared/protocols/x402/handle-payment';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function executePayment(\n response: Response,\n request: Request,\n options: ExecuteFetchOptions\n) {\n const { paymentProtocol } = options.params;\n\n const params = {\n response,\n request,\n options,\n };\n\n if (paymentProtocol) {\n return handlerMap[paymentProtocol](params);\n }\n\n const available = detectPaymentProtocols(response);\n const preferred =\n available.length === 1\n ? available[0]!\n : await pickByBalance(response, options);\n const fallback =\n available.length > 1\n ? preferred === PaymentProtocol.MPP\n ? PaymentProtocol.X402\n : PaymentProtocol.MPP\n : null;\n\n const fallbackRetryRequest = fallback ? request.clone() : null;\n const result = await handlerMap[preferred](params);\n\n if (result.isErr() && fallback && fallbackRetryRequest) {\n return handlerMap[fallback]({\n ...params,\n request: fallbackRetryRequest,\n });\n }\n\n return result;\n}\n\nconst handlerMap = {\n [PaymentProtocol.MPP]: handleMppPayment,\n [PaymentProtocol.X402]: handleX402Payment,\n};\n","import { fetchErr, fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport { BLACKLISTED_ORIGINS } from '@/shared/origins';\n\nimport { attemptSiwxAuth } from './auth';\nimport { executePayment } from './payment';\n\nimport type { ExecuteFetchOptions } from './types';\nimport { buildRequest } from '@/shared/request/build';\nimport type { RequestInput } from '@/shared/request/types';\n\n/**\n * Executes a request with automatic SIWX authentication and payment handling.\n *\n * 1. Probe the endpoint\n * 2. If 402 with SIWX challenge, retry with SIGN-IN-WITH-X\n * 3. If still 402, execute payment\n */\nexport async function executeFetch(\n input: RequestInput,\n options: ExecuteFetchOptions\n) {\n const request = buildRequest(input, options);\n\n const { surface } = options;\n const { timeout } = options.params;\n\n const blocked = BLACKLISTED_ORIGINS.find(origin =>\n request.url.startsWith(origin)\n );\n if (blocked) {\n return fetchErr(surface, {\n cause: 'network',\n message: `${blocked} is no longer available. This origin has been deprecated.`,\n });\n }\n\n const authRetryRequest = request.clone();\n const paymentRetryRequest = request.clone();\n\n const probeResult = await safeFetch(surface, request, timeout);\n\n if (probeResult.isErr()) {\n return fetchErr(surface, probeResult.error);\n }\n\n const initialResponse = probeResult.value;\n if (initialResponse.status !== 402) {\n return fetchOk({\n response: initialResponse,\n paymentInfo: null,\n });\n }\n\n const authResult = await attemptSiwxAuth(\n initialResponse,\n authRetryRequest,\n paymentRetryRequest,\n options\n );\n\n if (authResult.isErr()) {\n return authResult;\n }\n\n const latestResponse = authResult.value.response;\n if (latestResponse.status !== 402) {\n return fetchOk({\n response: latestResponse,\n paymentInfo: null,\n });\n }\n\n return executePayment(\n latestResponse,\n authResult.value.paymentRetryRequest,\n options\n );\n}\n"],"mappings":"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","names":["tx","formatUnits","formatUnits"]}
1
+ {"version":3,"sources":["../../src/operations/fetch/auth.ts","../../src/shared/protocols/x402/index.ts","../../src/shared/protocols/x402/builder-code.ts","../../src/shared/protocols/x402/patched-exact-svm-scheme.ts","../../src/shared/protocols/x402/policies.ts","../../src/shared/protocols/detect.ts","../../src/shared/protocols/mpp/handle-payment.ts","../../src/shared/protocols/before-payment.ts","../../src/shared/protocols/mpp/session/handle-session-payment.ts","../../src/shared/protocols/mpp/session/run-request-session.ts","../../src/shared/protocols/mpp/session/run-streaming-session.ts","../../src/shared/protocols/mpp/session/utils.ts","../../src/shared/protocols/pick.ts","../../src/shared/protocols/x402/choose-payment-requirement.ts","../../src/shared/protocols/x402/handle-payment.ts","../../src/operations/fetch/payment.ts","../../src/operations/fetch/index.ts"],"sourcesContent":["import { encodeSIWxHeader } from '@x402/extensions/sign-in-with-x';\n\nimport { fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n getSiwxExtension,\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/protocols/x402';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function attemptSiwxAuth(\n response: Response,\n authRetryRequest: Request,\n paymentRetryRequest: Request,\n options: ExecuteFetchOptions\n) {\n const { surface, wallets } = options;\n const { timeout, paymentNetwork } = options.params;\n\n if (!response.headers.has('payment-required')) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const siwxExtension = getSiwxExtension(\n paymentRequiredResult.value.extensions,\n paymentNetwork\n );\n\n if (!siwxExtension) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const payloadResult = await safeCreateSIWxPayload(\n surface,\n siwxExtension,\n wallets\n );\n\n if (payloadResult.isErr()) {\n return payloadResult;\n }\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n authRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n paymentRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n return (await safeFetch(surface, authRetryRequest, timeout)).andThen(\n authResponse =>\n fetchOk({\n response: authResponse,\n paymentRetryRequest,\n })\n );\n}\n","import {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@agentcash/neverthrow';\n\nimport type { SelectPaymentRequirements } from '@x402/core/client';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { toClientEvmSigner } from '@x402/evm';\nimport { toClientSvmSigner } from '@x402/svm';\n\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { UptoEvmScheme } from '@x402/evm/upto/client';\nimport { createBuilderCodeExtension } from './builder-code';\nimport { PatchedExactSvmScheme } from './patched-exact-svm-scheme';\nimport { capUptoDeadline } from './policies';\n\nimport { createSIWxPayload } from '@x402/extensions/sign-in-with-x';\n\nimport type { BaseX402Error } from './types';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type {\n CompleteSIWxInfo,\n SIWxExtensionInfo,\n SolanaSigner,\n SupportedChain,\n} from '@x402/extensions/sign-in-with-x';\nimport type { Wallets } from '@/wallet';\nimport { Network, networkToCaip2 } from '@agentcash/networks';\nimport type { Network as PaymentNetwork } from '@agentcash/networks';\nimport { createPublicClient, http } from 'viem';\nimport { base } from 'viem/chains';\n\nconst errorType = 'x402';\n\nexport const x402Ok = <T>(value: T) => ok(value);\nexport const x402Err = (cause: string, error: BaseX402Error) =>\n err(errorType, cause, error);\n\nconst x402ResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseX402Error\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst x402ResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseX402Error\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const x402ProbeClient = new x402HTTPClient(new x402Client());\n\nexport const safeGetPaymentRequired = (surface: string, response: Response) => {\n // Read the body from a clone so the caller's Response stays unconsumed.\n // Dual-protocol 402s (x402 header + MPP `WWW-Authenticate`) reuse the same\n // Response downstream, and mppx >=0.6 clones it internally when creating a\n // credential — consuming it here would make that clone throw.\n const probe = response.clone();\n return x402ResultFromPromise(\n surface,\n probe.json().then(\n json =>\n x402ProbeClient.getPaymentRequiredResponse(\n name => response.headers.get(name),\n json\n ),\n () =>\n x402ProbeClient.getPaymentRequiredResponse(name =>\n response.headers.get(name)\n )\n ),\n error => ({\n cause: 'parse_payment_required',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse payment required',\n })\n );\n};\n\nexport const getSiwxExtension = (\n extensions: PaymentRequired['extensions'],\n paymentNetwork?: PaymentNetwork\n): CompleteSIWxInfo | undefined => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo; supportedChains?: SupportedChain[] }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n const chain = siwx.supportedChains?.find(c =>\n paymentNetwork\n ? c.chainId === networkToCaip2(paymentNetwork)\n : c.chainId.startsWith('eip155:')\n );\n\n return {\n ...siwx.info,\n chainId: chain?.chainId ?? 'eip155:8453',\n type: chain?.type ?? 'eip191',\n signatureScheme: chain?.signatureScheme,\n };\n};\n\nexport const safeCreatePaymentPayload = (\n surface: string,\n wallets: Wallets,\n paymentRequired: PaymentRequired,\n paymentRequirementsSelector?: SelectPaymentRequirements\n) => {\n const client = new x402HTTPClient(\n x402Client\n .fromConfig({\n schemes: [\n {\n network: networkToCaip2(Network.BASE),\n client: new ExactEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.BASE),\n client: new UptoEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.SOLANA),\n client: new PatchedExactSvmScheme(toClientSvmSigner(wallets.svm)),\n },\n ],\n policies: [capUptoDeadline],\n paymentRequirementsSelector,\n })\n .registerExtension(createBuilderCodeExtension())\n );\n return x402ResultFromPromise(\n surface,\n client.createPaymentPayload(paymentRequired),\n error => ({\n cause: 'create_payment_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create payment payload',\n })\n );\n};\n\nexport const safeGetPaymentSettlement = (\n surface: string,\n response: Response\n) => {\n return x402ResultFromThrowable(\n surface,\n () =>\n x402ProbeClient.getPaymentSettleResponse(name =>\n response.headers.get(name)\n ),\n error => ({\n cause: 'get_payment_settlement',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to get payment settlement',\n })\n );\n};\n\nexport const safeCreateSIWxPayload = (\n surface: string,\n serverInfo: CompleteSIWxInfo,\n wallets: Wallets\n) => {\n return x402ResultFromPromise(\n surface,\n createSIWxPayload(\n serverInfo,\n serverInfo.chainId.startsWith('eip155:')\n ? wallets.evm\n : (wallets.svm as unknown as SolanaSigner)\n ),\n error => ({\n cause: 'create_siwx_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create SIWX payload',\n })\n );\n};\n","import {\n BUILDER_CODE_PATTERN,\n BuilderCodeClientExtension,\n} from '@x402/extensions/builder-code';\n\n/**\n * AgentCash's ERC-8021 builder code, sent as the client service code (`s`) on\n * every x402 payment so settlements driven by agentcash are attributed onchain.\n * Builder codes are registered at https://dashboard.base.org (Settings →\n * Builder Codes).\n */\nexport const AGENTCASH_BUILDER_CODE = 'agentcash';\n\n/**\n * Client extension attributing payments to agentcash. An operator can attach\n * their own code alongside ours via AGENTCASH_BUILDER_CODE_EXTRA; invalid\n * codes are dropped rather than failing the payment.\n */\nexport const createBuilderCodeExtension = () => {\n const extra = process.env.AGENTCASH_BUILDER_CODE_EXTRA?.trim();\n const codes =\n extra && BUILDER_CODE_PATTERN.test(extra)\n ? [AGENTCASH_BUILDER_CODE, extra]\n : AGENTCASH_BUILDER_CODE;\n return new BuilderCodeClientExtension(codes);\n};\n","import {\n getSetComputeUnitLimitInstruction,\n setTransactionMessageComputeUnitPrice,\n} from '@solana-program/compute-budget';\nimport { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';\nimport {\n fetchMint,\n findAssociatedTokenPda,\n getTransferCheckedInstruction,\n TOKEN_2022_PROGRAM_ADDRESS,\n} from '@solana-program/token-2022';\nimport {\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase64EncodedWireTransaction,\n partiallySignTransactionMessageWithSigners,\n pipe,\n prependTransactionMessageInstruction,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n type Address,\n} from '@solana/kit';\n\nimport type {\n PaymentPayload,\n PaymentRequirements,\n SchemeNetworkClient,\n} from '@x402/core/types';\nimport {\n DEFAULT_COMPUTE_UNIT_LIMIT,\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n createRpcClient,\n type ClientSvmConfig,\n type ClientSvmSigner,\n type ExactSvmPayloadV2,\n} from '@x402/svm';\n\ntype BlockhashLifetime = Parameters<\n typeof setTransactionMessageLifetimeUsingBlockhash\n>[0];\n\ninterface PatchedPaymentExtra {\n feePayer?: Address;\n recentBlockhash?:\n | string\n | Partial<{\n blockhash: string;\n lastValidBlockHeight: bigint | number | string;\n }>;\n lastValidBlockHeight?: bigint | number | string;\n}\n\nfunction parseLastValidBlockHeight(\n value: bigint | number | string | undefined\n): bigint | undefined {\n if (typeof value === 'bigint') {\n return value;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return BigInt(value);\n }\n\n if (typeof value === 'string' && value.length > 0) {\n return BigInt(value);\n }\n\n return undefined;\n}\n\nfunction asBlockhash(blockhash: string): BlockhashLifetime['blockhash'] {\n return blockhash as BlockhashLifetime['blockhash'];\n}\n\n/**\n * Local compatibility patch for Coinbase ExactSvmScheme.\n *\n * Changes from upstream:\n * - omits the trailing memo instruction\n * - prefers paymentRequirements.extra.recentBlockhash when provided\n */\nexport class PatchedExactSvmScheme implements SchemeNetworkClient {\n readonly scheme = 'exact';\n\n constructor(\n private readonly signer: ClientSvmSigner,\n private readonly config?: ClientSvmConfig\n ) {}\n\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements\n ): Promise<Pick<PaymentPayload, 'x402Version' | 'payload'>> {\n const rpc = createRpcClient(\n paymentRequirements.network,\n this.config?.rpcUrl\n );\n\n const tokenMint = await fetchMint(\n rpc,\n paymentRequirements.asset as Address\n );\n const tokenProgramAddress = tokenMint.programAddress;\n\n if (\n tokenProgramAddress.toString() !== TOKEN_PROGRAM_ADDRESS.toString() &&\n tokenProgramAddress.toString() !== TOKEN_2022_PROGRAM_ADDRESS.toString()\n ) {\n throw new Error('Asset was not created by a known token program');\n }\n\n const [sourceATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: this.signer.address,\n tokenProgram: tokenProgramAddress,\n });\n\n const [destinationATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: paymentRequirements.payTo as Address,\n tokenProgram: tokenProgramAddress,\n });\n\n const transferIx = getTransferCheckedInstruction(\n {\n source: sourceATA,\n mint: paymentRequirements.asset as Address,\n destination: destinationATA,\n authority: this.signer,\n amount: BigInt(paymentRequirements.amount),\n decimals: tokenMint.data.decimals,\n },\n { programAddress: tokenProgramAddress }\n );\n\n const extra = paymentRequirements.extra as PatchedPaymentExtra;\n const feePayer = extra.feePayer;\n\n if (!feePayer) {\n throw new Error(\n 'feePayer is required in paymentRequirements.extra for SVM transactions'\n );\n }\n\n const latestBlockhash = await this.resolveBlockhashLifetime(rpc, extra);\n\n const tx = pipe(\n createTransactionMessage({ version: 0 }),\n tx =>\n setTransactionMessageComputeUnitPrice(\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n tx\n ),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx =>\n prependTransactionMessageInstruction(\n getSetComputeUnitLimitInstruction({\n units: DEFAULT_COMPUTE_UNIT_LIMIT,\n }),\n tx\n ),\n tx => appendTransactionMessageInstructions([transferIx], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx)\n );\n\n const signedTransaction =\n await partiallySignTransactionMessageWithSigners(tx);\n const base64EncodedWireTransaction =\n getBase64EncodedWireTransaction(signedTransaction);\n\n const payload: ExactSvmPayloadV2 = {\n transaction: base64EncodedWireTransaction,\n };\n\n return {\n x402Version,\n payload,\n };\n }\n\n private async resolveBlockhashLifetime(\n rpc: ReturnType<typeof createRpcClient>,\n extra: PatchedPaymentExtra\n ): Promise<BlockhashLifetime> {\n const providedLastValidBlockHeight = parseLastValidBlockHeight(\n extra.lastValidBlockHeight\n );\n\n if (typeof extra.recentBlockhash === 'string') {\n if (providedLastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: providedLastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n if (\n extra.recentBlockhash &&\n typeof extra.recentBlockhash === 'object' &&\n typeof extra.recentBlockhash.blockhash === 'string'\n ) {\n const lastValidBlockHeight =\n parseLastValidBlockHeight(extra.recentBlockhash.lastValidBlockHeight) ??\n providedLastValidBlockHeight;\n\n if (lastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n return (await rpc.getLatestBlockhash().send()).value;\n }\n}\n","import type { PaymentPolicy } from '@x402/core/client';\n\n/**\n * Maximum deadline (in seconds) we accept for `upto` payment requirements.\n *\n * The `upto` Permit2 signature is bound by `paymentRequirements.maxTimeoutSeconds`,\n * which the SDK passes straight through from the merchant's 402 response with no\n * upper bound. Within that window, the (merchant + facilitator) pair can settle\n * for any amount in `[0, cap]` — and the only on-chain check is the deadline.\n *\n * A long deadline therefore extends the window of facilitator-discretion settlement\n * at the signed cap. 7 days lets a long-running agent keep working without\n * re-signing, but bounds the trust window if a merchant declares an unreasonably\n * large `maxTimeoutSeconds` (accidentally or otherwise).\n *\n * `exact` requirements are unaffected: their amount is fixed in the signature, so\n * a long validity window is just an annoyance, not a discretion surface.\n */\nexport const MAX_UPTO_DEADLINE_SECONDS = 7 * 24 * 60 * 60; // 7 days\n\n/**\n * Caps `maxTimeoutSeconds` on `upto` requirements at {@link MAX_UPTO_DEADLINE_SECONDS}.\n * Leaves `exact` and any other scheme untouched. Pass to `x402Client.fromConfig({ policies })`.\n */\nexport const capUptoDeadline: PaymentPolicy = (_x402Version, requirements) =>\n requirements.map(r =>\n r.scheme === 'upto' && r.maxTimeoutSeconds > MAX_UPTO_DEADLINE_SECONDS\n ? { ...r, maxTimeoutSeconds: MAX_UPTO_DEADLINE_SECONDS }\n : r\n );\n","import { PaymentProtocol } from './types';\n\nexport function detectPaymentProtocols(response: Response): PaymentProtocol[] {\n const protocols: PaymentProtocol[] = [];\n\n const wwwAuth = response.headers.get('WWW-Authenticate');\n if (wwwAuth?.startsWith('Payment')) {\n protocols.push(PaymentProtocol.MPP);\n }\n\n const paymentRequired = response.headers.get('payment-required');\n if (paymentRequired) {\n protocols.push(PaymentProtocol.X402);\n }\n // If we couldn't detect either explicitly, default to x402\n if (protocols.length === 0) {\n protocols.push(PaymentProtocol.X402);\n }\n return protocols;\n}\n","import type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { safeFetch, safeReadResponseText } from '@/shared/neverthrow/fetch';\nimport {\n assertTempoUsdc,\n safeGetMppChallenge,\n safeCreateMppCredential,\n safeGetMppReceipt,\n mppErr,\n mppOk,\n} from '@/shared/protocols/mpp';\n\nimport { PaymentProtocol } from '../types';\nimport { Network } from '@agentcash/networks';\nimport { formatUsd } from '@/shared/utils';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '@/shared/protocols/types';\nimport { beforePayment } from '../before-payment';\nimport { handleMppSessionPayment } from './session/handle-session-payment';\n\nexport async function handleMppPayment(params: HandlePaymentParams) {\n const { response, request, options } = params;\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n // Prevent retry loops\n if (request.headers.has('Authorization')) {\n return mppErr(surface, {\n cause: 'mpp_payment_already_attempted',\n message: 'MPP payment already attempted',\n });\n }\n\n // Parse the challenge from the WWW-Authenticate header\n const challengeResult = safeGetMppChallenge(surface, response);\n\n if (challengeResult.isErr()) {\n return challengeResult;\n }\n\n const challenge = challengeResult.value;\n\n if (challenge.intent === 'session') {\n return handleMppSessionPayment(challenge, params);\n }\n\n const amount = Number(formatUnits(BigInt(challenge.request.amount), 6));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) {\n return tokenCheck;\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput: {\n address: wallets.evm.address,\n network: Network.TEMPO,\n tokenAddress,\n },\n amount,\n protocol: PaymentProtocol.MPP,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n\n const credentialResult = await safeCreateMppCredential(\n surface,\n wallets,\n response\n );\n\n if (credentialResult.isErr()) {\n return credentialResult;\n }\n\n const credential = credentialResult.value;\n\n // Set Authorization header on cloned request\n request.headers.set('Authorization', credential);\n\n // Retry the fetch with the credential\n const paidFetchResult = await safeFetch(surface, request, timeout);\n if (paidFetchResult.isErr()) {\n return paidFetchResult;\n }\n\n const paidResponse = paidFetchResult.value;\n\n // If the server still returns 402, the payment was rejected\n if (paidResponse.status === 402) {\n const body = await safeReadResponseText(surface, paidResponse).unwrapOr('');\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP payment was rejected by the server (402)${detail}`,\n });\n }\n\n // Parse the receipt for transaction hash\n const receiptResult = safeGetMppReceipt(surface, paidResponse);\n\n return mppOk<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price: formatUsd(amount),\n payment: receiptResult.isOk()\n ? {\n success: true,\n transactionHash: receiptResult.value.reference,\n }\n : null,\n },\n });\n}\n","import { err, ok } from '@agentcash/neverthrow';\n\nimport { getBalance } from '../balance';\nimport { getDepositLink } from '../utils';\nimport { getSettings } from '../settings';\n\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch/types';\n\nimport type { GetBalanceInput } from '@agentcash/balance';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\nimport type { PaymentProtocol } from './types';\n\ninterface BeforePaymentProps {\n options: ExecuteFetchOptions;\n balanceInput: GetBalanceInput;\n protocol: PaymentProtocol;\n amount: number;\n}\n\nexport const beforePayment = async (props: BeforePaymentProps) => {\n const { options, balanceInput, amount } = props;\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n if (amount > maxAmount) {\n return err('before_payment', options.surface, {\n cause: 'amount_exceeds_max_amount' as const,\n message: `Endpoint requested $${amount} which exceeds the maximum allowed amount of $${maxAmount}. Pass a higher maxAmount on this call, or use update_settings to raise the default permanently.`,\n });\n }\n\n const balanceResult = await getBalance(\n options.surface,\n balanceInput,\n options.flags\n );\n\n if (balanceResult.isErr()) {\n return balanceResult;\n }\n\n const balance = balanceResult.value.balance;\n\n if (balance < amount) {\n return err('before_payment', options.surface, {\n cause: 'insufficient_balance' as const,\n message: insufficientBalanceErrorMessage(props, balance),\n });\n }\n\n return ok(true);\n};\n\nconst insufficientBalanceErrorMessage = (\n props: BeforePaymentProps,\n balance: number\n) => {\n const { options, balanceInput, amount } = props;\n return [\n `You are attempting to use an endpoint via ${props.protocol} that costs ${amount} USDC on ${balanceInput.network}.`,\n `Your current balance is ${balance} USDC.`,\n `You can bridge between accounts or deposit at ${getDepositLink(balanceInput.address, options.flags, balanceInput.network)} to top up your balance.`,\n `Before bridging, you can check the users account with npx agentcash@latest accounts or if you are within the MCP, you can use the list_accounts tool.`,\n ].join('\\n');\n};\n","import type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { sessionManager } from 'mppx/client';\n\nimport { Network } from '@agentcash/networks';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport { formatUsd, tokenStringToNumber } from '@/shared/utils';\n\nimport { beforePayment } from '../../before-payment';\nimport type { HandlePaymentParams } from '../../types';\nimport { PaymentProtocol } from '../../types';\nimport {\n assertTempoUsdc,\n createTempoClient,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport { runRequestSession } from './run-request-session';\nimport { runStreamingSession } from './run-streaming-session';\nimport { createSessionChannelStore } from './session-store';\nimport type { SessionChallenge } from './types';\nimport {\n USDC_DECIMALS,\n bufferRequestForReplay,\n formatDepositCap,\n resolveDepositUsd,\n} from './utils';\n\nexport async function handleMppSessionPayment(\n challenge: SessionChallenge,\n { request, options }: HandlePaymentParams\n) {\n const { surface, wallets } = options;\n\n const tickCostAtomic = BigInt(challenge.request.amount);\n const tickCostUsd = Number(formatUnits(tickCostAtomic, USDC_DECIMALS));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) return tokenCheck;\n\n const depositUsd = resolveDepositUsd(\n challenge.request.suggestedDeposit,\n tickCostUsd,\n options\n );\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput: {\n address: wallets.evm.address,\n network: Network.TEMPO,\n tokenAddress,\n },\n amount: depositUsd,\n protocol: PaymentProtocol.MPP,\n });\n if (beforePaymentResult.isErr()) return beforePaymentResult;\n\n const replayInitResult = await mppResultFromPromise(\n surface,\n bufferRequestForReplay(request),\n e =>\n sessionRequestFailedErr(\n e,\n 'Failed to buffer request body for session replay'\n )\n );\n if (replayInitResult.isErr()) return replayInitResult;\n\n const sm = sessionManager({\n account: wallets.evm,\n client: createTempoClient(),\n maxDeposit: formatDepositCap(depositUsd),\n decimals: USDC_DECIMALS,\n // Persist the channel (with its TIP-1034 descriptor) per wallet so it can be\n // reused across requests/restarts and closed later via sessions_close — and\n // only ever by the wallet that opened it.\n channelStore: createSessionChannelStore(wallets.evm.address),\n });\n\n const isStreaming =\n challenge.meta?.streaming === 'true' || options.params.stream === true;\n\n const sessionResult = isStreaming\n ? await runStreamingSession(\n surface,\n sm,\n request.url,\n replayInitResult.value\n )\n : await runRequestSession(surface, sm, request.url, replayInitResult.value);\n if (sessionResult.isErr()) return sessionResult;\n\n const { response: finalResponse, receipt } = sessionResult.value;\n\n const price = receipt\n ? formatUsd(tokenStringToNumber(receipt.spent, USDC_DECIMALS))\n : `from ${formatUsd(tickCostUsd)}/tick`;\n\n return mppOk<ExecuteFetchResult>({\n response: finalResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price,\n payment: receipt ? { success: true, channelId: receipt.channelId } : null,\n },\n });\n}\n","import { safeReadResponseText } from '@/shared/neverthrow/fetch';\n\nimport {\n mppErr,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport type { SessionManager, SessionOutcome } from './types';\n\nexport async function runRequestSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit\n) {\n const fetchResult = await mppResultFromPromise(\n surface,\n sm.fetch(url, init),\n e => sessionRequestFailedErr(e)\n );\n if (fetchResult.isErr()) return fetchResult;\n\n const paymentResponse = fetchResult.value;\n\n if (paymentResponse.status === 402) {\n const body = await safeReadResponseText(surface, paymentResponse).unwrapOr(\n ''\n );\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP session payment was rejected by the server (402)${detail}`,\n });\n }\n\n return mppOk<SessionOutcome>({\n response: paymentResponse,\n receipt: paymentResponse.receipt,\n });\n}\n","import { mppErr, mppOk } from '../index';\nimport type { SessionManager, SessionOutcome, SessionReceipt } from './types';\n\nconst MAX_BUFFERED_BYTES = 50 * 1024 * 1024;\n\nexport async function runStreamingSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit\n) {\n let latestReceipt: SessionReceipt | null = null;\n\n const { signal, ...rest } = init;\n const sseResult = await sm.sse(url, {\n ...rest,\n ...(signal ? { signal } : {}),\n onReceipt: receipt => {\n latestReceipt = receipt;\n },\n });\n\n const chunks: string[] = [];\n let bytes = 0;\n for await (const chunk of sseResult) {\n bytes += chunk.length;\n chunks.push(chunk);\n if (bytes > MAX_BUFFERED_BYTES) {\n return mppErr(surface, {\n cause: 'mpp_session_response_too_large',\n message: `Streaming response exceeded the ${MAX_BUFFERED_BYTES}-byte buffering cap (got ${bytes} bytes).`,\n });\n }\n }\n\n // mppx's `sm.sse()` yields the `data:` payloads of `message` events\n // (voucher/receipt events are consumed internally), so join with `\\n`\n // to keep object-yielding streams valid NDJSON.\n const response = new Response(chunks.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain',\n 'Cache-Control': 'private',\n },\n });\n\n return mppOk<SessionOutcome>({ response, receipt: latestReceipt });\n}\n","import {\n DEFAULT_MAX_AMOUNT,\n type ExecuteFetchOptions,\n} from '@/operations/fetch/types';\nimport { getSettings } from '@/shared/settings';\nimport { tokenStringToNumber } from '@/shared/utils';\n\nexport const USDC_DECIMALS = 6;\nconst DEFAULT_TICK_BUDGET = 10;\n\nexport function resolveDepositUsd(\n suggestedDeposit: string | undefined,\n tickCostUsd: number,\n options: ExecuteFetchOptions\n): number {\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n const desired =\n suggestedDeposit !== undefined\n ? tokenStringToNumber(suggestedDeposit, USDC_DECIMALS)\n : tickCostUsd * DEFAULT_TICK_BUDGET;\n return Math.min(desired, maxAmount);\n}\n\n// toFixed rather than toString so very small deposits don't serialize in\n// scientific notation, which viem's parseUnits rejects.\nexport function formatDepositCap(depositUsd: number): string {\n if (!Number.isFinite(depositUsd) || depositUsd <= 0) {\n return '0';\n }\n return depositUsd.toFixed(USDC_DECIMALS);\n}\n\nexport async function bufferRequestForReplay(\n request: Request\n): Promise<RequestInit> {\n const init: RequestInit = {\n method: request.method,\n headers: new Headers(request.headers),\n credentials: request.credentials,\n redirect: request.redirect,\n referrer: request.referrer === '' ? undefined : request.referrer,\n integrity: request.integrity || undefined,\n signal: request.signal,\n };\n\n const hasBody =\n request.method !== 'GET' &&\n request.method !== 'HEAD' &&\n request.body !== null;\n\n if (hasBody) {\n init.body = await request.arrayBuffer();\n }\n\n return init;\n}\n","import { safeGetMppChallenge } from '@/shared/protocols/mpp';\n\nimport { log } from '@/shared/log';\nimport { getBalance } from '@/shared/balance';\nimport { Network } from '@agentcash/networks';\n\nimport { PaymentProtocol } from './types';\n\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\n/**\n * Pick the preferred protocol by comparing wallet balances.\n * Falls back to 'mpp' if both balances fail to fetch.\n */\nexport async function pickByBalance(\n response: Response,\n options: ExecuteFetchOptions\n): Promise<PaymentProtocol> {\n const { surface, wallets, flags } = options;\n\n // Get x402 (USDC on Base and Solana) balances in parallel\n const x402Balances = await Promise.all([\n getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.BASE,\n },\n flags\n ),\n getBalance(\n surface,\n {\n address: wallets.svm.address,\n network: Network.SOLANA,\n },\n flags\n ),\n ]);\n\n const x402Balance = x402Balances.reduce(\n (acc, balance) => acc + (balance.isOk() ? balance.value.balance : 0),\n 0\n );\n\n // Get MPP (Tempo) balance — need token address from the challenge\n let mppBalance = 0;\n const challengeResult = safeGetMppChallenge(surface, response);\n if (challengeResult.isOk()) {\n const currency = challengeResult.value.request.currency;\n if (currency) {\n const tempoResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.TEMPO,\n },\n flags\n );\n if (tempoResult.isOk()) {\n mppBalance = tempoResult.value.balance ?? 0;\n }\n }\n }\n\n log.info(`Protocol selection — x402: $${x402Balance}, mpp: $${mppBalance}`);\n return x402Balance >= mppBalance ? PaymentProtocol.X402 : PaymentProtocol.MPP;\n}\n","import { getBalance } from '@/shared/balance';\nimport { caip2ToNetwork, Network, networkToCaip2 } from '@agentcash/networks';\n\nimport type { PaymentRequirements } from '@x402/core/types';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\ninterface ChoosePaymentRequirementParams {\n paymentRequirements: PaymentRequirements[];\n options: ExecuteFetchOptions;\n}\n\n// Prefer `upto` over `exact` when a server offers both on the same network.\n// `upto` authorizes a maximum via Permit2 and settles for actual usage, which\n// matches usage-priced endpoints (e.g. per-token LLM inference) better than\n// `exact`, which charges the upper bound regardless. Servers that surface\n// both schemes — like Surplus Intelligence — explicitly recommend preferring\n// `upto`. Falls back to the first match when `upto` isn't offered.\nexport const preferUpto = (\n requirements: PaymentRequirements[]\n): PaymentRequirements | undefined => {\n return requirements.find(pr => pr.scheme === 'upto') ?? requirements[0];\n};\n\nexport const choosePaymentRequirement = async ({\n paymentRequirements,\n options,\n}: ChoosePaymentRequirementParams) => {\n const { surface, wallets, flags } = options;\n const { paymentNetwork } = options.params;\n if (paymentNetwork) {\n const caip2 = networkToCaip2(paymentNetwork);\n return preferUpto(paymentRequirements.filter(pr => pr.network === caip2));\n }\n\n const requirementsWithBalance = await Promise.all(\n paymentRequirements.map(async pr => {\n const network = caip2ToNetwork(pr.network);\n if (network === null) {\n return {\n balance: 0,\n requirement: pr,\n };\n }\n if (network === Network.SOLANA) {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.svm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n } else {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n }\n })\n );\n const bestNetwork = requirementsWithBalance.sort(\n (a, b) => b.balance - a.balance\n )[0]!.requirement.network;\n return preferUpto(\n paymentRequirements.filter(pr => pr.network === bestNetwork)\n );\n};\n","import { caip2ToNetwork, Network } from '@agentcash/networks';\n\nimport { choosePaymentRequirement } from './choose-payment-requirement';\n\nimport { safeFetch, safeReadResponseText } from '@/shared/neverthrow/fetch';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n x402Ok,\n x402ProbeClient,\n} from '@/shared/protocols/x402';\nimport { tokenStringToNumber, formatUsd } from '@/shared/utils';\n\nimport { beforePayment } from '../before-payment';\n\nimport { PaymentProtocol } from '../types';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '../types';\nimport type { BaseX402Error } from './types';\n\nexport const isPermit2AllowanceFailureBody = (body: string): boolean =>\n body.includes('permit2') && body.includes('allowance_required');\n\nexport const buildPermit2AllowanceErrorMessage = (params: {\n walletAddress: string;\n scheme: string;\n}): string => {\n const { walletAddress, scheme } = params;\n return [\n `Payment failed: this endpoint's \\`${scheme}\\` scheme settles via the Permit2 contract, but your agentcash wallet (${walletAddress}) has not approved Permit2 to spend USDC.`,\n '',\n 'The clean fix is server-side. The merchant should adopt the EIP-2612 gas-sponsoring extension — agentcash will then auto-sign an off-chain permit on each call and the facilitator pays the approval gas, with no setup required from the user. See https://docs.x402.org/extensions/eip2612-gas-sponsoring',\n '',\n `Until the merchant adopts that extension, you can do a one-time \\`USDC.approve(0x000000000022D473030F116dDEE9F6B43aC78BA3, MAX_UINT256)\\` on Base from this wallet (requires a small amount of ETH for gas, ~$0.01–0.10). After that, all future Permit2-based payments from this wallet work without further on-chain transactions.`,\n ].join('\\n');\n};\n\nexport async function handleX402Payment({\n response,\n request,\n options,\n}: HandlePaymentParams) {\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n if (paymentRequired.x402Version === 1) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint uses the x402 v1 format, which is not supported by agentcash. Only x402 v2 servers (with an `accepts` array in the Payment-Required header) are supported.',\n });\n }\n\n if (!paymentRequired.accepts || !Array.isArray(paymentRequired.accepts)) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint has a missing or malformed accepts array in the Payment-Required header.',\n });\n }\n\n // Check amount against maxAmount before any payment logic\n const accept = await choosePaymentRequirement({\n options,\n paymentRequirements: paymentRequired.accepts,\n });\n\n if (accept) {\n const amount = tokenStringToNumber(accept.amount);\n\n const typedNetwork = caip2ToNetwork(accept.network)!;\n if (!typedNetwork) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message: `Invalid network: ${accept.network}`,\n });\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput:\n typedNetwork === Network.SOLANA\n ? {\n address: wallets.svm.address,\n network: Network.SOLANA,\n }\n : {\n address: wallets.evm.address,\n network: typedNetwork,\n },\n amount,\n protocol: PaymentProtocol.X402,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n }\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n surface,\n wallets,\n paymentRequired,\n accept ? () => accept : undefined\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n const paymentHeaders =\n x402ProbeClient.encodePaymentSignatureHeader(paymentPayload);\n\n if (\n request.headers.has('PAYMENT-SIGNATURE') ||\n request.headers.has('X-PAYMENT')\n ) {\n return x402Err(surface, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n for (const [key, value] of Object.entries(paymentHeaders)) {\n request.headers.set(key, value);\n }\n request.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n const paidResult = await safeFetch(surface, request, timeout);\n if (paidResult.isErr()) {\n return paidResult;\n }\n const paidResponse = paidResult.value;\n\n const permit2Error = await detectPermit2AllowanceError(\n surface,\n paidResponse,\n {\n walletAddress: wallets.evm.address,\n scheme: paymentPayload.accepted.scheme,\n }\n );\n if (permit2Error) {\n return x402Err(surface, permit2Error);\n }\n\n const settlementResult = safeGetPaymentSettlement(surface, paidResponse);\n\n const settlement = settlementResult.isOk() ? settlementResult.value : null;\n\n const maxAmount = tokenStringToNumber(paymentPayload.accepted.amount);\n const settledAmount = settlement?.amount\n ? tokenStringToNumber(settlement.amount)\n : null;\n const isUpTo = paymentPayload.accepted.scheme === 'upto';\n\n const price =\n settledAmount != null\n ? formatUsd(settledAmount)\n : isUpTo\n ? `up to ${formatUsd(maxAmount)}`\n : formatUsd(maxAmount);\n\n return x402Ok<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.X402,\n network: caip2ToNetwork(paymentPayload.accepted.network)!,\n price,\n payment: settlement\n ? {\n success: settlement.success,\n transactionHash: settlement.transaction,\n }\n : null,\n },\n });\n}\n\nasync function detectPermit2AllowanceError(\n surface: string,\n response: Response,\n context: { walletAddress: string; scheme: string }\n): Promise<BaseX402Error | null> {\n if (response.ok) {\n return null;\n }\n const body = await safeReadResponseText(surface, response).unwrapOr('');\n if (!isPermit2AllowanceFailureBody(body)) {\n return null;\n }\n return {\n cause: 'permit2_allowance_required',\n message: buildPermit2AllowanceErrorMessage(context),\n };\n}\n","import { detectPaymentProtocols } from '@/shared/protocols/detect';\nimport { handleMppPayment } from '@/shared/protocols/mpp/handle-payment';\nimport { pickByBalance } from '@/shared/protocols/pick';\nimport { PaymentProtocol } from '@/shared/protocols/types';\nimport { handleX402Payment } from '@/shared/protocols/x402/handle-payment';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function executePayment(\n response: Response,\n request: Request,\n options: ExecuteFetchOptions\n) {\n const { paymentProtocol } = options.params;\n\n const params = {\n response,\n request,\n options,\n };\n\n if (paymentProtocol) {\n return handlerMap[paymentProtocol](params);\n }\n\n const available = detectPaymentProtocols(response);\n const preferred =\n available.length === 1\n ? available[0]!\n : await pickByBalance(response, options);\n const fallback =\n available.length > 1\n ? preferred === PaymentProtocol.MPP\n ? PaymentProtocol.X402\n : PaymentProtocol.MPP\n : null;\n\n const fallbackRetryRequest = fallback ? request.clone() : null;\n const result = await handlerMap[preferred](params);\n\n if (result.isErr() && fallback && fallbackRetryRequest) {\n return handlerMap[fallback]({\n ...params,\n request: fallbackRetryRequest,\n });\n }\n\n return result;\n}\n\nconst handlerMap = {\n [PaymentProtocol.MPP]: handleMppPayment,\n [PaymentProtocol.X402]: handleX402Payment,\n};\n","import { fetchErr, fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport { BLACKLISTED_ORIGINS } from '@/shared/origins';\n\nimport { attemptSiwxAuth } from './auth';\nimport { executePayment } from './payment';\n\nimport type { ExecuteFetchOptions, ExecuteFetchResult } from './types';\nimport { buildRequest } from '@/shared/request/build';\nimport type { RequestInput } from '@/shared/request/types';\n\n/**\n * Executes a request with automatic SIWX authentication and payment handling.\n *\n * 1. Probe the endpoint\n * 2. If 402 with SIWX challenge, retry with SIGN-IN-WITH-X\n * 3. If still 402, execute payment\n */\nexport async function executeFetch(\n input: RequestInput,\n options: ExecuteFetchOptions\n) {\n const request = buildRequest(input, options);\n\n const { surface } = options;\n const { timeout } = options.params;\n\n const blocked = BLACKLISTED_ORIGINS.find(origin =>\n request.url.startsWith(origin)\n );\n if (blocked) {\n return fetchErr(surface, {\n cause: 'network',\n message: `${blocked} is no longer available. This origin has been deprecated.`,\n });\n }\n\n const authRetryRequest = request.clone();\n const paymentRetryRequest = request.clone();\n\n const probeResult = await safeFetch(surface, request, timeout);\n\n if (probeResult.isErr()) {\n return fetchErr(surface, probeResult.error);\n }\n\n const initialResponse = probeResult.value;\n if (initialResponse.status !== 402) {\n return fetchOk({\n response: initialResponse,\n paymentInfo: null,\n });\n }\n\n const authResult = await attemptSiwxAuth(\n initialResponse,\n authRetryRequest,\n paymentRetryRequest,\n options\n );\n\n if (authResult.isErr()) {\n return authResult;\n }\n\n const latestResponse = authResult.value.response;\n if (latestResponse.status !== 402) {\n return fetchOk({\n response: latestResponse,\n paymentInfo: null,\n });\n }\n\n return executePayment(\n latestResponse,\n authResult.value.paymentRetryRequest,\n options\n );\n}\n\n/**\n * Builds the metadata returned alongside a fetch response body.\n *\n * Payment fields stay at the top level for backwards compatibility. The full\n * final response headers are included so callers can retain raw protocol proof\n * such as MPP's `Payment-Receipt` or x402's `Payment-Response`.\n */\nexport function getFetchResultMetadata(\n response: Response,\n paymentInfo: ExecuteFetchResult['paymentInfo']\n) {\n return {\n ...(paymentInfo ?? {}),\n headers: Object.fromEntries(response.headers.entries()),\n };\n}\n"],"mappings":"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","names":["tx","formatUnits","formatUnits"]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  coreRequestSchema,
3
3
  fetchShape
4
- } from "./chunk-Q5YKPVXL.js";
4
+ } from "./chunk-MCJ446SE.js";
5
5
  import {
6
6
  REQUEST_PARAMS
7
- } from "./chunk-H5V6L7NG.js";
7
+ } from "./chunk-CCWBMXQT.js";
8
8
 
9
9
  // src/shared/request/schemas/cli.ts
10
10
  import z from "zod";
@@ -46,4 +46,4 @@ export {
46
46
  cliRequestSchema,
47
47
  cliFetchRequestSchema
48
48
  };
49
- //# sourceMappingURL=chunk-M3YTSL6T.js.map
49
+ //# sourceMappingURL=chunk-YOY6D3SX.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  discoverResources
3
- } from "./chunk-WPCEYCCK.js";
4
- import "./chunk-H5V6L7NG.js";
3
+ } from "./chunk-H7ES5FU5.js";
4
+ import "./chunk-CCWBMXQT.js";
5
5
  import "./chunk-FB5CMO3J.js";
6
6
  import "./chunk-U6FRXL3X.js";
7
7
  import "./chunk-QZCSZB7E.js";
@@ -37,4 +37,4 @@ var discoverCommand = async (input) => {
37
37
  export {
38
38
  discoverCommand
39
39
  };
40
- //# sourceMappingURL=discover-EIFUI6QT.js.map
40
+ //# sourceMappingURL=discover-OGK3JBEU.js.map
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  cliFetchRequestSchema
3
- } from "./chunk-M3YTSL6T.js";
4
- import "./chunk-Q5YKPVXL.js";
5
- import "./chunk-H5V6L7NG.js";
3
+ } from "./chunk-YOY6D3SX.js";
4
+ import "./chunk-MCJ446SE.js";
5
+ import "./chunk-CCWBMXQT.js";
6
6
  import {
7
- executeFetch
8
- } from "./chunk-6M7F5KOU.js";
7
+ executeFetch,
8
+ getFetchResultMetadata
9
+ } from "./chunk-YIECO2O4.js";
9
10
  import "./chunk-H2JGMFEG.js";
10
11
  import "./chunk-4TIYIVZF.js";
11
12
  import "./chunk-IKPLMFAK.js";
@@ -59,6 +60,7 @@ var fetchCommand = async (input) => {
59
60
  return outputAndExit(fromNeverthrowError(fetchResult), input);
60
61
  }
61
62
  const { response, paymentInfo } = fetchResult.value;
63
+ const resultMetadata = getFetchResultMetadata(response, paymentInfo);
62
64
  if (!response.ok) {
63
65
  const parseResult = await safeParseResponse(SURFACE, response);
64
66
  return outputAndExit(
@@ -71,9 +73,10 @@ var fetchCommand = async (input) => {
71
73
  (data2) => ({
72
74
  statusCode: response.status,
73
75
  type: data2.type,
74
- body: data2.type === "json" || data2.type === "text" ? data2.data : void 0
76
+ body: data2.type === "json" || data2.type === "text" ? data2.data : void 0,
77
+ ...resultMetadata
75
78
  }),
76
- () => ({ statusCode: response.status })
79
+ () => ({ statusCode: response.status, ...resultMetadata })
77
80
  )
78
81
  }),
79
82
  input
@@ -81,13 +84,17 @@ var fetchCommand = async (input) => {
81
84
  }
82
85
  const parseResponseResult = await safeParseResponse(SURFACE, response);
83
86
  if (parseResponseResult.isErr()) {
84
- return outputAndExit(fromNeverthrowError(parseResponseResult), input);
87
+ const error = fromNeverthrowError(parseResponseResult);
88
+ return outputAndExit(
89
+ errorResponse({ ...error.error, details: resultMetadata }),
90
+ input
91
+ );
85
92
  }
86
93
  const parsedResponse = parseResponseResult.value;
87
94
  const data = parsedResponse.type === "json" || parsedResponse.type === "text" ? parsedResponse.data : { type: parsedResponse.type };
88
- outputAndExit(successResponse(data, paymentInfo), input);
95
+ outputAndExit(successResponse(data, resultMetadata), input);
89
96
  };
90
97
  export {
91
98
  fetchCommand
92
99
  };
93
- //# sourceMappingURL=fetch-BO4HOM62.js.map
100
+ //# sourceMappingURL=fetch-SC43UYLV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/commands/fetch.ts"],"sourcesContent":["import {\n successResponse,\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n} from '@/cli/output';\n\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { executeFetch, getFetchResultMetadata } from '@/operations/fetch';\nimport { cliFetchRequestSchema } from '@/shared/request/schemas/cli';\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nimport type z from 'zod';\nimport type { Command } from '@/types';\n\nconst SURFACE = 'cli:fetch';\n\nexport const fetchCommand: Command<\n z.input<typeof cliFetchRequestSchema>\n> = async input => {\n const requestInput = cliFetchRequestSchema.safeParse(input);\n if (!requestInput.success) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: requestInput.error.message,\n surface: SURFACE,\n cause: 'validation',\n }),\n input\n );\n }\n const wallets = await getWalletOrExit(input);\n\n const fetchResult = await executeFetch(requestInput.data, {\n surface: SURFACE,\n wallets,\n flags: input,\n params: input,\n });\n\n if (fetchResult.isErr()) {\n return outputAndExit(fromNeverthrowError(fetchResult), input);\n }\n\n const { response, paymentInfo } = fetchResult.value;\n const resultMetadata = getFetchResultMetadata(response, paymentInfo);\n\n if (!response.ok) {\n const parseResult = await safeParseResponse(SURFACE, response);\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: response.statusText,\n surface: SURFACE,\n cause: 'http',\n details: parseResult.match(\n data => ({\n statusCode: response.status,\n type: data.type,\n body:\n data.type === 'json' || data.type === 'text'\n ? data.data\n : undefined,\n ...resultMetadata,\n }),\n () => ({ statusCode: response.status, ...resultMetadata })\n ),\n }),\n input\n );\n }\n\n const parseResponseResult = await safeParseResponse(SURFACE, response);\n if (parseResponseResult.isErr()) {\n const error = fromNeverthrowError(parseResponseResult);\n return outputAndExit(\n errorResponse({ ...error.error, details: resultMetadata }),\n input\n );\n }\n\n const parsedResponse = parseResponseResult.value;\n\n const data =\n parsedResponse.type === 'json' || parsedResponse.type === 'text'\n ? parsedResponse.data\n : { type: parsedResponse.type };\n\n outputAndExit(successResponse(data, resultMetadata), input);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAM,UAAU;AAET,IAAM,eAET,OAAM,UAAS;AACjB,QAAM,eAAe,sBAAsB,UAAU,KAAK;AAC1D,MAAI,CAAC,aAAa,SAAS;AACzB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,aAAa,MAAM;AAAA,QAC5B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,MAAM,gBAAgB,KAAK;AAE3C,QAAM,cAAc,MAAM,aAAa,aAAa,MAAM;AAAA,IACxD,SAAS;AAAA,IACT;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AAED,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO,cAAc,oBAAoB,WAAW,GAAG,KAAK;AAAA,EAC9D;AAEA,QAAM,EAAE,UAAU,YAAY,IAAI,YAAY;AAC9C,QAAM,iBAAiB,uBAAuB,UAAU,WAAW;AAEnE,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,cAAc,MAAM,kBAAkB,SAAS,QAAQ;AAC7D,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,SAAS;AAAA,QAClB,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS,YAAY;AAAA,UACnB,CAAAA,WAAS;AAAA,YACP,YAAY,SAAS;AAAA,YACrB,MAAMA,MAAK;AAAA,YACX,MACEA,MAAK,SAAS,UAAUA,MAAK,SAAS,SAClCA,MAAK,OACL;AAAA,YACN,GAAG;AAAA,UACL;AAAA,UACA,OAAO,EAAE,YAAY,SAAS,QAAQ,GAAG,eAAe;AAAA,QAC1D;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sBAAsB,MAAM,kBAAkB,SAAS,QAAQ;AACrE,MAAI,oBAAoB,MAAM,GAAG;AAC/B,UAAM,QAAQ,oBAAoB,mBAAmB;AACrD,WAAO;AAAA,MACL,cAAc,EAAE,GAAG,MAAM,OAAO,SAAS,eAAe,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,oBAAoB;AAE3C,QAAM,OACJ,eAAe,SAAS,UAAU,eAAe,SAAS,SACtD,eAAe,OACf,EAAE,MAAM,eAAe,KAAK;AAElC,gBAAc,gBAAgB,MAAM,cAAc,GAAG,KAAK;AAC5D;","names":["data"]}
package/dist/esm/index.js CHANGED
@@ -7,17 +7,17 @@ import {
7
7
  } from "./chunk-27DZCYDB.js";
8
8
  import {
9
9
  MCP_VERSION
10
- } from "./chunk-O4R5W5G4.js";
10
+ } from "./chunk-574342U7.js";
11
11
  import {
12
12
  paymentNetworks,
13
13
  paymentProtocols,
14
14
  requestMethodValues
15
- } from "./chunk-Q5YKPVXL.js";
15
+ } from "./chunk-MCJ446SE.js";
16
16
  import {
17
17
  DESCRIPTIONS,
18
18
  TOOL_PARAMS,
19
19
  buildServerInstructions
20
- } from "./chunk-H5V6L7NG.js";
20
+ } from "./chunk-CCWBMXQT.js";
21
21
  import "./chunk-LNJIXYCU.js";
22
22
  import "./chunk-HTGTKVXB.js";
23
23
  import "./chunk-KVSTJRSJ.js";
@@ -120,7 +120,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
120
120
  DESCRIPTIONS.fetch.epilogue
121
121
  ),
122
122
  async (args) => {
123
- const { fetchCommand } = await import("./fetch-BO4HOM62.js");
123
+ const { fetchCommand } = await import("./fetch-SC43UYLV.js");
124
124
  await fetchCommand(args);
125
125
  }
126
126
  ).command(
@@ -132,7 +132,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
132
132
  DESCRIPTIONS.fetchWithAuth.epilogue
133
133
  ),
134
134
  async (args) => {
135
- const { fetchCommand } = await import("./fetch-BO4HOM62.js");
135
+ const { fetchCommand } = await import("./fetch-SC43UYLV.js");
136
136
  await fetchCommand(args);
137
137
  }
138
138
  ).command(
@@ -158,7 +158,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
158
158
  description: TOOL_PARAMS.checkEndpointSchema.headers
159
159
  }).epilogue(DESCRIPTIONS.checkEndpointSchema.epilogue),
160
160
  async (args) => {
161
- const { checkCommand } = await import("./check-LR3CSSJF.js");
161
+ const { checkCommand } = await import("./check-PGUEDKO5.js");
162
162
  await checkCommand({
163
163
  ...args,
164
164
  url: args.url,
@@ -176,7 +176,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
176
176
  demandOption: true
177
177
  }),
178
178
  async (args) => {
179
- const { tryCommand } = await import("./try-3CZ3JFD2.js");
179
+ const { tryCommand } = await import("./try-NEU56CHG.js");
180
180
  await tryCommand(args);
181
181
  }
182
182
  ).command(
@@ -198,7 +198,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
198
198
  description: TOOL_PARAMS.search.page
199
199
  }),
200
200
  async (args) => {
201
- const { searchCommand } = await import("./search-PQ7AGO6O.js");
201
+ const { searchCommand } = await import("./search-H32FUHXO.js");
202
202
  await searchCommand(args);
203
203
  }
204
204
  ).command(
@@ -213,7 +213,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
213
213
  description: TOOL_PARAMS.discoverApiEndpoints.includeGuidance
214
214
  }).epilogue(DESCRIPTIONS.discoverApiEndpoints.epilogue),
215
215
  async (args) => {
216
- const { discoverCommand } = await import("./discover-EIFUI6QT.js");
216
+ const { discoverCommand } = await import("./discover-OGK3JBEU.js");
217
217
  await discoverCommand(args);
218
218
  }
219
219
  ).command(
@@ -225,7 +225,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
225
225
  demandOption: true
226
226
  }),
227
227
  async (args) => {
228
- const { registerCommand } = await import("./register-KCAOKKJC.js");
228
+ const { registerCommand } = await import("./register-NMKUVK6Z.js");
229
229
  await registerCommand(args);
230
230
  }
231
231
  ).command(
@@ -237,7 +237,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
237
237
  demandOption: true
238
238
  }),
239
239
  async (args) => {
240
- const { addSkillCommand } = await import("./add-skill-DPQR466Y.js");
240
+ const { addSkillCommand } = await import("./add-skill-CFGMBWS4.js");
241
241
  await addSkillCommand(args);
242
242
  }
243
243
  ).command(
@@ -252,7 +252,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
252
252
  demandOption: true
253
253
  }),
254
254
  async (args) => {
255
- const { originsAddCommand } = await import("./origins-ZXQOPPWV.js");
255
+ const { originsAddCommand } = await import("./origins-YOHZN3QI.js");
256
256
  await originsAddCommand(args);
257
257
  }
258
258
  ).command(
@@ -260,7 +260,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
260
260
  "List all registered origins",
261
261
  (yargs3) => yargs3,
262
262
  async (args) => {
263
- const { originsListCommand } = await import("./origins-ZXQOPPWV.js");
263
+ const { originsListCommand } = await import("./origins-YOHZN3QI.js");
264
264
  await originsListCommand(args);
265
265
  }
266
266
  ).command(
@@ -272,7 +272,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
272
272
  demandOption: true
273
273
  }),
274
274
  async (args) => {
275
- const { originsRemoveCommand } = await import("./origins-ZXQOPPWV.js");
275
+ const { originsRemoveCommand } = await import("./origins-YOHZN3QI.js");
276
276
  await originsRemoveCommand(args);
277
277
  }
278
278
  ).demandCommand(1, "You must specify an origins subcommand").strict(),
@@ -316,7 +316,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
316
316
  description: "The invite code to redeem (optional)"
317
317
  }),
318
318
  async (args) => {
319
- const { onboardCommand } = await import("./onboard-PBXGWWPK.js");
319
+ const { onboardCommand } = await import("./onboard-VZ4MNINC.js");
320
320
  await onboardCommand({ ...args, code: args.code ?? args.invite });
321
321
  }
322
322
  ).command(
@@ -445,7 +445,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
445
445
  description: TOOL_PARAMS.reportError.fullReport
446
446
  }),
447
447
  async (args) => {
448
- const { reportErrorCommand } = await import("./report-error-PBDX2ATE.js");
448
+ const { reportErrorCommand } = await import("./report-error-HQBVDKDU.js");
449
449
  await reportErrorCommand(args);
450
450
  }
451
451
  ).command(
@@ -467,7 +467,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
467
467
  required: true
468
468
  }),
469
469
  async (args) => {
470
- const { bridgeCommand } = await import("./bridge-JNIOVDD3.js");
470
+ const { bridgeCommand } = await import("./bridge-4SWPSBWP.js");
471
471
  await bridgeCommand(args);
472
472
  }
473
473
  ).command(
@@ -475,7 +475,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
475
475
  "Start the MCP server (default when no command specified)",
476
476
  (yargs2) => yargs2,
477
477
  async (args) => {
478
- const { serverCommand } = await import("./server-N6J25ZGU.js");
478
+ const { serverCommand } = await import("./server-YVMRCPCF.js");
479
479
  await serverCommand(args);
480
480
  }
481
481
  ).command(
@@ -489,7 +489,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
489
489
  default: isClaudeCode ? "claude-code" /* ClaudeCode */ : void 0
490
490
  }),
491
491
  async (args) => {
492
- const { installMcpServer } = await import("./install-UWNAPNKE.js");
492
+ const { installMcpServer } = await import("./install-ONQHFNPS.js");
493
493
  await installMcpServer(args);
494
494
  }
495
495
  ).command(
@@ -501,10 +501,10 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
501
501
  await fundMcpServer(args);
502
502
  }
503
503
  ).example(
504
- `$0 fetch "https://stableenrich.dev/api/apollo/people-enrich" -m POST -b '{"email":"user@example.com"}'`,
504
+ `$0 fetch "https://stableenrich.dev/api/pdl/people-enrich" -m POST -b '{"profile":"https://www.linkedin.com/in/example"}'`,
505
505
  "Fetch with x402 payment"
506
506
  ).example(
507
- '$0 check "https://stableenrich.dev/api/apollo/people-enrich"',
507
+ '$0 check "https://stableenrich.dev/api/fullenrich/people-search"',
508
508
  "Check endpoint pricing"
509
509
  ).example(
510
510
  '$0 discover "https://stableenrich.dev"',