@probemesh/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/chunk-257Y7LN2.js +827 -0
  4. package/dist/chunk-257Y7LN2.js.map +1 -0
  5. package/dist/chunk-2ASMVLG4.js +56 -0
  6. package/dist/chunk-2ASMVLG4.js.map +1 -0
  7. package/dist/chunk-2KWGHJYP.js +285 -0
  8. package/dist/chunk-2KWGHJYP.js.map +1 -0
  9. package/dist/chunk-3H7UGVI6.js +1117 -0
  10. package/dist/chunk-3H7UGVI6.js.map +1 -0
  11. package/dist/chunk-5Q3PDYIA.js +657 -0
  12. package/dist/chunk-5Q3PDYIA.js.map +1 -0
  13. package/dist/chunk-CXZOO3U4.js +550 -0
  14. package/dist/chunk-CXZOO3U4.js.map +1 -0
  15. package/dist/chunk-FRFBK4SY.js +270 -0
  16. package/dist/chunk-FRFBK4SY.js.map +1 -0
  17. package/dist/chunk-HJK52QJF.js +994 -0
  18. package/dist/chunk-HJK52QJF.js.map +1 -0
  19. package/dist/chunk-HNBDX7IU.js +705 -0
  20. package/dist/chunk-HNBDX7IU.js.map +1 -0
  21. package/dist/chunk-NYTV263W.js +116 -0
  22. package/dist/chunk-NYTV263W.js.map +1 -0
  23. package/dist/chunk-PXG54XOG.js +595 -0
  24. package/dist/chunk-PXG54XOG.js.map +1 -0
  25. package/dist/chunk-TDOBAMYM.js +607 -0
  26. package/dist/chunk-TDOBAMYM.js.map +1 -0
  27. package/dist/chunk-TV42EZSI.js +2157 -0
  28. package/dist/chunk-TV42EZSI.js.map +1 -0
  29. package/dist/chunk-UU2ZG7P7.js +408 -0
  30. package/dist/chunk-UU2ZG7P7.js.map +1 -0
  31. package/dist/chunk-WKN7QOCA.js +977 -0
  32. package/dist/chunk-WKN7QOCA.js.map +1 -0
  33. package/dist/chunk-ZJOLPBJJ.js +1091 -0
  34. package/dist/chunk-ZJOLPBJJ.js.map +1 -0
  35. package/dist/cli/audit-trail-export.cjs +1193 -0
  36. package/dist/cli/audit-trail-export.cjs.map +1 -0
  37. package/dist/cli/audit-trail-export.d.cts +1 -0
  38. package/dist/cli/audit-trail-export.d.ts +1 -0
  39. package/dist/cli/audit-trail-export.js +24 -0
  40. package/dist/cli/audit-trail-export.js.map +1 -0
  41. package/dist/cli/catalog-check.cjs +2687 -0
  42. package/dist/cli/catalog-check.cjs.map +1 -0
  43. package/dist/cli/catalog-check.d.cts +1 -0
  44. package/dist/cli/catalog-check.d.ts +1 -0
  45. package/dist/cli/catalog-check.js +26 -0
  46. package/dist/cli/catalog-check.js.map +1 -0
  47. package/dist/cli/probemesh-init.cjs +1049 -0
  48. package/dist/cli/probemesh-init.cjs.map +1 -0
  49. package/dist/cli/probemesh-init.d.cts +1 -0
  50. package/dist/cli/probemesh-init.d.ts +1 -0
  51. package/dist/cli/probemesh-init.js +22 -0
  52. package/dist/cli/probemesh-init.js.map +1 -0
  53. package/dist/cli/provider-conformance.cjs +6180 -0
  54. package/dist/cli/provider-conformance.cjs.map +1 -0
  55. package/dist/cli/provider-conformance.d.cts +1 -0
  56. package/dist/cli/provider-conformance.d.ts +1 -0
  57. package/dist/cli/provider-conformance.js +29 -0
  58. package/dist/cli/provider-conformance.js.map +1 -0
  59. package/dist/cli/provider-dossier-check.cjs +2978 -0
  60. package/dist/cli/provider-dossier-check.cjs.map +1 -0
  61. package/dist/cli/provider-dossier-check.d.cts +1 -0
  62. package/dist/cli/provider-dossier-check.d.ts +1 -0
  63. package/dist/cli/provider-dossier-check.js +27 -0
  64. package/dist/cli/provider-dossier-check.js.map +1 -0
  65. package/dist/cli/provider-dossier.cjs +1753 -0
  66. package/dist/cli/provider-dossier.cjs.map +1 -0
  67. package/dist/cli/provider-dossier.d.cts +1 -0
  68. package/dist/cli/provider-dossier.d.ts +1 -0
  69. package/dist/cli/provider-dossier.js +26 -0
  70. package/dist/cli/provider-dossier.js.map +1 -0
  71. package/dist/cli/x402-accept.cjs +6009 -0
  72. package/dist/cli/x402-accept.cjs.map +1 -0
  73. package/dist/cli/x402-accept.d.cts +1 -0
  74. package/dist/cli/x402-accept.d.ts +1 -0
  75. package/dist/cli/x402-accept.js +28 -0
  76. package/dist/cli/x402-accept.js.map +1 -0
  77. package/dist/index.cjs +13671 -0
  78. package/dist/index.cjs.map +1 -0
  79. package/dist/index.d.cts +2026 -0
  80. package/dist/index.d.ts +2026 -0
  81. package/dist/index.js +2560 -0
  82. package/dist/index.js.map +1 -0
  83. package/package.json +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/priceLookup.ts","../src/demo/mockPaymentProtocol.ts","../src/providerKit/adapter.ts","../src/demo/paidPriceLookupProvider.ts","../src/protocols/apiKeyProtocol.ts","../src/protocols/x402Evm.ts","../src/protocols/x402Protocol.ts","../src/protocols/x402SandboxProtocol.ts","../src/receipts.ts"],"sourcesContent":["import { ProbeMeshError } from \"../errors\";\nimport type { ProbeMeshAdapter } from \"../types\";\n\nexport interface PriceLookupInput {\n symbol: string;\n currency?: string;\n}\n\nexport interface PriceLookupData {\n symbol: string;\n currency: string;\n price: number;\n asOf: string;\n source: string;\n}\n\nexport interface PriceLookupAdapterOptions {\n id?: string;\n displayName?: string;\n prices?: Record<string, number>;\n}\n\nconst DEFAULT_PRICES_USD: Record<string, number> = {\n BTC: 64000.25,\n ETH: 3200.12,\n SOL: 145.33,\n};\n\nexport function createPriceLookupAdapter(\n options: PriceLookupAdapterOptions = {},\n): ProbeMeshAdapter<PriceLookupInput, PriceLookupData> {\n const id = options.id ?? \"demo-price-provider\";\n const displayName = options.displayName ?? \"Demo Price Provider\";\n const prices = options.prices ?? DEFAULT_PRICES_USD;\n\n return {\n id,\n displayName,\n mode: \"local\",\n capabilities: [\"price-lookup\"],\n pricing: {\n unit: \"call\",\n amountUsd: 0.01,\n currency: \"USD\",\n },\n call(request, context) {\n const input = parsePriceLookupInput(request.input, request.capability, id);\n const symbol = input.symbol.toUpperCase();\n const currency = (input.currency ?? \"USD\").toUpperCase();\n\n if (currency !== \"USD\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: `Demo price adapter only supports USD prices, received \"${currency}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n const price = prices[symbol];\n\n if (price === undefined) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Demo price adapter has no mock price for \"${symbol}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n return {\n data: {\n symbol,\n currency,\n price,\n asOf: context.startedAt.toISOString(),\n source: id,\n },\n cost: {\n amountUsd: 0.01,\n currency: \"USD\",\n unit: \"call\",\n },\n receiptRefs: [\n {\n type: \"provider_delivery\",\n provider: id,\n status: \"recorded\",\n ref: `${context.callId}:provider_delivery`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n };\n },\n };\n}\n\nfunction parsePriceLookupInput(\n input: unknown,\n capability: string,\n provider: string,\n): PriceLookupInput {\n if (!input || typeof input !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input must be an object.\",\n capability,\n provider,\n });\n }\n\n const candidate = input as Partial<PriceLookupInput>;\n\n if (!candidate.symbol || typeof candidate.symbol !== \"string\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input requires a string symbol.\",\n capability,\n provider,\n });\n }\n\n if (\n candidate.currency !== undefined &&\n typeof candidate.currency !== \"string\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup currency must be a string when provided.\",\n capability,\n provider,\n });\n }\n\n return {\n symbol: candidate.symbol,\n currency: candidate.currency,\n };\n}\n\n","import { ProbeMeshError } from \"../errors\";\nimport type { ProviderProtocolAdapter } from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\n\nexport interface MockPaymentProtocolOptions {\n mode?: ProviderProtocolMode;\n failPrepare?: boolean;\n failPrepareOnce?: boolean;\n failSettle?: boolean;\n omitDeliveryReceipt?: boolean;\n paymentAttemptId?: string;\n}\n\nexport function createMockPaymentProtocol(\n options: MockPaymentProtocolOptions = {},\n): ProviderProtocolAdapter {\n const mode = options.mode ?? \"mock-payment\";\n let prepareAttempts = 0;\n\n return {\n mode,\n prepare({ manifest, request, context }) {\n prepareAttempts += 1;\n\n if (\n options.failPrepare ||\n (options.failPrepareOnce && prepareAttempts === 1)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Mock payment authorization failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n const paymentAttemptId =\n options.paymentAttemptId ?? `${context.callId}:mock_payment_attempt`;\n\n return {\n mode: manifest.protocolMode,\n headers: {\n \"x-mock-payment-intent\": context.callId,\n },\n metadata: {\n authorized: true,\n paymentAttemptId,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:mock_payment_authorized`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n moneyMayHaveMoved: true,\n },\n };\n },\n settle({ manifest, request, context }) {\n if (options.failSettle) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Mock payment settlement failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n return {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n },\n receiptRefs: options.omitDeliveryReceipt\n ? []\n : [\n {\n type: \"provider_delivery\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:mock_delivery_recorded`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n settlementStatus: \"settled\",\n deliveryStatus: options.omitDeliveryReceipt ? \"missing\" : \"delivered\",\n moneyMayHaveMoved: true,\n },\n };\n },\n };\n}\n","import { ProbeMeshError, isProbeMeshError } from \"../errors\";\nimport type {\n ProbeMeshAdapter,\n ProbeMeshAdapterCallRequest,\n ProbeMeshAdapterCallResult,\n ProbeMeshAdapterContext,\n ProbeMeshCallSafety,\n ReceiptRef,\n} from \"../types\";\nimport { assertProviderManifest } from \"./manifest\";\nimport type {\n CreateAdapterFromManifestOptions,\n ProviderManifestHandlerContext,\n ProviderProtocolAdapter,\n ProviderProtocolExecution,\n ProviderProtocolPreparation,\n} from \"./protocol\";\nimport type { ProviderManifest } from \"./types\";\n\nexport type ProviderManifestCapabilityHandler<Input = unknown, Data = unknown> = (\n request: ProbeMeshAdapterCallRequest<Input>,\n context: ProviderManifestHandlerContext,\n) => ProbeMeshAdapterCallResult<Data> | Promise<ProbeMeshAdapterCallResult<Data>>;\n\nexport type ProviderManifestHandlers = Record<\n string,\n ProviderManifestCapabilityHandler\n>;\n\nexport function createAdapterFromManifest(\n manifest: ProviderManifest,\n handlers: ProviderManifestHandlers,\n options: CreateAdapterFromManifestOptions = {},\n): ProbeMeshAdapter {\n assertProviderManifest(manifest);\n assertHandlers(manifest, handlers);\n assertProtocolAdapters(options.protocolAdapters, manifest);\n\n return {\n id: manifest.id,\n displayName: manifest.displayName,\n mode: manifest.protocolMode,\n capabilities: [...manifest.capabilities],\n pricing: manifest.pricing,\n ...(manifest.paymentOptions !== undefined\n ? { paymentOptions: [...manifest.paymentOptions] }\n : {}),\n async call(request, context) {\n const handler = handlers[request.capability];\n\n if (!handler) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Provider manifest \"${manifest.id}\" does not expose handler for capability \"${request.capability}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n });\n }\n\n const protocolMode = context.paymentSelection?.protocolMode ?? manifest.protocolMode;\n const protocolAdapter = findProtocolAdapter(\n manifest,\n options.protocolAdapters,\n protocolMode,\n );\n const preparation = protocolAdapter?.prepare\n ? await prepareProtocol(protocolAdapter, manifest, request, context, protocolMode)\n : undefined;\n const preparationReceiptRefs = preparation?.receiptRefs ?? [];\n const preparationSafety = protocolAdapter\n ? mergeSafety(preparationReceiptRefs, preparation?.safety)\n : undefined;\n const protocolExecution: ProviderProtocolExecution | undefined =\n protocolAdapter\n ? {\n mode: protocolMode,\n preparation,\n receiptRefs: [...preparationReceiptRefs],\n safety: preparationSafety,\n }\n : undefined;\n const handlerContext: ProviderManifestHandlerContext = protocolExecution\n ? {\n ...context,\n protocol: protocolExecution,\n }\n : context;\n const result = await callHandler({\n handler,\n manifest,\n request,\n handlerContext,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n });\n const settlement = protocolAdapter?.settle\n ? await settleProtocol({\n protocolAdapter,\n manifest,\n request,\n handlerContext,\n result,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n protocolMode,\n })\n : undefined;\n const protocolReceiptRefs = [\n ...preparationReceiptRefs,\n ...(settlement?.receiptRefs ?? []),\n ];\n const mergedReceiptRefs = [\n ...(result.receiptRefs ?? []),\n ...protocolReceiptRefs,\n ];\n const safety = protocolAdapter\n ? mergeSafety(\n mergedReceiptRefs,\n preparation?.safety,\n result.safety,\n settlement?.safety,\n )\n : result.safety;\n\n if (protocolExecution) {\n protocolExecution.settlement = settlement;\n protocolExecution.receiptRefs = protocolReceiptRefs;\n protocolExecution.safety = safety;\n }\n\n if (\n !result ||\n typeof result !== \"object\" ||\n Array.isArray(result) ||\n (result.receiptRefs !== undefined && !Array.isArray(result.receiptRefs))\n ) {\n return result;\n }\n\n return {\n ...result,\n receiptRefs: mergedReceiptRefs,\n safety,\n };\n },\n };\n}\n\nasync function prepareProtocol<Input>(\n protocolAdapter: ProviderProtocolAdapter,\n manifest: ProviderManifest,\n request: ProbeMeshAdapterCallRequest<Input>,\n context: ProbeMeshAdapterContext,\n protocolMode = manifest.protocolMode,\n) {\n try {\n return await protocolAdapter.prepare?.({\n manifest: manifestForProtocol(manifest, protocolMode),\n request,\n context,\n });\n } catch (error) {\n if (isProbeMeshError(error) && error.code !== \"payment_failed\") {\n throw error;\n }\n\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Protocol \"${protocolAdapter.mode}\" failed while preparing payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: mergeSafety([], {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n }),\n cause: error,\n });\n }\n}\n\nasync function callHandler<Input>({\n handler,\n manifest,\n request,\n handlerContext,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n}: {\n handler: ProviderManifestCapabilityHandler<Input>;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest<Input>;\n handlerContext: ProviderManifestHandlerContext;\n preparation?: ProviderProtocolPreparation;\n preparationSafety?: ProbeMeshCallSafety;\n preparationReceiptRefs: ReceiptRef[];\n}) {\n try {\n return await handler(request, handlerContext);\n } catch (error) {\n const errorReceiptRefs = isProbeMeshError(error)\n ? (error.receiptRefs ?? [])\n : [];\n const receiptRefs = [...preparationReceiptRefs, ...errorReceiptRefs];\n const safety = mergeSafety(\n receiptRefs,\n preparation?.safety,\n preparationSafety,\n isProbeMeshError(error) ? error.safety : undefined,\n {\n deliveryStatus: \"failed\",\n },\n );\n\n if (!paymentWasAttempted(safety, receiptRefs)) {\n if (\n isProbeMeshError(error) &&\n (receiptRefs.length > 0 || preparationSafety)\n ) {\n throw new ProbeMeshError({\n code: error.code,\n message: error.message,\n capability: error.capability,\n provider: error.provider,\n callId: error.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n\n throw error;\n }\n\n throw new ProbeMeshError({\n code:\n isProbeMeshError(error) && error.code === \"timeout_after_payment\"\n ? \"timeout_after_payment\"\n : \"charged_but_no_result\",\n message:\n error instanceof Error\n ? error.message\n : `Provider \"${manifest.id}\" failed after payment was prepared.`,\n capability: request.capability,\n provider: manifest.id,\n callId: handlerContext.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n}\n\nasync function settleProtocol<Input, Data>({\n protocolAdapter,\n manifest,\n request,\n handlerContext,\n result,\n preparation,\n preparationSafety,\n preparationReceiptRefs,\n protocolMode,\n}: {\n protocolAdapter: ProviderProtocolAdapter;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest<Input>;\n handlerContext: ProviderManifestHandlerContext;\n result: ProbeMeshAdapterCallResult<Data>;\n preparation?: ProviderProtocolPreparation;\n preparationSafety?: ProbeMeshCallSafety;\n preparationReceiptRefs: ReceiptRef[];\n protocolMode?: string;\n}) {\n try {\n return await protocolAdapter.settle?.({\n manifest: manifestForProtocol(manifest, protocolMode ?? manifest.protocolMode),\n request,\n context: handlerContext,\n result,\n preparation,\n });\n } catch (error) {\n const resultReceiptRefs = Array.isArray(result.receiptRefs)\n ? result.receiptRefs\n : [];\n const receiptRefs = [...resultReceiptRefs, ...preparationReceiptRefs];\n const hasDeliveryEvidence = receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n const safety = mergeSafety(\n receiptRefs,\n preparation?.safety,\n preparationSafety,\n result.safety,\n {\n settlementStatus: \"failed\",\n deliveryStatus: hasDeliveryEvidence ? \"delivered\" : \"missing\",\n },\n );\n\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `Protocol \"${protocolAdapter.mode}\" failed while settling payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: handlerContext.callId,\n receiptRefs,\n safety,\n cause: error,\n });\n }\n}\n\nfunction mergeSafety(\n receiptRefs: ReceiptRef[],\n ...partials: Array<Partial<ProbeMeshCallSafety> | undefined>\n): ProbeMeshCallSafety {\n const safety: ProbeMeshCallSafety = {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n\n applyReceiptDerivedSafety(safety, receiptRefs);\n\n for (const partial of partials) {\n if (!partial) {\n continue;\n }\n\n Object.assign(safety, partial);\n }\n\n if (\n safety.paymentStatus === \"authorized\" ||\n safety.settlementStatus === \"settled\"\n ) {\n safety.moneyMayHaveMoved = true;\n }\n\n return safety;\n}\n\nfunction applyReceiptDerivedSafety(\n safety: ProbeMeshCallSafety,\n receiptRefs: ReceiptRef[],\n) {\n if (receiptRefs.some((receiptRef) => receiptRef.type === \"payment_proof\")) {\n safety.paymentStatus = \"authorized\";\n safety.moneyMayHaveMoved = true;\n }\n\n if (\n receiptRefs.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n )\n ) {\n safety.settlementStatus = \"settled\";\n }\n\n if (receiptRefs.some((receiptRef) => receiptRef.type === \"provider_delivery\")) {\n safety.deliveryStatus = \"delivered\";\n }\n}\n\nfunction paymentWasAttempted(\n safety: ProbeMeshCallSafety,\n receiptRefs: ReceiptRef[],\n) {\n return (\n safety.paymentStatus !== \"not_attempted\" ||\n safety.moneyMayHaveMoved ||\n receiptRefs.some((receiptRef) => receiptRef.type === \"payment_proof\")\n );\n}\n\nfunction findProtocolAdapter(\n manifest: ProviderManifest,\n protocolAdapters: ProviderProtocolAdapter[] | undefined,\n protocolMode = manifest.protocolMode,\n) {\n return protocolAdapters?.find(\n (protocolAdapter) => protocolAdapter.mode === protocolMode,\n );\n}\n\nfunction manifestForProtocol(\n manifest: ProviderManifest,\n protocolMode: string,\n): ProviderManifest {\n return protocolMode === manifest.protocolMode\n ? manifest\n : {\n ...manifest,\n protocolMode,\n };\n}\n\nfunction assertProtocolAdapters(\n protocolAdapters: ProviderProtocolAdapter[] | undefined,\n manifest: ProviderManifest,\n) {\n if (protocolAdapters === undefined) {\n return;\n }\n\n if (\n !Array.isArray(protocolAdapters) ||\n protocolAdapters.some(\n (protocolAdapter) =>\n !protocolAdapter ||\n typeof protocolAdapter !== \"object\" ||\n typeof protocolAdapter.mode !== \"string\" ||\n protocolAdapter.mode.length === 0,\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" requires protocolAdapters to be an array of protocol adapter objects.`,\n provider: manifest.id,\n });\n }\n}\n\nfunction assertHandlers(\n manifest: ProviderManifest,\n handlers: ProviderManifestHandlers,\n) {\n if (!handlers || typeof handlers !== \"object\" || Array.isArray(handlers)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" requires a handlers object.`,\n provider: manifest.id,\n });\n }\n\n const missingCapabilities = manifest.capabilities.filter(\n (capability) => typeof handlers[capability] !== \"function\",\n );\n\n if (missingCapabilities.length > 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Provider manifest \"${manifest.id}\" is missing handlers for capabilities: ${missingCapabilities.join(\n \", \",\n )}.`,\n provider: manifest.id,\n });\n }\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type { ProbeMeshAdapter } from \"../types\";\nimport { createAdapterFromManifest } from \"../providerKit/adapter\";\nimport type { ProviderManifest } from \"../providerKit/types\";\nimport {\n createMockPaymentProtocol,\n type MockPaymentProtocolOptions,\n} from \"./mockPaymentProtocol\";\n\nexport type PaidPriceLookupFailureMode =\n | \"none\"\n | \"timeout_after_payment\"\n | \"missing_delivery_receipt\";\n\nexport interface PaidPriceLookupProviderOptions {\n id?: string;\n displayName?: string;\n amountUsd?: number;\n prices?: Record<string, number>;\n mockPayment?: MockPaymentProtocolOptions;\n failureMode?: PaidPriceLookupFailureMode;\n}\n\nexport interface PaidPriceLookupData {\n symbol: string;\n currency: string;\n price: number;\n asOf: string;\n source: string;\n protocolMode?: string;\n paymentAuthorized: boolean;\n}\n\nconst DEFAULT_PAID_PRICES_USD: Record<string, number> = {\n BTC: 64000.25,\n ETH: 3200.12,\n SOL: 145.33,\n};\n\nexport function createPaidPriceLookupProvider(\n options: PaidPriceLookupProviderOptions = {},\n): ProbeMeshAdapter {\n const id = options.id ?? \"paid-price-provider\";\n const displayName = options.displayName ?? \"Paid Price Provider\";\n const amountUsd = options.amountUsd ?? 0.01;\n const prices = options.prices ?? DEFAULT_PAID_PRICES_USD;\n const failureMode = options.failureMode ?? \"none\";\n const mockPaymentOptions: MockPaymentProtocolOptions = {\n ...options.mockPayment,\n omitDeliveryReceipt:\n options.mockPayment?.omitDeliveryReceipt ||\n failureMode === \"missing_delivery_receipt\",\n };\n const manifest = createPaidPriceLookupManifest({\n id,\n displayName,\n amountUsd,\n });\n\n return createAdapterFromManifest(\n manifest,\n {\n \"price-lookup\": (request, context) => {\n const input = parsePriceLookupInput(request.input, id, context.callId);\n const symbol = input.symbol.toUpperCase();\n const currency = (input.currency ?? \"USD\").toUpperCase();\n\n if (failureMode === \"timeout_after_payment\") {\n throw new ProbeMeshError({\n code: \"timeout_after_payment\",\n message: `Paid price lookup demo timed out after payment authorization for provider \"${id}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n if (currency !== \"USD\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: `Paid price lookup demo only supports USD prices, received \"${currency}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n const price = prices[symbol];\n\n if (price === undefined) {\n throw new ProbeMeshError({\n code: \"provider_unavailable\",\n message: `Paid price lookup demo has no mock price for \"${symbol}\".`,\n capability: request.capability,\n provider: id,\n callId: context.callId,\n });\n }\n\n return {\n data: {\n symbol,\n currency,\n price,\n asOf: context.startedAt.toISOString(),\n source: id,\n protocolMode: context.protocol?.mode,\n paymentAuthorized:\n context.protocol?.preparation?.metadata?.authorized === true,\n } satisfies PaidPriceLookupData,\n };\n },\n },\n {\n protocolAdapters: [createMockPaymentProtocol(mockPaymentOptions)],\n },\n );\n}\n\nfunction createPaidPriceLookupManifest(options: {\n id: string;\n displayName: string;\n amountUsd: number;\n}): ProviderManifest {\n return {\n id: options.id,\n displayName: options.displayName,\n capabilities: [\"price-lookup\"],\n protocolMode: \"mock-payment\",\n pricing: {\n unit: \"call\",\n amountUsd: options.amountUsd,\n currency: \"USD\",\n },\n inputSchema: {\n type: \"object\",\n properties: {\n symbol: {\n type: \"string\",\n },\n currency: {\n type: \"string\",\n },\n },\n required: [\"symbol\"],\n },\n outputSchema: {\n type: \"object\",\n properties: {\n symbol: {\n type: \"string\",\n },\n currency: {\n type: \"string\",\n },\n price: {\n type: \"number\",\n },\n paymentAuthorized: {\n type: \"boolean\",\n },\n },\n required: [\"symbol\", \"currency\", \"price\", \"paymentAuthorized\"],\n },\n receipts: {\n payment: true,\n delivery: true,\n responseEvidence: false,\n },\n limits: {\n maxRequestsPerMinute: 60,\n },\n };\n}\n\nfunction parsePriceLookupInput(\n input: unknown,\n provider: string,\n callId: string,\n): {\n symbol: string;\n currency?: string;\n} {\n if (!input || typeof input !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input must be an object.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n const candidate = input as {\n symbol?: unknown;\n currency?: unknown;\n };\n\n if (typeof candidate.symbol !== \"string\" || candidate.symbol.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup input requires a string symbol.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n if (\n candidate.currency !== undefined &&\n typeof candidate.currency !== \"string\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_provider_response\",\n message: \"price-lookup currency must be a string when provided.\",\n capability: \"price-lookup\",\n provider,\n callId,\n });\n }\n\n return {\n symbol: candidate.symbol,\n currency: candidate.currency,\n };\n}\n","import { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n} from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\nimport type { ProbeMeshCallSafety } from \"../types\";\n\nexport type ApiKeyPlacement = \"header\" | \"authorization\";\n\nexport type ApiKeyResolver =\n | (() => string | undefined)\n | (() => Promise<string | undefined>);\n\nexport interface ApiKeyProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n apiKey?: string;\n resolveApiKey?: ApiKeyResolver;\n placement?: ApiKeyPlacement;\n headerName?: string;\n authorizationScheme?: string;\n}\n\nconst DEFAULT_MODE = \"api-key\";\nconst DEFAULT_HEADER_NAME = \"x-api-key\";\nconst DEFAULT_AUTHORIZATION_HEADER = \"authorization\";\nconst DEFAULT_AUTHORIZATION_SCHEME = \"Bearer\";\n\nexport function createApiKeyProtocol(\n options: ApiKeyProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertApiKeyProtocolOptions(options);\n\n const mode = options.mode ?? DEFAULT_MODE;\n\n return {\n mode,\n async prepare({ manifest, request, context }) {\n if (options.providerId && options.providerId !== manifest.id) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `API key protocol is configured for provider \"${options.providerId}\", but manifest \"${manifest.id}\" was used.`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const apiKey = await resolveApiKey(options);\n\n if (!apiKey) {\n throw new ProbeMeshError({\n code: \"unauthorized\",\n message: `API key is required for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const placement = options.placement ?? \"header\";\n const headerName = headerNameForPlacement(options, placement);\n const headers = {\n [headerName]: headerValueForPlacement(options, placement, apiKey),\n };\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n credentialPresent: true,\n placement,\n headerName,\n providerId: manifest.id,\n },\n receiptRefs: [\n {\n type: \"authorization_decision\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:api_key_authorized`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: noPaymentPreparationSafety(),\n };\n\n Object.defineProperty(preparation, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n return preparation;\n },\n };\n}\n\nfunction assertApiKeyProtocolOptions(options: ApiKeyProtocolOptions) {\n if (\n options.providerId !== undefined &&\n (typeof options.providerId !== \"string\" || options.providerId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol providerId must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.apiKey !== undefined &&\n (typeof options.apiKey !== \"string\" || options.apiKey.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol apiKey must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.resolveApiKey !== undefined &&\n typeof options.resolveApiKey !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol resolveApiKey must be a function when provided.\",\n });\n }\n\n if (\n options.placement !== undefined &&\n options.placement !== \"header\" &&\n options.placement !== \"authorization\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol placement must be \\\"header\\\" or \\\"authorization\\\".\",\n });\n }\n\n if (\n options.headerName !== undefined &&\n (typeof options.headerName !== \"string\" || options.headerName.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"API key protocol headerName must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.authorizationScheme !== undefined &&\n (typeof options.authorizationScheme !== \"string\" ||\n options.authorizationScheme.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"API key protocol authorizationScheme must be a non-empty string when provided.\",\n });\n }\n}\n\nasync function resolveApiKey(options: ApiKeyProtocolOptions) {\n return options.apiKey ?? (await options.resolveApiKey?.());\n}\n\nfunction headerNameForPlacement(\n options: ApiKeyProtocolOptions,\n placement: ApiKeyPlacement,\n) {\n if (placement === \"authorization\") {\n return options.headerName ?? DEFAULT_AUTHORIZATION_HEADER;\n }\n\n return options.headerName ?? DEFAULT_HEADER_NAME;\n}\n\nfunction headerValueForPlacement(\n options: ApiKeyProtocolOptions,\n placement: ApiKeyPlacement,\n apiKey: string,\n) {\n if (placement === \"authorization\") {\n return `${options.authorizationScheme ?? DEFAULT_AUTHORIZATION_SCHEME} ${apiKey}`;\n }\n\n return apiKey;\n}\n\nfunction noPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n\nfunction noPaymentPreparationSafety(): Partial<ProbeMeshCallSafety> {\n return {\n paymentStatus: \"not_attempted\",\n settlementStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n","import { x402Client } from \"@x402/core/client\";\nimport type { Network } from \"@x402/core/types\";\nimport {\n registerExactEvmScheme,\n type ExactEvmSchemeOptions,\n} from \"@x402/evm/exact/client\";\nimport {\n getDefaultAsset,\n toClientEvmSigner,\n type ClientEvmSigner,\n} from \"@x402/evm\";\nimport { createPublicClient, http, type PrivateKeyAccount } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { ProbeMeshError } from \"../errors\";\nimport type {\n X402Facilitator,\n X402FacilitatorSettleResult,\n X402FacilitatorVerifyResult,\n X402Signer,\n} from \"./x402Protocol\";\n\nexport type X402EvmPrivateKey = `0x${string}`;\nexport type X402EvmAddress = `0x${string}`;\nexport type X402EvmClientSigner = ClientEvmSigner;\n\nexport interface X402EvmNetworkConfig {\n network?: Network;\n networks?: Network[];\n rpcUrl?: string;\n schemeOptions?: ExactEvmSchemeOptions;\n}\n\nexport interface X402EvmSignerMetadata {\n signer: \"evm\";\n scheme: \"exact\";\n address: X402EvmAddress;\n networks: Network[];\n rpcConfigured: boolean;\n}\n\nexport interface X402EvmSignerOptions extends X402EvmNetworkConfig {\n privateKey?: X402EvmPrivateKey;\n signer?: X402EvmClientSigner | PrivateKeyAccount;\n}\n\nexport interface X402HttpFacilitatorAuthHeaders {\n verify: Record<string, string>;\n settle: Record<string, string>;\n supported: Record<string, string>;\n bazaar?: Record<string, string>;\n}\n\nexport type X402HttpFacilitatorAuthHeaderResolver =\n () => X402HttpFacilitatorAuthHeaders | Promise<X402HttpFacilitatorAuthHeaders>;\n\nexport interface X402HttpFacilitatorOptions {\n url?: string;\n createAuthHeaders?: X402HttpFacilitatorAuthHeaderResolver;\n timeoutMs?: number;\n}\n\nexport type X402EvmTestnetEnv = Record<string, string | undefined>;\n\nexport interface X402EvmTestnetConfigOptions {\n env?: X402EvmTestnetEnv;\n defaultNetwork?: Network;\n defaultAmount?: string;\n defaultFacilitatorUrl?: string;\n}\n\nexport interface X402EvmTestnetConfig {\n privateKey: X402EvmPrivateKey;\n network: Network;\n rpcUrl?: string;\n facilitatorUrl: string;\n amount: string;\n asset: X402EvmAddress;\n payTo: X402EvmAddress;\n assetMetadata: {\n name: string;\n version: string;\n };\n}\n\nexport interface X402EvmTestnetConfigSummary {\n network: Network;\n rpcConfigured: boolean;\n facilitatorUrl: string;\n amount: string;\n asset: X402EvmAddress;\n payTo: X402EvmAddress;\n assetMetadata: {\n name: string;\n version: string;\n };\n privateKeyConfigured: boolean;\n}\n\nexport interface X402EvmTestnetConfigSkip {\n reason: string;\n missingEnv: string[];\n requiredEnv: string[];\n optionalEnv: string[];\n defaults: {\n network: Network;\n amount: string;\n facilitatorUrl: string;\n };\n}\n\nexport type X402EvmTestnetConfigResult =\n | {\n ok: true;\n config: X402EvmTestnetConfig;\n summary: X402EvmTestnetConfigSummary;\n }\n | {\n ok: false;\n skip: X402EvmTestnetConfigSkip;\n };\n\nconst DEFAULT_NETWORK: Network = \"eip155:84532\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_FACILITATOR_URL = \"https://x402.org/facilitator\";\nconst REQUIRED_TESTNET_ENV = [\n \"PROBEMESH_X402_EVM_PRIVATE_KEY\",\n \"PROBEMESH_X402_PAY_TO\",\n \"PROBEMESH_X402_ASSET\",\n];\nconst OPTIONAL_TESTNET_ENV = [\n \"PROBEMESH_X402_FACILITATOR_URL\",\n \"PROBEMESH_X402_RPC_URL\",\n \"PROBEMESH_X402_NETWORK\",\n \"PROBEMESH_X402_AMOUNT\",\n \"PROBEMESH_X402_ASSET_NAME\",\n \"PROBEMESH_X402_ASSET_VERSION\",\n];\n\nexport function resolveX402EvmTestnetConfig(\n options: X402EvmTestnetConfigOptions = {},\n): X402EvmTestnetConfigResult {\n assertTestnetConfigOptions(options);\n\n const env = options.env ?? process.env;\n const defaultNetwork = options.defaultNetwork ?? DEFAULT_NETWORK;\n const defaultAmount = options.defaultAmount ?? DEFAULT_AMOUNT;\n const defaultFacilitatorUrl =\n options.defaultFacilitatorUrl ?? DEFAULT_FACILITATOR_URL;\n const missingEnv = REQUIRED_TESTNET_ENV.filter((name) => !env[name]);\n\n if (missingEnv.length > 0) {\n return {\n ok: false,\n skip: {\n reason: \"Missing opt-in live x402 EVM environment variables.\",\n missingEnv,\n requiredEnv: [...REQUIRED_TESTNET_ENV],\n optionalEnv: [...OPTIONAL_TESTNET_ENV],\n defaults: {\n network: defaultNetwork,\n amount: defaultAmount,\n facilitatorUrl: defaultFacilitatorUrl,\n },\n },\n };\n }\n\n const network = requireEvmNetwork(\n env.PROBEMESH_X402_NETWORK ?? defaultNetwork,\n \"PROBEMESH_X402_NETWORK\",\n );\n const amount = requirePositiveIntegerString(\n env.PROBEMESH_X402_AMOUNT ?? defaultAmount,\n \"PROBEMESH_X402_AMOUNT\",\n );\n const facilitatorUrl = requireHttpUrl(\n env.PROBEMESH_X402_FACILITATOR_URL ?? defaultFacilitatorUrl,\n \"PROBEMESH_X402_FACILITATOR_URL\",\n );\n const rpcUrl = env.PROBEMESH_X402_RPC_URL\n ? requireHttpUrl(env.PROBEMESH_X402_RPC_URL, \"PROBEMESH_X402_RPC_URL\")\n : undefined;\n const privateKey = requirePrivateKey(\n env.PROBEMESH_X402_EVM_PRIVATE_KEY,\n \"PROBEMESH_X402_EVM_PRIVATE_KEY\",\n );\n const asset = requireEvmAddress(\n env.PROBEMESH_X402_ASSET,\n \"PROBEMESH_X402_ASSET\",\n );\n const payTo = requireEvmAddress(\n env.PROBEMESH_X402_PAY_TO,\n \"PROBEMESH_X402_PAY_TO\",\n );\n const assetMetadata = resolveTestnetAssetMetadata({\n network,\n asset,\n env,\n });\n const config: X402EvmTestnetConfig = {\n privateKey,\n network,\n rpcUrl,\n facilitatorUrl,\n amount,\n asset,\n payTo,\n assetMetadata,\n };\n\n return {\n ok: true,\n config,\n summary: {\n network,\n rpcConfigured: typeof rpcUrl === \"string\",\n facilitatorUrl,\n amount,\n asset,\n payTo,\n assetMetadata,\n privateKeyConfigured: true,\n },\n };\n}\n\nexport function createX402EvmSigner(\n options: X402EvmSignerOptions = {},\n): X402Signer {\n assertX402EvmSignerOptions(options);\n\n const signer = resolveClientEvmSigner(options);\n const networks = resolveNetworks(options);\n const client = new x402Client();\n\n registerExactEvmScheme(client, {\n signer,\n networks,\n schemeOptions: options.schemeOptions,\n });\n\n return async (input) => {\n try {\n const paymentPayload = await client.createPaymentPayload(\n input.paymentRequired,\n );\n\n return {\n paymentPayload,\n payer: signer.address,\n metadata: {\n signer: \"evm\",\n scheme: \"exact\",\n address: signer.address,\n networks,\n rpcConfigured: typeof options.rpcUrl === \"string\",\n } satisfies X402EvmSignerMetadata,\n };\n } catch (error) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 EVM signer failed to create a payment payload for provider \"${input.providerId}\".`,\n capability: input.capability,\n provider: input.providerId,\n callId: input.callId,\n safety: {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n },\n cause: error,\n });\n }\n };\n}\n\nexport function createX402HttpFacilitator(\n options: X402HttpFacilitatorOptions = {},\n): X402Facilitator {\n assertX402HttpFacilitatorOptions(options);\n\n const baseUrl = (options.url ?? DEFAULT_FACILITATOR_URL).replace(/\\/+$/, \"\");\n const timeoutMs = options.timeoutMs;\n\n return {\n async verify(input): Promise<X402FacilitatorVerifyResult> {\n const response = await postFacilitatorJson({\n baseUrl,\n path: \"verify\",\n timeoutMs,\n createAuthHeaders: options.createAuthHeaders,\n body: {\n x402Version: input.paymentPayload.x402Version,\n paymentPayload: input.paymentPayload,\n paymentRequirements: input.paymentRequirements,\n },\n providerId: input.providerId,\n capability: input.capability,\n callId: input.callId,\n unsafeAfterPayment: false,\n });\n\n return response as X402FacilitatorVerifyResult;\n },\n async settle(input): Promise<X402FacilitatorSettleResult> {\n const response = await postFacilitatorJson({\n baseUrl,\n path: \"settle\",\n timeoutMs,\n createAuthHeaders: options.createAuthHeaders,\n body: {\n x402Version: input.paymentPayload.x402Version,\n paymentPayload: input.paymentPayload,\n paymentRequirements: input.paymentRequirements,\n },\n providerId: input.providerId,\n capability: input.capability,\n callId: input.callId,\n unsafeAfterPayment: true,\n });\n\n return response as X402FacilitatorSettleResult;\n },\n };\n}\n\nfunction resolveClientEvmSigner(options: X402EvmSignerOptions) {\n const signer =\n options.signer ??\n (options.privateKey ? privateKeyToAccount(options.privateKey) : undefined);\n\n if (!signer) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer requires either privateKey or signer.\",\n });\n }\n\n if (options.rpcUrl) {\n const publicClient = createPublicClient({\n transport: http(options.rpcUrl),\n });\n\n return toClientEvmSigner(signer, publicClient);\n }\n\n return signer as X402EvmClientSigner;\n}\n\nfunction resolveNetworks(options: X402EvmSignerOptions): Network[] {\n if (options.networks !== undefined) {\n return options.networks;\n }\n\n return [options.network ?? DEFAULT_NETWORK];\n}\n\nfunction assertX402EvmSignerOptions(options: X402EvmSignerOptions) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM signer options must be an object.\",\n });\n }\n\n if (\n options.privateKey !== undefined &&\n (typeof options.privateKey !== \"string\" ||\n !options.privateKey.startsWith(\"0x\") ||\n options.privateKey.length !== 66)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer privateKey must be a 32-byte 0x-prefixed hex string.\",\n });\n }\n\n if (options.signer !== undefined) {\n assertClientSigner(options.signer);\n }\n\n if (options.privateKey !== undefined && options.signer !== undefined) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer accepts either privateKey or signer, not both.\",\n });\n }\n\n if (\n options.network !== undefined &&\n !isValidEvmNetwork(options.network)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer network must use CAIP-2 eip155:<chainId> format.\",\n });\n }\n\n if (\n options.networks !== undefined &&\n (!Array.isArray(options.networks) ||\n options.networks.length === 0 ||\n options.networks.some((network) => !isValidEvmNetwork(network)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer networks must be a non-empty array of CAIP-2 eip155:<chainId> values.\",\n });\n }\n\n if (\n options.network !== undefined &&\n options.networks !== undefined\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer accepts either network or networks, not both.\",\n });\n }\n\n if (\n options.rpcUrl !== undefined &&\n (typeof options.rpcUrl !== \"string\" || options.rpcUrl.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM signer rpcUrl must be a non-empty string when provided.\",\n });\n }\n}\n\nfunction assertX402HttpFacilitatorOptions(\n options: X402HttpFacilitatorOptions,\n) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 HTTP facilitator options must be an object.\",\n });\n }\n\n if (\n options.url !== undefined &&\n (typeof options.url !== \"string\" || options.url.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 HTTP facilitator url must be a non-empty string when provided.\",\n });\n }\n\n if (\n options.createAuthHeaders !== undefined &&\n typeof options.createAuthHeaders !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator createAuthHeaders must be a function when provided.\",\n });\n }\n\n if (\n options.timeoutMs !== undefined &&\n (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator timeoutMs must be a positive number when provided.\",\n });\n }\n}\n\nasync function postFacilitatorJson(options: {\n baseUrl: string;\n path: \"verify\" | \"settle\";\n timeoutMs?: number;\n createAuthHeaders?: X402HttpFacilitatorAuthHeaderResolver;\n body: unknown;\n providerId: string;\n capability: string;\n callId: string;\n unsafeAfterPayment: boolean;\n}) {\n const controller = new AbortController();\n const timeout =\n options.timeoutMs !== undefined\n ? setTimeout(() => controller.abort(), options.timeoutMs)\n : undefined;\n\n try {\n const authHeaders = await resolveFacilitatorAuthHeaders(\n options.createAuthHeaders,\n options.path,\n );\n const response = await fetch(`${options.baseUrl}/${options.path}`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...authHeaders,\n },\n redirect: \"follow\",\n body: JSON.stringify(toJsonSafe(options.body)),\n signal: controller.signal,\n });\n const responseText = await response.text();\n const responseBody = parseFacilitatorJson(\n responseText,\n options.path,\n options.providerId,\n options.capability,\n options.callId,\n options.unsafeAfterPayment,\n );\n\n if (!response.ok && !isFacilitatorLifecycleResult(responseBody)) {\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request failed with HTTP ${response.status}.`,\n });\n }\n\n return responseBody;\n } catch (error) {\n if (error instanceof ProbeMeshError) {\n throw error;\n }\n\n if (isAbortError(error)) {\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request timed out after ${options.timeoutMs}ms.`,\n });\n }\n\n throw facilitatorRequestError({\n path: options.path,\n providerId: options.providerId,\n capability: options.capability,\n callId: options.callId,\n unsafeAfterPayment: options.unsafeAfterPayment,\n message: `x402 HTTP facilitator ${options.path} request failed.`,\n });\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nasync function resolveFacilitatorAuthHeaders(\n createAuthHeaders: X402HttpFacilitatorAuthHeaderResolver | undefined,\n path: \"verify\" | \"settle\",\n) {\n if (!createAuthHeaders) {\n return {};\n }\n\n const headers = await createAuthHeaders();\n const selected = headers[path] ?? {};\n\n if (\n !selected ||\n typeof selected !== \"object\" ||\n Array.isArray(selected) ||\n Object.entries(selected).some(\n ([key, value]) =>\n typeof key !== \"string\" ||\n key.length === 0 ||\n typeof value !== \"string\",\n )\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 HTTP facilitator auth headers must be records of string values.\",\n });\n }\n\n return selected;\n}\n\nfunction parseFacilitatorJson(\n responseText: string,\n path: \"verify\" | \"settle\",\n providerId: string,\n capability: string,\n callId: string,\n unsafeAfterPayment: boolean,\n) {\n try {\n return responseText ? JSON.parse(responseText) : {};\n } catch {\n throw facilitatorRequestError({\n path,\n providerId,\n capability,\n callId,\n unsafeAfterPayment,\n message: `x402 HTTP facilitator ${path} response was not valid JSON.`,\n });\n }\n}\n\nfunction isFacilitatorLifecycleResult(value: unknown) {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (\"isValid\" in value || \"success\" in value)\n );\n}\n\nfunction facilitatorRequestError(options: {\n path: \"verify\" | \"settle\";\n providerId: string;\n capability: string;\n callId: string;\n unsafeAfterPayment: boolean;\n message: string;\n}) {\n return new ProbeMeshError({\n code: \"payment_failed\",\n message: options.message,\n capability: options.capability,\n provider: options.providerId,\n callId: options.callId,\n safety: options.unsafeAfterPayment\n ? {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n }\n : {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n },\n });\n}\n\nfunction toJsonSafe(value: unknown): unknown {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => toJsonSafe(entry));\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, toJsonSafe(entry)]),\n );\n }\n\n return value;\n}\n\nfunction isAbortError(error: unknown) {\n return (\n !!error &&\n typeof error === \"object\" &&\n \"name\" in error &&\n error.name === \"AbortError\"\n );\n}\n\nfunction assertTestnetConfigOptions(options: X402EvmTestnetConfigOptions) {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM testnet config options must be an object.\",\n });\n }\n\n if (\n options.env !== undefined &&\n (!options.env || typeof options.env !== \"object\" || Array.isArray(options.env))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 EVM testnet config env must be an object when provided.\",\n });\n }\n\n if (\n options.defaultNetwork !== undefined &&\n !isValidEvmNetwork(options.defaultNetwork)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM testnet defaultNetwork must use CAIP-2 eip155:<chainId> format.\",\n });\n }\n\n if (options.defaultAmount !== undefined) {\n requirePositiveIntegerString(\n options.defaultAmount,\n \"x402 EVM testnet defaultAmount\",\n );\n }\n\n if (options.defaultFacilitatorUrl !== undefined) {\n requireHttpUrl(\n options.defaultFacilitatorUrl,\n \"x402 EVM testnet defaultFacilitatorUrl\",\n );\n }\n}\n\nfunction assertClientSigner(\n signer: X402EvmClientSigner | PrivateKeyAccount,\n) {\n if (\n !signer ||\n typeof signer !== \"object\" ||\n Array.isArray(signer) ||\n typeof signer.address !== \"string\" ||\n !signer.address.startsWith(\"0x\") ||\n typeof signer.signTypedData !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 EVM signer signer must expose address and signTypedData(...).\",\n });\n }\n}\n\nfunction isValidEvmNetwork(network: unknown): network is Network {\n return (\n typeof network === \"string\" &&\n /^eip155:[1-9][0-9]*$/.test(network)\n );\n}\n\nfunction requireEvmNetwork(value: unknown, field: string): Network {\n if (!isValidEvmNetwork(value)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must use CAIP-2 eip155:<chainId> format.`,\n });\n }\n\n return value;\n}\n\nfunction requirePrivateKey(value: unknown, field: string): X402EvmPrivateKey {\n if (\n typeof value !== \"string\" ||\n !value.startsWith(\"0x\") ||\n value.length !== 66 ||\n !/^0x[0-9a-fA-F]{64}$/.test(value)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a 32-byte 0x-prefixed hex string.`,\n });\n }\n\n return value as X402EvmPrivateKey;\n}\n\nfunction requireEvmAddress(value: unknown, field: string): X402EvmAddress {\n if (\n typeof value !== \"string\" ||\n !/^0x[0-9a-fA-F]{40}$/.test(value)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a 20-byte 0x-prefixed EVM address.`,\n });\n }\n\n return value as X402EvmAddress;\n}\n\nfunction requirePositiveIntegerString(value: unknown, field: string) {\n if (typeof value !== \"string\" || !/^[1-9][0-9]*$/.test(value)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a positive integer string.`,\n });\n }\n\n return value;\n}\n\nfunction requireHttpUrl(value: unknown, field: string) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a non-empty HTTP(S) URL.`,\n });\n }\n\n try {\n const url = new URL(value);\n\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"invalid protocol\");\n }\n } catch {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `${field} must be a valid HTTP(S) URL.`,\n });\n }\n\n return value;\n}\n\nfunction resolveTestnetAssetMetadata(options: {\n network: Network;\n asset: X402EvmAddress;\n env: X402EvmTestnetEnv;\n}) {\n const configuredName = options.env.PROBEMESH_X402_ASSET_NAME;\n const configuredVersion = options.env.PROBEMESH_X402_ASSET_VERSION;\n\n if (configuredName !== undefined && configuredName.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"PROBEMESH_X402_ASSET_NAME must be non-empty when provided.\",\n });\n }\n\n if (configuredVersion !== undefined && configuredVersion.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"PROBEMESH_X402_ASSET_VERSION must be non-empty when provided.\",\n });\n }\n\n if (configuredName && configuredVersion) {\n return {\n name: configuredName,\n version: configuredVersion,\n };\n }\n\n try {\n const defaultAsset = getDefaultAsset(options.network);\n\n if (defaultAsset.address.toLowerCase() === options.asset.toLowerCase()) {\n return {\n name: configuredName ?? defaultAsset.name,\n version: configuredVersion ?? defaultAsset.version,\n };\n }\n } catch {\n // Fall through to common USDC EIP-3009 defaults for custom/local testnets.\n }\n\n return {\n name: configuredName ?? \"USDC\",\n version: configuredVersion ?? \"2\",\n };\n}\n","import {\n decodePaymentRequiredHeader,\n decodePaymentSignatureHeader,\n encodePaymentRequiredHeader,\n encodePaymentResponseHeader,\n encodePaymentSignatureHeader,\n} from \"@x402/core/http\";\nimport type {\n PaymentPayload as CorePaymentPayload,\n PaymentRequired as CorePaymentRequired,\n PaymentRequirements as CorePaymentRequirements,\n ResourceInfo as CoreResourceInfo,\n SettleResponse as CoreSettleResponse,\n VerifyResponse as CoreVerifyResponse,\n} from \"@x402/core/types\";\nimport { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n ProviderProtocolSettlement,\n} from \"../providerKit/protocol\";\nimport type {\n ProviderProtocolMode,\n ProviderManifest,\n} from \"../providerKit/types\";\nimport type {\n ProbeMeshAdapterCallResult,\n ProbeMeshAdapterCallRequest,\n ProbeMeshAdapterContext,\n ProbeMeshCallSafety,\n} from \"../types\";\n\nexport type X402PaymentRequired = CorePaymentRequired;\nexport type X402PaymentRequirements = CorePaymentRequirements;\nexport type X402PaymentPayload = CorePaymentPayload;\nexport type X402ResourceInfo = CoreResourceInfo;\nexport type X402SettlementResponse = CoreSettleResponse;\nexport type X402VerifyResponse = CoreVerifyResponse;\n\nexport interface X402PaymentRequiredConfig {\n x402Version?: number;\n error?: string;\n resource?: string | Partial<X402ResourceInfo>;\n accepts?: X402PaymentRequirements[];\n extensions?: Record<string, unknown>;\n scheme?: string;\n network?: string;\n asset?: string;\n amount?: string;\n payTo?: string;\n maxTimeoutSeconds?: number;\n extra?: Record<string, unknown>;\n}\n\nexport interface X402PaymentRequiredResolverInput {\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n}\n\nexport type X402PaymentRequiredResolver = (\n input: X402PaymentRequiredResolverInput,\n) => X402PaymentRequired | Promise<X402PaymentRequired>;\n\nexport interface X402SignerInput {\n paymentRequired: X402PaymentRequired;\n paymentRequirements: X402PaymentRequirements;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n paymentId: string;\n payer: string;\n}\n\nexport interface X402SignerResult {\n paymentPayload: X402PaymentPayload;\n payer?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type X402Signer = (\n input: X402SignerInput,\n) => X402SignerResult | Promise<X402SignerResult>;\n\nexport interface X402FacilitatorVerifyInput {\n paymentPayload: X402PaymentPayload;\n paymentRequirements: X402PaymentRequirements;\n paymentRequired: X402PaymentRequired;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n}\n\nexport type X402FacilitatorVerifyResult = X402VerifyResponse;\n\nexport interface X402FacilitatorSettleInput {\n paymentPayload: X402PaymentPayload;\n paymentRequirements: X402PaymentRequirements;\n paymentRequired: X402PaymentRequired;\n result: ProbeMeshAdapterCallResult;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n providerId: string;\n capability: string;\n callId: string;\n}\n\nexport type X402FacilitatorSettleResult = X402SettlementResponse;\n\nexport interface X402Facilitator {\n verify(\n input: X402FacilitatorVerifyInput,\n ): X402FacilitatorVerifyResult | Promise<X402FacilitatorVerifyResult>;\n settle(\n input: X402FacilitatorSettleInput,\n ): X402FacilitatorSettleResult | Promise<X402FacilitatorSettleResult>;\n}\n\nexport interface X402ProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n payer?: string;\n paymentId?: string;\n paymentRequired?: X402PaymentRequiredConfig;\n resolvePaymentRequired?: X402PaymentRequiredResolver;\n signer?: X402Signer;\n facilitator?: X402Facilitator;\n}\n\nexport interface X402LocalSignerOptions {\n payer?: string;\n paymentId?: string;\n failSign?: boolean;\n payload?: Record<string, unknown>;\n}\n\nexport interface X402LocalFacilitatorOptions {\n payer?: string;\n failVerify?: boolean;\n failSettle?: boolean;\n invalidReason?: string;\n invalidMessage?: string;\n errorReason?: string;\n errorMessage?: string;\n transaction?: string;\n}\n\nconst DEFAULT_MODE = \"x402\";\nconst DEFAULT_PAYER = \"local-x402-agent\";\nconst DEFAULT_NETWORK: X402PaymentRequirements[\"network\"] = \"eip155:84532\";\nconst DEFAULT_ASSET = \"USDC\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_PAY_TO = \"probemesh-local-x402-provider\";\nconst DEFAULT_TIMEOUT_SECONDS = 60;\nconst PAYMENT_REQUIRED_HEADER = \"PAYMENT-REQUIRED\";\nconst PAYMENT_SIGNATURE_HEADER = \"PAYMENT-SIGNATURE\";\nconst PAYMENT_RESPONSE_HEADER = \"PAYMENT-RESPONSE\";\n\nexport function createX402Protocol(\n options: X402ProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertX402ProtocolOptions(options);\n\n const mode = options.mode ?? X402_PROTOCOL_DEFAULT_MODE;\n const signer =\n options.signer ??\n createX402LocalSigner({\n payer: options.payer,\n paymentId: options.paymentId,\n });\n const facilitator = options.facilitator ?? createX402LocalFacilitator();\n\n return {\n mode,\n async prepare({ manifest, request, context }) {\n assertProviderMatches(\n options.providerId,\n manifest.id,\n request.capability,\n context.callId,\n );\n\n const paymentRequired = await resolvePaymentRequired({\n options,\n manifest,\n request,\n context,\n });\n const paymentRequirements = paymentRequired.accepts[0];\n const paymentId = options.paymentId ?? `${context.callId}:x402_payment`;\n const payer = options.payer ?? DEFAULT_PAYER;\n const signerResult = await signer({\n paymentRequired,\n paymentRequirements,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n paymentId,\n payer,\n });\n\n assertSignerResult(signerResult, request.capability, manifest.id, context.callId);\n assertPaymentPayload(\n signerResult.paymentPayload,\n paymentRequirements,\n request.capability,\n manifest.id,\n context.callId,\n );\n\n const verifyResult = await facilitator.verify({\n paymentPayload: signerResult.paymentPayload,\n paymentRequirements,\n paymentRequired,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n });\n assertVerifyResult(\n verifyResult,\n request.capability,\n manifest.id,\n context.callId,\n );\n\n if (!verifyResult.isValid) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n verifyResult.invalidMessage ??\n `x402 facilitator rejected payment for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: failedPaymentSafety(),\n });\n }\n\n const headers = {\n [PAYMENT_REQUIRED_HEADER]: encodePaymentRequiredHeader(paymentRequired),\n [PAYMENT_SIGNATURE_HEADER]: encodePaymentSignatureHeader(\n signerResult.paymentPayload,\n ),\n };\n const resolvedPayer =\n verifyResult.payer ??\n signerResult.payer ??\n getPayloadString(signerResult.paymentPayload, \"payer\") ??\n payer;\n const paymentAttemptId = `${paymentId}:attempt`;\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n verified: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n payer: resolvedPayer,\n network: paymentRequirements.network,\n asset: paymentRequirements.asset,\n amount: paymentRequirements.amount,\n paymentRequired,\n selectedPaymentRequirements: paymentRequirements,\n verifyResponse: verifyResult,\n signerMetadata: signerResult.metadata,\n paymentRequiredHeader: PAYMENT_REQUIRED_HEADER,\n paymentSignatureHeader: PAYMENT_SIGNATURE_HEADER,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_payment_proof`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(preparation, headers);\n\n return preparation;\n },\n async settle({ manifest, request, context, result, preparation }) {\n assertProviderMatches(\n options.providerId,\n manifest.id,\n request.capability,\n context.callId,\n );\n\n const preparedPayment = decodePreparedPayment(\n preparation,\n request.capability,\n manifest.id,\n context.callId,\n );\n const settleResult = await facilitator.settle({\n ...preparedPayment,\n result,\n manifest,\n request,\n context,\n providerId: manifest.id,\n capability: request.capability,\n callId: context.callId,\n });\n assertSettleResult(\n settleResult,\n request.capability,\n manifest.id,\n context.callId,\n );\n const paymentId =\n getPayloadString(preparedPayment.paymentPayload, \"paymentId\") ??\n `${context.callId}:x402_payment`;\n const paymentAttemptId = `${paymentId}:attempt`;\n const hasDeliveryReceipt =\n Array.isArray(result.receiptRefs) &&\n result.receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n\n if (!settleResult.success) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n settleResult.errorMessage ??\n `x402 facilitator failed settlement for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const headers = {\n [PAYMENT_RESPONSE_HEADER]: encodePaymentResponseHeader(settleResult),\n };\n const settlement: ProviderProtocolSettlement = {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n settlementResponse: settleResult,\n paymentResponseHeader: PAYMENT_RESPONSE_HEADER,\n },\n receiptRefs: [\n {\n type: \"settlement_confirmation\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_settlement_confirmed`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"settled\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(settlement, headers);\n\n return settlement;\n },\n };\n}\n\nexport function createX402LocalSigner(\n options: X402LocalSignerOptions = {},\n): X402Signer {\n assertLocalSignerOptions(options);\n\n return (input) => {\n if (options.failSign) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 local signer failed for provider \"${input.providerId}\".`,\n capability: input.capability,\n provider: input.providerId,\n callId: input.callId,\n safety: noPaymentSafety(),\n });\n }\n\n const payer = options.payer ?? input.payer;\n const paymentId = options.paymentId ?? input.paymentId;\n const issuedAt = input.context.startedAt.toISOString();\n const paymentPayload: X402PaymentPayload = {\n x402Version: 2,\n resource: input.paymentRequired.resource,\n accepted: input.paymentRequirements,\n payload: {\n ...(options.payload ?? {}),\n kind: \"probemesh-local-x402-signature\",\n payer,\n provider: input.providerId,\n callId: input.callId,\n paymentId,\n issuedAt,\n signature: `local-x402:${input.providerId}:${input.callId}:${paymentId}`,\n },\n extensions: input.paymentRequired.extensions,\n };\n\n return {\n payer,\n paymentPayload,\n metadata: {\n signer: \"local\",\n paymentId,\n },\n };\n };\n}\n\nexport function createX402LocalFacilitator(\n options: X402LocalFacilitatorOptions = {},\n): X402Facilitator {\n assertLocalFacilitatorOptions(options);\n\n return {\n verify(input) {\n const payer =\n options.payer ??\n getPayloadString(input.paymentPayload, \"payer\") ??\n DEFAULT_PAYER;\n\n if (options.failVerify) {\n return {\n isValid: false,\n invalidReason: options.invalidReason ?? \"local_verify_failed\",\n invalidMessage:\n options.invalidMessage ??\n `x402 local facilitator rejected payment for provider \"${input.providerId}\".`,\n payer,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n },\n };\n }\n\n if (input.paymentPayload.x402Version !== 2) {\n return {\n isValid: false,\n invalidReason: \"unsupported_x402_version\",\n invalidMessage: \"x402 local facilitator only accepts V2 payloads.\",\n payer,\n };\n }\n\n if (\n !paymentRequirementsMatch(\n input.paymentPayload.accepted,\n input.paymentRequirements,\n )\n ) {\n return {\n isValid: false,\n invalidReason: \"requirements_mismatch\",\n invalidMessage:\n \"x402 payment payload does not match the selected payment requirements.\",\n payer,\n };\n }\n\n return {\n isValid: true,\n payer,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n paymentId: getPayloadString(input.paymentPayload, \"paymentId\"),\n },\n };\n },\n settle(input) {\n const payer =\n options.payer ??\n getPayloadString(input.paymentPayload, \"payer\") ??\n DEFAULT_PAYER;\n const transaction =\n options.transaction ?? `${input.callId}:x402_local_settlement`;\n const baseResponse = {\n payer,\n transaction,\n network: input.paymentRequirements.network,\n amount: input.paymentRequirements.amount,\n extra: {\n provider: input.providerId,\n callId: input.callId,\n paymentId: getPayloadString(input.paymentPayload, \"paymentId\"),\n },\n };\n\n if (options.failSettle) {\n return {\n ...baseResponse,\n success: false,\n errorReason: options.errorReason ?? \"local_settle_failed\",\n errorMessage:\n options.errorMessage ??\n `x402 local facilitator failed settlement for provider \"${input.providerId}\".`,\n };\n }\n\n return {\n ...baseResponse,\n success: true,\n };\n },\n };\n}\n\nasync function resolvePaymentRequired(options: {\n options: X402ProtocolOptions;\n manifest: ProviderManifest;\n request: ProbeMeshAdapterCallRequest;\n context: ProbeMeshAdapterContext;\n}) {\n const defaultPaymentRequired = createDefaultPaymentRequired({\n providerId: options.manifest.id,\n capability: options.request.capability,\n config: options.options.paymentRequired,\n });\n const paymentRequired = options.options.resolvePaymentRequired\n ? await options.options.resolvePaymentRequired({\n manifest: options.manifest,\n request: options.request,\n context: options.context,\n })\n : defaultPaymentRequired;\n\n assertPaymentRequired(paymentRequired);\n\n return paymentRequired;\n}\n\nfunction decodePreparedPayment(\n preparation: ProviderProtocolPreparation | undefined,\n capability: string,\n provider: string,\n callId: string,\n) {\n const paymentRequiredHeader = preparation?.headers?.[PAYMENT_REQUIRED_HEADER];\n const paymentSignatureHeader =\n preparation?.headers?.[PAYMENT_SIGNATURE_HEADER];\n\n if (!paymentRequiredHeader || !paymentSignatureHeader) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 prepared payment headers are missing for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const paymentRequired = decodePaymentRequiredHeader(paymentRequiredHeader);\n const paymentPayload = decodePaymentSignatureHeader(paymentSignatureHeader);\n assertPaymentRequired(paymentRequired);\n assertPaymentPayload(\n paymentPayload,\n paymentPayload.accepted,\n capability,\n provider,\n callId,\n );\n\n return {\n paymentRequired,\n paymentPayload,\n paymentRequirements: paymentPayload.accepted,\n };\n}\n\nfunction assertSignerResult(\n signerResult: X402SignerResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !signerResult ||\n typeof signerResult !== \"object\" ||\n Array.isArray(signerResult)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 signer returned an invalid result for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertPaymentPayload(\n paymentPayload: X402PaymentPayload,\n paymentRequirements: X402PaymentRequirements,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !paymentPayload ||\n typeof paymentPayload !== \"object\" ||\n Array.isArray(paymentPayload)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 signer returned an invalid payment payload for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (paymentPayload.x402Version !== 2) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload x402Version must be 2.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (\n !paymentPayload.accepted ||\n typeof paymentPayload.accepted !== \"object\" ||\n Array.isArray(paymentPayload.accepted)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload accepted requirements must be an object.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (\n !paymentPayload.payload ||\n typeof paymentPayload.payload !== \"object\" ||\n Array.isArray(paymentPayload.payload)\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: \"x402 payment payload payload must be an object.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n\n if (!paymentRequirementsMatch(paymentPayload.accepted, paymentRequirements)) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message:\n \"x402 payment payload does not match the selected payment requirements.\",\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertVerifyResult(\n verifyResult: X402FacilitatorVerifyResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !verifyResult ||\n typeof verifyResult !== \"object\" ||\n Array.isArray(verifyResult) ||\n typeof verifyResult.isValid !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 facilitator returned an invalid verify response for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: failedPaymentSafety(),\n });\n }\n}\n\nfunction assertSettleResult(\n settleResult: X402FacilitatorSettleResult,\n capability: string,\n provider: string,\n callId: string,\n) {\n if (\n !settleResult ||\n typeof settleResult !== \"object\" ||\n Array.isArray(settleResult) ||\n typeof settleResult.success !== \"boolean\" ||\n typeof settleResult.transaction !== \"string\" ||\n settleResult.transaction.length === 0 ||\n typeof settleResult.network !== \"string\" ||\n settleResult.network.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 facilitator returned an invalid settlement response for provider \"${provider}\".`,\n capability,\n provider,\n callId,\n safety: {\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n}\n\nfunction createDefaultPaymentRequired(options: {\n providerId: string;\n capability: string;\n config?: X402PaymentRequiredConfig;\n}): X402PaymentRequired {\n const config = options.config ?? {};\n const accepts = config.accepts ?? [\n {\n scheme: config.scheme ?? \"exact\",\n network: normalizeNetwork(config.network ?? DEFAULT_NETWORK),\n asset: config.asset ?? DEFAULT_ASSET,\n amount: config.amount ?? DEFAULT_AMOUNT,\n payTo: config.payTo ?? DEFAULT_PAY_TO,\n maxTimeoutSeconds:\n config.maxTimeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS,\n extra: config.extra ?? {},\n },\n ];\n\n return {\n x402Version: config.x402Version ?? 2,\n error: config.error,\n resource: normalizeResourceInfo(\n config.resource,\n options.providerId,\n options.capability,\n ),\n accepts,\n extensions: config.extensions,\n };\n}\n\nfunction assertPaymentRequired(paymentRequired: X402PaymentRequired) {\n if (\n !paymentRequired ||\n typeof paymentRequired !== \"object\" ||\n Array.isArray(paymentRequired)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired must be an object.\",\n });\n }\n\n if (paymentRequired.x402Version !== 2) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.x402Version must be 2.\",\n });\n }\n\n if (\n !paymentRequired.resource ||\n typeof paymentRequired.resource !== \"object\" ||\n typeof paymentRequired.resource.url !== \"string\" ||\n paymentRequired.resource.url.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.resource.url must be a non-empty string.\",\n });\n }\n\n if (\n !Array.isArray(paymentRequired.accepts) ||\n paymentRequired.accepts.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired.accepts must include at least one option.\",\n });\n }\n\n for (const requirements of paymentRequired.accepts) {\n assertPaymentRequirements(requirements);\n }\n}\n\nfunction assertPaymentRequirements(requirements: X402PaymentRequirements) {\n if (!requirements || typeof requirements !== \"object\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements must be an object.\",\n });\n }\n\n for (const field of [\"scheme\", \"network\", \"asset\", \"amount\", \"payTo\"]) {\n const value = requirements[field as keyof X402PaymentRequirements];\n\n if (typeof value !== \"string\" || value.length === 0) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 payment requirements ${field} must be a non-empty string.`,\n });\n }\n }\n\n if (\n typeof requirements.maxTimeoutSeconds !== \"number\" ||\n !Number.isFinite(requirements.maxTimeoutSeconds) ||\n requirements.maxTimeoutSeconds <= 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 payment requirements maxTimeoutSeconds must be a positive number.\",\n });\n }\n\n if (\n !requirements.extra ||\n typeof requirements.extra !== \"object\" ||\n Array.isArray(requirements.extra)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements extra must be an object.\",\n });\n }\n}\n\nfunction assertX402ProtocolOptions(options: X402ProtocolOptions) {\n validateOptionalString(options.mode, \"mode\");\n validateOptionalString(options.providerId, \"providerId\");\n validateOptionalString(options.payer, \"payer\");\n validateOptionalString(options.paymentId, \"paymentId\");\n\n if (\n options.paymentRequired !== undefined &&\n (!options.paymentRequired ||\n typeof options.paymentRequired !== \"object\" ||\n Array.isArray(options.paymentRequired))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 paymentRequired config must be an object when provided.\",\n });\n }\n\n if (\n options.resolvePaymentRequired !== undefined &&\n typeof options.resolvePaymentRequired !== \"function\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 resolvePaymentRequired must be a function when provided.\",\n });\n }\n\n if (options.signer !== undefined && typeof options.signer !== \"function\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 signer must be a function when provided.\",\n });\n }\n\n if (\n options.facilitator !== undefined &&\n (!options.facilitator ||\n typeof options.facilitator !== \"object\" ||\n typeof options.facilitator.verify !== \"function\" ||\n typeof options.facilitator.settle !== \"function\")\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 facilitator must expose verify(...) and settle(...) functions.\",\n });\n }\n}\n\nfunction assertLocalSignerOptions(options: X402LocalSignerOptions) {\n validateOptionalString(options.payer, \"local signer payer\");\n validateOptionalString(options.paymentId, \"local signer paymentId\");\n\n if (options.failSign !== undefined && typeof options.failSign !== \"boolean\") {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 local signer failSign must be a boolean when provided.\",\n });\n }\n\n if (\n options.payload !== undefined &&\n (!options.payload ||\n typeof options.payload !== \"object\" ||\n Array.isArray(options.payload))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 local signer payload must be an object when provided.\",\n });\n }\n}\n\nfunction assertLocalFacilitatorOptions(options: X402LocalFacilitatorOptions) {\n validateOptionalString(options.payer, \"local facilitator payer\");\n validateOptionalString(options.invalidReason, \"local facilitator invalidReason\");\n validateOptionalString(options.invalidMessage, \"local facilitator invalidMessage\");\n validateOptionalString(options.errorReason, \"local facilitator errorReason\");\n validateOptionalString(options.errorMessage, \"local facilitator errorMessage\");\n validateOptionalString(options.transaction, \"local facilitator transaction\");\n\n if (\n options.failVerify !== undefined &&\n typeof options.failVerify !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 local facilitator failVerify must be a boolean when provided.\",\n });\n }\n\n if (\n options.failSettle !== undefined &&\n typeof options.failSettle !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"x402 local facilitator failSettle must be a boolean when provided.\",\n });\n }\n}\n\nfunction normalizeResourceInfo(\n resource: string | Partial<X402ResourceInfo> | undefined,\n providerId: string,\n capability: string,\n): X402ResourceInfo {\n if (typeof resource === \"string\") {\n return {\n url: resource,\n description: `ProbeMesh x402 payment for ${capability}.`,\n mimeType: \"application/json\",\n serviceName: providerId,\n };\n }\n\n return {\n url: resource?.url ?? `probemesh://${providerId}/${capability}`,\n description:\n resource?.description ?? `ProbeMesh x402 payment for ${capability}.`,\n mimeType: resource?.mimeType ?? \"application/json\",\n serviceName: resource?.serviceName ?? providerId,\n tags: resource?.tags,\n iconUrl: resource?.iconUrl,\n };\n}\n\nfunction normalizeNetwork(network: string): X402PaymentRequirements[\"network\"] {\n if (!network.includes(\":\")) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 payment requirements network must use CAIP-2 format.\",\n });\n }\n\n return network as X402PaymentRequirements[\"network\"];\n}\n\nfunction defineNonEnumerableHeaders(\n target: ProviderProtocolPreparation | ProviderProtocolSettlement,\n headers: Record<string, string>,\n) {\n Object.defineProperty(target, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n}\n\nfunction assertProviderMatches(\n configuredProviderId: string | undefined,\n manifestProviderId: string,\n capability: string,\n callId: string,\n) {\n if (!configuredProviderId || configuredProviderId === manifestProviderId) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 protocol is configured for provider \"${configuredProviderId}\", but manifest \"${manifestProviderId}\" was used.`,\n capability,\n provider: manifestProviderId,\n callId,\n });\n}\n\nfunction paymentRequirementsMatch(\n left: X402PaymentRequirements,\n right: X402PaymentRequirements,\n) {\n return (\n left.scheme === right.scheme &&\n left.network === right.network &&\n left.asset === right.asset &&\n left.amount === right.amount &&\n left.payTo === right.payTo\n );\n}\n\nfunction getPayloadString(\n paymentPayload: X402PaymentPayload,\n field: string,\n) {\n const value = paymentPayload.payload[field];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction validateOptionalString(value: unknown, field: string) {\n if (\n value !== undefined &&\n (typeof value !== \"string\" || value.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 ${field} must be a non-empty string when provided.`,\n });\n }\n}\n\nfunction noPaymentSafety(): ProbeMeshCallSafety {\n return failedPaymentSafety();\n}\n\nfunction failedPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n\nexport const X402_PROTOCOL_DEFAULT_MODE = DEFAULT_MODE;\n","import { ProbeMeshError } from \"../errors\";\nimport type {\n ProviderProtocolAdapter,\n ProviderProtocolPreparation,\n ProviderProtocolSettlement,\n} from \"../providerKit/protocol\";\nimport type { ProviderProtocolMode } from \"../providerKit/types\";\nimport type { ProbeMeshCallSafety } from \"../types\";\n\nexport interface X402SandboxPaymentRequirement {\n x402Version: 2;\n scheme: \"exact\" | \"upto\" | string;\n network: string;\n asset: string;\n amount: string;\n payTo: string;\n resource: string;\n description?: string;\n maxTimeoutSeconds?: number;\n extra?: Record<string, unknown>;\n}\n\nexport interface X402SandboxPaymentPayload {\n x402Version: 2;\n scheme: string;\n network: string;\n asset: string;\n amount: string;\n payTo: string;\n resource: string;\n payer: string;\n provider: string;\n callId: string;\n paymentId: string;\n issuedAt: string;\n sandboxSignature: string;\n}\n\nexport interface X402SandboxSettlementResponse {\n x402Version: 2;\n success: boolean;\n provider: string;\n payer: string;\n paymentId: string;\n paymentAttemptId: string;\n network: string;\n asset: string;\n amount: string;\n settledAt: string;\n sandboxSettlementId: string;\n}\n\nexport interface X402SandboxProtocolOptions {\n mode?: ProviderProtocolMode;\n providerId?: string;\n failPrepare?: boolean;\n failSettle?: boolean;\n paymentId?: string;\n payer?: string;\n paymentRequired?: Partial<X402SandboxPaymentRequirement>;\n}\n\nconst DEFAULT_MODE = \"x402\";\nconst DEFAULT_PAYER = \"sandbox-agent\";\nconst DEFAULT_NETWORK = \"eip155:84532\";\nconst DEFAULT_ASSET = \"USDC\";\nconst DEFAULT_AMOUNT = \"10000\";\nconst DEFAULT_PAY_TO = \"sandbox-provider-wallet\";\nconst PAYMENT_REQUIRED_HEADER = \"PAYMENT-REQUIRED\";\nconst PAYMENT_SIGNATURE_HEADER = \"PAYMENT-SIGNATURE\";\nconst PAYMENT_RESPONSE_HEADER = \"PAYMENT-RESPONSE\";\n\nexport function createX402SandboxProtocol(\n options: X402SandboxProtocolOptions = {},\n): ProviderProtocolAdapter {\n assertX402SandboxProtocolOptions(options);\n\n const mode = options.mode ?? DEFAULT_MODE;\n\n return {\n mode,\n prepare({ manifest, request, context }) {\n if (options.failPrepare) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 sandbox payment authorization failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: failedPaymentSafety(),\n });\n }\n\n assertProviderMatches(options.providerId, manifest.id, request.capability, context.callId);\n\n const paymentRequired = createPaymentRequirement({\n providerId: manifest.id,\n capability: request.capability,\n options,\n });\n const paymentId = options.paymentId ?? `${context.callId}:x402_payment`;\n const payer = options.payer ?? DEFAULT_PAYER;\n const paymentAttemptId = `${paymentId}:attempt`;\n const paymentPayload = createPaymentPayload({\n paymentRequired,\n providerId: manifest.id,\n callId: context.callId,\n paymentId,\n payer,\n issuedAt: context.startedAt.toISOString(),\n });\n const headers = {\n [PAYMENT_REQUIRED_HEADER]: encodeBase64Json(paymentRequired),\n [PAYMENT_SIGNATURE_HEADER]: encodeBase64Json(paymentPayload),\n };\n const preparation: ProviderProtocolPreparation = {\n mode: manifest.protocolMode,\n metadata: {\n authorized: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n payer,\n network: paymentRequired.network,\n asset: paymentRequired.asset,\n amount: paymentRequired.amount,\n paymentRequired,\n paymentPayload,\n paymentRequiredHeader: PAYMENT_REQUIRED_HEADER,\n paymentSignatureHeader: PAYMENT_SIGNATURE_HEADER,\n },\n receiptRefs: [\n {\n type: \"payment_proof\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_payment_proof`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(preparation, headers);\n\n return preparation;\n },\n settle({ manifest, request, context, result, preparation }) {\n assertProviderMatches(options.providerId, manifest.id, request.capability, context.callId);\n\n const paymentAttemptId = getMetadataString(\n preparation?.metadata?.paymentAttemptId,\n `${context.callId}:x402_payment:attempt`,\n );\n const paymentId = getMetadataString(\n preparation?.metadata?.paymentId,\n `${context.callId}:x402_payment`,\n );\n const payer = getMetadataString(preparation?.metadata?.payer, DEFAULT_PAYER);\n const network = getMetadataString(\n preparation?.metadata?.network,\n DEFAULT_NETWORK,\n );\n const asset = getMetadataString(preparation?.metadata?.asset, DEFAULT_ASSET);\n const amount = getMetadataString(\n preparation?.metadata?.amount,\n DEFAULT_AMOUNT,\n );\n const hasDeliveryReceipt =\n Array.isArray(result.receiptRefs) &&\n result.receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n );\n\n if (options.failSettle) {\n throw new ProbeMeshError({\n code: \"payment_failed\",\n message: `x402 sandbox settlement failed for provider \"${manifest.id}\".`,\n capability: request.capability,\n provider: manifest.id,\n callId: context.callId,\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"failed\",\n deliveryStatus: \"missing\",\n moneyMayHaveMoved: true,\n },\n });\n }\n\n const settlementResponse: X402SandboxSettlementResponse = {\n x402Version: 2,\n success: true,\n provider: manifest.id,\n payer,\n paymentId,\n paymentAttemptId,\n network,\n asset,\n amount,\n settledAt: context.startedAt.toISOString(),\n sandboxSettlementId: `${context.callId}:x402_settlement`,\n };\n const headers = {\n [PAYMENT_RESPONSE_HEADER]: encodeBase64Json(settlementResponse),\n };\n const settlement: ProviderProtocolSettlement = {\n mode: manifest.protocolMode,\n metadata: {\n settled: true,\n x402Version: 2,\n paymentId,\n paymentAttemptId,\n settlementResponse,\n paymentResponseHeader: PAYMENT_RESPONSE_HEADER,\n },\n receiptRefs: [\n {\n type: \"settlement_confirmation\",\n provider: manifest.id,\n status: \"recorded\",\n ref: `${context.callId}:x402_settlement_confirmed`,\n timestamp: context.startedAt.toISOString(),\n },\n ],\n safety: {\n paymentAttemptId,\n paymentStatus: \"authorized\",\n settlementStatus: \"settled\",\n deliveryStatus: hasDeliveryReceipt ? \"delivered\" : \"missing\",\n moneyMayHaveMoved: true,\n },\n };\n\n defineNonEnumerableHeaders(settlement, headers);\n\n return settlement;\n },\n };\n}\n\nfunction assertX402SandboxProtocolOptions(options: X402SandboxProtocolOptions) {\n validateOptionalString(options.mode, \"mode\");\n validateOptionalString(options.providerId, \"providerId\");\n validateOptionalString(options.paymentId, \"paymentId\");\n validateOptionalString(options.payer, \"payer\");\n\n if (\n options.paymentRequired !== undefined &&\n (!options.paymentRequired ||\n typeof options.paymentRequired !== \"object\" ||\n Array.isArray(options.paymentRequired))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox paymentRequired must be an object when provided.\",\n });\n }\n\n if (\n options.failPrepare !== undefined &&\n typeof options.failPrepare !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox failPrepare must be a boolean when provided.\",\n });\n }\n\n if (\n options.failSettle !== undefined &&\n typeof options.failSettle !== \"boolean\"\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"x402 sandbox failSettle must be a boolean when provided.\",\n });\n }\n}\n\nfunction validateOptionalString(value: unknown, field: string) {\n if (\n value !== undefined &&\n (typeof value !== \"string\" || value.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 sandbox ${field} must be a non-empty string when provided.`,\n });\n }\n}\n\nfunction assertProviderMatches(\n configuredProviderId: string | undefined,\n manifestProviderId: string,\n capability: string,\n callId: string,\n) {\n if (!configuredProviderId || configuredProviderId === manifestProviderId) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `x402 sandbox protocol is configured for provider \"${configuredProviderId}\", but manifest \"${manifestProviderId}\" was used.`,\n capability,\n provider: manifestProviderId,\n callId,\n });\n}\n\nfunction createPaymentRequirement(options: {\n providerId: string;\n capability: string;\n options: X402SandboxProtocolOptions;\n}): X402SandboxPaymentRequirement {\n const overrides = options.options.paymentRequired ?? {};\n\n return {\n x402Version: 2,\n scheme: overrides.scheme ?? \"exact\",\n network: overrides.network ?? DEFAULT_NETWORK,\n asset: overrides.asset ?? DEFAULT_ASSET,\n amount: overrides.amount ?? DEFAULT_AMOUNT,\n payTo: overrides.payTo ?? DEFAULT_PAY_TO,\n resource:\n overrides.resource ??\n `probemesh://${options.providerId}/${options.capability}`,\n description:\n overrides.description ??\n `ProbeMesh x402 sandbox payment for ${options.capability}.`,\n maxTimeoutSeconds: overrides.maxTimeoutSeconds ?? 60,\n extra: overrides.extra,\n };\n}\n\nfunction createPaymentPayload(options: {\n paymentRequired: X402SandboxPaymentRequirement;\n providerId: string;\n callId: string;\n paymentId: string;\n payer: string;\n issuedAt: string;\n}): X402SandboxPaymentPayload {\n return {\n x402Version: 2,\n scheme: options.paymentRequired.scheme,\n network: options.paymentRequired.network,\n asset: options.paymentRequired.asset,\n amount: options.paymentRequired.amount,\n payTo: options.paymentRequired.payTo,\n resource: options.paymentRequired.resource,\n payer: options.payer,\n provider: options.providerId,\n callId: options.callId,\n paymentId: options.paymentId,\n issuedAt: options.issuedAt,\n sandboxSignature: `sandbox:${options.providerId}:${options.paymentId}`,\n };\n}\n\nfunction defineNonEnumerableHeaders(\n target: ProviderProtocolPreparation | ProviderProtocolSettlement,\n headers: Record<string, string>,\n) {\n Object.defineProperty(target, \"headers\", {\n value: Object.freeze(headers),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n}\n\nfunction encodeBase64Json(value: unknown) {\n return Buffer.from(JSON.stringify(value), \"utf8\").toString(\"base64\");\n}\n\nfunction getMetadataString(value: unknown, fallback: string) {\n return typeof value === \"string\" && value.length > 0 ? value : fallback;\n}\n\nfunction failedPaymentSafety(): ProbeMeshCallSafety {\n return {\n paymentStatus: \"failed\",\n settlementStatus: \"not_attempted\",\n deliveryStatus: \"not_attempted\",\n moneyMayHaveMoved: false,\n };\n}\n","import type { ProbeMeshCallResponse, ReceiptRef, ReceiptType } from \"./types\";\n\nexport type ReceiptSource = ProbeMeshCallResponse | ReceiptRef[];\n\nexport interface ReceiptSummary {\n total: number;\n types: ReceiptType[];\n providers: string[];\n byType: Partial<Record<ReceiptType, number>>;\n hasPaymentProof: boolean;\n hasProviderDelivery: boolean;\n}\n\nexport function getReceiptRefs(\n source: ReceiptSource,\n type?: ReceiptType,\n): ReceiptRef[] {\n const receiptRefs = readReceiptRefs(source);\n\n if (type === undefined) {\n return [...receiptRefs];\n }\n\n return receiptRefs.filter((receiptRef) => receiptRef.type === type);\n}\n\nexport function findReceiptRef(\n source: ReceiptSource,\n type: ReceiptType,\n): ReceiptRef | undefined {\n return getReceiptRefs(source, type)[0];\n}\n\nexport function hasReceipt(source: ReceiptSource, type: ReceiptType): boolean {\n return findReceiptRef(source, type) !== undefined;\n}\n\nexport function summarizeReceipts(source: ReceiptSource): ReceiptSummary {\n const receiptRefs = readReceiptRefs(source);\n const types: ReceiptType[] = [];\n const providers: string[] = [];\n const byType: Partial<Record<ReceiptType, number>> = {};\n\n for (const receiptRef of receiptRefs) {\n if (!types.includes(receiptRef.type)) {\n types.push(receiptRef.type);\n }\n\n if (!providers.includes(receiptRef.provider)) {\n providers.push(receiptRef.provider);\n }\n\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receiptRefs.length,\n types,\n providers,\n byType,\n hasPaymentProof: hasReceipt(receiptRefs, \"payment_proof\"),\n hasProviderDelivery: hasReceipt(receiptRefs, \"provider_delivery\"),\n };\n}\n\nfunction readReceiptRefs(source: ReceiptSource): ReceiptRef[] {\n return Array.isArray(source) ? source : source.receiptRefs;\n}\n"],"mappings":"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","names":["parsePriceLookupInput","DEFAULT_MODE","DEFAULT_NETWORK","DEFAULT_AMOUNT","noPaymentSafety","DEFAULT_MODE","DEFAULT_PAYER","DEFAULT_NETWORK","DEFAULT_ASSET","DEFAULT_AMOUNT","DEFAULT_PAY_TO","PAYMENT_REQUIRED_HEADER","PAYMENT_SIGNATURE_HEADER","PAYMENT_RESPONSE_HEADER","failedPaymentSafety","assertProviderMatches","defineNonEnumerableHeaders","validateOptionalString"]}
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "@probemesh/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Open TypeScript SDK for agent-buyable provider calls, hosted routing, payment receipts, catalog policy, and audit exports.",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "bin": {
11
+ "probemesh-audit-trail-export": "dist/cli/audit-trail-export.js",
12
+ "probemesh-catalog-check": "dist/cli/catalog-check.js",
13
+ "probemesh-conformance": "dist/cli/provider-conformance.js",
14
+ "probemesh-dossier": "dist/cli/provider-dossier.js",
15
+ "probemesh-dossier-check": "dist/cli/provider-dossier-check.js",
16
+ "probemesh-init": "dist/cli/probemesh-init.js",
17
+ "probemesh-x402-accept": "dist/cli/x402-accept.js"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js",
23
+ "require": "./dist/index.cjs"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20.12.0"
31
+ },
32
+ "packageManager": "pnpm@10.33.0",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/ProbeMesh/sdk.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/ProbeMesh/sdk/issues"
39
+ },
40
+ "homepage": "https://probemesh.io",
41
+ "scripts": {
42
+ "accept:x402": "tsx src/cli/x402-accept.ts",
43
+ "build": "tsup",
44
+ "check:catalog": "tsx src/cli/catalog-check.ts",
45
+ "check:dossiers": "tsx src/cli/provider-dossier-check.ts",
46
+ "conformance:provider": "tsx src/cli/provider-conformance.ts",
47
+ "ci:release": "node scripts/ci-release-gate.mjs",
48
+ "dossier:provider": "tsx src/cli/provider-dossier.ts",
49
+ "dogfood:internal": "node scripts/internal-dogfood.mjs",
50
+ "export:audit-trail": "tsx src/cli/audit-trail-export.ts",
51
+ "example:audit-trail-export": "tsx examples/audit-trail-export.ts",
52
+ "example:call-audit-artifact": "tsx examples/call-audit-artifact.ts",
53
+ "example:catalog-policy-attestation": "tsx examples/catalog-policy-attestation.ts",
54
+ "example:catalog-backed-router": "tsx examples/catalog-backed-router.ts",
55
+ "example:dossier-backed-router": "tsx examples/dossier-backed-router.ts",
56
+ "example:dossier-import": "tsx examples/provider-dossier-import.ts",
57
+ "example:hosted-router": "tsx examples/hosted-router.ts",
58
+ "example:api-key-protocol": "tsx examples/api-key-protocol.ts",
59
+ "example:multi-provider-fallback": "tsx examples/multi-provider-fallback.ts",
60
+ "example:payment-options": "tsx examples/payment-options.ts",
61
+ "example:payment-strategy": "tsx examples/payment-strategy.ts",
62
+ "example:paid-price-lookup": "tsx examples/paid-price-lookup.ts",
63
+ "example:price": "tsx examples/price-lookup.ts",
64
+ "example:provider-catalog": "tsx examples/provider-catalog.ts",
65
+ "example:provider-conformance": "tsx examples/provider-conformance.ts",
66
+ "example:provider-kit": "tsx examples/provider-kit-price-lookup.ts",
67
+ "example:protocol-adapter": "tsx examples/protocol-adapter.ts",
68
+ "example:x402-evm-testnet": "tsx examples/x402-evm-testnet.ts",
69
+ "example:x402-acceptance": "tsx examples/x402-acceptance-harness.ts",
70
+ "example:x402-facilitator": "tsx examples/x402-facilitator.ts",
71
+ "example:x402-sandbox": "tsx examples/x402-sandbox.ts",
72
+ "release:beta:candidate": "node scripts/beta-release-candidate.mjs",
73
+ "release:beta:dry-run": "node scripts/beta-release-dry-run.mjs",
74
+ "release:beta:owner-check": "node scripts/beta-release-owner-check.mjs",
75
+ "release:beta:postpublish:verify": "node scripts/beta-postpublish-verify.mjs",
76
+ "release:verify": "node scripts/release-verify.mjs",
77
+ "smoke:consumer": "node scripts/consumer-install-smoke.mjs",
78
+ "smoke:dist": "node scripts/smoke-dist.mjs",
79
+ "smoke:templates": "node scripts/template-smoke-matrix.mjs",
80
+ "template:init": "tsx src/cli/probemesh-init.ts",
81
+ "test": "vitest run",
82
+ "typecheck": "tsc --noEmit"
83
+ },
84
+ "keywords": [
85
+ "agents",
86
+ "agent-commerce",
87
+ "api",
88
+ "audit",
89
+ "catalog",
90
+ "hosted-router",
91
+ "payments",
92
+ "provider-kit",
93
+ "sdk",
94
+ "probemesh",
95
+ "receipts",
96
+ "x402"
97
+ ],
98
+ "license": "MIT",
99
+ "devDependencies": {
100
+ "@types/node": "^20.12.12",
101
+ "tsup": "^8.0.2",
102
+ "tsx": "^4.15.7",
103
+ "typescript": "^5.4.5",
104
+ "vitest": "^1.6.0"
105
+ },
106
+ "dependencies": {
107
+ "@x402/core": "2.12.0",
108
+ "@x402/evm": "2.12.0",
109
+ "viem": "2.48.11"
110
+ }
111
+ }