@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 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/open.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,eAAO,MAAM,WAAW,EAAE,WAqQzB,CAAC"}
1
+ {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/open.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,eAAO,MAAM,WAAW,EAAE,WAuUzB,CAAC"}
@@ -2,11 +2,14 @@ import { MandateDeniedError } from "../../sdk/client.js";
2
2
  import { booleanFlag, requiredStringFlag, stringFlag } from "../args.js";
3
3
  import { formatDuration, formatUsdc, parseAmountUnits, parseDurationSeconds, parseUsdcAmount, } from "../amounts.js";
4
4
  import { assertTestnetRpc, parseBytes32 } from "../config.js";
5
+ import { writeClientOptions } from "../deps.js";
5
6
  import { CliError, configError } from "../errors.js";
7
+ import { assertWithinOperatorCaps, assertWithinSpendPolicy, } from "../spend-policy.js";
6
8
  import { cliMandateCaps, signCliMandate } from "../mandate.js";
7
9
  import { assertCanFundStream, assertCanPayGas } from "../preflight.js";
8
- import { optionalCliWallet, resolveCliWallet, PRIVATE_KEY_ENV, } from "../wallet.js";
9
- import { resolveListing } from "../listings.js";
10
+ import { isPolicyEnforced, optionalCliWallet, resolveCliWallet, PRIVATE_KEY_ENV, } from "../wallet.js";
11
+ import { resolveListingRecord } from "../listings.js";
12
+ import { listingRateBand, rateBandRefusal, SignedRateBoundsError, } from "../../discovery/rate-band.js";
10
13
  export const openCommand = {
11
14
  name: "open",
12
15
  summary: "Hire a verified service: escrow USDC into a metered stream",
@@ -44,34 +47,54 @@ export const openCommand = {
44
47
  // the intended call and says which parts (allowance, simulation, mandate
45
48
  // signature) could not be produced, rather than inventing them.
46
49
  const wallet = dryRun
47
- ? await optionalCliWallet(env, { note: out.note })
48
- : await resolveCliWallet(env, { note: out.note });
50
+ ? await optionalCliWallet(env, { note: out.note, rpcUrl: config.rpcUrl })
51
+ : await resolveCliWallet(env, { note: out.note, rpcUrl: config.rpcUrl });
49
52
  const account = wallet?.account ?? null;
50
53
  const read = deps.createReadClient(config);
51
54
  await assertTestnetRpc(config, () => read.getChainId());
52
55
  if (account !== null && !dryRun) {
53
56
  // Both balances, before anything is signed. Gas first: a wallet with no
54
57
  // ETH cannot send the approval that the USDC check exists to protect.
55
- await assertCanPayGas(read, account.address);
56
- await assertCanFundStream(read, account.address, budgetUsdc);
58
+ await assertCanPayGas(read, account.address, config.network);
59
+ await assertCanFundStream(read, account.address, budgetUsdc, config.network);
57
60
  }
58
61
  const operatorOverride = stringFlag(args, "operator");
59
- const listing = await resolveListing(context, serviceRef, {
62
+ const resolution = await resolveListingRecord(context, serviceRef, {
60
63
  required: operatorOverride === undefined,
61
64
  });
65
+ const listing = resolution.listing;
66
+ await assertRateInSignedBand(context, resolution, ratePerSecondUsdc);
62
67
  const operator = (operatorOverride ?? listing?.operator);
63
68
  if (operator === undefined) {
64
69
  throw configError(`serviceRef ${serviceRef} is not in the registry and no --operator was given`, "run `metrik discover` to find a listed service, or pass --operator explicitly.");
65
70
  }
66
71
  const spend = { operator, budgetUsdc, ratePerSecondUsdc, durationSeconds };
67
- const mandate = account === null
72
+ const mandateCaps = cliMandateCaps(spend, env);
73
+ // A policy-enforced wallet (Privy) is capped by its broker, not by a
74
+ // mandate this process signs for itself. Read the REAL ceiling and hold it
75
+ // to that instead — see `../spend-policy.ts` for why that substitution is
76
+ // the stronger of the two, and why re-adding the self-signed mandate here
77
+ // would both weaken it and break the wallet outright.
78
+ const policy = wallet !== null && isPolicyEnforced(wallet)
79
+ ? await wallet.readSpendPolicy()
80
+ : null;
81
+ if (policy !== null && !dryRun) {
82
+ assertWithinSpendPolicy(policy, spend);
83
+ // The operator's own standing ceiling still applies, and may be TIGHTER
84
+ // than the broker's. Enforced here because no mandate is signed to carry
85
+ // it — "policy-enforced" retires the self-signed mandate, not the caps
86
+ // the operator deliberately configured.
87
+ if (mandateCaps.source === "env") {
88
+ assertWithinOperatorCaps(mandateCaps.caps, spend);
89
+ }
90
+ }
91
+ const mandate = account === null || policy !== null
68
92
  ? null
69
93
  : await signCliMandate(account, spend, {
70
94
  chainId: config.chainId,
71
95
  env,
72
96
  });
73
- const mandateCaps = cliMandateCaps(spend, env);
74
- const write = deps.createWriteClient(config, account);
97
+ const write = deps.createWriteClient(config, account, writeClientOptions(wallet));
75
98
  const hire = {
76
99
  operator,
77
100
  serviceRef,
@@ -104,6 +127,17 @@ export const openCommand = {
104
127
  durationSeconds,
105
128
  mandateSource: mandateCaps.source,
106
129
  mandateSigned: mandate !== null,
130
+ spendPolicy: policy === null
131
+ ? null
132
+ : {
133
+ brokerUrl: policy.brokerUrl,
134
+ maxTotalUsdc: policy.maxTotalUsdc,
135
+ maxRatePerSecondUsdc: policy.maxRatePerSecondUsdc,
136
+ maxDurationSeconds: policy.maxDurationSeconds,
137
+ fits: budgetUsdc <= policy.maxTotalUsdc &&
138
+ ratePerSecondUsdc <= policy.maxRatePerSecondUsdc &&
139
+ durationSeconds <= policy.maxDurationSeconds,
140
+ },
107
141
  to: preview.to,
108
142
  data: preview.data,
109
143
  chainId: preview.chainId,
@@ -139,10 +173,28 @@ export const openCommand = {
139
173
  ["duration", formatDuration(durationSeconds)],
140
174
  [
141
175
  "mandate",
142
- mandate === null
143
- ? `not signed (no wallet); caps would come from ${mandateCaps.source}`
144
- : `self-signed, caps from ${mandateCaps.source}`,
176
+ mandate !== null
177
+ ? `self-signed, caps from ${mandateCaps.source}`
178
+ : policy !== null
179
+ ? "not signed — this wallet's ceiling is enforced by its broker, which is stronger"
180
+ : `not signed (no wallet); caps would come from ${mandateCaps.source}`,
145
181
  ],
182
+ ...(policy === null
183
+ ? []
184
+ : [
185
+ [
186
+ "spend policy",
187
+ `${formatUsdc(policy.maxTotalUsdc)} total, ${policy.maxRatePerSecondUsdc} atomic/second, ${formatDuration(policy.maxDurationSeconds)} max — enforced by ${policy.brokerUrl}`,
188
+ ],
189
+ [
190
+ "fits policy",
191
+ budgetUsdc <= policy.maxTotalUsdc &&
192
+ ratePerSecondUsdc <= policy.maxRatePerSecondUsdc &&
193
+ durationSeconds <= policy.maxDurationSeconds
194
+ ? "yes"
195
+ : "NO — a real open would be refused before broadcasting",
196
+ ],
197
+ ]),
146
198
  ["escrow", preview.to],
147
199
  [
148
200
  "usdc balance",
@@ -175,7 +227,7 @@ export const openCommand = {
175
227
  out.note(`opening a stream on chain ${config.chainId} for ${formatUsdc(budgetUsdc)} …`);
176
228
  // Unreachable without a wallet: `resolveCliWallet` above throws when the
177
229
  // command is not a dry run. The narrowing keeps that a type-level fact.
178
- if (account === null || mandate === null) {
230
+ if (account === null) {
179
231
  throw configError("this command signs a transaction and needs a wallet, and none was resolved");
180
232
  }
181
233
  let result;
@@ -186,7 +238,10 @@ export const openCommand = {
186
238
  budgetUsdc,
187
239
  ratePerSecondUsdc,
188
240
  maxDurationSeconds: durationSeconds,
189
- signedMandate: mandate.signed,
241
+ // `null` for a policy-enforced wallet: the ceiling was checked against
242
+ // the broker's own policy above, and the broker checks it again on the
243
+ // transaction it signs.
244
+ signedMandate: mandate === null ? null : mandate.signed,
190
245
  spentSoFarUsdc: 0n,
191
246
  nowSeconds: deps.nowSeconds(),
192
247
  });
@@ -233,6 +288,57 @@ export const openCommand = {
233
288
  out.print(`Next: metrik status ${result.streamId}`);
234
289
  },
235
290
  };
291
+ /**
292
+ * Refuse a `--rate` outside the band the operator SIGNED, before anything is
293
+ * signed or broadcast — dry run included, because the rate is an invalid input
294
+ * for this service exactly like `--rate 0` is.
295
+ *
296
+ * The escrow accepts any non-zero rate; the seller's capability gateway does
297
+ * not, and answers every request on an out-of-band stream with
298
+ * `403 stream-rate-out-of-bounds`. Without this check the CLI locked a buyer's
299
+ * deposit in a stream that could never be served, and said nothing.
300
+ *
301
+ * - Listing found: its signed descriptor is re-verified and the band enforced.
302
+ * A descriptor that does not verify is a refusal (exit 4), never "no band".
303
+ * A legacy binding signs no commercial terms, so there is nothing to enforce.
304
+ * - No listing: only reachable with `--operator`, the CLI's existing,
305
+ * explicit escape hatch for a service the registry cannot vouch for. The
306
+ * check cannot run, so it is skipped LOUDLY rather than silently. Without
307
+ * `--operator` an unreachable registry or a missing listing has already
308
+ * failed the command before this point (`resolveListingRecord`).
309
+ */
310
+ async function assertRateInSignedBand(context, resolution, ratePerSecondUsdc) {
311
+ const { out } = context;
312
+ if (resolution.record === null) {
313
+ out.note(resolution.registryUnreachable
314
+ ? "warning: the operator-signed rate band could NOT be checked because the registry is unreachable. If --rate is outside the band the operator signed, the service's gateway will refuse every request while the deposit stays escrowed. Re-run when the registry answers to have it checked."
315
+ : "note: this serviceRef has no verified listing, so there is no operator-signed rate band to check --rate against.");
316
+ return;
317
+ }
318
+ let bounds;
319
+ try {
320
+ bounds = await listingRateBand(resolution.record);
321
+ }
322
+ catch (error) {
323
+ if (error instanceof SignedRateBoundsError) {
324
+ throw new CliError(`the listing's operator-signed rate band could not be verified: ${error.message}`, {
325
+ exitCode: 4,
326
+ hint: "nothing was broadcast. The CLI will not open a stream against a rate band it cannot verify.",
327
+ cause: error,
328
+ });
329
+ }
330
+ throw error;
331
+ }
332
+ if (bounds === null)
333
+ return;
334
+ const refusal = rateBandRefusal(ratePerSecondUsdc, bounds, "--rate");
335
+ if (refusal !== undefined) {
336
+ throw new CliError(refusal, {
337
+ exitCode: 2,
338
+ hint: "pick a --rate inside the signed band (`--units atomic` takes base units; see `metrik discover` for each listing's band).",
339
+ });
340
+ }
341
+ }
236
342
  /**
237
343
  * What the buyer is actually paying for.
238
344
  *
@@ -1 +1 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/cli/commands/open.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/cli/commands/open.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type ServerMandateCaps } from "../../mandates/env.js";
2
+ import type { CommandSpec } from "../context.js";
3
+ export declare const payCommand: CommandSpec;
4
+ /**
5
+ * The mandate this command signs: a standing `METRIK_AGENT_MANDATE_*` ceiling
6
+ * INTERSECTED with every flag (the most restrictive value wins), or, with no
7
+ * standing ceiling, one sized to the flags. A flag can only tighten a
8
+ * standing ceiling, never loosen or bypass it; an `--operator` outside a
9
+ * standing allowlist is refused outright.
10
+ */
11
+ export declare function intersectCaps(envCaps: ServerMandateCaps | null, flags: {
12
+ readonly maxAmount: bigint | undefined;
13
+ readonly maxRate: bigint | undefined;
14
+ readonly maxDuration: number | undefined;
15
+ readonly operator: `0x${string}` | undefined;
16
+ }): ServerMandateCaps;
17
+ /** Map the SDK's and the mandate's typed failures onto CLI exit codes. */
18
+ export declare function explainPayFailure(error: unknown): unknown;
19
+ //# sourceMappingURL=pay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pay.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAsB/B,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AAOjE,eAAO,MAAM,UAAU,EAAE,WAsNxB,CAAC;AAKF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,GAAG,IAAI,EACjC,KAAK,EAAE;IACL,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9C,GACA,iBAAiB,CA4CnB;AAqFD,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAyCzD"}
@@ -0,0 +1,355 @@
1
+ import { DEFAULT_SERVER_MANDATE_TTL_SECONDS, parseServerMandateCapsEnv, signServerMandate, } from "../../mandates/env.js";
2
+ import { booleanFlag, integerFlag, jsonBodyFlag, stringFlag, stringFlags, } from "../args.js";
3
+ import { formatDuration, formatUsdc, parseAmountUnits, parseDurationSeconds, parseUsdcAmount, } from "../amounts.js";
4
+ import { assertTestnetRpc } from "../config.js";
5
+ import { rpcTransport } from "../deps.js";
6
+ import { CliError, configError, usageError } from "../errors.js";
7
+ import { usdcFundingHint } from "../../network.js";
8
+ import { isPrivyWalletSource, resolveCliWallet } from "../wallet.js";
9
+ import { hasHeader, parseHeaders } from "./invoke.js";
10
+ /** Default stream window a request-sized mandate allows (one day). */
11
+ const DEFAULT_MAX_DURATION_SECONDS = 86_400;
12
+ /** Longest response body printed in human mode before it is truncated. */
13
+ const MAX_PRINTED_BODY_CHARS = 64 * 1024;
14
+ export const payCommand = {
15
+ name: "pay",
16
+ summary: "Pay an x402 endpoint into a recoverable escrow stream, under a spend mandate",
17
+ usage: 'metrik pay <url> [--json \'{"text":"hi"}\' | --data <body>] [--method POST] [--header "K: V"] --max-amount <usdc> [--max-rate <usdc/s>] [--max-duration <seconds>] [--min-duration <seconds>] [--operator <address>] [--units atomic]',
18
+ flags: [
19
+ "data",
20
+ "json-body",
21
+ "method",
22
+ "header",
23
+ "max-amount",
24
+ "max-rate",
25
+ "max-duration",
26
+ "min-duration",
27
+ "operator",
28
+ "units",
29
+ "allow-legacy-factory",
30
+ ],
31
+ // It moves the payer's USDC (an EIP-3009 authorization the facilitator
32
+ // settles into the escrow). The PAYER broadcasts nothing and needs no gas,
33
+ // but it is a fund-moving command and is gated like one.
34
+ signs: true,
35
+ async run(context) {
36
+ const { args, config, env, out, deps } = context;
37
+ const x402 = requireX402(deps.x402);
38
+ const [urlArg] = args.positionals;
39
+ if (urlArg === undefined) {
40
+ throw usageError("metrik pay requires the <url> of an x402 endpoint");
41
+ }
42
+ const url = parseResourceUrl(urlArg);
43
+ const units = parseAmountUnits(stringFlag(args, "units"));
44
+ const maxAmountRaw = stringFlag(args, "max-amount");
45
+ const maxAmount = maxAmountRaw === undefined
46
+ ? undefined
47
+ : parseUsdcAmount(maxAmountRaw, units, "max-amount");
48
+ const maxRateRaw = stringFlag(args, "max-rate");
49
+ const maxRate = maxRateRaw === undefined
50
+ ? undefined
51
+ : parseUsdcAmount(maxRateRaw, units, "max-rate");
52
+ const maxDurationRaw = stringFlag(args, "max-duration");
53
+ const maxDuration = maxDurationRaw === undefined
54
+ ? undefined
55
+ : parseDurationSeconds(maxDurationRaw);
56
+ const minDuration = integerFlag(args, "min-duration");
57
+ const operator = stringFlag(args, "operator");
58
+ if (operator !== undefined && !/^0x[0-9a-fA-F]{40}$/.test(operator)) {
59
+ throw usageError(`--operator must be an EVM address (got "${operator}")`);
60
+ }
61
+ if (maxAmount !== undefined && maxAmount <= 0n) {
62
+ throw usageError("--max-amount must be greater than zero");
63
+ }
64
+ if (maxRate !== undefined && maxRate <= 0n) {
65
+ throw usageError("--max-rate must be greater than zero");
66
+ }
67
+ const init = buildRequest(context);
68
+ // The mandate: an operator-set standing ceiling (METRIK_AGENT_MANDATE_*),
69
+ // or one sized to exactly this payment. Either way it is SIGNED and
70
+ // `checkMandate()` gates the quote before anything is signed for the
71
+ // seller. There is no unbounded path: without standing caps, --max-amount
72
+ // is required.
73
+ const envCaps = parseServerMandateCapsEnv(env);
74
+ if (envCaps === null && maxAmount === undefined) {
75
+ throw usageError("metrik pay needs a spend ceiling: pass --max-amount <usdc> (or configure a standing mandate with METRIK_AGENT_MANDATE_*)", "no spend without a mandate: the seller picks the price, so the buyer must cap it. Nothing was sent.");
76
+ }
77
+ const caps = intersectCaps(envCaps, {
78
+ maxAmount,
79
+ maxRate,
80
+ maxDuration,
81
+ operator: operator,
82
+ });
83
+ const wallet = await resolveCliWallet(env, {
84
+ note: out.note,
85
+ rpcUrl: config.rpcUrl,
86
+ });
87
+ if (isPrivyWalletSource(wallet.source)) {
88
+ throw configError("metrik pay cannot sign with a Privy wallet", "an x402 payment is an EIP-3009 TransferWithAuthorization signature, and the Privy broker's typed-data policy allows only an InvocationCapability. Pay with METRIK_AGENT_PRIVATE_KEY or a CDP wallet.");
89
+ }
90
+ const { account } = wallet;
91
+ const read = deps.createReadClient(config);
92
+ await assertTestnetRpc(config, () => read.getChainId());
93
+ // The payer needs USDC only — no gas: the facilitator's relayer submits
94
+ // the authorization. A zero balance is a knowable fact before signing.
95
+ const balance = await read.usdcBalance(account.address).catch(() => null);
96
+ if (balance === 0n) {
97
+ throw new CliError(`wallet ${account.address} holds 0 USDC on ${config.network.name}, so it cannot pay`, {
98
+ exitCode: 3,
99
+ hint: `${usdcFundingHint(config.network)}, then re-run. (An x402 payer needs USDC only; no gas.)`,
100
+ });
101
+ }
102
+ const signedMandate = await signServerMandate(account, caps, {
103
+ chainId: config.chainId,
104
+ });
105
+ out.note(`paying ${url} (ceiling ${formatUsdc(maxAmount === undefined ? caps.maxPerStreamUsdc : maxAmount < caps.maxPerStreamUsdc ? maxAmount : caps.maxPerStreamUsdc)}, mandate from ${envCaps === null ? "this command" : "METRIK_AGENT_MANDATE_*"}) …`);
106
+ const result = await payOrExplain(x402, {
107
+ url,
108
+ init,
109
+ signer: account,
110
+ network: config.network,
111
+ signedMandate,
112
+ spentSoFarUsdc: 0n,
113
+ nowSeconds: deps.nowSeconds(),
114
+ ...(maxAmount === undefined ? {} : { maxAmount }),
115
+ ...(maxRate === undefined ? {} : { maxRatePerSecond: maxRate }),
116
+ ...(minDuration === undefined ? {} : { minDurationSeconds: minDuration }),
117
+ sdkOptions: {
118
+ transport: rpcTransport(config),
119
+ // A LEGACY deployment's factory is refused by the SDK unless the
120
+ // buyer opts in: streams there can still be closed and reclaimed, but
121
+ // nothing new should open on a generation being retired by default.
122
+ ...(booleanFlag(args, "allow-legacy-factory")
123
+ ? { allowLegacyFactory: true }
124
+ : {}),
125
+ },
126
+ });
127
+ const bodyText = await result.response.text();
128
+ const opener = result.metrikStreamOpener;
129
+ const quote = result.quote;
130
+ out.result({
131
+ paid: result.paid,
132
+ httpStatus: result.response.status,
133
+ contentType: result.response.headers.get("content-type"),
134
+ body: bodyText,
135
+ streamId: opener?.streamId ?? null,
136
+ opener: opener?.opener ?? null,
137
+ refundUrl: opener?.refundUrl ?? null,
138
+ escrow: opener?.escrow ?? null,
139
+ deposit: opener?.deposit ?? null,
140
+ ratePerSecond: opener?.ratePerSecond ?? null,
141
+ expiresAt: opener?.expiresAt ?? null,
142
+ operator: quote?.operator ?? null,
143
+ serviceRef: quote?.serviceRef ?? null,
144
+ minEarnSeconds: quote?.minEarnSeconds ?? null,
145
+ mandateSource: envCaps === null ? "request" : "env",
146
+ refundIsAutomatic: false,
147
+ });
148
+ if (!result.paid) {
149
+ out.print(`The endpoint answered ${result.response.status} without asking for payment; nothing was signed or paid.`);
150
+ out.print(truncate(bodyText));
151
+ return;
152
+ }
153
+ out.print(`Paid. HTTP ${result.response.status}`);
154
+ out.print(truncate(bodyText));
155
+ out.print("");
156
+ if (opener !== null) {
157
+ out.table([
158
+ ["streamId", opener.streamId],
159
+ ["opener", opener.opener],
160
+ ["payer", account.address],
161
+ ...(opener.deposit === null
162
+ ? []
163
+ : [["deposit", formatUsdc(opener.deposit)]]),
164
+ ...(opener.ratePerSecond === null
165
+ ? []
166
+ : [
167
+ ["rate", `${formatUsdc(opener.ratePerSecond)} / verified second`],
168
+ ]),
169
+ ...(quote?.minEarnSeconds === null ||
170
+ quote?.minEarnSeconds === undefined
171
+ ? []
172
+ : [
173
+ [
174
+ "fully earned after",
175
+ `${formatDuration(Number(quote.minEarnSeconds))} of verified delivery`,
176
+ ],
177
+ ]),
178
+ ...(opener.expiresAt === null
179
+ ? []
180
+ : [
181
+ ["expires", new Date(opener.expiresAt * 1000).toISOString()],
182
+ ]),
183
+ ["refund url", opener.refundUrl ?? "(the seller advertised no relay)"],
184
+ ]);
185
+ out.print("");
186
+ // A stream on another (e.g. legacy) registered escrow is reached by
187
+ // naming that escrow; the CLI defaults to the network's current one.
188
+ const escrowFlag = opener.escrow !== null &&
189
+ opener.escrow.toLowerCase() !== config.escrow.toLowerCase()
190
+ ? ` --escrow ${opener.escrow}`
191
+ : "";
192
+ out.print("Refunds are NOT automatic. The seller earns only for verified seconds; whatever is unearned stays in the escrow until someone reclaims it for you:");
193
+ out.print(opener.refundUrl === null
194
+ ? ` metrik reclaim ${opener.streamId}${escrowFlag} (anyone may send it; the refund always goes to the payer)`
195
+ : ` metrik refund ${opener.streamId} --refund-url ${opener.refundUrl}${escrowFlag} --close --reclaim`);
196
+ }
197
+ },
198
+ };
199
+ const minBig = (a, b) => b !== undefined && b < a ? b : a;
200
+ /**
201
+ * The mandate this command signs: a standing `METRIK_AGENT_MANDATE_*` ceiling
202
+ * INTERSECTED with every flag (the most restrictive value wins), or, with no
203
+ * standing ceiling, one sized to the flags. A flag can only tighten a
204
+ * standing ceiling, never loosen or bypass it; an `--operator` outside a
205
+ * standing allowlist is refused outright.
206
+ */
207
+ export function intersectCaps(envCaps, flags) {
208
+ if (envCaps === null) {
209
+ const amount = flags.maxAmount;
210
+ return {
211
+ maxPerStreamUsdc: amount,
212
+ maxTotalUsdc: amount,
213
+ // No --max-rate: the price is the only cap on how fast the seller can
214
+ // earn it. Reported as minEarnSeconds so the buyer can see it.
215
+ maxRatePerSecondUsdc: flags.maxRate ?? amount,
216
+ maxDurationSeconds: flags.maxDuration ?? DEFAULT_MAX_DURATION_SECONDS,
217
+ allowedOperators: flags.operator === undefined ? [] : [flags.operator],
218
+ ttlSeconds: DEFAULT_SERVER_MANDATE_TTL_SECONDS,
219
+ };
220
+ }
221
+ let allowedOperators = envCaps.allowedOperators;
222
+ if (flags.operator !== undefined) {
223
+ if (allowedOperators.length > 0 &&
224
+ !allowedOperators.some((entry) => entry.toLowerCase() === flags.operator?.toLowerCase())) {
225
+ throw new CliError(`--operator ${flags.operator} is not in METRIK_AGENT_MANDATE_ALLOWED_OPERATORS`, {
226
+ exitCode: 3,
227
+ hint: "a flag can only narrow the standing mandate, never widen it. Nothing was sent.",
228
+ });
229
+ }
230
+ allowedOperators = [flags.operator];
231
+ }
232
+ return {
233
+ maxPerStreamUsdc: minBig(envCaps.maxPerStreamUsdc, flags.maxAmount),
234
+ maxTotalUsdc: minBig(envCaps.maxTotalUsdc, flags.maxAmount),
235
+ maxRatePerSecondUsdc: minBig(envCaps.maxRatePerSecondUsdc, flags.maxRate),
236
+ maxDurationSeconds: flags.maxDuration !== undefined &&
237
+ flags.maxDuration < envCaps.maxDurationSeconds
238
+ ? flags.maxDuration
239
+ : envCaps.maxDurationSeconds,
240
+ allowedOperators,
241
+ ttlSeconds: envCaps.ttlSeconds,
242
+ };
243
+ }
244
+ function requireX402(x402) {
245
+ if (x402 === undefined) {
246
+ throw new CliError("this CLI build has no x402 dependency wired (CliDependencies.x402)", { exitCode: 4 });
247
+ }
248
+ return x402;
249
+ }
250
+ function parseResourceUrl(raw) {
251
+ let url;
252
+ try {
253
+ url = new URL(raw);
254
+ }
255
+ catch {
256
+ throw usageError(`<url> must be an absolute http(s) URL (got "${raw}")`);
257
+ }
258
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
259
+ throw usageError(`<url> must be http(s) (got "${url.protocol}")`);
260
+ }
261
+ return url.toString();
262
+ }
263
+ function buildRequest(context) {
264
+ const { args } = context;
265
+ const data = stringFlag(args, "data");
266
+ const jsonValue = jsonBodyFlag(args);
267
+ const jsonAlias = stringFlag(args, "json-body");
268
+ if (jsonValue !== undefined && jsonAlias !== undefined) {
269
+ throw usageError("give the JSON body once: --json <body> or --json-body <body>");
270
+ }
271
+ const jsonBody = jsonValue ?? jsonAlias;
272
+ if (data !== undefined && jsonBody !== undefined) {
273
+ throw usageError("give either --data or --json <body>, not both");
274
+ }
275
+ if (jsonBody !== undefined) {
276
+ try {
277
+ JSON.parse(jsonBody);
278
+ }
279
+ catch {
280
+ throw usageError("--json <body> must be valid JSON");
281
+ }
282
+ }
283
+ const body = jsonBody ?? data;
284
+ const method = (stringFlag(args, "method") ?? (body === undefined ? "GET" : "POST")).toUpperCase();
285
+ const headers = parseHeaders(stringFlags(args, "header"));
286
+ if (jsonBody !== undefined && !hasHeader(headers, "content-type")) {
287
+ headers["content-type"] = "application/json";
288
+ }
289
+ for (const name of Object.keys(headers)) {
290
+ if (name === "payment-signature" || name === "x-payment") {
291
+ throw usageError(`do not set the ${name} header: the payment is signed by this command, after the quote passes the mandate`);
292
+ }
293
+ }
294
+ return {
295
+ method,
296
+ headers,
297
+ ...(body === undefined ? {} : { body }),
298
+ };
299
+ }
300
+ function truncate(text) {
301
+ return text.length <= MAX_PRINTED_BODY_CHARS
302
+ ? text
303
+ : `${text.slice(0, MAX_PRINTED_BODY_CHARS)}\n… (${text.length - MAX_PRINTED_BODY_CHARS} more characters; use --json for the whole body)`;
304
+ }
305
+ async function payOrExplain(x402, input) {
306
+ try {
307
+ return await x402.pay(input);
308
+ }
309
+ catch (error) {
310
+ throw explainPayFailure(error);
311
+ }
312
+ }
313
+ /** Map the SDK's and the mandate's typed failures onto CLI exit codes. */
314
+ export function explainPayFailure(error) {
315
+ if (!(error instanceof Error))
316
+ return error;
317
+ switch (error.name) {
318
+ case "X402MandateDeniedError":
319
+ return new CliError(error.message, {
320
+ exitCode: 3,
321
+ hint: "raise --max-amount / --max-rate / --max-duration (or METRIK_AGENT_MANDATE_*) only if you mean to pay that much, that fast, for that long.",
322
+ cause: error,
323
+ });
324
+ case "X402PaymentRefusedError":
325
+ return new CliError(error.message, {
326
+ exitCode: 3,
327
+ hint: /exceeds maxAmount|exceeds maxRatePerSecond/.test(error.message)
328
+ ? "that ceiling is your spend mandate's (--max-amount / --max-rate or METRIK_AGENT_MANDATE_*), handed to the SDK as a second gate. Nothing was signed."
329
+ : "the quote failed one of the SDK's protections (wrong network or token, unknown factory, payTo != factory.predict(terms), not an opener payment, ...). Nothing was signed.",
330
+ cause: error,
331
+ });
332
+ case "X402PostSignatureError": {
333
+ // The signature was handed out: never say "nothing moved" unless the
334
+ // chain proves the authorization can never be used.
335
+ const post = error;
336
+ const recover = post.streamId === null
337
+ ? ""
338
+ : ` Recover the unearned part: metrik refund ${post.streamId} --refund-url <the seller's relay> --close --reclaim (or metrik reclaim ${post.streamId}).`;
339
+ return new CliError(error.message, {
340
+ exitCode: 4,
341
+ hint: post.state === "used"
342
+ ? `the money LEFT the payer.${post.streamId === null ? " Its stream could not be identified on-chain; keep this output as evidence (see docs/x402.md)." : ` It is in stream ${post.streamId} (opener ${post.opener}).`}${recover}`
343
+ : post.state === "possibly-used"
344
+ ? "whether the authorization was used could not be established: treat the payment as SPENT and check USDC.authorizationState before paying again (see docs/x402.md)."
345
+ : post.state === "unused-but-valid"
346
+ ? "it has not moved yet, but the seller holds a signature valid until its validBefore: treat it as spent, or cancel it with USDC.cancelAuthorization (needs gas). See docs/x402.md."
347
+ : "the authorization was never used and has expired: nothing moved.",
348
+ cause: error,
349
+ });
350
+ }
351
+ default:
352
+ return error;
353
+ }
354
+ }
355
+ //# sourceMappingURL=pay.js.map