@absol-labs/agent 0.10.0 → 0.12.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +106 -30
  2. package/dist/capability/invocation-capability.d.ts +20 -8
  3. package/dist/capability/invocation-capability.d.ts.map +1 -1
  4. package/dist/capability/invocation-capability.js.map +1 -1
  5. package/dist/capability/probe-capability.d.ts +225 -0
  6. package/dist/capability/probe-capability.d.ts.map +1 -0
  7. package/dist/capability/probe-capability.js +248 -0
  8. package/dist/capability/probe-capability.js.map +1 -0
  9. package/dist/cli/args.d.ts +11 -0
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js +23 -0
  12. package/dist/cli/args.js.map +1 -1
  13. package/dist/cli/commands/claim.d.ts.map +1 -1
  14. package/dist/cli/commands/claim.js +21 -5
  15. package/dist/cli/commands/claim.js.map +1 -1
  16. package/dist/cli/commands/close.d.ts.map +1 -1
  17. package/dist/cli/commands/close.js +51 -7
  18. package/dist/cli/commands/close.js.map +1 -1
  19. package/dist/cli/commands/invoke.d.ts +2 -0
  20. package/dist/cli/commands/invoke.d.ts.map +1 -1
  21. package/dist/cli/commands/invoke.js +3 -2
  22. package/dist/cli/commands/invoke.js.map +1 -1
  23. package/dist/cli/commands/mcp.d.ts.map +1 -1
  24. package/dist/cli/commands/mcp.js +15 -2
  25. package/dist/cli/commands/mcp.js.map +1 -1
  26. package/dist/cli/commands/open.d.ts.map +1 -1
  27. package/dist/cli/commands/open.js +121 -15
  28. package/dist/cli/commands/open.js.map +1 -1
  29. package/dist/cli/commands/pay.d.ts +19 -0
  30. package/dist/cli/commands/pay.d.ts.map +1 -0
  31. package/dist/cli/commands/pay.js +355 -0
  32. package/dist/cli/commands/pay.js.map +1 -0
  33. package/dist/cli/commands/reclaim-unverified.d.ts.map +1 -1
  34. package/dist/cli/commands/reclaim-unverified.js +15 -6
  35. package/dist/cli/commands/reclaim-unverified.js.map +1 -1
  36. package/dist/cli/commands/reclaim.d.ts +23 -2
  37. package/dist/cli/commands/reclaim.d.ts.map +1 -1
  38. package/dist/cli/commands/reclaim.js +200 -21
  39. package/dist/cli/commands/reclaim.js.map +1 -1
  40. package/dist/cli/commands/refund.d.ts +13 -0
  41. package/dist/cli/commands/refund.d.ts.map +1 -0
  42. package/dist/cli/commands/refund.js +224 -0
  43. package/dist/cli/commands/refund.js.map +1 -0
  44. package/dist/cli/commands/status.d.ts.map +1 -1
  45. package/dist/cli/commands/status.js +10 -1
  46. package/dist/cli/commands/status.js.map +1 -1
  47. package/dist/cli/commands/streams.js +9 -13
  48. package/dist/cli/commands/streams.js.map +1 -1
  49. package/dist/cli/commands/watch.d.ts.map +1 -1
  50. package/dist/cli/commands/watch.js +2 -1
  51. package/dist/cli/commands/watch.js.map +1 -1
  52. package/dist/cli/config.d.ts +44 -26
  53. package/dist/cli/config.d.ts.map +1 -1
  54. package/dist/cli/config.js +88 -38
  55. package/dist/cli/config.js.map +1 -1
  56. package/dist/cli/deps.d.ts +86 -7
  57. package/dist/cli/deps.d.ts.map +1 -1
  58. package/dist/cli/deps.js +102 -16
  59. package/dist/cli/deps.js.map +1 -1
  60. package/dist/cli/errors.d.ts.map +1 -1
  61. package/dist/cli/errors.js +21 -1
  62. package/dist/cli/errors.js.map +1 -1
  63. package/dist/cli/escape-hatch.d.ts +6 -4
  64. package/dist/cli/escape-hatch.d.ts.map +1 -1
  65. package/dist/cli/escape-hatch.js +6 -2
  66. package/dist/cli/escape-hatch.js.map +1 -1
  67. package/dist/cli/listings.d.ts +18 -0
  68. package/dist/cli/listings.d.ts.map +1 -1
  69. package/dist/cli/listings.js +22 -12
  70. package/dist/cli/listings.js.map +1 -1
  71. package/dist/cli/preflight.d.ts +20 -14
  72. package/dist/cli/preflight.d.ts.map +1 -1
  73. package/dist/cli/preflight.js +34 -20
  74. package/dist/cli/preflight.js.map +1 -1
  75. package/dist/cli/privy.d.ts +83 -0
  76. package/dist/cli/privy.d.ts.map +1 -0
  77. package/dist/cli/privy.js +232 -0
  78. package/dist/cli/privy.js.map +1 -0
  79. package/dist/cli/reclaimability.d.ts +82 -0
  80. package/dist/cli/reclaimability.d.ts.map +1 -0
  81. package/dist/cli/reclaimability.js +80 -0
  82. package/dist/cli/reclaimability.js.map +1 -0
  83. package/dist/cli/run.d.ts +2 -1
  84. package/dist/cli/run.d.ts.map +1 -1
  85. package/dist/cli/run.js +40 -11
  86. package/dist/cli/run.js.map +1 -1
  87. package/dist/cli/scan-range.d.ts +2 -2
  88. package/dist/cli/scan-range.js +2 -2
  89. package/dist/cli/spend-policy.d.ts +60 -0
  90. package/dist/cli/spend-policy.d.ts.map +1 -0
  91. package/dist/cli/spend-policy.js +65 -0
  92. package/dist/cli/spend-policy.js.map +1 -0
  93. package/dist/cli/status.d.ts +3 -1
  94. package/dist/cli/status.d.ts.map +1 -1
  95. package/dist/cli/status.js +15 -3
  96. package/dist/cli/status.js.map +1 -1
  97. package/dist/cli/wallet.d.ts +109 -40
  98. package/dist/cli/wallet.d.ts.map +1 -1
  99. package/dist/cli/wallet.js +109 -44
  100. package/dist/cli/wallet.js.map +1 -1
  101. package/dist/discovery/rate-band.d.ts +74 -0
  102. package/dist/discovery/rate-band.d.ts.map +1 -0
  103. package/dist/discovery/rate-band.js +114 -0
  104. package/dist/discovery/rate-band.js.map +1 -0
  105. package/dist/escrow-generation.d.ts +81 -0
  106. package/dist/escrow-generation.d.ts.map +1 -0
  107. package/dist/escrow-generation.js +76 -0
  108. package/dist/escrow-generation.js.map +1 -0
  109. package/dist/frameworks/agentkit.d.ts +8 -4
  110. package/dist/frameworks/agentkit.d.ts.map +1 -1
  111. package/dist/frameworks/agentkit.js +27 -10
  112. package/dist/frameworks/agentkit.js.map +1 -1
  113. package/dist/frameworks/eliza.d.ts +3 -3
  114. package/dist/frameworks/eliza.d.ts.map +1 -1
  115. package/dist/frameworks/eliza.js +15 -6
  116. package/dist/frameworks/eliza.js.map +1 -1
  117. package/dist/frameworks/langchain.d.ts.map +1 -1
  118. package/dist/frameworks/langchain.js +8 -0
  119. package/dist/frameworks/langchain.js.map +1 -1
  120. package/dist/gateway/caller-auth-gateway.d.ts +91 -4
  121. package/dist/gateway/caller-auth-gateway.d.ts.map +1 -1
  122. package/dist/gateway/caller-auth-gateway.js +184 -7
  123. package/dist/gateway/caller-auth-gateway.js.map +1 -1
  124. package/dist/gateway/http-server.d.ts +121 -1
  125. package/dist/gateway/http-server.d.ts.map +1 -1
  126. package/dist/gateway/http-server.js +474 -5
  127. package/dist/gateway/http-server.js.map +1 -1
  128. package/dist/gateway/probe-auth.d.ts +112 -0
  129. package/dist/gateway/probe-auth.d.ts.map +1 -0
  130. package/dist/gateway/probe-auth.js +127 -0
  131. package/dist/gateway/probe-auth.js.map +1 -0
  132. package/dist/gateway/signed-rate-bounds.d.ts +51 -0
  133. package/dist/gateway/signed-rate-bounds.d.ts.map +1 -0
  134. package/dist/gateway/signed-rate-bounds.js +94 -0
  135. package/dist/gateway/signed-rate-bounds.js.map +1 -0
  136. package/dist/gateway/x402-opener-mode.d.ts +215 -0
  137. package/dist/gateway/x402-opener-mode.d.ts.map +1 -0
  138. package/dist/gateway/x402-opener-mode.js +639 -0
  139. package/dist/gateway/x402-opener-mode.js.map +1 -0
  140. package/dist/index.d.ts +11 -5
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +15 -5
  143. package/dist/index.js.map +1 -1
  144. package/dist/mandates/env.d.ts +3 -2
  145. package/dist/mandates/env.d.ts.map +1 -1
  146. package/dist/mandates/env.js +3 -2
  147. package/dist/mandates/env.js.map +1 -1
  148. package/dist/mcp/server.d.ts +100 -0
  149. package/dist/mcp/server.d.ts.map +1 -1
  150. package/dist/mcp/server.js +719 -39
  151. package/dist/mcp/server.js.map +1 -1
  152. package/dist/mcp/service-invoker.d.ts +97 -0
  153. package/dist/mcp/service-invoker.d.ts.map +1 -0
  154. package/dist/mcp/service-invoker.js +167 -0
  155. package/dist/mcp/service-invoker.js.map +1 -0
  156. package/dist/mcp/x402-tools.d.ts +104 -0
  157. package/dist/mcp/x402-tools.d.ts.map +1 -0
  158. package/dist/mcp/x402-tools.js +434 -0
  159. package/dist/mcp/x402-tools.js.map +1 -0
  160. package/dist/network.d.ts +119 -0
  161. package/dist/network.d.ts.map +1 -0
  162. package/dist/network.js +199 -0
  163. package/dist/network.js.map +1 -0
  164. package/dist/sdk/invoke.d.ts +23 -4
  165. package/dist/sdk/invoke.d.ts.map +1 -1
  166. package/dist/sdk/invoke.js +71 -10
  167. package/dist/sdk/invoke.js.map +1 -1
  168. package/dist/wallet/autonomous-wallet-broker.d.ts +3 -0
  169. package/dist/wallet/autonomous-wallet-broker.d.ts.map +1 -1
  170. package/dist/wallet/autonomous-wallet-broker.js +27 -23
  171. package/dist/wallet/autonomous-wallet-broker.js.map +1 -1
  172. package/dist/wallet/autonomous-wallet-protocol.d.ts +8 -2
  173. package/dist/wallet/autonomous-wallet-protocol.d.ts.map +1 -1
  174. package/dist/wallet/autonomous-wallet-protocol.js +9 -2
  175. package/dist/wallet/autonomous-wallet-protocol.js.map +1 -1
  176. package/dist/wallet/autonomous-wallet.d.ts.map +1 -1
  177. package/dist/wallet/autonomous-wallet.js +3 -2
  178. package/dist/wallet/autonomous-wallet.js.map +1 -1
  179. package/dist/wallet/broker-escrows.d.ts +222 -0
  180. package/dist/wallet/broker-escrows.d.ts.map +1 -0
  181. package/dist/wallet/broker-escrows.js +36 -0
  182. package/dist/wallet/broker-escrows.js.map +1 -0
  183. package/dist/wallet/lifecycle.d.ts +21 -5
  184. package/dist/wallet/lifecycle.d.ts.map +1 -1
  185. package/dist/wallet/lifecycle.js +32 -12
  186. package/dist/wallet/lifecycle.js.map +1 -1
  187. package/dist/wallet/privy-broker-server.d.ts.map +1 -1
  188. package/dist/wallet/privy-broker-server.js +31 -26
  189. package/dist/wallet/privy-broker-server.js.map +1 -1
  190. package/dist/wallet/privy-session-broker.d.ts +14 -5
  191. package/dist/wallet/privy-session-broker.d.ts.map +1 -1
  192. package/dist/wallet/privy-session-broker.js +29 -17
  193. package/dist/wallet/privy-session-broker.js.map +1 -1
  194. package/dist/wallet/privy-session-provider.d.ts +3 -1
  195. package/dist/wallet/privy-session-provider.d.ts.map +1 -1
  196. package/dist/wallet/privy-session-provider.js +5 -3
  197. package/dist/wallet/privy-session-provider.js.map +1 -1
  198. package/dist/wallet/provider.d.ts.map +1 -1
  199. package/dist/wallet/provider.js +15 -8
  200. package/dist/wallet/provider.js.map +1 -1
  201. package/dist/x402/facilitator.d.ts +42 -17
  202. package/dist/x402/facilitator.d.ts.map +1 -1
  203. package/dist/x402/facilitator.js +49 -33
  204. package/dist/x402/facilitator.js.map +1 -1
  205. package/dist/x402-buyer/guarded-fetch.d.ts +51 -0
  206. package/dist/x402-buyer/guarded-fetch.d.ts.map +1 -0
  207. package/dist/x402-buyer/guarded-fetch.js +147 -0
  208. package/dist/x402-buyer/guarded-fetch.js.map +1 -0
  209. package/dist/x402-buyer/index.d.ts +10 -0
  210. package/dist/x402-buyer/index.d.ts.map +1 -0
  211. package/dist/x402-buyer/index.js +10 -0
  212. package/dist/x402-buyer/index.js.map +1 -0
  213. package/dist/x402-buyer/pay.d.ts +135 -0
  214. package/dist/x402-buyer/pay.d.ts.map +1 -0
  215. package/dist/x402-buyer/pay.js +336 -0
  216. package/dist/x402-buyer/pay.js.map +1 -0
  217. package/dist/x402-opener/abi.d.ts +684 -0
  218. package/dist/x402-opener/abi.d.ts.map +1 -0
  219. package/dist/x402-opener/abi.js +880 -0
  220. package/dist/x402-opener/abi.js.map +1 -0
  221. package/dist/x402-opener/facilitator-entry.d.ts +3 -0
  222. package/dist/x402-opener/facilitator-entry.d.ts.map +1 -0
  223. package/dist/x402-opener/facilitator-entry.js +37 -0
  224. package/dist/x402-opener/facilitator-entry.js.map +1 -0
  225. package/dist/x402-opener/facilitator-server.d.ts +180 -0
  226. package/dist/x402-opener/facilitator-server.d.ts.map +1 -0
  227. package/dist/x402-opener/facilitator-server.js +696 -0
  228. package/dist/x402-opener/facilitator-server.js.map +1 -0
  229. package/dist/x402-opener/index.d.ts +14 -0
  230. package/dist/x402-opener/index.d.ts.map +1 -0
  231. package/dist/x402-opener/index.js +14 -0
  232. package/dist/x402-opener/index.js.map +1 -0
  233. package/dist/x402-opener/listing-resolver.d.ts +55 -0
  234. package/dist/x402-opener/listing-resolver.d.ts.map +1 -0
  235. package/dist/x402-opener/listing-resolver.js +125 -0
  236. package/dist/x402-opener/listing-resolver.js.map +1 -0
  237. package/dist/x402-opener/refund-relay.d.ts +240 -0
  238. package/dist/x402-opener/refund-relay.d.ts.map +1 -0
  239. package/dist/x402-opener/refund-relay.js +1240 -0
  240. package/dist/x402-opener/refund-relay.js.map +1 -0
  241. package/dist/x402-opener/relayer-queue.d.ts +14 -0
  242. package/dist/x402-opener/relayer-queue.d.ts.map +1 -0
  243. package/dist/x402-opener/relayer-queue.js +18 -0
  244. package/dist/x402-opener/relayer-queue.js.map +1 -0
  245. package/dist/x402-opener/scheme.d.ts +217 -0
  246. package/dist/x402-opener/scheme.d.ts.map +1 -0
  247. package/dist/x402-opener/scheme.js +749 -0
  248. package/dist/x402-opener/scheme.js.map +1 -0
  249. package/dist/x402-opener/terms.d.ts +105 -0
  250. package/dist/x402-opener/terms.d.ts.map +1 -0
  251. package/dist/x402-opener/terms.js +212 -0
  252. package/dist/x402-opener/terms.js.map +1 -0
  253. package/dist/zktls/reclaim.d.ts +2 -2
  254. package/docs/agent-layer.md +13 -8
  255. package/docs/autonomous-privy-wallet.md +188 -0
  256. package/docs/cli.md +342 -53
  257. package/docs/langchain.md +5 -0
  258. package/docs/mcp-hosted.md +4 -3
  259. package/docs/mcp-reference.md +245 -0
  260. package/docs/probe-capability.md +191 -0
  261. package/docs/quickstart.md +54 -5
  262. package/docs/threat-model.md +24 -3
  263. package/docs/x402.md +681 -0
  264. package/package.json +19 -6
  265. package/src/capability/invocation-capability.ts +17 -1
  266. package/src/capability/probe-capability.ts +355 -0
  267. package/src/cli/args.ts +29 -0
  268. package/src/cli/commands/claim.ts +31 -5
  269. package/src/cli/commands/close.ts +56 -7
  270. package/src/cli/commands/invoke.ts +6 -2
  271. package/src/cli/commands/mcp.ts +18 -2
  272. package/src/cli/commands/open.ts +151 -14
  273. package/src/cli/commands/pay.ts +442 -0
  274. package/src/cli/commands/reclaim-unverified.ts +24 -6
  275. package/src/cli/commands/reclaim.ts +274 -19
  276. package/src/cli/commands/refund.ts +277 -0
  277. package/src/cli/commands/status.ts +17 -1
  278. package/src/cli/commands/streams.ts +11 -15
  279. package/src/cli/commands/watch.ts +7 -1
  280. package/src/cli/config.ts +139 -52
  281. package/src/cli/deps.ts +189 -25
  282. package/src/cli/errors.ts +24 -1
  283. package/src/cli/escape-hatch.ts +19 -5
  284. package/src/cli/listings.ts +43 -10
  285. package/src/cli/preflight.ts +36 -21
  286. package/src/cli/privy.ts +398 -0
  287. package/src/cli/reclaimability.ts +154 -0
  288. package/src/cli/run.ts +54 -11
  289. package/src/cli/scan-range.ts +2 -2
  290. package/src/cli/spend-policy.ts +139 -0
  291. package/src/cli/status.ts +14 -1
  292. package/src/cli/wallet.ts +189 -58
  293. package/src/discovery/rate-band.ts +172 -0
  294. package/src/escrow-generation.ts +135 -0
  295. package/src/frameworks/agentkit.ts +45 -11
  296. package/src/frameworks/eliza.ts +27 -5
  297. package/src/frameworks/langchain.ts +14 -0
  298. package/src/gateway/caller-auth-gateway.ts +336 -13
  299. package/src/gateway/http-server.ts +690 -7
  300. package/src/gateway/probe-auth.ts +191 -0
  301. package/src/gateway/signed-rate-bounds.ts +164 -0
  302. package/src/gateway/x402-opener-mode.ts +974 -0
  303. package/src/index.ts +112 -14
  304. package/src/mandates/env.ts +3 -2
  305. package/src/mcp/server.ts +973 -44
  306. package/src/mcp/service-invoker.ts +285 -0
  307. package/src/mcp/x402-tools.ts +621 -0
  308. package/src/network.ts +302 -0
  309. package/src/sdk/invoke.ts +96 -17
  310. package/src/wallet/autonomous-wallet-broker.ts +46 -20
  311. package/src/wallet/autonomous-wallet-protocol.ts +11 -2
  312. package/src/wallet/autonomous-wallet.ts +4 -2
  313. package/src/wallet/broker-escrows.ts +66 -0
  314. package/src/wallet/lifecycle.ts +53 -18
  315. package/src/wallet/privy-broker-server.ts +35 -25
  316. package/src/wallet/privy-session-broker.ts +58 -25
  317. package/src/wallet/privy-session-provider.ts +7 -3
  318. package/src/wallet/provider.ts +20 -15
  319. package/src/x402/facilitator.ts +85 -46
  320. package/src/x402-buyer/guarded-fetch.ts +213 -0
  321. package/src/x402-buyer/index.ts +9 -0
  322. package/src/x402-buyer/pay.ts +517 -0
  323. package/src/x402-opener/abi.ts +881 -0
  324. package/src/x402-opener/facilitator-entry.ts +45 -0
  325. package/src/x402-opener/facilitator-server.ts +1014 -0
  326. package/src/x402-opener/index.ts +13 -0
  327. package/src/x402-opener/listing-resolver.ts +202 -0
  328. package/src/x402-opener/refund-relay.ts +1743 -0
  329. package/src/x402-opener/relayer-queue.ts +18 -0
  330. package/src/x402-opener/scheme.ts +1133 -0
  331. package/src/x402-opener/terms.ts +300 -0
@@ -1,6 +1,12 @@
1
1
  import { createServer, } from "node:http";
2
2
  import { isAddress, isHex } from "viem";
3
3
  import { CallerAuthGateway, DEFAULT_MAX_STATE_STALENESS_SECONDS, MAX_CORROBORATING_STREAM_READERS, } from "./caller-auth-gateway.js";
4
+ import { DEFAULT_MAX_PROBES_PER_MINUTE, DEFAULT_ORACLE_SIGNER_CACHE_SECONDS, } from "./probe-auth.js";
5
+ import { PROBE_MARKER_HEADER_NAME } from "../capability/probe-capability.js";
6
+ import { networkForCaip2 } from "@absol-labs/sdk";
7
+ import { chainIdFromNetwork, assertSchemaDeclaration, assertValidPrice, assertValidTerms, isHttpLink, } from "../x402-opener/terms.js";
8
+ import { loadSignedRateBoundsFile } from "./signed-rate-bounds.js";
9
+ import { defaultNetwork, requireNetworkForChainId } from "../network.js";
4
10
  /**
5
11
  * Reference standalone reverse-proxy gateway server (metrik-agent#63).
6
12
  *
@@ -30,7 +36,7 @@ export function createCallerAuthGatewayServer(config) {
30
36
  const upstreamBase = new URL(config.upstreamUrl);
31
37
  const upstreamTimeoutMs = config.upstreamTimeoutMs ?? 30_000;
32
38
  const httpServer = createServer((req, res) => {
33
- handleRequest(req, res, config.gateway, upstreamBase, upstreamTimeoutMs).catch((error) => {
39
+ handleRequest(req, res, config.gateway, upstreamBase, upstreamTimeoutMs, config.x402Opener).catch((error) => {
34
40
  logError("unhandled request error", error);
35
41
  if (!res.headersSent) {
36
42
  writeJsonError(res, 500, "internal-error");
@@ -56,10 +62,25 @@ export function createCallerAuthGatewayServer(config) {
56
62
  }),
57
63
  };
58
64
  }
59
- async function handleRequest(req, res, gateway, upstreamBase, upstreamTimeoutMs) {
65
+ async function handleRequest(req, res, gateway, upstreamBase, upstreamTimeoutMs, x402Opener) {
60
66
  const requestUrl = new URL(req.url ?? "/", "http://localhost");
61
67
  const method = req.method ?? "GET";
62
68
  const headers = normalizeIncomingHeaders(req.headers);
69
+ if (x402Opener !== undefined) {
70
+ const route = routeX402(headers, gateway);
71
+ if (route === "ambiguous-probe-mode") {
72
+ writeJsonError(res, 400, "ambiguous-probe-mode");
73
+ return;
74
+ }
75
+ if (route === "ambiguous-capability-and-payment") {
76
+ writeJsonError(res, 400, "ambiguous-capability-and-payment");
77
+ return;
78
+ }
79
+ if (route === "x402") {
80
+ await handleX402Request(req, res, x402Opener, requestUrl, method, headers, upstreamBase, upstreamTimeoutMs);
81
+ return;
82
+ }
83
+ }
63
84
  const decision = await gateway.authorize({
64
85
  headers,
65
86
  method,
@@ -80,6 +101,15 @@ async function handleRequest(req, res, gateway, upstreamBase, upstreamTimeoutMs)
80
101
  }
81
102
  upstreamHeaders.set(key, value);
82
103
  }
104
+ // The probe marker is gateway-asserted, never client-asserted: strip any
105
+ // inbound copy first, so a paying caller cannot mark its own billable request
106
+ // as verification traffic and slip past the seller's metering.
107
+ upstreamHeaders.delete(PROBE_MARKER_HEADER_NAME);
108
+ if (decision.probe !== undefined) {
109
+ // Advisory marker so the seller's OWN metering can exclude verification
110
+ // traffic from billable usage. The gateway itself charges nothing for it.
111
+ upstreamHeaders.set(PROBE_MARKER_HEADER_NAME, "1");
112
+ }
83
113
  const upstreamUrl = new URL(requestUrl.pathname + requestUrl.search, upstreamBase);
84
114
  const controller = new AbortController();
85
115
  const timeout = setTimeout(() => controller.abort(), upstreamTimeoutMs);
@@ -90,8 +120,9 @@ async function handleRequest(req, res, gateway, upstreamBase, upstreamTimeoutMs)
90
120
  ...(body === undefined ? {} : { body }),
91
121
  signal: controller.signal,
92
122
  });
93
- res.writeHead(upstreamResponse.status, headersToObject(upstreamResponse.headers));
94
123
  const buffer = Buffer.from(await upstreamResponse.arrayBuffer());
124
+ const responseHeaders = headersToObject(upstreamResponse.headers);
125
+ res.writeHead(upstreamResponse.status, responseHeaders);
95
126
  res.end(buffer);
96
127
  }
97
128
  catch (error) {
@@ -102,6 +133,95 @@ async function handleRequest(req, res, gateway, upstreamBase, upstreamTimeoutMs)
102
133
  clearTimeout(timeout);
103
134
  }
104
135
  }
136
+ /** x402 v2 request header (base64 `PaymentPayload`). */
137
+ const PAYMENT_SIGNATURE_HEADER = "payment-signature";
138
+ /** x402 v1 request header. Never forwarded upstream in x402 mode either. */
139
+ const LEGACY_PAYMENT_HEADER = "x-payment";
140
+ /**
141
+ * Decides which path an x402-mode request takes. A payment is never mixed with
142
+ * a capability or a probe: both-present is a `400`, not a guess.
143
+ */
144
+ function routeX402(headers, gateway) {
145
+ const present = (name) => {
146
+ const value = headers[name];
147
+ return value !== undefined && value.trim().length > 0;
148
+ };
149
+ const hasPayment = present(PAYMENT_SIGNATURE_HEADER);
150
+ const hasCapability = present(gateway.capabilityHeaderName);
151
+ const hasProbe = present(gateway.probeCapabilityHeaderName);
152
+ if (hasProbe && hasPayment)
153
+ return "ambiguous-probe-mode";
154
+ if (hasCapability && hasPayment)
155
+ return "ambiguous-capability-and-payment";
156
+ if (hasPayment)
157
+ return "x402";
158
+ if (!hasCapability && !hasProbe)
159
+ return "x402";
160
+ return "capability-or-probe";
161
+ }
162
+ /**
163
+ * The x402 v2 path. The protocol logic (verify → upstream → settle-before-body)
164
+ * lives with the mode in `./x402-opener-mode.ts`, so this module — and the
165
+ * package's root barrel — never loads `@x402/*` for a gateway that does not
166
+ * enable it. This function only supplies the transport.
167
+ */
168
+ async function handleX402Request(req, res, mode, requestUrl, method, headers, upstreamBase, upstreamTimeoutMs) {
169
+ await mode.handle({
170
+ requestUrl,
171
+ method,
172
+ headers,
173
+ callUpstream: () => callUpstream(req, method, headers, requestUrl, upstreamBase, upstreamTimeoutMs),
174
+ writeJson: (status, reason) => writeJsonError(res, status, reason),
175
+ write: (status, responseHeaders, body) => {
176
+ if (res.headersSent) {
177
+ res.end();
178
+ return;
179
+ }
180
+ res.writeHead(status, responseHeaders);
181
+ res.end(body);
182
+ },
183
+ logError,
184
+ });
185
+ }
186
+ /** Buffers one upstream call. Payment headers are never forwarded. */
187
+ async function callUpstream(req, method, headers, requestUrl, upstreamBase, upstreamTimeoutMs) {
188
+ let body;
189
+ if (method !== "GET" && method !== "HEAD") {
190
+ body = await readBody(req);
191
+ }
192
+ const upstreamHeaders = new Headers();
193
+ for (const [key, value] of Object.entries(headers)) {
194
+ if (value === undefined || HOP_BY_HOP_HEADERS.has(key))
195
+ continue;
196
+ upstreamHeaders.set(key, value);
197
+ }
198
+ // A signed payment authorization must never reach the upstream: anyone who
199
+ // holds it can submit it to USDC directly, which strands the payer's funds
200
+ // in the opener. The probe marker is gateway-asserted only.
201
+ upstreamHeaders.delete(PAYMENT_SIGNATURE_HEADER);
202
+ upstreamHeaders.delete(LEGACY_PAYMENT_HEADER);
203
+ upstreamHeaders.delete(PROBE_MARKER_HEADER_NAME);
204
+ const upstreamUrl = new URL(requestUrl.pathname + requestUrl.search, upstreamBase);
205
+ const controller = new AbortController();
206
+ const timeout = setTimeout(() => controller.abort(), upstreamTimeoutMs);
207
+ try {
208
+ const response = await fetch(upstreamUrl, {
209
+ method,
210
+ headers: upstreamHeaders,
211
+ ...(body === undefined ? {} : { body }),
212
+ signal: controller.signal,
213
+ });
214
+ const buffer = Buffer.from(await response.arrayBuffer());
215
+ return {
216
+ status: response.status,
217
+ headers: headersToObject(response.headers),
218
+ body: buffer,
219
+ };
220
+ }
221
+ finally {
222
+ clearTimeout(timeout);
223
+ }
224
+ }
105
225
  function normalizeIncomingHeaders(headers) {
106
226
  const normalized = {};
107
227
  for (const [key, value] of Object.entries(headers)) {
@@ -164,8 +284,14 @@ function logError(context, error) {
164
284
  * - `METRIK_GATEWAY_MAX_STATE_STALENESS_SECONDS` (optional) - reject stream
165
285
  * state observed more than N seconds behind the wall clock. Default
166
286
  * {@link DEFAULT_MAX_STATE_STALENESS_SECONDS}.
167
- * - `METRIK_GATEWAY_CHAIN_ID` (optional) - default `84532` (Base Sepolia).
287
+ * - `METRIK_GATEWAY_CHAIN_ID` (optional) - default the registry's default
288
+ * network. Must be a network the SDK registry knows.
168
289
  * - `METRIK_GATEWAY_HEADER_NAME` (optional) - default `x-metrik-capability`.
290
+ * - `METRIK_GATEWAY_SIGNED_DESCRIPTOR_FILE` (optional, recommended) - JSON file
291
+ * holding this service's operator-signed descriptor (or an array, one per
292
+ * served serviceRef). Verified at startup; the capability path then refuses
293
+ * any stream whose on-chain `ratePerSecond` is outside the signed
294
+ * `minRatePerSecond`/`maxRatePerSecond` (`stream-rate-out-of-bounds`).
169
295
  * - `PORT` / `METRIK_GATEWAY_PORT` (optional) - default `8787`.
170
296
  * - `METRIK_GATEWAY_HOST` (optional) - default `0.0.0.0`.
171
297
  *
@@ -193,11 +319,14 @@ export function parseCallerAuthGatewayEnvConfig(env = process.env) {
193
319
  const upstreamUrl = requireEnv(env, "METRIK_GATEWAY_UPSTREAM_URL");
194
320
  // eslint-disable-next-line no-new -- validates the URL is well-formed.
195
321
  new URL(upstreamUrl);
196
- const chainIdRaw = env.METRIK_GATEWAY_CHAIN_ID ?? "84532";
322
+ const chainIdRaw = env.METRIK_GATEWAY_CHAIN_ID ?? String(defaultNetwork().chain.id);
197
323
  const chainId = Number(chainIdRaw);
198
324
  if (!Number.isInteger(chainId) || chainId <= 0) {
199
325
  throw new Error(`invalid METRIK_GATEWAY_CHAIN_ID: ${chainIdRaw}`);
200
326
  }
327
+ // The stream reader is built from the registry entry for this chain, so an
328
+ // unknown chain is refused at startup rather than at the first request.
329
+ requireNetworkForChainId(chainId, {}, "METRIK_GATEWAY_CHAIN_ID");
201
330
  const portRaw = env.METRIK_GATEWAY_PORT ?? env.PORT ?? "8787";
202
331
  const port = Number(portRaw);
203
332
  if (!Number.isInteger(port) || port < 0 || port > 65535) {
@@ -230,6 +359,12 @@ export function parseCallerAuthGatewayEnvConfig(env = process.env) {
230
359
  maxStateStalenessSeconds <= 0) {
231
360
  throw new Error(`invalid METRIK_GATEWAY_MAX_STATE_STALENESS_SECONDS: ${stalenessRaw}`);
232
361
  }
362
+ const signedDescriptorFile = env.METRIK_GATEWAY_SIGNED_DESCRIPTOR_FILE?.trim() || undefined;
363
+ const probe = parseGatewayProbeEnvConfig(env);
364
+ const x402Opener = parseGatewayX402OpenerEnvConfig(env, {
365
+ chainId,
366
+ serviceRef: serviceRef,
367
+ });
233
368
  return {
234
369
  host,
235
370
  port,
@@ -244,8 +379,248 @@ export function parseCallerAuthGatewayEnvConfig(env = process.env) {
244
379
  corroboratingRpcUrls,
245
380
  maxStateStalenessSeconds,
246
381
  ...(headerName === undefined ? {} : { headerName }),
382
+ ...(probe === undefined ? {} : { probe }),
383
+ ...(x402Opener === undefined ? {} : { x402Opener }),
384
+ ...(signedDescriptorFile === undefined ? {} : { signedDescriptorFile }),
247
385
  };
248
386
  }
387
+ /**
388
+ * The x402 v2 opener mode is OFF unless `METRIK_GATEWAY_X402V2_OPENER` is
389
+ * truthy. When on, an uncapabilitied request is answered with a standard x402
390
+ * v2 `402` whose `payTo` is the opener for this listing's terms, and payments
391
+ * settle into a `StreamEscrowV2` stream through the Metrik opener facilitator.
392
+ * The listing is the gateway's primary `METRIK_GATEWAY_SERVICE_REF`.
393
+ *
394
+ * These names deliberately differ from the removed v1 mode's variables, so a
395
+ * leftover v1 environment can never switch a payment mode on by accident.
396
+ *
397
+ * - `METRIK_GATEWAY_X402V2_OPENER` — `1`/`true`/`yes`/`on` to enable.
398
+ * - `METRIK_GATEWAY_X402V2_FACILITATOR_URL` (required) — the Metrik opener facilitator.
399
+ * - `METRIK_GATEWAY_X402V2_FACILITATOR_TOKEN` (required) — its `/settle` bearer token.
400
+ * - `METRIK_GATEWAY_X402V2_FACTORY_ADDRESS` — the `X402StreamOpenerFactory`; default the
401
+ * network's registered factory (required where the registry has none).
402
+ * - `METRIK_GATEWAY_X402V2_OPERATOR` (required) — must be the signed listing's operator.
403
+ * - `METRIK_GATEWAY_X402V2_RATE_PER_SECOND` (required) — USDC base units per second.
404
+ * - `METRIK_GATEWAY_X402V2_MAX_DURATION_SECONDS` (required).
405
+ * - `METRIK_GATEWAY_X402V2_PRICE` (required) — base units per paid request (= deposit),
406
+ * `0 < price <= rate * maxDuration`.
407
+ * - `METRIK_GATEWAY_X402V2_NETWORK` — default `eip155:<METRIK_GATEWAY_CHAIN_ID>`.
408
+ * - `METRIK_GATEWAY_X402V2_ASSET` — default the network's registered USDC.
409
+ * - `METRIK_GATEWAY_X402V2_ASSET_NAME` / `_ASSET_VERSION` — EIP-712 domain, default the
410
+ * registered USDC's own EIP-712 name/version.
411
+ * - `METRIK_GATEWAY_X402V2_MAX_TIMEOUT_SECONDS` — authorization validity, default 300.
412
+ * - `METRIK_GATEWAY_X402V2_FACILITATOR_TIMEOUT_SECONDS` — per-request facilitator
413
+ * timeout, default 120; must exceed the facilitator's receipt wait by 30 s.
414
+ * - `METRIK_GATEWAY_X402V2_RESOURCE_BASE_URL` — public origin for the 402 `resource.url`.
415
+ * - `METRIK_GATEWAY_X402V2_REGISTRY_URL` — registry used to prove the listing.
416
+ * - `METRIK_GATEWAY_X402V2_REFUND_BASE_URL` — public base URL of the facilitator's
417
+ * gasless refund relay, advertised in the 402; default the facilitator URL. Its
418
+ * `/supported` must show the opener marker with `refundRelay: true`.
419
+ * - `METRIK_GATEWAY_X402V2_DOCS_URL` — docs link in the 402; default docs/x402.md on GitHub.
420
+ * - `METRIK_GATEWAY_X402V2_ASSET_DECIMALS` — decimals for the 402 description; default 6.
421
+ * - `METRIK_GATEWAY_X402V2_DESCRIPTION` — one sentence on what the service does,
422
+ * prefixed to the fixed disclosure of what the payment buys (at most 300 chars).
423
+ * - `METRIK_GATEWAY_X402V2_SCHEMA` — optional JSON `{info: {input, output}, schema}`
424
+ * declared in the 402 as `extensions.bazaar` (declared only, never registered).
425
+ */
426
+ export function parseGatewayX402OpenerEnvConfig(env, context) {
427
+ const raw = env.METRIK_GATEWAY_X402V2_OPENER?.trim().toLowerCase();
428
+ if (raw === undefined ||
429
+ raw.length === 0 ||
430
+ ["0", "false", "no", "off"].includes(raw)) {
431
+ return undefined;
432
+ }
433
+ if (!["1", "true", "yes", "on"].includes(raw)) {
434
+ throw new Error(`invalid METRIK_GATEWAY_X402V2_OPENER: ${raw} (expected a boolean)`);
435
+ }
436
+ const facilitatorUrl = requireEnv(env, "METRIK_GATEWAY_X402V2_FACILITATOR_URL").trim();
437
+ // eslint-disable-next-line no-new -- validates the URL is well-formed.
438
+ new URL(facilitatorUrl);
439
+ const facilitatorToken = requireEnv(env, "METRIK_GATEWAY_X402V2_FACILITATOR_TOKEN").trim();
440
+ const network = (env.METRIK_GATEWAY_X402V2_NETWORK?.trim() ||
441
+ `eip155:${String(context.chainId)}`);
442
+ if (chainIdFromNetwork(network) !== context.chainId) {
443
+ throw new Error(`METRIK_GATEWAY_X402V2_NETWORK ${network} does not match METRIK_GATEWAY_CHAIN_ID ${context.chainId}`);
444
+ }
445
+ // Defaults come from the registry entry for THIS network only.
446
+ const registered = networkForCaip2(network);
447
+ const factoryRaw = env.METRIK_GATEWAY_X402V2_FACTORY_ADDRESS?.trim();
448
+ let factoryAddress;
449
+ if (factoryRaw === undefined || factoryRaw.length === 0) {
450
+ if (registered?.openerFactory == null) {
451
+ throw new Error(`METRIK_GATEWAY_X402V2_FACTORY_ADDRESS is required on ${network}: the network registry has no opener factory for it`);
452
+ }
453
+ factoryAddress = registered.openerFactory.address;
454
+ }
455
+ else if (isAddress(factoryRaw)) {
456
+ factoryAddress = factoryRaw;
457
+ }
458
+ else {
459
+ throw new Error("METRIK_GATEWAY_X402V2_FACTORY_ADDRESS must be an EVM address");
460
+ }
461
+ const operator = requireEnv(env, "METRIK_GATEWAY_X402V2_OPERATOR").trim();
462
+ if (!isAddress(operator)) {
463
+ throw new Error("METRIK_GATEWAY_X402V2_OPERATOR must be an EVM address");
464
+ }
465
+ const assetRaw = env.METRIK_GATEWAY_X402V2_ASSET?.trim();
466
+ let asset;
467
+ if (assetRaw === undefined || assetRaw.length === 0) {
468
+ if (registered === undefined) {
469
+ throw new Error(`METRIK_GATEWAY_X402V2_ASSET is required on ${network}: the network registry does not know it`);
470
+ }
471
+ asset = registered.usdc.address;
472
+ }
473
+ else if (isAddress(assetRaw)) {
474
+ asset = assetRaw;
475
+ }
476
+ else {
477
+ throw new Error("METRIK_GATEWAY_X402V2_ASSET must be an EVM address");
478
+ }
479
+ const terms = {
480
+ operator,
481
+ serviceRef: context.serviceRef,
482
+ ratePerSecond: requireUintEnv(env, "METRIK_GATEWAY_X402V2_RATE_PER_SECOND"),
483
+ maxDuration: requireUintEnv(env, "METRIK_GATEWAY_X402V2_MAX_DURATION_SECONDS"),
484
+ };
485
+ const price = requireUintEnv(env, "METRIK_GATEWAY_X402V2_PRICE");
486
+ // Startup validation: rate/duration > 0 and 0 < price <= rate * maxDuration.
487
+ assertValidTerms(terms);
488
+ assertValidPrice(price, terms);
489
+ const maxTimeoutSeconds = requirePositiveIntEnv(env, "METRIK_GATEWAY_X402V2_MAX_TIMEOUT_SECONDS", 300);
490
+ const facilitatorTimeoutSeconds = requirePositiveIntEnv(env, "METRIK_GATEWAY_X402V2_FACILITATOR_TIMEOUT_SECONDS", 120);
491
+ const resourceBaseUrl = env.METRIK_GATEWAY_X402V2_RESOURCE_BASE_URL?.trim();
492
+ if (resourceBaseUrl !== undefined && resourceBaseUrl.length > 0) {
493
+ // eslint-disable-next-line no-new -- validates the URL is well-formed.
494
+ new URL(resourceBaseUrl);
495
+ }
496
+ const registryUrl = env.METRIK_GATEWAY_X402V2_REGISTRY_URL?.trim();
497
+ if (registryUrl !== undefined && registryUrl.length > 0) {
498
+ // eslint-disable-next-line no-new -- validates the URL is well-formed.
499
+ new URL(registryUrl);
500
+ }
501
+ const optionalLink = (name) => {
502
+ const value = env[name]?.trim();
503
+ if (value === undefined || value.length === 0)
504
+ return undefined;
505
+ if (!isHttpLink(value)) {
506
+ throw new Error(`${name} must be an absolute http(s) URL`);
507
+ }
508
+ return value.replace(/\/+$/, "");
509
+ };
510
+ const refundBaseUrl = optionalLink("METRIK_GATEWAY_X402V2_REFUND_BASE_URL");
511
+ const docsUrl = optionalLink("METRIK_GATEWAY_X402V2_DOCS_URL");
512
+ const decimalsRaw = env.METRIK_GATEWAY_X402V2_ASSET_DECIMALS?.trim();
513
+ let assetDecimals;
514
+ if (decimalsRaw !== undefined && decimalsRaw.length > 0) {
515
+ assetDecimals = Number(decimalsRaw);
516
+ if (!/^\d+$/.test(decimalsRaw) ||
517
+ !Number.isInteger(assetDecimals) ||
518
+ assetDecimals > 36) {
519
+ throw new Error(`invalid METRIK_GATEWAY_X402V2_ASSET_DECIMALS: ${decimalsRaw} (expected an integer 0-36)`);
520
+ }
521
+ }
522
+ const description = env.METRIK_GATEWAY_X402V2_DESCRIPTION?.trim();
523
+ if (description !== undefined && description.length > 300) {
524
+ throw new Error("METRIK_GATEWAY_X402V2_DESCRIPTION must be at most 300 characters");
525
+ }
526
+ const schemaRaw = env.METRIK_GATEWAY_X402V2_SCHEMA?.trim();
527
+ let schemaDeclaration;
528
+ if (schemaRaw !== undefined && schemaRaw.length > 0) {
529
+ try {
530
+ const parsed = JSON.parse(schemaRaw);
531
+ assertSchemaDeclaration(parsed);
532
+ schemaDeclaration = parsed;
533
+ }
534
+ catch (error) {
535
+ throw new Error(`invalid METRIK_GATEWAY_X402V2_SCHEMA: ${error instanceof Error ? error.message : String(error)}`);
536
+ }
537
+ }
538
+ return {
539
+ facilitatorUrl,
540
+ facilitatorToken,
541
+ network,
542
+ factoryAddress,
543
+ asset,
544
+ assetName: requireAssetDomainField(env.METRIK_GATEWAY_X402V2_ASSET_NAME, registered?.usdc.eip712.name, "METRIK_GATEWAY_X402V2_ASSET_NAME", network),
545
+ assetVersion: requireAssetDomainField(env.METRIK_GATEWAY_X402V2_ASSET_VERSION, registered?.usdc.eip712.version, "METRIK_GATEWAY_X402V2_ASSET_VERSION", network),
546
+ terms,
547
+ price,
548
+ maxTimeoutSeconds,
549
+ facilitatorTimeoutMs: facilitatorTimeoutSeconds * 1000,
550
+ ...(resourceBaseUrl === undefined || resourceBaseUrl.length === 0
551
+ ? {}
552
+ : { resourceBaseUrl }),
553
+ ...(registryUrl === undefined || registryUrl.length === 0
554
+ ? {}
555
+ : { registryUrl }),
556
+ ...(refundBaseUrl === undefined ? {} : { refundBaseUrl }),
557
+ ...(docsUrl === undefined ? {} : { docsUrl }),
558
+ ...(assetDecimals === undefined ? {} : { assetDecimals }),
559
+ ...(description === undefined || description.length === 0
560
+ ? {}
561
+ : { description }),
562
+ ...(schemaDeclaration === undefined ? {} : { schemaDeclaration }),
563
+ };
564
+ }
565
+ function requireAssetDomainField(raw, registered, name, network) {
566
+ const value = raw?.trim();
567
+ if (value !== undefined && value.length > 0)
568
+ return value;
569
+ if (registered === undefined) {
570
+ throw new Error(`${name} is required on ${network}: the network registry does not know the asset's EIP-712 domain`);
571
+ }
572
+ return registered;
573
+ }
574
+ function requireUintEnv(env, name) {
575
+ const raw = requireEnv(env, name).trim();
576
+ if (!/^(0|[1-9]\d*)$/.test(raw)) {
577
+ throw new Error(`invalid ${name}: ${raw} (expected a base-10 integer)`);
578
+ }
579
+ return BigInt(raw);
580
+ }
581
+ /**
582
+ * Oracle probe verification is OFF unless `METRIK_GATEWAY_PROBE_CAPABILITY` is
583
+ * truthy. Turning it on lets the neutral verifier exercise this gateway's PAID
584
+ * route with an oracle-signed, single-use, short-lived `ProbeCapability`
585
+ * instead of only its health route.
586
+ *
587
+ * There is NO credential to configure — authority is an EIP-712 signature by an
588
+ * address in the escrow's public `getOracleSigners()` set, read from the same
589
+ * `METRIK_GATEWAY_RPC_URL` the stream check already uses.
590
+ *
591
+ * - `METRIK_GATEWAY_PROBE_CAPABILITY` — `1`/`true`/`yes`/`on` to enable.
592
+ * - `METRIK_GATEWAY_PROBE_MAX_PER_MINUTE` (optional) — free-probe budget.
593
+ * Default {@link DEFAULT_MAX_PROBES_PER_MINUTE}.
594
+ * - `METRIK_GATEWAY_PROBE_SIGNER_CACHE_SECONDS` (optional) — how long the
595
+ * on-chain signer set is cached. Default
596
+ * {@link DEFAULT_ORACLE_SIGNER_CACHE_SECONDS}.
597
+ */
598
+ export function parseGatewayProbeEnvConfig(env = process.env) {
599
+ const raw = env.METRIK_GATEWAY_PROBE_CAPABILITY?.trim().toLowerCase();
600
+ if (raw === undefined || raw.length === 0) {
601
+ return undefined;
602
+ }
603
+ if (!["1", "true", "yes", "on"].includes(raw)) {
604
+ if (["0", "false", "no", "off"].includes(raw)) {
605
+ return undefined;
606
+ }
607
+ throw new Error(`invalid METRIK_GATEWAY_PROBE_CAPABILITY: ${raw} (expected a boolean)`);
608
+ }
609
+ const maxProbesPerMinute = requirePositiveIntEnv(env, "METRIK_GATEWAY_PROBE_MAX_PER_MINUTE", DEFAULT_MAX_PROBES_PER_MINUTE);
610
+ const signerCacheSeconds = requirePositiveIntEnv(env, "METRIK_GATEWAY_PROBE_SIGNER_CACHE_SECONDS", DEFAULT_ORACLE_SIGNER_CACHE_SECONDS);
611
+ return { maxProbesPerMinute, signerCacheSeconds };
612
+ }
613
+ function requirePositiveIntEnv(env, name, fallback) {
614
+ const raw = env[name]?.trim();
615
+ if (raw === undefined || raw.length === 0) {
616
+ return fallback;
617
+ }
618
+ const value = Number(raw);
619
+ if (!Number.isInteger(value) || value <= 0) {
620
+ throw new Error(`invalid ${name}: ${raw} (expected a positive integer)`);
621
+ }
622
+ return value;
623
+ }
249
624
  function requireEnv(env, name) {
250
625
  const value = env[name];
251
626
  if (value === undefined || value.trim().length === 0) {
@@ -256,7 +631,13 @@ function requireEnv(env, name) {
256
631
  /** Builds and starts the reference gateway server entirely from the environment. */
257
632
  export async function startCallerAuthGatewayServerFromEnv(env = process.env) {
258
633
  const config = parseCallerAuthGatewayEnvConfig(env);
634
+ // Fail closed at startup: a configured descriptor that does not verify is a
635
+ // refusal to start, never a silently unenforced price band.
636
+ const signedRateBounds = config.signedDescriptorFile === undefined
637
+ ? undefined
638
+ : await loadSignedRateBoundsFile(config.signedDescriptorFile);
259
639
  const gateway = new CallerAuthGateway({
640
+ ...(signedRateBounds === undefined ? {} : { signedRateBounds }),
260
641
  escrowAddress: config.escrowAddress,
261
642
  rpcUrl: config.rpcUrl,
262
643
  serviceRef: config.serviceRef,
@@ -267,7 +648,26 @@ export async function startCallerAuthGatewayServerFromEnv(env = process.env) {
267
648
  ...(config.headerName === undefined
268
649
  ? {}
269
650
  : { headerName: config.headerName }),
651
+ ...(config.probe === undefined
652
+ ? {}
653
+ : {
654
+ probe: {
655
+ maxProbesPerMinute: config.probe.maxProbesPerMinute,
656
+ signerCacheSeconds: config.probe.signerCacheSeconds,
657
+ },
658
+ }),
270
659
  });
660
+ if (signedRateBounds === undefined) {
661
+ console.error("[metrik-caller-auth-gateway] WARNING: no METRIK_GATEWAY_SIGNED_DESCRIPTOR_FILE — the " +
662
+ "operator-signed minRatePerSecond/maxRatePerSecond are NOT enforced here. The escrow " +
663
+ "accepts any non-zero rate, so a buyer who opens a stream directly against it can be " +
664
+ "served below your signed price (metrik-contracts#41).");
665
+ }
666
+ else {
667
+ console.error(`[metrik-caller-auth-gateway] enforcing operator-signed rate bounds for ${signedRateBounds
668
+ .map((bounds) => `${bounds.serviceRef} [${bounds.minRatePerSecond ?? "-"}, ${bounds.maxRatePerSecond ?? "-"}]`)
669
+ .join(", ")}`);
670
+ }
271
671
  if (config.corroboratingRpcUrls.length === 0) {
272
672
  console.error("[metrik-caller-auth-gateway] WARNING: no METRIK_GATEWAY_CORROBORATING_RPC_URLS " +
273
673
  "configured — stream state is authorized from a single RPC view. A stale view " +
@@ -275,9 +675,78 @@ export async function startCallerAuthGatewayServerFromEnv(env = process.env) {
275
675
  `${config.maxStateStalenessSeconds}s by the freshness check). Configure at least ` +
276
676
  "one INDEPENDENT provider to close that window.");
277
677
  }
678
+ if (config.probe !== undefined) {
679
+ console.error("[metrik-caller-auth-gateway] oracle probe verification ENABLED: a request carrying a " +
680
+ "valid EIP-712 ProbeCapability signed by an address in this escrow's on-chain " +
681
+ `getOracleSigners() set is proxied FREE, unmetered and unbilled, at most ` +
682
+ `${config.probe.maxProbesPerMinute} per minute. This is what lets the neutral ` +
683
+ "verifier check this gateway's PAID route instead of only its health route. " +
684
+ "Leaving it off is safe — the oracle then reports this listing's paid route as " +
685
+ "UNVERIFIABLE rather than as passing.");
686
+ }
687
+ else {
688
+ console.error("[metrik-caller-auth-gateway] oracle probe verification is OFF " +
689
+ "(METRIK_GATEWAY_PROBE_CAPABILITY unset). The verifier can only reach this service's " +
690
+ "health route, so paid-route delivery here is UNVERIFIED.");
691
+ }
692
+ let x402Opener;
693
+ if (config.x402Opener !== undefined) {
694
+ // Loaded only when enabled, so a capability-only gateway never imports @x402/*.
695
+ const { buildGatewayX402OpenerMode } = await import("./x402-opener-mode.js");
696
+ x402Opener = await buildGatewayX402OpenerMode({
697
+ facilitatorUrl: config.x402Opener.facilitatorUrl,
698
+ facilitatorToken: config.x402Opener.facilitatorToken,
699
+ network: config.x402Opener.network,
700
+ factoryAddress: config.x402Opener.factoryAddress,
701
+ escrowAddress: config.escrowAddress,
702
+ asset: config.x402Opener.asset,
703
+ assetName: config.x402Opener.assetName,
704
+ assetVersion: config.x402Opener.assetVersion,
705
+ terms: config.x402Opener.terms,
706
+ price: config.x402Opener.price,
707
+ maxTimeoutSeconds: config.x402Opener.maxTimeoutSeconds,
708
+ facilitatorTimeoutMs: config.x402Opener.facilitatorTimeoutMs,
709
+ ...(config.x402Opener.resourceBaseUrl === undefined
710
+ ? {}
711
+ : { resourceBaseUrl: config.x402Opener.resourceBaseUrl }),
712
+ ...(config.x402Opener.registryUrl === undefined
713
+ ? {}
714
+ : { registryUrl: config.x402Opener.registryUrl }),
715
+ ...(config.x402Opener.refundBaseUrl === undefined
716
+ ? {}
717
+ : { refundBaseUrl: config.x402Opener.refundBaseUrl }),
718
+ ...(config.x402Opener.docsUrl === undefined
719
+ ? {}
720
+ : { docsUrl: config.x402Opener.docsUrl }),
721
+ ...(config.x402Opener.assetDecimals === undefined
722
+ ? {}
723
+ : { assetDecimals: config.x402Opener.assetDecimals }),
724
+ ...(config.x402Opener.description === undefined
725
+ ? {}
726
+ : { description: config.x402Opener.description }),
727
+ ...(config.x402Opener.schemaDeclaration === undefined
728
+ ? {}
729
+ : { schemaDeclaration: config.x402Opener.schemaDeclaration }),
730
+ }, { rpcUrl: config.rpcUrl });
731
+ console.error("[metrik-caller-auth-gateway] x402 v2 opener mode ENABLED: a request with neither a " +
732
+ "capability nor PAYMENT-SIGNATURE gets a 402 quoting payTo " +
733
+ `${x402Opener.payTo} (the escrow opener for serviceRef ${config.serviceRef}), price ` +
734
+ `${config.x402Opener.price} base units. Payments settle into StreamEscrowV2 via the Metrik ` +
735
+ `opener facilitator at ${config.x402Opener.facilitatorUrl}, and only after the upstream answers < 400. ` +
736
+ `Refunds (no ETH needed, never automatic): ${x402Opener.refundBaseUrl}/streams/:streamId.`);
737
+ const refundHost = new URL(x402Opener.refundBaseUrl).hostname;
738
+ if (refundHost === "localhost" ||
739
+ refundHost === "[::1]" ||
740
+ refundHost.startsWith("127.")) {
741
+ console.error("[metrik-caller-auth-gateway] WARNING: the 402 advertises a loopback refund URL " +
742
+ `(${x402Opener.refundBaseUrl}), which payers cannot reach. Set ` +
743
+ "METRIK_GATEWAY_X402V2_REFUND_BASE_URL to the facilitator's public origin.");
744
+ }
745
+ }
278
746
  const server = createCallerAuthGatewayServer({
279
747
  gateway,
280
748
  upstreamUrl: config.upstreamUrl,
749
+ ...(x402Opener === undefined ? {} : { x402Opener }),
281
750
  });
282
751
  const { port } = await server.listen(config.port, config.host);
283
752
  return Object.assign(server, { boundPort: port });
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/gateway/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/gateway/http-server.ts"],"names":[],"mappings":"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"}