@devlab.group/agent-commerce 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +115 -15
  2. package/dist/ap2.d.ts +24 -12
  3. package/dist/ap2.js +31 -13
  4. package/dist/ap2.js.map +1 -1
  5. package/dist/{chunk-DTKU3Z2M.js → chunk-3OTCFFFT.js} +37 -4
  6. package/dist/chunk-3OTCFFFT.js.map +1 -0
  7. package/dist/{chunk-QPV3EGJO.js → chunk-4K7FIBJM.js} +25 -4
  8. package/dist/chunk-4K7FIBJM.js.map +1 -0
  9. package/dist/{chunk-CXWC5LWM.js → chunk-FKQK5XZA.js} +652 -68
  10. package/dist/chunk-FKQK5XZA.js.map +1 -0
  11. package/dist/chunk-GA3O2A7R.js +92 -0
  12. package/dist/chunk-GA3O2A7R.js.map +1 -0
  13. package/dist/{chunk-WZW5ORZH.js → chunk-VUCMBGUR.js} +3 -3
  14. package/dist/{chunk-WZW5ORZH.js.map → chunk-VUCMBGUR.js.map} +1 -1
  15. package/dist/cli/{ap2-GWSP4LYY.js → ap2-YAPLERSC.js} +34 -15
  16. package/dist/cli/ap2-YAPLERSC.js.map +1 -0
  17. package/dist/cli/{chunk-G2JEY7MB.js → chunk-2J2IQQ4X.js} +8 -7
  18. package/dist/cli/chunk-2J2IQQ4X.js.map +1 -0
  19. package/dist/cli/chunk-2UPPX3FJ.js +311 -0
  20. package/dist/cli/chunk-2UPPX3FJ.js.map +1 -0
  21. package/dist/cli/{chunk-WYOGIANL.js → chunk-4H2QLHQI.js} +4 -4
  22. package/dist/cli/{chunk-WYOGIANL.js.map → chunk-4H2QLHQI.js.map} +1 -1
  23. package/dist/cli/{chunk-OZ4LAWBK.js → chunk-5R7DM5LM.js} +25 -4
  24. package/dist/cli/chunk-5R7DM5LM.js.map +1 -0
  25. package/dist/cli/chunk-663ALDZA.js +92 -0
  26. package/dist/cli/chunk-663ALDZA.js.map +1 -0
  27. package/dist/cli/{chunk-QQ3WY5L3.js → chunk-IDY2735M.js} +36 -104
  28. package/dist/cli/chunk-IDY2735M.js.map +1 -0
  29. package/dist/cli/chunk-JFVRG2HH.js +107 -0
  30. package/dist/cli/chunk-JFVRG2HH.js.map +1 -0
  31. package/dist/cli/chunk-M7NXVRU5.js +8 -0
  32. package/dist/cli/{chunk-ITWNSS2B.js.map → chunk-M7NXVRU5.js.map} +1 -1
  33. package/dist/cli/chunk-NIU5EMSB.js +119 -0
  34. package/dist/cli/chunk-NIU5EMSB.js.map +1 -0
  35. package/dist/cli/{chunk-TNMLDPUO.js → chunk-QA2OPHBF.js} +655 -70
  36. package/dist/cli/chunk-QA2OPHBF.js.map +1 -0
  37. package/dist/cli/{chunk-GJIMDMYT.js → chunk-QLUCNPRT.js} +404 -161
  38. package/dist/cli/chunk-QLUCNPRT.js.map +1 -0
  39. package/dist/cli/chunk-SYQLJXIU.js +105 -0
  40. package/dist/cli/chunk-SYQLJXIU.js.map +1 -0
  41. package/dist/cli/{chunk-3MGAJ5FX.js → chunk-VJ4EO4LE.js} +3 -3
  42. package/dist/cli/{chunk-3MGAJ5FX.js.map → chunk-VJ4EO4LE.js.map} +1 -1
  43. package/dist/cli/{chunk-PIMFPCNZ.js → chunk-Z34UMZBB.js} +234 -85
  44. package/dist/cli/chunk-Z34UMZBB.js.map +1 -0
  45. package/dist/cli/config-BWFMN2ZB.js +12 -0
  46. package/dist/cli/{config-UI4EDG4L.js.map → config-BWFMN2ZB.js.map} +1 -1
  47. package/dist/cli/index.js +258 -11
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/{mcp-PGBRWZVA.js → mcp-KZEMXLHR.js} +5 -4
  50. package/dist/cli/mcp-KZEMXLHR.js.map +1 -0
  51. package/dist/cli/{near-5AY3HWYF.js → near-U6365VFX.js} +15 -4
  52. package/dist/cli/near-U6365VFX.js.map +1 -0
  53. package/dist/cli/payment-providers-SZL36H3Y.js +6 -0
  54. package/dist/cli/payment-providers-SZL36H3Y.js.map +1 -0
  55. package/dist/cli/{provider-I2ESL6RS.js → provider-6TKB5ADJ.js} +26 -15
  56. package/dist/cli/provider-6TKB5ADJ.js.map +1 -0
  57. package/dist/cli/receipts-ZGLJWMQG.js +8 -0
  58. package/dist/cli/receipts-ZGLJWMQG.js.map +1 -0
  59. package/dist/cli/reconcile-IC22MJD5.js +4 -0
  60. package/dist/cli/reconcile-IC22MJD5.js.map +1 -0
  61. package/dist/cli/{run-JK4ERPJV.js → run-ZTYPQI4D.js} +151 -115
  62. package/dist/cli/run-ZTYPQI4D.js.map +1 -0
  63. package/dist/cli/svm-KDSPDFJG.js +48 -0
  64. package/dist/cli/svm-KDSPDFJG.js.map +1 -0
  65. package/dist/cli/{x402-7WBFZQXV.js → x402-WLYBLODI.js} +10 -9
  66. package/dist/cli/x402-WLYBLODI.js.map +1 -0
  67. package/dist/index.d.ts +112 -12
  68. package/dist/index.js +948 -157
  69. package/dist/index.js.map +1 -1
  70. package/dist/mcp.d.ts +1 -2
  71. package/dist/mcp.js +1 -1
  72. package/dist/mpp.js +20 -10
  73. package/dist/mpp.js.map +1 -1
  74. package/dist/{near-D6C42VPE.js → near-FH7HPZV3.js} +15 -4
  75. package/dist/near-FH7HPZV3.js.map +1 -0
  76. package/dist/{protocol-adapter-C9odYl6l.d.ts → protocol-adapter-DEXpdp8m.d.ts} +102 -48
  77. package/dist/{runtime-Cl_BLVZV.d.ts → runtime-Dz2fSO-P.d.ts} +220 -2
  78. package/dist/svm-KNC3PHMS.js +48 -0
  79. package/dist/svm-KNC3PHMS.js.map +1 -0
  80. package/dist/x402.js +5 -5
  81. package/package.json +1 -1
  82. package/dist/authorization-DjAecwuW.d.ts +0 -115
  83. package/dist/chunk-CXWC5LWM.js.map +0 -1
  84. package/dist/chunk-DTKU3Z2M.js.map +0 -1
  85. package/dist/chunk-KA2AX5FH.js +0 -44
  86. package/dist/chunk-KA2AX5FH.js.map +0 -1
  87. package/dist/chunk-QPV3EGJO.js.map +0 -1
  88. package/dist/cli/ap2-GWSP4LYY.js.map +0 -1
  89. package/dist/cli/chunk-G2JEY7MB.js.map +0 -1
  90. package/dist/cli/chunk-GJIMDMYT.js.map +0 -1
  91. package/dist/cli/chunk-ITWNSS2B.js +0 -8
  92. package/dist/cli/chunk-OSTCU6ZK.js +0 -44
  93. package/dist/cli/chunk-OSTCU6ZK.js.map +0 -1
  94. package/dist/cli/chunk-OZ4LAWBK.js.map +0 -1
  95. package/dist/cli/chunk-PIMFPCNZ.js.map +0 -1
  96. package/dist/cli/chunk-QQ3WY5L3.js.map +0 -1
  97. package/dist/cli/chunk-TNMLDPUO.js.map +0 -1
  98. package/dist/cli/config-UI4EDG4L.js +0 -11
  99. package/dist/cli/mcp-PGBRWZVA.js.map +0 -1
  100. package/dist/cli/near-5AY3HWYF.js.map +0 -1
  101. package/dist/cli/provider-I2ESL6RS.js.map +0 -1
  102. package/dist/cli/run-JK4ERPJV.js.map +0 -1
  103. package/dist/cli/svm-3MMYFPC7.js +0 -33
  104. package/dist/cli/svm-3MMYFPC7.js.map +0 -1
  105. package/dist/cli/x402-7WBFZQXV.js.map +0 -1
  106. package/dist/near-D6C42VPE.js.map +0 -1
  107. package/dist/svm-QEUAUNPQ.js +0 -33
  108. package/dist/svm-QEUAUNPQ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/env.ts","../../src/config/schema/values.ts","../../src/config/schema/acp.ts","../../src/config/schema/ap2.ts","../../src/config/schema/x402.ts","../../src/config/schema/mpp.ts","../../src/config/schema/raw.ts","../../src/config/schema/backend.ts","../../src/config/schema/resource-schema.ts","../../src/config/schema/resources.ts","../../src/config/schema/normalize.ts","../../src/config/schema/index.ts","../../src/config/load.ts"],"names":["path","options","fs","parseYaml"],"mappings":"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","file":"chunk-2J2IQQ4X.js","sourcesContent":["/**\n * `${VAR}` / `${VAR:-default}` substitution over a parsed YAML value.\n *\n * Only string leaves change; the caller coerces numeric and boolean strings\n * afterwards. `${VAR}` requires `VAR` in `env`, where an empty string counts as\n * present. `${VAR:-default}` uses `default` when `VAR` is absent or empty, as a\n * shell does. An unresolved placeholder fails config loading, so startup never\n * proceeds with a missing secret. There is no escape for a literal `${NAME}`.\n *\n * Anything else brace-shaped is refused, including nesting (`${A:-${B}}`) and\n * shell forms (`${VAR-x}`, `${VAR:=x}`, `${VAR:?x}`) that would otherwise load\n * as literal text: `adminToken: ${ADMIN_TOKEN-fallback}` would make that\n * literal the ledger credential. A bare `$VAR` is left alone, so values may\n * contain a dollar sign.\n *\n * The template rules are checked before substitution, and errors name the\n * variable and the config path, never a resolved value.\n */\nimport { CommerceError } from '../core';\nimport { isRecord } from '../core/is-record';\n\nconst PLACEHOLDER_PATTERN = /\\$\\{([A-Za-z_][A-Za-z0-9_]*)(:-([^}]*))?\\}/g;\n\n// An innermost brace token: `${`, then no braces, then `}`\nconst BRACE_TOKEN = /\\$\\{[^{}]*\\}/g;\n\n// PLACEHOLDER_PATTERN's grammar, anchored, for validating one token\nconst SUPPORTED_TOKEN = /^\\$\\{[A-Za-z_][A-Za-z0-9_]*(:-[^}]*)?\\}$/;\n\n// A placeholder whose default segment opens another placeholder\nconst NESTED_PLACEHOLDER = /\\$\\{[^{}]*\\$\\{/;\n\nexport function substituteEnv(value: unknown, env: NodeJS.ProcessEnv, path = '$'): unknown {\n if (typeof value === 'string') {\n return substituteString(value, env, path);\n }\n if (Array.isArray(value)) {\n return value.map((entry, index) => substituteEnv(entry, env, `${path}[${index}]`));\n }\n if (isRecord(value)) {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n result[key] = substituteEnv(entry, env, `${path}.${key}`);\n }\n return result;\n }\n return value;\n}\n\nfunction substituteString(value: string, env: NodeJS.ProcessEnv, path: string): string {\n assertTemplateIsSupported(value, path);\n return substituteOnce(value, env, path);\n}\n\n/**\n * Refuses a template this module cannot honor, before any substitution runs.\n *\n * For `${A:-${B}}`, `[^}]*` cannot span the inner `}`, so the match consumes\n * `${A:-${B` and leaves a stray `}`. With `A` set, substitution would succeed\n * and append that `}` to the value unnoticed, so `adminToken` would become a\n * credential the operator does not hold.\n */\nfunction assertTemplateIsSupported(value: string, path: string): void {\n if (NESTED_PLACEHOLDER.test(value)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" nests placeholders (e.g. \"\\${A:-\\${B}}\"), which is not supported: the inner one is not resolved and its closing brace ends up in the value. Use a plain default, or set the variable.`,\n { details: { path } },\n );\n }\n\n for (const [token] of value.matchAll(BRACE_TOKEN)) {\n if (SUPPORTED_TOKEN.test(token)) continue;\n // Quotes the token, not the value; before substitution it holds no secret\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" contains \"${token}\", which is not a supported placeholder. Only \"\\${VAR}\" and \"\\${VAR:-default}\" are recognized; shell forms such as \"\\${VAR-default}\", \"\\${VAR:=default}\" and \"\\${VAR:?message}\" would load as literal text.`,\n { details: { path, token } },\n );\n }\n}\n\nfunction substituteOnce(value: string, env: NodeJS.ProcessEnv, path: string): string {\n return value.replace(\n PLACEHOLDER_PATTERN,\n (_match, name: string, hasDefault: string | undefined, def: string | undefined) => {\n const envValue = env[name];\n\n if (hasDefault !== undefined) {\n if (envValue === undefined || envValue === '') return def ?? '';\n return envValue;\n }\n\n if (envValue === undefined) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Unresolved environment variable \"\\${${name}}\" referenced at config path \"${path}\"`,\n { details: { variable: name, path } },\n );\n }\n return envValue;\n },\n );\n}\n","// Readers for leaves that env substitution may have turned into strings, and addresses\nimport { CommerceError } from '../../core';\nimport { isEvmAddress, isEvmZeroAddress } from '../../payments/x402/addresses';\n\nexport function toNumber(\n value: number | string,\n path: string,\n bounds: { min?: number; max?: number } = {},\n): number {\n // Plain decimal digits only. `Number('')` is 0, which `server.port` accepts\n // (\"let the OS pick\"), so an empty `${PORT:-}` would bind a random port.\n // `Number` also accepts `\"0x50\"` and `\"1e3\"` for fields documented as decimal.\n if (typeof value === 'string' && !/^\\s*\\d+\\s*$/.test(value)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must be an integer written in decimal digits (got ${value === '' ? 'an empty string' : `\"${value}\"`})`,\n { details: { path } },\n );\n }\n const n = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(n) || !Number.isInteger(n)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must be an integer`,\n {\n details: { path },\n },\n );\n }\n if (bounds.min !== undefined && n < bounds.min) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must be >= ${bounds.min}`,\n {\n details: { path },\n },\n );\n }\n if (bounds.max !== undefined && n > bounds.max) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must be <= ${bounds.max}`,\n {\n details: { path },\n },\n );\n }\n return n;\n}\n\nexport function toBoolean(value: boolean | string, path: string): boolean {\n if (typeof value === 'boolean') return value;\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') return true;\n if (normalized === 'false') return false;\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must be a boolean (\"true\" or \"false\")`,\n { details: { path } },\n );\n}\n\nexport function validateAddress(path: string, value: string): void {\n if (!isEvmAddress(value)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" is not a plausible address (expected \"0x\" followed by 40 hex characters)`,\n { details: { path } },\n );\n }\n if (isEvmZeroAddress(value)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration value at \"${path}\" must not be the zero address`,\n {\n details: { path },\n },\n );\n }\n}\n","// The ACP checkout adapter's settings and its operation-to-resource mapping\nimport { CommerceError, type CommerceResource } from '../../core';\nimport { isRecord } from '../../core/is-record';\nimport {\n ACP_CHECKOUT_OPERATIONS,\n ACP_OPERATION_INPUT_KEYS,\n ACP_OPERATION_OPTIONAL_INPUT_KEYS,\n ACP_SESSION_ID_INPUT_KEY,\n type AcpCheckoutOperation,\n} from '../../protocols/acp/constants';\nimport type { RawConfig } from './raw';\nimport type { AcpProtocolConfig } from './types';\nimport { toBoolean, toNumber } from './values';\n\n// Applied when `protocols.acp` is absent or names no mount\nconst DEFAULT_ACP_MOUNT_PATH = '/acp';\n\n// Idempotency records must outlive ACP's 24-hour retry window, or a replayed\n// key could pass an expired record and run a checkout side effect twice. It is\n// both the default and the floor.\nconst ACP_RETENTION_HOURS = 24;\n\ntype RawAcp = NonNullable<RawConfig['protocols']['acp']>;\n\ntype EnabledAcpConfig = Extract<AcpProtocolConfig, { enabled: true }>;\n\nfunction acpInvalid(\n path: string,\n message: string,\n extra: Record<string, unknown> = {},\n): CommerceError {\n return new CommerceError('CONFIG_INVALID', message, { details: { path, ...extra } });\n}\n\nexport function normalizeAcp(raw: RawAcp | undefined): AcpProtocolConfig {\n const mountPath = raw?.mountPath ?? DEFAULT_ACP_MOUNT_PATH;\n if (raw === undefined || !toBoolean(raw.enabled, 'protocols.acp.enabled')) {\n return { enabled: false, mountPath };\n }\n\n if (raw.auth === undefined) {\n throw acpInvalid(\n 'protocols.acp.auth',\n 'protocols.acp.auth is required when ACP is enabled - every ACP checkout endpoint is authenticated, and \"bearer\" is the only scheme supported in this release',\n );\n }\n if (raw.idempotency === undefined) {\n throw acpInvalid(\n 'protocols.acp.idempotency',\n 'protocols.acp.idempotency is required when ACP is enabled - it names the SQLite file holding checkout idempotency records, and ACP makes the Idempotency-Key mandatory on every checkout POST',\n );\n }\n\n const discovery = raw.discovery;\n\n return {\n enabled: true,\n mountPath,\n auth: raw.auth,\n idempotency: {\n path: raw.idempotency.path,\n retentionHours: toNumber(\n raw.idempotency.retentionHours ?? ACP_RETENTION_HOURS,\n 'protocols.acp.idempotency.retentionHours',\n { min: ACP_RETENTION_HOURS },\n ),\n merchantIdempotent: raw.idempotency.merchantIdempotent ?? false,\n },\n checkout: { operations: normalizeAcpOperations(raw.checkout) },\n // Built key by key so absent metadata stays absent rather than `undefined`\n ...(discovery !== undefined\n ? {\n discovery: {\n ...(discovery.documentationUrl !== undefined\n ? { documentationUrl: discovery.documentationUrl }\n : {}),\n ...(discovery.supportedCurrencies !== undefined\n ? { supportedCurrencies: discovery.supportedCurrencies }\n : {}),\n ...(discovery.supportedLocales !== undefined\n ? { supportedLocales: discovery.supportedLocales }\n : {}),\n ...(discovery.interventionTypes !== undefined\n ? { interventionTypes: discovery.interventionTypes }\n : {}),\n },\n }\n : {}),\n };\n}\n\n// All five operations, each on its own resource. ACP discovery advertises\n// `checkout` as one service, so a partial mapping is refused. Operations differ\n// in method, input and success status, so one resource cannot serve two.\nfunction normalizeAcpOperations(\n checkout: RawAcp['checkout'],\n): Readonly<Record<AcpCheckoutOperation, string>> {\n const configured: Record<string, string> = checkout?.operations ?? {};\n\n for (const key of Object.keys(configured)) {\n if (!(ACP_CHECKOUT_OPERATIONS as readonly string[]).includes(key)) {\n throw acpInvalid(\n `protocols.acp.checkout.operations.${key}`,\n `protocols.acp.checkout.operations names unknown ACP checkout operation \"${key}\". Supported: ${ACP_CHECKOUT_OPERATIONS.join(', ')}.`,\n );\n }\n }\n\n const operations: Record<string, string> = {};\n const claimedBy = new Map<string, AcpCheckoutOperation>();\n for (const operation of ACP_CHECKOUT_OPERATIONS) {\n const path = `protocols.acp.checkout.operations.${operation}`;\n const resourceId = configured[operation];\n if (resourceId === undefined) {\n throw acpInvalid(\n path,\n `${path} is required when ACP is enabled - all five checkout operations must be mapped, since ACP discovery advertises the checkout service as a whole`,\n );\n }\n const claimed = claimedBy.get(resourceId);\n if (claimed !== undefined) {\n throw acpInvalid(\n path,\n `${path} maps resource \"${resourceId}\", which is already mapped to \"${claimed}\" - each ACP checkout operation needs its own resource`,\n { resourceId },\n );\n }\n claimedBy.set(resourceId, operation);\n operations[operation] = resourceId;\n }\n return operations as Record<AcpCheckoutOperation, string>;\n}\n\nexport function validateAcpCheckoutMapping(\n acp: EnabledAcpConfig,\n resources: readonly CommerceResource[],\n): void {\n const byId = new Map(resources.map((resource) => [resource.id, resource]));\n\n for (const operation of ACP_CHECKOUT_OPERATIONS) {\n const resourceId = acp.checkout.operations[operation];\n const path = `protocols.acp.checkout.operations.${operation}`;\n const resource = byId.get(resourceId);\n if (resource === undefined) {\n throw acpInvalid(\n path,\n `${path} maps resource \"${resourceId}\", which is not defined under \"resources\"`,\n { resourceId },\n );\n }\n if (!resource.exposedVia.includes('acp')) {\n throw acpInvalid(\n path,\n `Resource \"${resourceId}\" implements ACP operation \"${operation}\" but does not list \"acp\" in its expose - the mapping says which resource serves the operation, expose says ACP may invoke it, and both are required`,\n { resourceId },\n );\n }\n // ACP checkout carries the merchant's own purchase payment (`payment_data`\n // on completion), and ACP has no wire form for our payment-required\n // outcome, so the invocation itself must be free\n if (resource.pricing.type !== 'free' || resource.paymentMethods.length > 0) {\n throw acpInvalid(\n path,\n `Resource \"${resourceId}\" implements ACP operation \"${operation}\" and must use pricing.type \"free\" with no \"payments\" - ACP checkout carries the merchant's own purchase payment, so the gateway does not also charge for the invocation`,\n { resourceId },\n );\n }\n validateAcpOperationInput(path, operation, resource);\n }\n}\n\n// A schema that forbids a key the adapter sends, or requires one it may not\n// send, fails requests with INPUT_INVALID. Refused at load instead. An optional\n// key counts as sent: a closed cancel schema without `body` would pass a bare\n// cancel and refuse every one that carries `intent_trace`. Normalization has\n// already closed every object node that omits additionalProperties, so the\n// check also looks inside `path` and `body`: a bare `body: { type: object }`\n// arrives here accepting no key at all.\nfunction validateAcpOperationInput(\n path: string,\n operation: AcpCheckoutOperation,\n resource: CommerceResource,\n): void {\n const schema = resource.inputSchema;\n if (schema === undefined) return;\n const keys: readonly string[] = ACP_OPERATION_INPUT_KEYS[operation];\n const optionalKeys: readonly string[] = ACP_OPERATION_OPTIONAL_INPUT_KEYS[operation] ?? [];\n const sent = [...keys, ...optionalKeys];\n\n const topLevel = closedObjectProperties(schema);\n if (topLevel !== undefined) {\n for (const key of sent) {\n if (!Object.hasOwn(topLevel, key)) {\n const when = keys.includes(key) ? 'always sends' : 'sends when the caller supplies it';\n throw acpInvalid(\n path,\n `Resource \"${resource.id}\" implements ACP operation \"${operation}\" but its input schema sets additionalProperties: false without declaring \"${key}\", which the adapter ${when} for this operation`,\n { resourceId: resource.id },\n );\n }\n }\n }\n\n const declared = isRecord(schema['properties']) ? schema['properties'] : {};\n const pathKeys = closedObjectProperties(declared['path']);\n if (\n sent.includes('path') &&\n pathKeys !== undefined &&\n !Object.hasOwn(pathKeys, ACP_SESSION_ID_INPUT_KEY)\n ) {\n throw acpInvalid(\n path,\n `Resource \"${resource.id}\" implements ACP operation \"${operation}\" but its \"path\" schema sets additionalProperties: false without declaring \"${ACP_SESSION_ID_INPUT_KEY}\", which the adapter always sends inside \"path\"`,\n { resourceId: resource.id },\n );\n }\n const bodyKeys = closedObjectProperties(declared['body']);\n if (sent.includes('body') && bodyKeys !== undefined && Object.keys(bodyKeys).length === 0) {\n throw acpInvalid(\n path,\n `Resource \"${resource.id}\" implements ACP operation \"${operation}\" but its \"body\" schema accepts no keys, so it refuses every ACP document. Config load closes an object schema that omits additionalProperties: declare body as { type: object, additionalProperties: true }`,\n { resourceId: resource.id },\n );\n }\n\n const required = schema['required'];\n if (Array.isArray(required)) {\n for (const entry of required) {\n if (typeof entry === 'string' && !keys.includes(entry)) {\n throw acpInvalid(\n path,\n `Resource \"${resource.id}\" implements ACP operation \"${operation}\" but its input schema requires \"${entry}\", which that operation does not always supply (it always sends: ${keys.join(', ')})`,\n { resourceId: resource.id },\n );\n }\n }\n }\n}\n\n// The declared properties of a closed object schema, or undefined when the\n// schema accepts keys it does not declare\nfunction closedObjectProperties(schema: unknown): Record<string, unknown> | undefined {\n if (!isRecord(schema) || schema['additionalProperties'] !== false) return undefined;\n return isRecord(schema['properties']) ? schema['properties'] : {};\n}\n","// AP2 mandate verification settings and each resource's authorization requirement\nimport type { z } from 'zod';\nimport {\n AP2_DEFAULT_CLOCK_SKEW_SECONDS,\n AP2_JWK_COORDINATE_BYTES,\n AP2_JWK_CURVE,\n AP2_JWK_MEMBERS,\n AP2_KEY_TYPE,\n AP2_MAX_CLOCK_SKEW_SECONDS,\n AP2_MODES,\n AP2_SIGNING_ALGORITHM,\n AP2_SPEC_VERSION,\n} from '../../authorization/ap2/constants';\nimport type {\n Ap2AuthorizationConfig,\n Ap2Mode,\n Ap2TrustedIssuer,\n} from '../../authorization/ap2/types';\nimport {\n type AuthorizationMethodName,\n CommerceError,\n type CommerceResource,\n type Pricing,\n} from '../../core';\nimport type { Ap2IssuerSchema, RawConfig, RawResourceEntry } from './raw';\nimport type { AcpProtocolConfig } from './types';\nimport { toBoolean, toNumber } from './values';\n\nconst SUPPORTED_AUTHORIZATION_METHODS: ReadonlySet<string> = new Set(['ap2']);\n\ntype RawAp2 = NonNullable<NonNullable<RawConfig['authorization']>['ap2']>;\n\nfunction ap2Invalid(\n path: string,\n message: string,\n extra: Record<string, unknown> = {},\n): CommerceError {\n return new CommerceError('CONFIG_INVALID', message, { details: { path, ...extra } });\n}\n\nexport function normalizeAp2(raw: RawAp2 | undefined): Ap2AuthorizationConfig | undefined {\n if (raw === undefined) return undefined;\n if (!toBoolean(raw.enabled, 'authorization.ap2.enabled')) return { enabled: false };\n\n const specVersion = raw.specVersion ?? AP2_SPEC_VERSION;\n if (specVersion !== AP2_SPEC_VERSION) {\n throw ap2Invalid(\n 'authorization.ap2.specVersion',\n `authorization.ap2.specVersion \"${specVersion}\" is not supported - this gateway verifies against the tagged AP2 release ${AP2_SPEC_VERSION} only`,\n );\n }\n\n const mode = raw.mode ?? AP2_MODES[0];\n if (!(AP2_MODES as readonly string[]).includes(mode)) {\n throw ap2Invalid(\n 'authorization.ap2.mode',\n `authorization.ap2.mode \"${mode}\" is not supported. Supported: ${AP2_MODES.join(', ')}. Autonomous mode needs open mandates, agent key binding and constraint evaluation, none of which this release implements.`,\n );\n }\n\n if (raw.replay === undefined) {\n throw ap2Invalid(\n 'authorization.ap2.replay',\n 'authorization.ap2.replay is required when AP2 is enabled - it names the SQLite file recording which mandates have been spent, and without it a verified mandate could authorize a second settlement',\n );\n }\n\n const mandateIssuers = normalizeIssuers(\n raw.trust?.mandateIssuers,\n 'authorization.ap2.trust.mandateIssuers',\n );\n const checkoutIssuers = normalizeIssuers(\n raw.trust?.checkoutIssuers,\n 'authorization.ap2.trust.checkoutIssuers',\n );\n\n return {\n enabled: true,\n specVersion: AP2_SPEC_VERSION,\n mode: mode as Ap2Mode,\n trust: { mandateIssuers, checkoutIssuers },\n clockSkewSeconds: toNumber(\n raw.clockSkewSeconds ?? AP2_DEFAULT_CLOCK_SKEW_SECONDS,\n 'authorization.ap2.clockSkewSeconds',\n { min: 0, max: AP2_MAX_CLOCK_SKEW_SECONDS },\n ),\n requireMandateAudience: toBoolean(\n raw.requireMandateAudience ?? false,\n 'authorization.ap2.requireMandateAudience',\n ),\n requireMandateExpiry: toBoolean(\n raw.requireMandateExpiry ?? false,\n 'authorization.ap2.requireMandateExpiry',\n ),\n replay: { path: raw.replay.path },\n };\n}\n\n// Both issuer lists must be non-empty when AP2 is on: verification checks the\n// issuer's signature over the Checkout Mandate and the merchant's over the\n// checkout JWT it binds. An empty list would fail every mandate at request\n// time instead of at load.\nfunction normalizeIssuers(\n raw: readonly z.infer<typeof Ap2IssuerSchema>[] | undefined,\n path: string,\n): readonly Ap2TrustedIssuer[] {\n if (raw === undefined || raw.length === 0) {\n throw ap2Invalid(\n path,\n `${path} is required when AP2 is enabled and must name at least one issuer - trust is operator-configured and static, so an empty list means no mandate can ever verify`,\n );\n }\n\n const seen = new Set<string>();\n return raw.map((entry, index) => {\n const entryPath = `${path}.${index}`;\n if (seen.has(entry.issuer)) {\n throw ap2Invalid(\n `${entryPath}.issuer`,\n `${entryPath}.issuer \"${entry.issuer}\" is listed twice - key lookup resolves by issuer, so a second entry for the same one is silently unreachable. Merge the keys into one entry instead (which is also how a rotation overlaps an old and a new key).`,\n { issuer: entry.issuer },\n );\n }\n seen.add(entry.issuer);\n\n const kids = new Set<string>();\n const keys = entry.keys.map((key, keyIndex) => {\n const keyPath = `${entryPath}.keys.${keyIndex}`;\n if (kids.has(key.kid)) {\n throw ap2Invalid(\n `${keyPath}.kid`,\n `${keyPath}.kid \"${key.kid}\" is listed twice for issuer \"${entry.issuer}\" - a kid selects exactly one key, so which of the two verifies a signature would be undefined`,\n { issuer: entry.issuer, kid: key.kid },\n );\n }\n kids.add(key.kid);\n return { kid: key.kid, jwk: validateJwk(key.jwk, key.kid, keyPath) };\n });\n\n return { issuer: entry.issuer, audience: entry.audience, keys };\n });\n}\n\n// Accepts only a public P-256 key. Every member is checked at load rather than\n// by the JOSE library at the first purchase, so a bad key fails the deploy\n// instead of a buyer's valid mandate.\nfunction validateJwk(\n jwk: Record<string, unknown>,\n kid: string,\n path: string,\n): Readonly<Record<string, string>> {\n const fail = (detail: string): never => {\n throw ap2Invalid(`${path}.jwk`, `${path}.jwk (kid \"${kid}\") ${detail}`, { kid });\n };\n\n for (const member of Object.keys(jwk)) {\n if ((AP2_JWK_MEMBERS as readonly string[]).includes(member)) continue;\n // `d` (an EC private scalar) or `k` (a symmetric key) means signing\n // material was pasted where only verification material belongs, which the\n // operator needs to hear about specifically\n if (member === 'd' || member === 'k') {\n fail(\n `carries private key material (\"${member}\"). The gateway verifies signatures and never produces them; publish only the public half. Treat the pasted key as compromised and rotate it.`,\n );\n }\n fail(\n `has unsupported member \"${member}\". Allowed: ${AP2_JWK_MEMBERS.join(', ')}. Members naming a URL are refused on purpose - keys are configured inline and never fetched.`,\n );\n }\n\n const value = (member: string): string => {\n const raw = jwk[member];\n if (typeof raw !== 'string' || raw.length === 0) {\n fail(`must give \"${member}\" as a non-empty string`);\n }\n return raw as string;\n };\n\n if (value('kty') !== AP2_KEY_TYPE) {\n fail(\n `must have kty \"${AP2_KEY_TYPE}\" (got \"${value('kty')}\") - ${AP2_SIGNING_ALGORITHM} is the only accepted algorithm`,\n );\n }\n if (value('crv') !== AP2_JWK_CURVE) {\n fail(\n `must be on curve \"${AP2_JWK_CURVE}\" (got \"${value('crv')}\") - ${AP2_SIGNING_ALGORITHM} is the only accepted algorithm`,\n );\n }\n for (const coordinate of ['x', 'y'] as const) {\n const encoded = value(coordinate);\n if (!/^[A-Za-z0-9_-]+$/.test(encoded)) {\n fail(`coordinate \"${coordinate}\" is not base64url (no padding, no \"+\" or \"/\")`);\n }\n if (Buffer.from(encoded, 'base64url').length !== AP2_JWK_COORDINATE_BYTES) {\n fail(\n `coordinate \"${coordinate}\" decodes to ${Buffer.from(encoded, 'base64url').length} bytes; a ${AP2_JWK_CURVE} coordinate is ${AP2_JWK_COORDINATE_BYTES}`,\n );\n }\n }\n if (jwk['alg'] !== undefined && value('alg') !== AP2_SIGNING_ALGORITHM) {\n fail(`declares alg \"${value('alg')}\"; only ${AP2_SIGNING_ALGORITHM} is accepted`);\n }\n if (jwk['use'] !== undefined && value('use') !== 'sig') {\n fail(`declares use \"${value('use')}\"; a verification key must be \"sig\"`);\n }\n if (jwk['kid'] !== undefined && value('kid') !== kid) {\n fail(`declares kid \"${value('kid')}\", which disagrees with the configured kid \"${kid}\"`);\n }\n\n const normalized: Record<string, string> = {};\n for (const member of AP2_JWK_MEMBERS) {\n if (jwk[member] !== undefined) normalized[member] = value(member);\n }\n return normalized;\n}\n\n// The AP2 replay store gets its own SQLite file. Reserved mandates, payment\n// attempts and ACP idempotency records have different schemas and retention\n// rules, and a shared file means a migration conflict at startup or a shared\n// write lock on the settlement path.\nexport function validateReplayStoreIsolated(\n replayPath: string,\n receiptsPath: string,\n acp: AcpProtocolConfig,\n): void {\n // Every `:memory:` handle is its own private database, so equal strings do\n // not collide\n if (replayPath === ':memory:') return;\n\n const others: [string, string][] = [['storage.receipts.path', receiptsPath]];\n if (acp.enabled) others.push(['protocols.acp.idempotency.path', acp.idempotency.path]);\n\n for (const [otherPath, other] of others) {\n if (replayPath !== other) continue;\n throw ap2Invalid(\n 'authorization.ap2.replay.path',\n `authorization.ap2.replay.path is the same file as ${otherPath} (\"${replayPath}\") - the AP2 replay store keeps its own schema and must not share a database with another store`,\n );\n }\n}\n\n// Resolves a resource's `authorization.required` list against the configured\n// provider. A requirement that cannot be enforced is refused: the resource\n// would look protected in config and settle unprotected.\nexport function normalizeResourceAuthorization(\n id: string,\n entry: RawResourceEntry,\n pricing: Pricing,\n ap2: Ap2AuthorizationConfig | undefined,\n): CommerceResource['authorization'] | undefined {\n const required = entry.authorization?.required;\n if (required === undefined) return undefined;\n\n const path = `resources.${id}.authorization.required`;\n const methods: AuthorizationMethodName[] = [];\n for (const method of required) {\n if (!SUPPORTED_AUTHORIZATION_METHODS.has(method)) {\n throw ap2Invalid(\n path,\n `Resource \"${id}\" requires unsupported authorization method \"${method}\". Supported: ${[...SUPPORTED_AUTHORIZATION_METHODS].join(', ')}.`,\n { resourceId: id, method },\n );\n }\n if (methods.includes(method as AuthorizationMethodName)) {\n throw ap2Invalid(path, `Resource \"${id}\" lists authorization method \"${method}\" twice`, {\n resourceId: id,\n method,\n });\n }\n if (method === 'ap2' && (ap2 === undefined || !ap2.enabled)) {\n throw ap2Invalid(\n path,\n `Resource \"${id}\" requires authorization method \"ap2\", which is not configured or not enabled under authorization.ap2`,\n { resourceId: id, method },\n );\n }\n methods.push(method as AuthorizationMethodName);\n }\n\n // A mandate binds an exact amount and currency and never unlocks a resource\n // by itself, so it only means something on a fixed-price resource\n if (pricing.type !== 'fixed') {\n throw ap2Invalid(\n path,\n `Resource \"${id}\" requires authorization but its pricing is \"${pricing.type}\" - authorization proves a purchase was approved and never replaces payment, so it applies to fixed-price paid resources only in this release`,\n { resourceId: id },\n );\n }\n\n return { required: methods };\n}\n","// The x402 rail: direct or listed options, declared networks and the facilitator\nimport type { z } from 'zod';\nimport { CommerceError } from '../../core';\nimport { resolveX402Deployment, type X402FacilitatorConfig } from '../../payments/x402/guardrails';\nimport {\n type CustomNetworkDeclaration,\n findX402Network,\n validateCustomNetworks,\n} from '../../payments/x402/networks';\nimport { resolveX402Option, type X402OptionInput } from '../../payments/x402/options';\nimport { X402_DEFAULT_PAYMENT_FLOW } from '../../payments/x402/payment-flow';\nimport type { FacilitatorSchema, RawConfig } from './raw';\nimport type { GatewayConfig, X402OptionConfig } from './types';\nimport { toBoolean, toNumber } from './values';\n\ntype X402Config = NonNullable<GatewayConfig['payments']['x402']>;\n\n// One offer list: the rail's options or a resource's own accepts\nexport interface X402OfferTerms {\n /** Every option, resolved, in order */\n readonly options: readonly X402OptionConfig[];\n /**\n * Default symbols for options omitting `asset`; prices must use USD or\n * the shared symbol\n */\n readonly defaultAssetSymbols: readonly string[];\n}\n\nexport interface NormalizedX402 extends X402OfferTerms {\n readonly config: X402Config;\n /** Resources with their own `x402.accepts`, by id; each replaces the rail's options */\n readonly resources: Readonly<Record<string, X402OfferTerms>>;\n}\n\nfunction x402Invalid(message: string, path: string): CommerceError {\n return new CommerceError('CONFIG_INVALID', message, { details: { path } });\n}\n\n// The fields of one option, as they appear directly under `payments.x402`\nconst DIRECT_OPTION_FIELDS = [\n 'network',\n 'payTo',\n 'asset',\n 'assetName',\n 'assetVersion',\n 'assetDecimals',\n 'assetTransferMethod',\n] as const;\n\ntype RawX402 = NonNullable<RawConfig['payments']['x402']>;\n\n// An entry of `options`, or `payments.x402` itself in the direct form\ninterface RawX402Option {\n readonly scheme?: string | undefined;\n readonly network?: string | undefined;\n readonly payTo?: string | undefined;\n readonly asset?: string | undefined;\n readonly assetName?: string | undefined;\n readonly assetVersion?: string | undefined;\n readonly assetDecimals?: number | string | undefined;\n readonly assetTransferMethod?: string | undefined;\n}\n\nfunction x402OptionInput(raw: RawX402Option, path: string): X402OptionInput {\n return {\n ...(raw.scheme !== undefined ? { scheme: raw.scheme } : {}),\n network: raw.network as string,\n payTo: raw.payTo as string,\n ...(raw.asset !== undefined ? { asset: raw.asset } : {}),\n ...(raw.assetName !== undefined ? { assetName: raw.assetName } : {}),\n ...(raw.assetVersion !== undefined ? { assetVersion: raw.assetVersion } : {}),\n ...(raw.assetTransferMethod !== undefined\n ? { assetTransferMethod: raw.assetTransferMethod }\n : {}),\n ...(raw.assetDecimals !== undefined\n ? {\n assetDecimals: toNumber(raw.assetDecimals, `${path}.assetDecimals`, { min: 0, max: 36 }),\n }\n : {}),\n };\n}\n\n/**\n * Resolves direct `payments.x402` fields like a one-entry `options` array,\n * preserving config form. Resource `x402.accepts` uses the same resolution\n * and rail-level networks, RPC endpoints, facilitator and mainnet settings.\n */\nexport function normalizeX402(raw: RawX402, resources: RawConfig['resources']): NormalizedX402 {\n const at = 'payments.x402';\n const direct = DIRECT_OPTION_FIELDS.filter((field) => raw[field] !== undefined);\n if (raw.options !== undefined && direct.length > 0) {\n throw x402Invalid(\n `${at}: give the option either under ${at}.options or directly (${direct.join(', ')}), not both`,\n `${at}.options`,\n );\n }\n if (raw.options?.length === 0) {\n throw x402Invalid(`${at}.options is empty; list at least one option`, `${at}.options`);\n }\n if (raw.options === undefined) {\n for (const field of ['network', 'payTo'] as const) {\n if (raw[field] === undefined) {\n throw x402Invalid(\n `${at}.${field} is required, unless the options are listed under ${at}.options`,\n `${at}.${field}`,\n );\n }\n }\n }\n\n // `kind` and `displayName` declare a network; `rpcUrl` alone sets the\n // endpoint of a built-in or declared one\n const settings = raw.networks ?? {};\n const declared: Record<string, CustomNetworkDeclaration> = {};\n for (const [id, entry] of Object.entries(settings)) {\n if (entry.kind === undefined && entry.displayName === undefined) continue;\n if (entry.kind === undefined || entry.displayName === undefined) {\n const path = `${at}.networks.${id}`;\n throw x402Invalid(`${path}: declaring a network needs both kind and displayName`, path);\n }\n declared[id] = { kind: entry.kind, displayName: entry.displayName };\n }\n const networks = Object.keys(declared).length > 0 ? declared : undefined;\n if (networks !== undefined) validateCustomNetworks(networks, `${at}.networks`);\n for (const id of Object.keys(settings)) {\n if (!findX402Network(id, networks)) {\n const path = `${at}.networks.${id}`;\n throw x402Invalid(\n `${path}: \"${id}\" is not a known network; declare it with kind and displayName`,\n path,\n );\n }\n }\n\n const facilitator = normalizeFacilitator(raw.facilitator);\n const allowMainnet =\n raw.allowMainnet !== undefined ? toBoolean(raw.allowMainnet, `${at}.allowMainnet`) : undefined;\n const allowUnauthenticatedFacilitator =\n raw.allowUnauthenticatedFacilitator !== undefined\n ? toBoolean(raw.allowUnauthenticatedFacilitator, `${at}.allowUnauthenticatedFacilitator`)\n : undefined;\n\n // Shared by every list, so the rail and its resources use one RPC endpoint\n // per network and one deployment mode\n const rpcOwners = new Map<string, string>();\n let firstMode: string | undefined;\n const resolveList = (entries: readonly (readonly [string, RawX402Option])[]): X402OfferTerms => {\n const resolved = entries.map(([path, entry]) =>\n resolveX402Option(x402OptionInput(entry, path), path, networks),\n );\n const seen = new Set<string>();\n const options = resolved.map((option, i): X402OptionConfig => {\n const path = entries[i]?.[0] as string;\n const network = option.network.id;\n // Require distinct RPC endpoints so each network's health check reads its chain\n const rpcUrl = settings[network]?.rpcUrl ?? raw.rpcUrl;\n if (rpcUrl === undefined) {\n throw x402Invalid(\n `${path}.network: no RPC endpoint for ${network}; set ${at}.rpcUrl or ${at}.networks.${network}.rpcUrl`,\n `${at}.rpcUrl`,\n );\n }\n // Parsed, so `https://rpc.example` and `https://rpc.example/` are one endpoint\n const endpoint = new URL(rpcUrl).href;\n const owner = rpcOwners.get(endpoint);\n if (owner !== undefined && owner !== network) {\n throw x402Invalid(\n `${at}: ${owner} and ${network} would use the same RPC endpoint; give each network its own ${at}.networks.<id>.rpcUrl`,\n `${at}.networks`,\n );\n }\n rpcOwners.set(endpoint, network);\n\n // EVM addresses compare case-insensitively; Solana and NEAR exactly\n const comparable = (value: string) =>\n option.network.family === 'evm' ? value.toLowerCase() : value;\n const key = `${network}|${comparable(option.asset)}|${comparable(option.payTo)}`;\n if (seen.has(key)) {\n throw x402Invalid(\n `${path}: repeats an earlier option, the same asset to the same payTo on ${network}`,\n path,\n );\n }\n seen.add(key);\n\n // The provider makes the same call at construction; running it here lets\n // `agent-commerce validate` report an unsafe deployment before boot\n const { mode } = resolveX402Deployment({\n network,\n payTo: option.payTo,\n asset: option.asset,\n ...(option.assetName !== undefined ? { assetName: option.assetName } : {}),\n ...(option.assetVersion !== undefined ? { assetVersion: option.assetVersion } : {}),\n facilitator,\n ...(allowMainnet !== undefined ? { allowMainnet } : {}),\n ...(allowUnauthenticatedFacilitator !== undefined\n ? { allowUnauthenticatedFacilitator }\n : {}),\n ...(networks !== undefined ? { customNetworks: networks } : {}),\n // resolveX402Option required the token's own metadata\n allowOtherEvmToken: true,\n });\n // Keep all offers in one deployment mode: local, testnet or mainnet\n if (firstMode !== undefined && mode !== firstMode) {\n throw x402Invalid(\n `${path}.network: ${network} is a ${mode} network, but the first option is on a ${firstMode} one; every option must be on the same kind of network`,\n `${path}.network`,\n );\n }\n firstMode = mode;\n\n return {\n network,\n rpcUrl,\n asset: option.asset,\n ...(option.assetName !== undefined ? { assetName: option.assetName } : {}),\n ...(option.assetVersion !== undefined ? { assetVersion: option.assetVersion } : {}),\n assetDecimals: option.assetDecimals,\n payTo: option.payTo,\n ...(option.assetTransferMethod === 'permit2'\n ? { assetTransferMethod: 'permit2' as const }\n : {}),\n };\n });\n return {\n options,\n defaultAssetSymbols: [\n ...new Set(resolved.flatMap((option) => option.defaultAssetSymbol ?? [])),\n ],\n };\n };\n\n const rail = resolveList(\n raw.options !== undefined\n ? raw.options.map((option, i) => [`${at}.options[${i}]`, option] as const)\n : [[at, raw]],\n );\n const resourceTerms: Record<string, X402OfferTerms> = {};\n for (const [id, entry] of Object.entries(resources)) {\n const accepts = entry.x402?.accepts;\n if (accepts === undefined) continue;\n const path = `resources.${id}.x402.accepts`;\n if (accepts.length === 0) {\n throw x402Invalid(`${path} is empty; list at least one option`, path);\n }\n resourceTerms[id] = resolveList(accepts.map((option, i) => [`${path}[${i}]`, option] as const));\n }\n const options = rail.options;\n const first = options[0] as X402OptionConfig;\n const resourceOptions = Object.fromEntries(\n Object.entries(resourceTerms).map(([id, terms]) => [id, terms.options]),\n );\n\n // The provider validates the private key and derives the issuer at construction,\n // keeping viem out of config loading\n let quote: X402Config['quote'];\n if (raw.quote !== undefined && toBoolean(raw.quote.enabled, `${at}.quote.enabled`)) {\n if (raw.quote.signerPrivateKey === undefined) {\n throw x402Invalid(\n `${at}.quote.signerPrivateKey is required when quotes are enabled`,\n `${at}.quote.signerPrivateKey`,\n );\n }\n quote = { signerPrivateKey: raw.quote.signerPrivateKey };\n }\n\n const config: X402Config = {\n enabled: toBoolean(raw.enabled, `${at}.enabled`),\n ...first,\n maxTimeoutSeconds: toNumber(raw.maxTimeoutSeconds, `${at}.maxTimeoutSeconds`, { min: 1 }),\n paymentFlow: raw.paymentFlow ?? X402_DEFAULT_PAYMENT_FLOW,\n facilitator,\n ...(allowMainnet !== undefined ? { allowMainnet } : {}),\n ...(allowUnauthenticatedFacilitator !== undefined ? { allowUnauthenticatedFacilitator } : {}),\n ...(networks !== undefined ? { networks } : {}),\n options,\n ...(Object.keys(resourceOptions).length > 0 ? { resourceOptions } : {}),\n ...(quote !== undefined ? { quote } : {}),\n };\n\n return { config, ...rail, resources: resourceTerms };\n}\n\nexport function normalizeFacilitator(\n raw: z.infer<typeof FacilitatorSchema>,\n): X402FacilitatorConfig {\n return raw.mode === 'local'\n ? { mode: 'local', signerPrivateKey: raw.signerPrivateKey }\n : { mode: 'remote', url: raw.url, auth: raw.auth ?? { type: 'none' } };\n}\n","// The MPP rail's settings\nimport { CommerceError } from '../../core';\nimport {\n isMppNetwork,\n MPP_DEFAULT_NETWORK,\n MPP_DEFAULT_PAYMENT_FLOW,\n MPP_MIN_CHALLENGE_SECRET_LENGTH,\n MPP_NETWORKS,\n} from '../../payments/mpp/constants';\nimport { resolveX402Deployment } from '../../payments/x402/guardrails';\nimport type { RawConfig } from './raw';\nimport type { GatewayConfig } from './types';\nimport { toBoolean, toNumber, validateAddress } from './values';\nimport { normalizeFacilitator } from './x402';\n\nexport type NormalizedMpp = NonNullable<GatewayConfig['payments']['mpp']>;\n\nexport function normalizeMpp(raw: RawConfig['payments']['mpp']): NormalizedMpp | undefined {\n if (raw === undefined) return undefined;\n const network = raw.network ?? MPP_DEFAULT_NETWORK;\n if (!isMppNetwork(network)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `payments.mpp.network must be one of ${MPP_NETWORKS.join(', ')}`,\n { details: { path: 'payments.mpp.network' } },\n );\n }\n const mpp: NormalizedMpp = {\n enabled: toBoolean(raw.enabled, 'payments.mpp.enabled'),\n network,\n rpcUrl: raw.rpcUrl,\n asset: raw.asset,\n assetName: raw.assetName,\n assetVersion: raw.assetVersion,\n recipient: raw.recipient,\n realm: raw.realm,\n challengeSecret: raw.challengeSecret,\n ...(raw.challengeTtlSeconds !== undefined\n ? {\n challengeTtlSeconds: toNumber(\n raw.challengeTtlSeconds,\n 'payments.mpp.challengeTtlSeconds',\n { min: 1 },\n ),\n }\n : {}),\n paymentFlow: raw.paymentFlow ?? MPP_DEFAULT_PAYMENT_FLOW,\n facilitator: normalizeFacilitator(raw.facilitator),\n ...(raw.allowMainnet !== undefined\n ? { allowMainnet: toBoolean(raw.allowMainnet, 'payments.mpp.allowMainnet') }\n : {}),\n ...(raw.allowUnauthenticatedFacilitator !== undefined\n ? {\n allowUnauthenticatedFacilitator: toBoolean(\n raw.allowUnauthenticatedFacilitator,\n 'payments.mpp.allowUnauthenticatedFacilitator',\n ),\n }\n : {}),\n };\n validateAddress('payments.mpp.recipient', mpp.recipient);\n validateAddress('payments.mpp.asset', mpp.asset);\n // mppx refuses CR or LF in a quoted challenge parameter\n if (/[\\r\\n]/.test(mpp.realm)) {\n throw new CommerceError('CONFIG_INVALID', 'payments.mpp.realm must be a single line', {\n details: { path: 'payments.mpp.realm' },\n });\n }\n // Length only: the secret itself never appears in an error\n if (mpp.challengeSecret.length < MPP_MIN_CHALLENGE_SECRET_LENGTH) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `payments.mpp.challengeSecret must have length at least ${MPP_MIN_CHALLENGE_SECRET_LENGTH}`,\n { details: { path: 'payments.mpp.challengeSecret' } },\n );\n }\n // The shared x402 address, facilitator and mainnet guards, reported under the\n // MPP config path\n resolveX402Deployment({\n network: mpp.network,\n payTo: mpp.recipient,\n asset: mpp.asset,\n assetName: mpp.assetName,\n assetVersion: mpp.assetVersion,\n facilitator: mpp.facilitator,\n ...(mpp.allowMainnet !== undefined ? { allowMainnet: mpp.allowMainnet } : {}),\n ...(mpp.allowUnauthenticatedFacilitator !== undefined\n ? { allowUnauthenticatedFacilitator: mpp.allowUnauthenticatedFacilitator }\n : {}),\n configPath: 'payments.mpp',\n payToField: 'recipient',\n });\n return mpp;\n}\n","// The Zod schemas for `config.yaml`: shape only, before any business rule\nimport { type ZodTypeAny, z } from 'zod';\nimport { X402_PAYMENT_FLOWS } from '../../payments/x402/payment-flow';\nimport { ACP_WELL_KNOWN_PATH } from '../../protocols/acp/constants';\n\nexport const SUPPORTED_CONFIG_VERSION = 1;\n\n// A number, or a numeric string from env substitution\nconst NumberOrString = z.union([z.number(), z.string()]);\n\n// A boolean, or a \"true\"/\"false\" string from env substitution\nconst BooleanOrString = z.union([z.boolean(), z.string()]);\n\n// A media type as in a Content-Type header: `type/subtype`, then any parameters\nconst MediaType = z\n .string()\n .regex(/^[A-Za-z0-9][\\w!#$&^.+-]*\\/[A-Za-z0-9][\\w!#$&^.+-]*(?:[ \\t]*;.*)?$/, {\n message: 'must be a media type such as application/json',\n });\n\n// An RPC endpoint. The message never echoes the value, which can carry an API key\nconst RpcUrl = z\n .string()\n .min(1)\n .refine(isHttpUrl, { message: 'must be an http:// or https:// URL' });\n\nfunction isHttpUrl(value: string): boolean {\n try {\n const { protocol } = new URL(value);\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nconst MerchantSchema = z\n .object({\n id: z.string().min(1),\n name: z.string().min(1),\n publicBaseUrl: z.string().min(1),\n })\n .strict();\n\nconst ServerSchema = z\n .object({\n port: NumberOrString,\n host: z.string().min(1),\n // Required for /api/receipts, /api/events and /api/payment-attempts;\n // these routes return 404 when the token is unset\n adminToken: z.string().min(1).optional(),\n // Browser origins allowed to call the gateway; none by default. A request\n // with any other `Origin` gets 403 on every route. Entries match the\n // `Origin` header exactly (ignoring case), so `\"*\"` and a trailing slash\n // would match nothing: a silent lockout that an operator might \"fix\" by\n // disabling the check. Both are refused with a pointer.\n allowedOrigins: z\n .array(\n z\n .string()\n .min(1)\n .refine((origin) => origin !== '*', {\n message:\n 'wildcard \"*\" is not supported - allowedOrigins entries are matched literally against the browser\\'s Origin header, so \"*\" would match nothing. List each scheme://host[:port] explicitly.',\n })\n .refine((origin) => !origin.endsWith('/'), {\n message:\n 'must not end with \"/\" - a browser Origin header never has a trailing slash, so this entry would match nothing. Use e.g. \"http://localhost:5173\".',\n }),\n )\n .optional(),\n })\n .strict();\n\nconst StorageSchema = z\n .object({\n receipts: z\n .object({\n driver: z.literal('sqlite'),\n path: z.string().min(1),\n })\n .strict(),\n })\n .strict();\n\n// Every path the gateway registers (`src/gateway/routes.ts`), plus the fixed\n// discovery paths adapters own. A mount equal to one duplicates that route; a\n// mount that is a prefix of one swallows it through its `${mountPath}/*` wildcard.\nconst RESERVED_GATEWAY_PATHS = [\n '/health',\n '/ready',\n '/.well-known/agent-commerce',\n // Fixed by the A2A specification and served by the adapter\n '/.well-known/agent-card.json',\n // Fixed by the ACP specification\n ACP_WELL_KNOWN_PATH,\n '/api/resources',\n '/api/resources/:id/invoke',\n '/api/receipts',\n '/api/events',\n '/api/payment-attempts',\n] as const;\n\n// A bad `mountPath` would throw inside Fastify route registration at\n// `server.ready()`, failing the whole gateway with an opaque `FST_ERR_*`.\n// Checked here it is a CONFIG_INVALID naming the value. Pattern syntax (`:`,\n// `*`) is refused because the mount registers its own wildcard.\nconst MountPathSchema = z\n .string()\n .min(1)\n .refine((value) => value.startsWith('/'), {\n message: 'must start with \"/\" - it is an absolute gateway path, e.g. \"/mcp\".',\n })\n .refine((value) => !/[:*?\\s]/.test(value), {\n message:\n 'must not contain \":\", \"*\", \"?\" or whitespace - the mount is a literal path prefix, not a Fastify route pattern, and registers its own wildcard.',\n })\n .refine(\n (value) => {\n const base = value.replace(/\\/+$/, '');\n return !RESERVED_GATEWAY_PATHS.some(\n (reserved) => reserved === base || reserved.startsWith(`${base}/`),\n );\n },\n {\n message: `must not collide with a route the gateway already serves (${RESERVED_GATEWAY_PATHS.join(', ')}); pick a dedicated prefix such as \"/mcp\".`,\n },\n );\n\n// Bearer is the only ACP auth scheme; there is no `none`\nconst AcpAuthSchema = z.object({ type: z.literal('bearer'), token: z.string().min(1) }).strict();\n\nconst AcpIdempotencySchema = z\n .object({\n path: z.string().min(1),\n retentionHours: NumberOrString.optional(),\n merchantIdempotent: z.boolean().optional(),\n })\n .strict();\n\n// Operation names are checked against `ACP_CHECKOUT_OPERATIONS` in the\n// business pass, which names a missing or misspelled operation\nconst AcpCheckoutSchema = z.object({ operations: z.record(z.string().min(1)) }).strict();\n\n// Optional discovery metadata, omitted when not configured\nconst AcpDiscoverySchema = z\n .object({\n documentationUrl: z.string().min(1).optional(),\n supportedCurrencies: z.array(z.string().min(1)).optional(),\n supportedLocales: z.array(z.string().min(1)).optional(),\n interventionTypes: z.array(z.string().min(1)).optional(),\n })\n .strict();\n\nconst ProtocolsSchema = z\n .object({\n http: z.object({ enabled: BooleanOrString }).strict(),\n mcp: z\n .object({\n enabled: BooleanOrString,\n mountPath: MountPathSchema,\n })\n .strict(),\n // Optional; A2A is off unless configured\n a2a: z\n .object({\n enabled: BooleanOrString,\n mountPath: MountPathSchema.optional(),\n })\n .strict()\n .optional(),\n // Optional and off by default. The business pass requires the sub-blocks\n // only when ACP is enabled, so a disabled placeholder stays valid and an\n // enabled block gets a message naming what it lacks.\n acp: z\n .object({\n enabled: BooleanOrString,\n mountPath: MountPathSchema.optional(),\n auth: AcpAuthSchema.optional(),\n idempotency: AcpIdempotencySchema.optional(),\n checkout: AcpCheckoutSchema.optional(),\n discovery: AcpDiscoverySchema.optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nconst BackendMethodSchema = z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']);\n\n// Strict, so a typo like `bodyy` fails at load instead of silently meaning\n// \"no body binding\"\nconst BackendInputBindingsSchema = z\n .object({\n path: z.string().min(1).optional(),\n query: z.string().min(1).optional(),\n body: z.string().min(1).optional(),\n })\n .strict();\n\nconst BackendHandlerSchema = z\n .object({\n type: z.literal('http'),\n method: BackendMethodSchema,\n url: z.string().min(1),\n headers: z.record(z.string(), z.string()).optional(),\n timeoutMs: NumberOrString.optional(),\n inputBindings: BackendInputBindingsSchema.optional(),\n })\n .strict();\n\nconst PricingSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('free') }).strict(),\n z\n .object({\n type: z.literal('fixed'),\n amount: z.string().min(1),\n currency: z.string().min(1),\n })\n .strict(),\n z\n .object({\n type: z.literal('dynamic'),\n resolver: z.string().min(1),\n })\n .strict(),\n]);\n\nconst JsonSchemaValueSchema: ZodTypeAny = z.record(z.string(), z.unknown());\n\n// Settlement network, payee and token, resolved by x402/options.ts. Network\n// and payee fields follow the SDK's `PaymentOption`; asset fields override defaults\nconst X402OptionSchema = z\n .object({\n scheme: z.string().min(1).optional(),\n network: z.string().min(1),\n payTo: z.string().min(1),\n asset: z.string().min(1).optional(),\n assetName: z.string().min(1).optional(),\n assetVersion: z.string().min(1).optional(),\n assetDecimals: NumberOrString.optional(),\n assetTransferMethod: z.string().min(1).optional(),\n })\n .strict();\n\nconst ResourceEntrySchema = z\n .object({\n name: z.string().min(1),\n description: z.string().optional(),\n input: JsonSchemaValueSchema.optional(),\n output: JsonSchemaValueSchema.optional(),\n // What the backend returns; x402 challenges declare it, `application/json` by default\n mimeType: MediaType.optional(),\n backend: BackendHandlerSchema,\n pricing: PricingSchema,\n expose: z.array(z.string().min(1)).min(1),\n payments: z.array(z.string().min(1)).optional(),\n paymentFlow: z.enum(X402_PAYMENT_FLOWS).optional(),\n // This resource's own x402 offers, in place of `payments.x402` options\n x402: z\n .object({ accepts: z.array(X402OptionSchema) })\n .strict()\n .optional(),\n authorization: z\n .object({ required: z.array(z.string().min(1)).min(1) })\n .strict()\n .optional(),\n })\n .strict();\n\nconst ResourcesMapSchema = z.record(z.string().min(1), ResourceEntrySchema);\n\n// Facilitator credentials. `none` and `bearer` fit any facilitator; `cdp` is\n// the one vendor-specific type. Any other type is refused at load.\nconst FacilitatorAuthSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('none') }).strict(),\n z.object({ type: z.literal('bearer'), token: z.string().min(1) }).strict(),\n // Coinbase Developer Platform. Needs the optional peer `@coinbase/x402`,\n // which signs a fresh JWT per request.\n z\n .object({\n type: z.literal('cdp'),\n apiKeyId: z.string().min(1),\n apiKeySecret: z.string().min(1),\n })\n .strict(),\n]);\n\nexport const FacilitatorSchema = z.discriminatedUnion('mode', [\n z\n .object({\n mode: z.literal('local'),\n signerPrivateKey: z.string().min(1),\n })\n .strict(),\n z\n .object({\n mode: z.literal('remote'),\n url: z.string().min(1),\n // Absent auth sends no credential and normalizes to `{ type: 'none' }`,\n // which on mainnet requires `allowUnauthenticatedFacilitator`\n auth: FacilitatorAuthSchema.optional(),\n })\n .strict(),\n]);\n\n// Per-network settings: `kind` and `displayName` declare a network outside\n// the registry; `rpcUrl` is that network's endpoint, built in or declared\nconst X402NetworkSettingsSchema = z\n .object({\n kind: z.enum(['testnet', 'mainnet']).optional(),\n displayName: z.string().min(1).optional(),\n rpcUrl: RpcUrl.optional(),\n })\n .strict();\n\nconst X402Schema = z\n .object({\n enabled: BooleanOrString,\n // Accept direct fields or an `options` array, never both\n network: z.string().min(1).optional(),\n payTo: z.string().min(1).optional(),\n asset: z.string().min(1).optional(),\n assetName: z.string().min(1).optional(),\n assetVersion: z.string().min(1).optional(),\n assetDecimals: NumberOrString.optional(),\n assetTransferMethod: z.string().min(1).optional(),\n options: z.array(X402OptionSchema).optional(),\n networks: z.record(z.string().min(1), X402NetworkSettingsSchema).optional(),\n // The RPC for every network without its own `networks.<id>.rpcUrl`\n rpcUrl: RpcUrl.optional(),\n maxTimeoutSeconds: NumberOrString,\n // `authorization` (the x402 default) settles after the backend call\n paymentFlow: z.enum(X402_PAYMENT_FLOWS).optional(),\n facilitator: FacilitatorSchema,\n // Real funds. Never defaulted; see src/payments/x402/guardrails.ts\n allowMainnet: BooleanOrString.optional(),\n // Accepts credential-free facilitator access on mainnet. Never defaulted\n allowUnauthenticatedFacilitator: BooleanOrString.optional(),\n // Experimental ERC-8409 quotes; signing a quote transfers no funds\n quote: z\n .object({\n enabled: BooleanOrString,\n signerPrivateKey: z.string().min(1).optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nconst MppSchema = z\n .object({\n enabled: BooleanOrString,\n network: z.string().min(1).optional(),\n rpcUrl: RpcUrl,\n asset: z.string().min(1),\n assetName: z.string().min(1),\n assetVersion: z.string().min(1),\n recipient: z.string().min(1),\n realm: z.string().min(1),\n challengeSecret: z.string().min(1),\n challengeTtlSeconds: NumberOrString.optional(),\n // Same values as `payments.x402.paymentFlow`; the default is `upfront`\n paymentFlow: z.enum(X402_PAYMENT_FLOWS).optional(),\n facilitator: FacilitatorSchema,\n // Real funds. Never defaulted; see src/payments/x402/guardrails.ts\n allowMainnet: BooleanOrString.optional(),\n // Accepts credential-free facilitator access on mainnet. Never defaulted\n allowUnauthenticatedFacilitator: BooleanOrString.optional(),\n })\n .strict();\n\nconst PaymentsSchema = z\n .object({\n x402: X402Schema.optional(),\n mpp: MppSchema.optional(),\n })\n .strict();\n\n// A public verification key, inline only: no `jwksUri`, `jku` or discovery\n// URL. AP2 leaves secure key distribution open, and fetching keys would mean\n// fetching from a location a mandate can influence. The business pass checks\n// the JWK's members against `AP2_JWK_MEMBERS`, which also keeps out `x5u`.\nconst Ap2KeySchema = z\n .object({\n kid: z.string().min(1),\n jwk: z.record(z.string(), z.unknown()),\n })\n .strict();\n\nexport const Ap2IssuerSchema = z\n .object({\n issuer: z.string().min(1),\n // Required, not defaulted: without it a mandate minted for another\n // merchant would verify here\n audience: z.string().min(1),\n keys: z.array(Ap2KeySchema).min(1),\n })\n .strict();\n\nconst Ap2Schema = z\n .object({\n enabled: BooleanOrString,\n specVersion: z.string().min(1).optional(),\n mode: z.string().min(1).optional(),\n trust: z\n .object({\n mandateIssuers: z.array(Ap2IssuerSchema).optional(),\n checkoutIssuers: z.array(Ap2IssuerSchema).optional(),\n })\n .strict()\n .optional(),\n clockSkewSeconds: NumberOrString.optional(),\n requireMandateAudience: BooleanOrString.optional(),\n requireMandateExpiry: BooleanOrString.optional(),\n replay: z\n .object({ path: z.string().min(1) })\n .strict()\n .optional(),\n })\n .strict();\n\n// Optional and off by default. The business pass requires the sub-blocks only\n// when AP2 is enabled, and names the missing piece.\nconst AuthorizationSchema = z.object({ ap2: Ap2Schema.optional() }).strict();\n\nexport const RawConfigSchema = z\n .object({\n version: z.literal(SUPPORTED_CONFIG_VERSION),\n merchant: MerchantSchema,\n server: ServerSchema,\n storage: StorageSchema,\n protocols: ProtocolsSchema,\n resources: ResourcesMapSchema,\n payments: PaymentsSchema,\n authorization: AuthorizationSchema.optional(),\n })\n .strict();\n\nexport type RawConfig = z.infer<typeof RawConfigSchema>;\n\nexport type RawResourceEntry = z.infer<typeof ResourceEntrySchema>;\n","// A resource's backend request: input bindings, path parameters, URL and headers\nimport { CommerceError, RESERVED_INPUT_FIELDS } from '../../core';\nimport {\n extractPathParameterNames,\n findUnparsedBraceToken,\n isObjectSchemaNode,\n} from '../../core/execution';\nimport { isRecord } from '../../core/is-record';\nimport type { RawResourceEntry } from './raw';\n\n/**\n * Checks `backend.inputBindings` against the input schema at load. Schemas are\n * closed by default at every depth, so a binding naming an undeclared property\n * could never be supplied, and on a paid resource the backend would get an\n * incomplete request after payment.\n *\n * Returns the schema node `{param}` names must be declared in: the path group\n * with bindings, the whole input without.\n */\nexport function validateInputBindings(\n id: string,\n backend: RawResourceEntry['backend'],\n input: Record<string, unknown> | undefined,\n): { readonly schema: Record<string, unknown> | undefined; readonly where: string } {\n const legacy = { schema: input, where: 'its input schema' } as const;\n const bindings = backend.inputBindings;\n const templated = extractPathParameterNames(backend.url).length > 0;\n if (bindings === undefined) return legacy;\n\n const path = `resources.${id}.backend.inputBindings`;\n const fail = (message: string, details: Record<string, unknown> = {}): never => {\n throw new CommerceError('CONFIG_INVALID', `Resource \"${id}\" ${message}`, {\n details: { path, resourceId: id, ...details },\n });\n };\n\n const entries = Object.entries(bindings).filter(\n (entry): entry is [string, string] => entry[1] !== undefined,\n );\n if (entries.length === 0) {\n fail('has an empty backend.inputBindings - remove the block to use the default mapping');\n }\n if (backend.method === 'GET' || backend.method === 'DELETE') {\n if (bindings.body !== undefined) {\n fail(\n `binds a request body on a ${backend.method}, which sends none - the value would be silently dropped`,\n );\n }\n }\n if (templated && bindings.path === undefined) {\n fail(\n 'has backend.url path parameters but no \"path\" binding - in explicit binding mode nothing else supplies them, so every call would fail to reach the backend',\n );\n }\n\n const seen = new Map<string, string>();\n const properties = isRecord(input?.['properties']) ? input['properties'] : {};\n const required = new Set(\n Array.isArray(input?.['required'])\n ? input['required'].filter((value): value is string => typeof value === 'string')\n : [],\n );\n\n for (const [location, property] of entries) {\n if (RESERVED_INPUT_FIELDS.includes(property)) {\n fail(`binds \"${location}\" to \"${property}\", which is reserved by the gateway`, { location });\n }\n const other = seen.get(property);\n if (other !== undefined) {\n fail(`binds both \"${other}\" and \"${location}\" to the input property \"${property}\"`, {\n location,\n property,\n });\n }\n seen.set(property, location);\n\n if (!Object.hasOwn(properties, property)) {\n fail(\n `binds \"${location}\" to input property \"${property}\", which the input schema does not declare - the schema is closed, so a caller could never supply it`,\n { location, property },\n );\n }\n // `body` may be any JSON value; only the path and query groups are read as\n // name/value pairs\n const declared = properties[property];\n if (location !== 'body' && isRecord(declared) && !isObjectSchemaNode(declared)) {\n fail(\n `binds \"${location}\" to input property \"${property}\", which is not an object schema - ${location} parameters are read as an object of name/value pairs`,\n { location, property },\n );\n }\n }\n\n if (templated && bindings.path !== undefined && !required.has(bindings.path)) {\n fail(\n `binds path parameters to input property \"${bindings.path}\" without listing it in the input schema's \"required\" - a caller that omits it cannot supply any path parameter, so the request could never be built`,\n { property: bindings.path },\n );\n }\n\n if (bindings.path === undefined) return { schema: undefined, where: 'its input schema' };\n const group = properties[bindings.path];\n return {\n schema: isRecord(group) ? group : undefined,\n where: `input.properties.${bindings.path}`,\n };\n}\n\n/**\n * Every `{param}` in `backend.url` must be declared in `properties` and listed\n * in `required`. Otherwise a call can arrive without it, and core's\n * `validateBackendRequestShape` rejects the request, which for a schema that\n * never declares the parameter means every call. Checked at load so\n * `validate` and `doctor` report it; the runtime check covers a hand-built\n * `CommerceResource`.\n */\nexport function validatePathParametersDeclared(\n id: string,\n url: string,\n input: Record<string, unknown> | undefined,\n where: string,\n): void {\n // A brace token the grammar does not recognize is neither extracted nor\n // substituted, so it would reach the backend as a percent-encoded literal\n const stray = findUnparsedBraceToken(url);\n if (stray !== undefined) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has backend.url containing \"${stray}\", which is not a valid path parameter (allowed characters: A-Z a-z 0-9 _ . -). It would reach the backend as literal text, so a paid resource would take payment for a request the backend cannot serve`,\n { details: { path: `resources.${id}.backend.url`, resourceId: id, token: stray } },\n );\n }\n\n const params = extractPathParameterNames(url);\n if (params.length === 0) return;\n\n // Everything before the first `{` must be a complete origin followed by the\n // path's leading `/`. In the host, every other `{param}` defense fails open:\n // `http://{host}/api` parses, the runtime prefix check skips a prefix that\n // is not a URL, and `encodeURIComponent` keeps dots. Caller input would pick\n // the host the gateway calls, such as a metadata service or an internal\n // address, and `http://{region}.api.internal/...` looks ordinary enough to\n // be written by mistake.\n const firstBrace = url.indexOf('{');\n if (firstBrace !== -1) {\n const prefix = url.slice(0, firstBrace);\n let origin: string | undefined;\n try {\n const parsedPrefix = new URL(prefix);\n origin = parsedPrefix.hostname === '' ? undefined : parsedPrefix.origin;\n } catch {\n // Not a URL: the parameter starts before the authority is complete\n }\n if (origin === undefined || !prefix.startsWith(`${origin}/`)) {\n // The URL is not quoted: it may carry a key substituted from the environment\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has a backend.url parameter before the end of the host. A caller-supplied value would choose which host the gateway calls, which is request forgery with the gateway's own network position. Parameters are supported inside the path and query only`,\n { details: { path: `resources.${id}.backend.url`, resourceId: id } },\n );\n }\n }\n\n const propertiesRaw = input?.['properties'];\n const properties = isRecord(propertiesRaw) ? propertiesRaw : {};\n const requiredRaw = input?.['required'];\n const required = new Set(\n Array.isArray(requiredRaw)\n ? requiredRaw.filter((entry): entry is string => typeof entry === 'string')\n : [],\n );\n\n for (const param of params) {\n const path = `resources.${id}.backend.url`;\n if (!Object.hasOwn(properties, param)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has backend.url path parameter \"{${param}}\" which is not declared in ${where} - the caller has no way to supply it, so every call would be refused`,\n { details: { path, resourceId: id, param } },\n );\n }\n if (!required.has(param)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has backend.url path parameter \"{${param}}\" declared in ${where} but not listed in its \"required\" - a call that omits it would be refused`,\n { details: { path, resourceId: id, param } },\n );\n }\n }\n}\n\n// `{param}` templates parse as URLs (the WHATWG parser percent-encodes the\n// braces), so this refuses only malformed URLs and non-http(s) schemes\nexport function validateBackendUrl(id: string, url: string): void {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n // The URL is not quoted: it may carry a key substituted from the environment\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has an invalid backend.url: must be an absolute http:// or https:// URL`,\n { details: { path: `resources.${id}.backend.url`, resourceId: id } },\n );\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has a backend.url with scheme \"${parsed.protocol}\": must be http:// or https://`,\n { details: { path: `resources.${id}.backend.url`, resourceId: id } },\n );\n }\n}\n\n// Checked with fetch's own `Headers` rules. Otherwise an illegal name, or a\n// substituted value with a line break inside it, would load cleanly and then\n// refuse every call. The error names the key, never the value, which may be a\n// credential.\nexport function validateBackendHeaders(\n id: string,\n headers: Record<string, string> | undefined,\n): void {\n for (const [name, value] of Object.entries(headers ?? {})) {\n try {\n new Headers([[name, value]]);\n } catch {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has backend header \"${name}\" with an illegal name or value (a name must be an HTTP token; a value must not contain NUL, a character above U+00FF, or a line break except at either end, which fetch trims)`,\n { details: { path: `resources.${id}.backend.headers.${name}`, resourceId: id } },\n );\n }\n }\n}\n","// A resource's input schema: the default closed object and the keywords the validator supports\nimport { CommerceError } from '../../core';\nimport { isObjectSchemaNode } from '../../core/execution';\nimport { isRecord } from '../../core/is-record';\n\n/**\n * Closes every object schema at every depth: a node without\n * `additionalProperties` gets `false`, so unknown keys never reach the\n * merchant's API. An explicit value, including `true`, is kept.\n *\n * JSON Schema itself defaults to open, and core's validator enforces\n * `additionalProperties` only where a node states it, so this recurses into\n * `properties`, `items` and schema-valued `additionalProperties`, the same\n * places the validator descends. Object-ness comes from `isObjectSchemaNode`,\n * the validator's own definition.\n */\nexport function defaultClosedObjectSchema(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n const isObjectSchema = isObjectSchemaNode(schema);\n const result: Record<string, unknown> = { ...schema };\n\n if (isObjectSchema) {\n const properties = schema['properties'];\n if (isRecord(properties)) {\n result['properties'] = Object.fromEntries(\n Object.entries(properties).map(([key, sub]) => [\n key,\n isRecord(sub) ? defaultClosedObjectSchema(sub) : sub,\n ]),\n );\n }\n if (!Object.hasOwn(schema, 'additionalProperties')) {\n result['additionalProperties'] = false;\n }\n }\n\n const items = schema['items'];\n if (isRecord(items)) {\n result['items'] = defaultClosedObjectSchema(items);\n }\n\n // `additionalProperties: {schema}` (a map of typed objects) is closed too.\n // Not conditional on `isObjectSchema`: the validator applies the subschema\n // wherever it finds one.\n const additional = schema['additionalProperties'];\n if (isRecord(additional)) {\n result['additionalProperties'] = defaultClosedObjectSchema(additional);\n }\n\n return result;\n}\n\n// The input schema of a resource that declares no `input:`. Declaring nothing\n// accepts nothing: without this, `compileJsonSchema(undefined)` would accept\n// any input and forward every key to the backend. A no-argument resource\n// omitting `input:` is a legitimate shape, so it is not refused.\nexport const EMPTY_CLOSED_OBJECT_SCHEMA: Record<string, unknown> = {\n type: 'object',\n properties: {},\n additionalProperties: false,\n};\n\n// Keywords core's validator ignores (see `execution/validation.ts` for the\n// enforced subset). Config warns at load, since an operator who writes\n// `pattern` cannot otherwise tell that it is not enforced.\nconst UNSUPPORTED_SCHEMA_KEYWORDS = [\n 'pattern',\n 'minLength',\n 'maxLength',\n 'format',\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'oneOf',\n 'anyOf',\n 'allOf',\n 'not',\n '$ref',\n 'const',\n 'patternProperties',\n 'minItems',\n 'maxItems',\n 'uniqueItems',\n];\n\n// `type` set to something that rules out \"object\". No `type` at all does not\n// exclude it: the validator treats `properties`/`required` alone as an object\n// schema.\nfunction excludesObjectType(schema: Record<string, unknown>): boolean {\n const type = schema['type'];\n if (type === undefined || type === 'object') return false;\n if (Array.isArray(type)) return !type.includes('object');\n return true;\n}\n\n/**\n * Walks a resource's input schema once. Warns about unenforced keywords and\n * tuple `items`. Rejects a node whose `type` rules out \"object\" while it\n * declares `properties` or `required`, which then go unchecked (often a\n * copy-pasted sibling whose `type` was never updated), and a closed node\n * requiring a property it never declares, which no input can satisfy.\n */\nexport function validateResourceSchemaKeywords(\n id: string,\n path: string,\n schema: Record<string, unknown>,\n): void {\n for (const keyword of UNSUPPORTED_SCHEMA_KEYWORDS) {\n if (Object.hasOwn(schema, keyword)) {\n console.warn(\n `[agent-commerce] resource \"${id}\" ${path} uses JSON Schema keyword \"${keyword}\", which this gateway does not enforce (see src/core/execution/validation.ts for the supported subset). Remove it or treat it as documentation only.`,\n );\n }\n }\n if (\n (Object.hasOwn(schema, 'properties') || Object.hasOwn(schema, 'required')) &&\n excludesObjectType(schema)\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" ${path} declares \"properties\" and/or \"required\" but its \"type\" (${JSON.stringify(schema['type'])}) does not include \"object\" - the validator will never route a value through either check under that type, so this schema claims to constrain input it does not actually enforce. Remove \"properties\"/\"required\", or include \"object\" in \"type\".`,\n { details: { path: `resources.${id}.${path}`, resourceId: id } },\n );\n }\n // A closed node that requires a property it never declares rejects that\n // property as unknown, so no input can satisfy it and every call would 400.\n // Only when the node is closed: an explicit `additionalProperties`\n // other than `false` leaves the name reachable.\n const requiredRaw = schema['required'];\n const closed = !Object.hasOwn(schema, 'additionalProperties')\n ? true\n : schema['additionalProperties'] === false;\n if (Array.isArray(requiredRaw) && closed && isObjectSchemaNode(schema)) {\n const declared = isRecord(schema['properties']) ? schema['properties'] : {};\n const undeclared = requiredRaw.filter(\n (name): name is string => typeof name === 'string' && !Object.hasOwn(declared, name),\n );\n if (undeclared.length > 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" ${path} lists ${undeclared.map((n) => `\"${n}\"`).join(', ')} in \"required\" but does not declare ${undeclared.length === 1 ? 'it' : 'them'} in \"properties\". The schema is closed (additionalProperties: false), so ${undeclared.length === 1 ? 'that name is' : 'those names are'} rejected as an unknown key and no input can ever satisfy this schema. Declare ${undeclared.length === 1 ? 'it' : 'them'} in \"properties\".`,\n { details: { path: `resources.${id}.${path}`, resourceId: id, undeclared } },\n );\n }\n }\n\n const properties = schema['properties'];\n if (isRecord(properties)) {\n for (const [key, sub] of Object.entries(properties)) {\n if (isRecord(sub)) validateResourceSchemaKeywords(id, `${path}.properties.${key}`, sub);\n }\n }\n const additional = schema['additionalProperties'];\n if (isRecord(additional)) {\n validateResourceSchemaKeywords(id, `${path}.additionalProperties`, additional);\n }\n const items = schema['items'];\n if (isRecord(items)) {\n validateResourceSchemaKeywords(id, `${path}.items`, items);\n } else if (Array.isArray(items)) {\n // Tuple-form `items` is valid JSON Schema, but the validator supports only\n // one schema for every element, so a tuple enforces nothing\n console.warn(\n `[agent-commerce] resource \"${id}\" ${path}.items is a tuple (an array of schemas), which this gateway does not enforce - only a single schema applied to every array element is supported (see src/core/execution/validation.ts). Each position's schema is unenforced; treat it as documentation only.`,\n );\n }\n}\n","// Resources: exposure, pricing, payment rails and backend handler\nimport type { Ap2AuthorizationConfig } from '../../authorization/ap2/types';\nimport {\n CommerceError,\n type CommerceResource,\n PAYMENT_METHOD_NAMES,\n PROTOCOL_NAMES,\n type Pricing,\n RESERVED_INPUT_FIELDS,\n} from '../../core';\nimport { MPP_PROFILE } from '../../payments/mpp/constants';\nimport { MCP_TOOL_NAME_PATTERN } from '../../protocols/mcp/constants';\nimport { normalizeResourceAuthorization } from './ap2';\nimport {\n validateBackendHeaders,\n validateBackendUrl,\n validateInputBindings,\n validatePathParametersDeclared,\n} from './backend';\nimport type { NormalizedMpp } from './mpp';\nimport type { RawResourceEntry } from './raw';\nimport {\n defaultClosedObjectSchema,\n EMPTY_CLOSED_OBJECT_SCHEMA,\n validateResourceSchemaKeywords,\n} from './resource-schema';\nimport type { NormalizedProtocols } from './types';\nimport { toNumber } from './values';\nimport type { NormalizedX402 } from './x402';\n\nconst SUPPORTED_PROTOCOLS: ReadonlySet<string> = new Set(PROTOCOL_NAMES);\n\nconst SUPPORTED_PAYMENT_METHODS: ReadonlySet<string> = new Set(PAYMENT_METHOD_NAMES);\n\nexport function normalizeResource(\n id: string,\n entry: RawResourceEntry,\n protocols: NormalizedProtocols,\n x402: NormalizedX402 | undefined,\n mpp: NormalizedMpp | undefined,\n ap2: Ap2AuthorizationConfig | undefined,\n): CommerceResource {\n if (entry.input !== undefined) validateResourceSchemaKeywords(id, 'input', entry.input);\n\n const inputProperties = entry.input?.['properties'];\n if (inputProperties && typeof inputProperties === 'object') {\n for (const reserved of RESERVED_INPUT_FIELDS) {\n if (!(reserved in inputProperties)) continue;\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" declares an input property \"${reserved}\", which is reserved by the gateway`,\n {\n details: {\n path: `resources.${id}.input.properties.${reserved}`,\n resourceId: id,\n },\n },\n );\n }\n }\n\n for (const protocol of entry.expose) {\n if (!SUPPORTED_PROTOCOLS.has(protocol)) {\n const hint = protocol === 'ucp' ? ' (UCP is planned, not supported in this release)' : '';\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" exposes unsupported protocol \"${protocol}\"${hint}. Supported: ${PROTOCOL_NAMES.join(', ')}.`,\n { details: { path: `resources.${id}.expose`, resourceId: id, protocol } },\n );\n }\n }\n if (entry.expose.includes('mcp')) {\n if (!protocols.mcp.enabled) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is exposed via \"mcp\" but protocols.mcp.enabled is false`,\n { details: { path: `resources.${id}.expose`, resourceId: id } },\n );\n }\n if (!MCP_TOOL_NAME_PATTERN.test(id)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is exposed via \"mcp\" but its id is not a legal MCP tool name (allowed: A-Z, a-z, 0-9, \"_\", \"-\", \".\", 1-128 chars)`,\n { details: { path: `resources.${id}`, resourceId: id } },\n );\n }\n }\n if (entry.expose.includes('a2a') && !protocols.a2a.enabled) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is exposed via \"a2a\" but protocols.a2a.enabled is false`,\n { details: { path: `resources.${id}.expose`, resourceId: id } },\n );\n }\n if (entry.expose.includes('acp') && !protocols.acp.enabled) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is exposed via \"acp\" but protocols.acp.enabled is false`,\n { details: { path: `resources.${id}.expose`, resourceId: id } },\n );\n }\n if (entry.expose.includes('http') && !protocols.http.enabled) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is exposed via \"http\" but protocols.http.enabled is false`,\n { details: { path: `resources.${id}.expose`, resourceId: id } },\n );\n }\n\n validateBackendUrl(id, entry.backend.url);\n validateBackendHeaders(id, entry.backend.headers);\n const pathScope = validateInputBindings(id, entry.backend, entry.input);\n validatePathParametersDeclared(id, entry.backend.url, pathScope.schema, pathScope.where);\n\n if (entry.pricing.type === 'dynamic') {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" uses pricing.type \"dynamic\", which is not supported in this release`,\n { details: { path: `resources.${id}.pricing.type`, resourceId: id } },\n );\n }\n\n const paymentMethods = entry.payments ?? [];\n\n if (entry.x402 !== undefined) {\n const at = `resources.${id}.x402`;\n if (x402 === undefined) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" sets x402.accepts, but payments.x402 is not configured`,\n { details: { path: at, resourceId: id } },\n );\n }\n if (entry.pricing.type !== 'fixed' || !paymentMethods.includes('x402')) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" sets x402.accepts, which requires fixed pricing and \"x402\" in payments`,\n { details: { path: at, resourceId: id } },\n );\n }\n }\n // The resource's own offers, or the rail's\n const offers = x402 !== undefined ? (x402.resources[id] ?? x402) : undefined;\n\n if (entry.pricing.type === 'fixed') {\n // An x402 price is charged in every option's token, so the coarsest one\n // bounds it. MPP checks its own token's decimals below.\n const decimals = paymentMethods.includes('x402')\n ? offers?.options.map((option) => option.assetDecimals)\n : undefined;\n validatePricingAmount(id, entry.pricing.amount, decimals && Math.min(...decimals));\n }\n\n if (entry.pricing.type === 'fixed') {\n if (paymentMethods.length === 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has fixed pricing but declares no \"payments\" (a paid resource must name at least one payment method)`,\n { details: { path: `resources.${id}.payments`, resourceId: id } },\n );\n }\n for (const method of paymentMethods) {\n if (!SUPPORTED_PAYMENT_METHODS.has(method)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" names unsupported payment method \"${method}\". Supported: ${PAYMENT_METHOD_NAMES.join(', ')}.`,\n { details: { path: `resources.${id}.payments`, resourceId: id, method } },\n );\n }\n }\n // At least one named rail must be enabled, not every one. `runGateway`\n // checks again at composition as defense in depth.\n const enabledRails = [\n ...(x402?.config.enabled ? ['x402'] : []),\n ...(mpp?.enabled ? ['mpp'] : []),\n ];\n if (!paymentMethods.some((method) => enabledRails.includes(method))) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" names payment method(s) \"${paymentMethods.join(', ')}\", none of which is configured and enabled under \"payments\"`,\n { details: { path: `resources.${id}.payments`, resourceId: id, paymentMethods } },\n );\n }\n // An offer in the network's default stablecoin, named or not, charges the\n // price in that token, so the price must name that token or USD\n const symbols = offers?.defaultAssetSymbols ?? [];\n const currency = entry.pricing.currency;\n if (\n x402?.config.enabled &&\n symbols.length > 0 &&\n paymentMethods.includes('x402') &&\n currency !== 'USD' &&\n !(symbols.length === 1 && currency === symbols[0])\n ) {\n const tokens = symbols.join(' and ');\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is priced in ${currency}, but x402 settles in ${tokens}, the default asset of its network. Price it in ${symbols.length === 1 ? `${tokens} or ` : ''}USD.`,\n { details: { path: `resources.${id}.pricing.currency`, resourceId: id } },\n );\n }\n // MPP fixes the currency label and decimal precision for every resource it serves\n if (mpp?.enabled && paymentMethods.includes('mpp')) {\n if (entry.pricing.currency !== MPP_PROFILE.assetSymbol) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" is priced in ${entry.pricing.currency}, but MPP charges ${MPP_PROFILE.assetSymbol}`,\n { details: { path: `resources.${id}.pricing.currency`, resourceId: id } },\n );\n }\n validatePricingAmount(id, entry.pricing.amount, MPP_PROFILE.assetDecimals);\n }\n }\n\n if (\n entry.paymentFlow !== undefined &&\n (entry.pricing.type !== 'fixed' ||\n !paymentMethods.some((method) => method === 'x402' || method === 'mpp'))\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" sets paymentFlow, which requires fixed pricing and \"x402\" or \"mpp\" in payments`,\n { details: { path: `resources.${id}.paymentFlow`, resourceId: id } },\n );\n }\n\n if (\n entry.mimeType !== undefined &&\n (entry.pricing.type !== 'fixed' || !paymentMethods.includes('x402'))\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" sets mimeType, which requires fixed pricing and \"x402\" in payments`,\n { details: { path: `resources.${id}.mimeType`, resourceId: id } },\n );\n }\n\n const pricing: Pricing =\n entry.pricing.type === 'free'\n ? { type: 'free' }\n : { type: 'fixed', amount: entry.pricing.amount, currency: entry.pricing.currency };\n\n const authorization = normalizeResourceAuthorization(id, entry, pricing, ap2);\n\n return {\n id,\n name: entry.name,\n ...(entry.description !== undefined ? { description: entry.description } : {}),\n inputSchema:\n entry.input !== undefined\n ? defaultClosedObjectSchema(entry.input)\n : EMPTY_CLOSED_OBJECT_SCHEMA,\n ...(entry.output !== undefined ? { outputSchema: entry.output } : {}),\n handler: {\n type: 'http',\n method: entry.backend.method,\n url: entry.backend.url,\n ...(entry.backend.headers !== undefined ? { headers: entry.backend.headers } : {}),\n ...(entry.backend.timeoutMs !== undefined\n ? {\n timeoutMs: toNumber(entry.backend.timeoutMs, `resources.${id}.backend.timeoutMs`, {\n min: 1,\n }),\n }\n : {}),\n ...(entry.backend.inputBindings !== undefined\n ? { inputBindings: pickDefined(entry.backend.inputBindings) }\n : {}),\n },\n pricing,\n exposedVia: entry.expose as CommerceResource['exposedVia'],\n paymentMethods: paymentMethods as CommerceResource['paymentMethods'],\n ...(authorization !== undefined ? { authorization } : {}),\n };\n}\n\n// A plain decimal: no currency symbol, thousands separator, sign or exponent.\n// \"0,01\", \"$0.01\", \"1e-2\" and \"-1\" would otherwise load and then fail every\n// purchase.\nconst PRICING_AMOUNT_PATTERN = /^\\d+(?:\\.\\d+)?$/;\n\nconst ZERO_AMOUNT_PATTERN = /^0(?:\\.0+)?$/;\n\nfunction validatePricingAmount(id: string, amount: string, decimals: number | undefined): void {\n const path = `resources.${id}.pricing.amount`;\n if (!PRICING_AMOUNT_PATTERN.test(amount)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has pricing.amount \"${amount}\", which is not a plain positive decimal (no currency symbol, no thousands separator, no exponent - e.g. \"0.01\")`,\n { details: { path, resourceId: id } },\n );\n }\n if (ZERO_AMOUNT_PATTERN.test(amount)) {\n // A zero-priced paid resource would settle a zero-value transfer\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has pricing.amount \"0\" - a paid resource cannot cost zero; use \"pricing: { type: free }\" instead`,\n { details: { path, resourceId: id } },\n );\n }\n if (decimals !== undefined) {\n const fractionalDigits = amount.includes('.') ? (amount.split('.')[1]?.length ?? 0) : 0;\n if (fractionalDigits > decimals) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Resource \"${id}\" has pricing.amount \"${amount}\" with more precision (${fractionalDigits} fractional digits) than the configured asset supports (${decimals} decimals)`,\n { details: { path, resourceId: id } },\n );\n }\n }\n}\n\n// Strips absent optional keys so the result satisfies `exactOptionalPropertyTypes`\nfunction pickDefined<T extends Record<string, string | undefined>>(\n value: T,\n): { [K in keyof T]?: string } {\n return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as {\n [K in keyof T]?: string;\n };\n}\n","// The business-rule pass: coerces leaves and checks cross-references across sections\nimport { CommerceError } from '../../core';\nimport { normalizeAcp, validateAcpCheckoutMapping } from './acp';\nimport { normalizeAp2, validateReplayStoreIsolated } from './ap2';\nimport { normalizeMpp } from './mpp';\nimport { type RawConfig, SUPPORTED_CONFIG_VERSION } from './raw';\nimport { normalizeResource } from './resources';\nimport type { GatewayConfig, NormalizedProtocols } from './types';\nimport { toBoolean, toNumber } from './values';\nimport { normalizeX402 } from './x402';\n\n// Applied when `protocols.a2a` is absent or names no mount\nconst DEFAULT_A2A_MOUNT_PATH = '/a2a';\n\nexport function normalize(raw: RawConfig): GatewayConfig {\n const protocols = {\n http: { enabled: toBoolean(raw.protocols.http.enabled, 'protocols.http.enabled') },\n mcp: {\n enabled: toBoolean(raw.protocols.mcp.enabled, 'protocols.mcp.enabled'),\n mountPath: raw.protocols.mcp.mountPath,\n },\n a2a: {\n enabled: toBoolean(raw.protocols.a2a?.enabled ?? false, 'protocols.a2a.enabled'),\n mountPath: raw.protocols.a2a?.mountPath ?? DEFAULT_A2A_MOUNT_PATH,\n },\n acp: normalizeAcp(raw.protocols.acp),\n };\n validateMountPaths(protocols);\n\n const x402Settings =\n raw.payments.x402 !== undefined ? normalizeX402(raw.payments.x402, raw.resources) : undefined;\n const x402 = x402Settings?.config;\n\n const mpp = normalizeMpp(raw.payments.mpp);\n\n const ap2 = normalizeAp2(raw.authorization?.ap2);\n if (ap2?.enabled) {\n validateReplayStoreIsolated(ap2.replay.path, raw.storage.receipts.path, protocols.acp);\n }\n\n const resources = Object.entries(raw.resources).map(([id, entry]) =>\n normalizeResource(id, entry, protocols, x402Settings, mpp, ap2),\n );\n // CommerceResource has no payment-flow field. Each listed rail carries the\n // overrides; the selected rail applies them.\n const flowOverrides = (rail: 'x402' | 'mpp') => {\n const flows = Object.fromEntries(\n resources.flatMap((resource) => {\n const flow = raw.resources[resource.id]?.paymentFlow;\n return flow !== undefined && resource.paymentMethods.includes(rail)\n ? [[resource.id, flow]]\n : [];\n }),\n );\n return Object.keys(flows).length > 0 ? { resourcePaymentFlows: flows } : {};\n };\n // The same holds for media types, which only x402 challenges carry\n const mimeTypes = Object.fromEntries(\n resources.flatMap((resource) => {\n const mimeType = raw.resources[resource.id]?.mimeType;\n return mimeType !== undefined ? [[resource.id, mimeType]] : [];\n }),\n );\n const x402WithFlows =\n x402 !== undefined\n ? {\n ...x402,\n ...flowOverrides('x402'),\n ...(Object.keys(mimeTypes).length > 0 ? { resourceMimeTypes: mimeTypes } : {}),\n }\n : x402;\n const mppWithFlows = mpp !== undefined ? { ...mpp, ...flowOverrides('mpp') } : mpp;\n if (protocols.acp.enabled) validateAcpCheckoutMapping(protocols.acp, resources);\n // Require an exposed resource so the enabled adapter publishes a skill\n if (protocols.a2a.enabled && !resources.some((r) => r.exposedVia.includes('a2a'))) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'protocols.a2a.enabled is true but no resource lists \"a2a\" in its expose',\n { details: { path: 'protocols.a2a.enabled' } },\n );\n }\n\n return {\n version: SUPPORTED_CONFIG_VERSION,\n merchant: {\n id: raw.merchant.id,\n name: raw.merchant.name,\n publicBaseUrl: raw.merchant.publicBaseUrl,\n },\n // Port 0 lets the OS pick a free port, for tests and throwaway instances\n server: {\n port: toNumber(raw.server.port, 'server.port', { min: 0, max: 65535 }),\n host: raw.server.host,\n ...(raw.server.adminToken !== undefined ? { adminToken: raw.server.adminToken } : {}),\n allowedOrigins: raw.server.allowedOrigins ?? [],\n },\n storage: { receipts: { driver: 'sqlite', path: raw.storage.receipts.path } },\n protocols,\n resources,\n payments: {\n ...(x402WithFlows !== undefined ? { x402: x402WithFlows } : {}),\n ...(mppWithFlows !== undefined ? { mpp: mppWithFlows } : {}),\n },\n ...(ap2 !== undefined ? { authorization: { ap2 } } : {}),\n };\n}\n\n// Two enabled mounts may not overlap: each registers a `${mountPath}/*`\n// wildcard, so a shared prefix lets one adapter answer for the other. Disabled\n// protocols mount nothing and are not compared.\nfunction validateMountPaths(protocols: NormalizedProtocols): void {\n const mounts = (\n [\n ['mcp', protocols.mcp],\n ['a2a', protocols.a2a],\n ['acp', protocols.acp],\n ] as const\n ).filter(([, p]) => p.enabled);\n\n for (const [index, [nameA, a]] of mounts.entries()) {\n for (const [nameB, b] of mounts.slice(index + 1)) {\n const baseA = a.mountPath.replace(/\\/+$/, '');\n const baseB = b.mountPath.replace(/\\/+$/, '');\n if (baseA === baseB || baseA.startsWith(`${baseB}/`) || baseB.startsWith(`${baseA}/`)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `protocols.${nameA}.mountPath (\"${a.mountPath}\") collides with protocols.${nameB}.mountPath (\"${b.mountPath}\") - each mount registers a wildcard, so overlapping prefixes cannot both be served`,\n { details: { path: `protocols.${nameA}.mountPath` } },\n );\n }\n }\n }\n}\n","/**\n * `config.yaml` schema, validation and normalization into the canonical\n * `GatewayConfig` (docs/contracts.md).\n *\n * 1. Zod validates shape: types, required fields, unknown keys. Numeric and\n * boolean leaves accept their native type or a string, because env\n * substitution produces strings. Zod transforms interact badly with\n * `.strict()` inference, so coercion happens in plain TypeScript in step 2.\n * 2. A business-rule pass coerces those leaves and checks what needs a\n * specific message: cross-references, disabled protocols and payment\n * methods, dynamic pricing, addresses, duplicate trust entries.\n *\n * Env substitution (`${VAR}` / `${VAR:-default}`) runs over the raw value\n * before both steps, so numeric and boolean fields can be templated. The one\n * exception is `version:`, checked before substitution: it decides whether this\n * parser understands the document at all, so it cannot depend on the\n * environment.\n */\nimport type { ZodError, ZodIssue, z } from 'zod';\nimport { CommerceError } from '../../core';\nimport { isRecord } from '../../core/is-record';\nimport { substituteEnv } from '../env';\nimport { normalize } from './normalize';\nimport { RawConfigSchema, SUPPORTED_CONFIG_VERSION } from './raw';\nimport type { GatewayConfig } from './types';\n\nexport function parseConfig(raw: unknown, env: NodeJS.ProcessEnv): GatewayConfig {\n if (!isRecord(raw)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'Configuration root must be a mapping (object) at \"$\"',\n {\n details: { path: '$' },\n },\n );\n }\n\n checkVersion(raw);\n\n const substituted = substituteEnv(raw, env);\n const parsed = parseWithZod(RawConfigSchema, substituted);\n return normalize(parsed);\n}\n\nfunction checkVersion(raw: Record<string, unknown>): void {\n if (!('version' in raw)) {\n throw new CommerceError('CONFIG_INVALID', 'Configuration is missing required field \"version\"', {\n details: { path: 'version' },\n });\n }\n const version = raw['version'];\n if (version !== SUPPORTED_CONFIG_VERSION) {\n const hint = typeof version === 'string' ? ', written as a number without quotes' : '';\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Unsupported config version \"${String(version)}\": this gateway only supports version ${SUPPORTED_CONFIG_VERSION}${hint}`,\n { details: { path: 'version', supported: SUPPORTED_CONFIG_VERSION } },\n );\n }\n}\n\nfunction parseWithZod<T>(schema: z.ZodType<T>, value: unknown): T {\n const result = schema.safeParse(value);\n if (!result.success) {\n throw zodErrorToConfigError(result.error);\n }\n return result.data;\n}\n\nfunction zodErrorToConfigError(error: ZodError): CommerceError {\n const issues = error.issues.map(describeIssue);\n const first = issues[0];\n const message = first\n ? `Configuration invalid at \"${first.path}\": ${first.message}`\n : 'Configuration invalid';\n return new CommerceError('CONFIG_INVALID', message, { details: { issues } });\n}\n\nfunction describeIssue(issue: ZodIssue): { path: string; message: string; code: string } {\n const path = issue.path.length > 0 ? issue.path.join('.') : '$';\n return { path, message: issue.message, code: issue.code };\n}\n\nexport type {\n AcpDiscoveryConfig,\n AcpProtocolConfig,\n GatewayConfig,\n X402OptionConfig,\n} from './types';\n","/**\n * Locates and parses `config.yaml`, then hands the raw value to `parseConfig`\n * for validation\n */\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport { parse as parseYaml, YAMLError } from 'yaml';\nimport { CommerceError } from '../core';\nimport { DEFAULT_CONFIG_FILENAME } from './filename';\nimport { type GatewayConfig, parseConfig } from './schema';\n\nconst CONFIG_PATH_ENV_VAR = 'AGENT_COMMERCE_CONFIG';\n\nexport interface LoadConfigOptions {\n readonly path?: string;\n readonly env?: NodeJS.ProcessEnv;\n readonly cwd?: string;\n}\n\nexport async function loadConfig(options: LoadConfigOptions = {}): Promise<GatewayConfig> {\n const env = options.env ?? process.env;\n const cwd = options.cwd ?? process.cwd();\n const configPath = resolveConfigPath(options.path, env, cwd);\n\n let text: string;\n try {\n text = await fs.readFile(configPath, 'utf8');\n } catch (error) {\n throw new CommerceError('CONFIG_INVALID', `Could not read configuration file \"${configPath}\"`, {\n details: { path: configPath },\n cause: error,\n });\n }\n\n let raw: unknown;\n try {\n raw = parseYaml(text);\n } catch (error) {\n const { reason, details } = describeYamlError(error);\n throw new CommerceError(\n 'CONFIG_INVALID',\n `Configuration file \"${configPath}\" is not valid YAML: ${reason}`,\n {\n details: { path: configPath, ...details },\n // Kept for programmatic callers. Never print it: its `.message` quotes\n // the source line (see describeYamlError).\n cause: error,\n },\n );\n }\n\n return parseConfig(raw, env);\n}\n\n// Plain-English phrasing for common YAML error codes. Fixed strings, so they\n// never carry file content; an unlisted code is shown bare.\nconst YAML_ERROR_EXPLANATIONS: Readonly<Record<string, string>> = {\n DUPLICATE_KEY: 'map keys must be unique',\n BAD_INDENT: 'bad indentation',\n TAB_AS_INDENT: 'tabs cannot be used for indentation',\n MISSING_CHAR: 'a required character is missing',\n BLOCK_AS_IMPLICIT_KEY: 'a block value cannot be used as a key (missing quotes, or a stray colon)',\n MULTILINE_IMPLICIT_KEY: 'a key spans multiple lines (missing quotes, or a stray colon)',\n UNEXPECTED_TOKEN: 'unexpected token',\n};\n\n/**\n * Describes a YAML failure from the error's structured `code` and `linePos`\n * only. The `yaml` package's `message` quotes the source line, and a syntax\n * error next to an inline secret (`server.adminToken`, a facilitator\n * `signerPrivateKey`) would print it in `validate` and `doctor` output.\n */\nfunction describeYamlError(error: unknown): {\n reason: string;\n details: Record<string, unknown>;\n} {\n if (!(error instanceof YAMLError)) {\n return { reason: 'unknown YAML parse error', details: {} };\n }\n const start = error.linePos?.[0];\n const where =\n start === undefined ? '' : ` at line ${String(start.line)}, column ${String(start.col)}`;\n const explanation = YAML_ERROR_EXPLANATIONS[error.code];\n const what = explanation === undefined ? error.code : `${error.code} (${explanation})`;\n return {\n reason: `${what}${where}`,\n details: {\n yamlErrorCode: error.code,\n ...(start === undefined ? {} : { line: start.line, column: start.col }),\n },\n };\n}\n\nfunction resolveConfigPath(\n explicitPath: string | undefined,\n env: NodeJS.ProcessEnv,\n cwd: string,\n): string {\n if (explicitPath) return path.resolve(cwd, explicitPath);\n const fromEnv = env[CONFIG_PATH_ENV_VAR];\n if (fromEnv) return path.resolve(cwd, fromEnv);\n return path.resolve(cwd, DEFAULT_CONFIG_FILENAME);\n}\n"]}