mppx 0.8.15 → 0.8.18

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 (966) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +61 -39
  4. package/dist/Constants.d.ts +17 -17
  5. package/dist/Errors.d.ts +3 -3
  6. package/dist/Method.d.ts +35 -5
  7. package/dist/Method.js +7 -22
  8. package/dist/Store.d.ts +19 -0
  9. package/dist/Store.js +43 -0
  10. package/dist/attestation/Client.d.ts +17 -0
  11. package/dist/attestation/Client.js +28 -0
  12. package/dist/attestation/Constants.d.ts +15 -0
  13. package/dist/attestation/Constants.js +15 -0
  14. package/dist/attestation/Server.d.ts +4 -0
  15. package/dist/attestation/Server.js +8 -0
  16. package/dist/attestation/Types.d.ts +76 -0
  17. package/dist/attestation/Types.js +2 -0
  18. package/dist/attestation/index.d.ts +6 -0
  19. package/dist/attestation/index.js +6 -0
  20. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  21. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  22. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  23. package/dist/attestation/internal/SigningContext.js +11 -0
  24. package/dist/bin.js +3 -3
  25. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  26. package/dist/cli/account.d.ts +14 -14
  27. package/dist/cli/cli.d.ts +6 -6
  28. package/dist/cli/cli.js +253 -1504
  29. package/dist/cli/plugins/index.js +19 -5
  30. package/dist/cli/plugins/tempo.js +7 -3
  31. package/dist/cli/sessions/Manager.js +7 -4
  32. package/dist/cli/sessions/commands.d.ts +4 -4
  33. package/dist/cli/sessions/request.d.ts +2 -0
  34. package/dist/cli/sessions/request.js +18 -0
  35. package/dist/cli/sessions/store.js +28 -14
  36. package/dist/cli/utils.d.ts +1 -1
  37. package/dist/cli/validate/index.d.ts +3 -3
  38. package/dist/client/Mppx.d.ts +3 -0
  39. package/dist/client/Mppx.js +13 -5
  40. package/dist/client/Transport.d.ts +3 -5
  41. package/dist/client/Transport.js +1 -17
  42. package/dist/client/internal/Fetch.js +2 -6
  43. package/dist/discovery/Discovery.js +2 -1
  44. package/dist/discovery/OpenApi.d.ts +3 -5
  45. package/dist/discovery/OpenApi.js +13 -34
  46. package/dist/discovery/internal/Metadata.d.ts +20 -0
  47. package/dist/discovery/internal/Metadata.js +36 -0
  48. package/dist/evm/Methods.d.ts +11 -11
  49. package/dist/evm/Types.d.ts +17 -17
  50. package/dist/evm/client/Charge.d.ts +11 -11
  51. package/dist/evm/client/Charge.js +8 -0
  52. package/dist/evm/client/Methods.d.ts +11 -11
  53. package/dist/evm/server/Charge.d.ts +1 -1
  54. package/dist/evm/server/Charge.js +2 -0
  55. package/dist/evm/server/Methods.d.ts +11 -11
  56. package/dist/internal/HeaderCodec.d.ts +2 -2
  57. package/dist/internal/types.d.ts +6 -0
  58. package/dist/proxy/Proxy.d.ts +2 -0
  59. package/dist/proxy/Proxy.js +117 -9
  60. package/dist/proxy/Service.d.ts +36 -1
  61. package/dist/proxy/Service.js +9 -8
  62. package/dist/proxy/services/anthropic.js +1 -0
  63. package/dist/proxy/services/openai.js +1 -0
  64. package/dist/proxy/services/stripe.js +1 -0
  65. package/dist/server/Mppx.d.ts +75 -13
  66. package/dist/server/Mppx.js +201 -23
  67. package/dist/server/core.d.ts +9 -0
  68. package/dist/server/core.js +9 -0
  69. package/dist/server/internal/html/config.d.ts +9 -9
  70. package/dist/server/internal/html/constants.d.ts +17 -17
  71. package/dist/stripe/Methods.d.ts +10 -10
  72. package/dist/stripe/client/Charge.d.ts +10 -10
  73. package/dist/stripe/client/Methods.d.ts +10 -10
  74. package/dist/stripe/internal/constants.d.ts +1 -1
  75. package/dist/stripe/internal/constants.js +1 -1
  76. package/dist/stripe/internal/types.d.ts +1 -0
  77. package/dist/stripe/server/Charge.d.ts +11 -11
  78. package/dist/stripe/server/Charge.js +51 -5
  79. package/dist/stripe/server/Methods.d.ts +137 -48
  80. package/dist/stripe/server/Methods.js +265 -4
  81. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  82. package/dist/stripe/server/internal/deposit-address.js +28 -0
  83. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  84. package/dist/stripe/server/internal/html.gen.js +1 -1
  85. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  86. package/dist/stripe/server/internal/record-payment.js +42 -0
  87. package/dist/stripe/server/internal/request.d.ts +25 -0
  88. package/dist/stripe/server/internal/request.js +29 -0
  89. package/dist/stripe/server/spt.d.ts +8 -0
  90. package/dist/stripe/server/spt.js +8 -0
  91. package/dist/tap/Constants.d.ts +28 -0
  92. package/dist/tap/Constants.js +32 -0
  93. package/dist/tap/Types.d.ts +11 -0
  94. package/dist/tap/Types.js +2 -0
  95. package/dist/tap/client/index.d.ts +26 -0
  96. package/dist/tap/client/index.js +33 -0
  97. package/dist/tap/index.d.ts +5 -0
  98. package/dist/tap/index.js +5 -0
  99. package/dist/tap/server/index.d.ts +20 -0
  100. package/dist/tap/server/index.js +36 -0
  101. package/dist/tempo/Attribution.d.ts +1 -1
  102. package/dist/tempo/Methods.d.ts +73 -60
  103. package/dist/tempo/Methods.js +14 -3
  104. package/dist/tempo/Proof.d.ts +16 -16
  105. package/dist/tempo/client/Charge.d.ts +22 -19
  106. package/dist/tempo/client/Charge.js +32 -16
  107. package/dist/tempo/client/Methods.d.ts +51 -38
  108. package/dist/tempo/client/Subscription.d.ts +23 -23
  109. package/dist/tempo/internal/address.d.ts +2 -1
  110. package/dist/tempo/internal/address.js +3 -1
  111. package/dist/tempo/internal/auto-swap.js +4 -19
  112. package/dist/tempo/internal/defaults.d.ts +17 -6
  113. package/dist/tempo/internal/defaults.js +11 -0
  114. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  115. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  116. package/dist/tempo/internal/machine-token-charge.js +113 -0
  117. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  118. package/dist/tempo/internal/machine-token-session.js +173 -0
  119. package/dist/tempo/internal/proof.d.ts +17 -17
  120. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  121. package/dist/tempo/internal/signature-envelope.js +28 -0
  122. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  123. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  124. package/dist/tempo/legacy/client/Session.d.ts +33 -21
  125. package/dist/tempo/legacy/client/Session.js +3 -3
  126. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  127. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  128. package/dist/tempo/legacy/index.d.ts +1 -3
  129. package/dist/tempo/legacy/index.js +1 -3
  130. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  131. package/dist/tempo/server/Charge.d.ts +28 -11
  132. package/dist/tempo/server/Charge.js +101 -55
  133. package/dist/tempo/server/Methods.d.ts +58 -56
  134. package/dist/tempo/server/Methods.js +8 -18
  135. package/dist/tempo/server/Relay.d.ts +1 -1
  136. package/dist/tempo/server/Relay.js +2 -2
  137. package/dist/tempo/server/Subscription.d.ts +25 -25
  138. package/dist/tempo/server/Subscription.js +2 -0
  139. package/dist/tempo/server/index.d.ts +1 -1
  140. package/dist/tempo/server/index.js +1 -1
  141. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  142. package/dist/tempo/server/internal/html.gen.js +1 -1
  143. package/dist/tempo/server/internal/transport.d.ts +2 -0
  144. package/dist/tempo/server/internal/transport.js +9 -2
  145. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  146. package/dist/tempo/session/client/ChannelOps.js +35 -6
  147. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  148. package/dist/tempo/session/client/ChannelStore.js +2 -2
  149. package/dist/tempo/session/client/CredentialState.d.ts +18 -3
  150. package/dist/tempo/session/client/CredentialState.js +77 -76
  151. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  152. package/dist/tempo/session/client/Runtime.js +21 -5
  153. package/dist/tempo/session/client/Session.d.ts +34 -22
  154. package/dist/tempo/session/client/Session.js +186 -63
  155. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  156. package/dist/tempo/session/client/SessionManager.js +35 -11
  157. package/dist/tempo/session/client/Transports.d.ts +2 -0
  158. package/dist/tempo/session/client/Transports.js +12 -2
  159. package/dist/tempo/session/precompile/Chain.d.ts +37 -2
  160. package/dist/tempo/session/precompile/Chain.js +116 -15
  161. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  162. package/dist/tempo/session/precompile/Protocol.js +7 -0
  163. package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
  164. package/dist/tempo/session/precompile/Voucher.js +6 -12
  165. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  166. package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
  167. package/dist/tempo/session/server/ChannelStore.js +27 -12
  168. package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
  169. package/dist/tempo/session/server/CredentialVerification.js +359 -89
  170. package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
  171. package/dist/tempo/session/server/MeteredStream.js +8 -5
  172. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  173. package/dist/tempo/session/server/RequestState.js +61 -15
  174. package/dist/tempo/session/server/Session.d.ts +46 -23
  175. package/dist/tempo/session/server/Session.js +150 -56
  176. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  177. package/dist/tempo/session/server/Settlement.js +53 -21
  178. package/dist/tempo/session/server/Sse.d.ts +3 -1
  179. package/dist/tempo/session/server/Sse.js +2 -1
  180. package/dist/tempo/session/server/Transports.d.ts +1 -1
  181. package/dist/tempo/session/server/Transports.js +1 -0
  182. package/dist/tempo/session/server/Ws.d.ts +6 -1
  183. package/dist/tempo/session/server/Ws.js +1 -0
  184. package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
  185. package/dist/web-bot-auth/Constants.d.ts +20 -0
  186. package/dist/web-bot-auth/Constants.js +24 -0
  187. package/dist/web-bot-auth/Types.d.ts +10 -0
  188. package/dist/web-bot-auth/Types.js +2 -0
  189. package/dist/web-bot-auth/client/index.d.ts +29 -0
  190. package/dist/web-bot-auth/client/index.js +64 -0
  191. package/dist/web-bot-auth/index.d.ts +7 -0
  192. package/dist/web-bot-auth/index.js +7 -0
  193. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  194. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  195. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  196. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  197. package/dist/web-bot-auth/server/index.d.ts +35 -0
  198. package/dist/web-bot-auth/server/index.js +88 -0
  199. package/dist/x402/Types.d.ts +6 -6
  200. package/dist/x402/client/Exact.d.ts +8 -0
  201. package/dist/x402/client/Exact.js +40 -10
  202. package/dist/x402/server/EvmCharge.d.ts +22 -0
  203. package/dist/x402/server/EvmCharge.js +54 -20
  204. package/package.json +28 -34
  205. package/dist/BodyDigest.d.ts.map +0 -1
  206. package/dist/BodyDigest.js.map +0 -1
  207. package/dist/Challenge.d.ts.map +0 -1
  208. package/dist/Challenge.js.map +0 -1
  209. package/dist/Constants.d.ts.map +0 -1
  210. package/dist/Constants.js.map +0 -1
  211. package/dist/Credential.d.ts.map +0 -1
  212. package/dist/Credential.js.map +0 -1
  213. package/dist/Errors.d.ts.map +0 -1
  214. package/dist/Errors.js.map +0 -1
  215. package/dist/Expires.d.ts.map +0 -1
  216. package/dist/Expires.js.map +0 -1
  217. package/dist/Html.d.ts.map +0 -1
  218. package/dist/Html.js.map +0 -1
  219. package/dist/Mcp.d.ts.map +0 -1
  220. package/dist/Mcp.js.map +0 -1
  221. package/dist/Method.d.ts.map +0 -1
  222. package/dist/Method.js.map +0 -1
  223. package/dist/PaymentRequest.d.ts.map +0 -1
  224. package/dist/PaymentRequest.js.map +0 -1
  225. package/dist/Receipt.d.ts.map +0 -1
  226. package/dist/Receipt.js.map +0 -1
  227. package/dist/Store.d.ts.map +0 -1
  228. package/dist/Store.js.map +0 -1
  229. package/dist/bin.d.ts.map +0 -1
  230. package/dist/bin.js.map +0 -1
  231. package/dist/cli/account.d.ts.map +0 -1
  232. package/dist/cli/account.js.map +0 -1
  233. package/dist/cli/cli.d.ts.map +0 -1
  234. package/dist/cli/cli.js.map +0 -1
  235. package/dist/cli/config.d.ts.map +0 -1
  236. package/dist/cli/config.js.map +0 -1
  237. package/dist/cli/internal.d.ts.map +0 -1
  238. package/dist/cli/internal.js.map +0 -1
  239. package/dist/cli/plugins/evm.d.ts.map +0 -1
  240. package/dist/cli/plugins/evm.js.map +0 -1
  241. package/dist/cli/plugins/index.d.ts.map +0 -1
  242. package/dist/cli/plugins/index.js.map +0 -1
  243. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  244. package/dist/cli/plugins/plugin.js.map +0 -1
  245. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  246. package/dist/cli/plugins/stripe.js.map +0 -1
  247. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  248. package/dist/cli/plugins/tempo.js.map +0 -1
  249. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  250. package/dist/cli/sessions/Manager.js.map +0 -1
  251. package/dist/cli/sessions/commands.d.ts.map +0 -1
  252. package/dist/cli/sessions/commands.js.map +0 -1
  253. package/dist/cli/sessions/request.d.ts.map +0 -1
  254. package/dist/cli/sessions/request.js.map +0 -1
  255. package/dist/cli/sessions/store.d.ts.map +0 -1
  256. package/dist/cli/sessions/store.js.map +0 -1
  257. package/dist/cli/utils.d.ts.map +0 -1
  258. package/dist/cli/utils.js.map +0 -1
  259. package/dist/cli/validate/challenge.d.ts.map +0 -1
  260. package/dist/cli/validate/challenge.js.map +0 -1
  261. package/dist/cli/validate/discovery.d.ts.map +0 -1
  262. package/dist/cli/validate/discovery.js.map +0 -1
  263. package/dist/cli/validate/helpers.d.ts.map +0 -1
  264. package/dist/cli/validate/helpers.js.map +0 -1
  265. package/dist/cli/validate/index.d.ts.map +0 -1
  266. package/dist/cli/validate/index.js.map +0 -1
  267. package/dist/cli/validate/messages.d.ts.map +0 -1
  268. package/dist/cli/validate/messages.js.map +0 -1
  269. package/dist/cli/validate/payment.d.ts.map +0 -1
  270. package/dist/cli/validate/payment.js.map +0 -1
  271. package/dist/client/Methods.d.ts.map +0 -1
  272. package/dist/client/Methods.js.map +0 -1
  273. package/dist/client/Mppx.d.ts.map +0 -1
  274. package/dist/client/Mppx.js.map +0 -1
  275. package/dist/client/Transport.d.ts.map +0 -1
  276. package/dist/client/Transport.js.map +0 -1
  277. package/dist/client/index.d.ts.map +0 -1
  278. package/dist/client/index.js.map +0 -1
  279. package/dist/client/internal/Fetch.d.ts.map +0 -1
  280. package/dist/client/internal/Fetch.js.map +0 -1
  281. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  282. package/dist/client/internal/MethodChallenge.js.map +0 -1
  283. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  284. package/dist/client/internal/MethodResponse.js.map +0 -1
  285. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  286. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  287. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  288. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  289. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  290. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  291. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  292. package/dist/client/internal/protocols/Shared.js.map +0 -1
  293. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  294. package/dist/client/internal/protocols/X402.js.map +0 -1
  295. package/dist/client/node.d.ts.map +0 -1
  296. package/dist/client/node.js.map +0 -1
  297. package/dist/discovery/Discovery.d.ts.map +0 -1
  298. package/dist/discovery/Discovery.js.map +0 -1
  299. package/dist/discovery/OpenApi.d.ts.map +0 -1
  300. package/dist/discovery/OpenApi.js.map +0 -1
  301. package/dist/discovery/Validate.d.ts.map +0 -1
  302. package/dist/discovery/Validate.js.map +0 -1
  303. package/dist/discovery/index.d.ts.map +0 -1
  304. package/dist/discovery/index.js.map +0 -1
  305. package/dist/evm/Assets.d.ts.map +0 -1
  306. package/dist/evm/Assets.js.map +0 -1
  307. package/dist/evm/Chains.d.ts.map +0 -1
  308. package/dist/evm/Chains.js.map +0 -1
  309. package/dist/evm/Methods.d.ts.map +0 -1
  310. package/dist/evm/Methods.js.map +0 -1
  311. package/dist/evm/Types.d.ts.map +0 -1
  312. package/dist/evm/Types.js.map +0 -1
  313. package/dist/evm/client/Charge.d.ts.map +0 -1
  314. package/dist/evm/client/Charge.js.map +0 -1
  315. package/dist/evm/client/Methods.d.ts.map +0 -1
  316. package/dist/evm/client/Methods.js.map +0 -1
  317. package/dist/evm/client/index.d.ts.map +0 -1
  318. package/dist/evm/client/index.js.map +0 -1
  319. package/dist/evm/index.d.ts.map +0 -1
  320. package/dist/evm/index.js.map +0 -1
  321. package/dist/evm/server/Charge.d.ts.map +0 -1
  322. package/dist/evm/server/Charge.js.map +0 -1
  323. package/dist/evm/server/Methods.d.ts.map +0 -1
  324. package/dist/evm/server/Methods.js.map +0 -1
  325. package/dist/evm/server/index.d.ts.map +0 -1
  326. package/dist/evm/server/index.js.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
  328. package/dist/index.js.map +0 -1
  329. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  330. package/dist/internal/AcceptPayment.js.map +0 -1
  331. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  332. package/dist/internal/HeaderCodec.js.map +0 -1
  333. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  334. package/dist/internal/constantTimeEqual.js.map +0 -1
  335. package/dist/internal/env.d.ts.map +0 -1
  336. package/dist/internal/env.js.map +0 -1
  337. package/dist/internal/types.d.ts.map +0 -1
  338. package/dist/internal/types.js.map +0 -1
  339. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  340. package/dist/mcp/client/McpClient.js.map +0 -1
  341. package/dist/mcp/client/index.d.ts.map +0 -1
  342. package/dist/mcp/client/index.js.map +0 -1
  343. package/dist/mcp/server/Transport.d.ts.map +0 -1
  344. package/dist/mcp/server/Transport.js.map +0 -1
  345. package/dist/mcp/server/index.d.ts.map +0 -1
  346. package/dist/mcp/server/index.js.map +0 -1
  347. package/dist/middlewares/elysia.d.ts.map +0 -1
  348. package/dist/middlewares/elysia.js.map +0 -1
  349. package/dist/middlewares/express.d.ts.map +0 -1
  350. package/dist/middlewares/express.js.map +0 -1
  351. package/dist/middlewares/hono.d.ts.map +0 -1
  352. package/dist/middlewares/hono.js.map +0 -1
  353. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  354. package/dist/middlewares/internal/mppx.js.map +0 -1
  355. package/dist/middlewares/nextjs.d.ts.map +0 -1
  356. package/dist/middlewares/nextjs.js.map +0 -1
  357. package/dist/proxy/Proxy.d.ts.map +0 -1
  358. package/dist/proxy/Proxy.js.map +0 -1
  359. package/dist/proxy/Service.d.ts.map +0 -1
  360. package/dist/proxy/Service.js.map +0 -1
  361. package/dist/proxy/index.d.ts.map +0 -1
  362. package/dist/proxy/index.js.map +0 -1
  363. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  364. package/dist/proxy/internal/Headers.js.map +0 -1
  365. package/dist/proxy/internal/Route.d.ts.map +0 -1
  366. package/dist/proxy/internal/Route.js.map +0 -1
  367. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  368. package/dist/proxy/services/anthropic.js.map +0 -1
  369. package/dist/proxy/services/openai.d.ts.map +0 -1
  370. package/dist/proxy/services/openai.js.map +0 -1
  371. package/dist/proxy/services/stripe.d.ts.map +0 -1
  372. package/dist/proxy/services/stripe.js.map +0 -1
  373. package/dist/server/Methods.d.ts.map +0 -1
  374. package/dist/server/Methods.js.map +0 -1
  375. package/dist/server/Mppx.d.ts.map +0 -1
  376. package/dist/server/Mppx.js.map +0 -1
  377. package/dist/server/NodeListener.d.ts.map +0 -1
  378. package/dist/server/NodeListener.js.map +0 -1
  379. package/dist/server/Request.d.ts.map +0 -1
  380. package/dist/server/Request.js.map +0 -1
  381. package/dist/server/Response.d.ts.map +0 -1
  382. package/dist/server/Response.js.map +0 -1
  383. package/dist/server/Transport.d.ts.map +0 -1
  384. package/dist/server/Transport.js.map +0 -1
  385. package/dist/server/index.d.ts.map +0 -1
  386. package/dist/server/index.js.map +0 -1
  387. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  388. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  389. package/dist/server/internal/html/config.d.ts.map +0 -1
  390. package/dist/server/internal/html/config.js.map +0 -1
  391. package/dist/server/internal/html/constants.d.ts.map +0 -1
  392. package/dist/server/internal/html/constants.js.map +0 -1
  393. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  394. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  395. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  396. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  397. package/dist/server/internal/scope.d.ts.map +0 -1
  398. package/dist/server/internal/scope.js.map +0 -1
  399. package/dist/stripe/Methods.d.ts.map +0 -1
  400. package/dist/stripe/Methods.js.map +0 -1
  401. package/dist/stripe/client/Charge.d.ts.map +0 -1
  402. package/dist/stripe/client/Charge.js.map +0 -1
  403. package/dist/stripe/client/Methods.d.ts.map +0 -1
  404. package/dist/stripe/client/Methods.js.map +0 -1
  405. package/dist/stripe/client/index.d.ts.map +0 -1
  406. package/dist/stripe/client/index.js.map +0 -1
  407. package/dist/stripe/index.d.ts.map +0 -1
  408. package/dist/stripe/index.js.map +0 -1
  409. package/dist/stripe/internal/constants.d.ts.map +0 -1
  410. package/dist/stripe/internal/constants.js.map +0 -1
  411. package/dist/stripe/internal/types.d.ts.map +0 -1
  412. package/dist/stripe/internal/types.js.map +0 -1
  413. package/dist/stripe/server/Charge.d.ts.map +0 -1
  414. package/dist/stripe/server/Charge.js.map +0 -1
  415. package/dist/stripe/server/Methods.d.ts.map +0 -1
  416. package/dist/stripe/server/Methods.js.map +0 -1
  417. package/dist/stripe/server/index.d.ts.map +0 -1
  418. package/dist/stripe/server/index.js.map +0 -1
  419. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  420. package/dist/stripe/server/internal/html/types.js.map +0 -1
  421. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  422. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  423. package/dist/tempo/Attribution.d.ts.map +0 -1
  424. package/dist/tempo/Attribution.js.map +0 -1
  425. package/dist/tempo/Methods.d.ts.map +0 -1
  426. package/dist/tempo/Methods.js.map +0 -1
  427. package/dist/tempo/Proof.d.ts.map +0 -1
  428. package/dist/tempo/Proof.js.map +0 -1
  429. package/dist/tempo/client/Charge.d.ts.map +0 -1
  430. package/dist/tempo/client/Charge.js.map +0 -1
  431. package/dist/tempo/client/Methods.d.ts.map +0 -1
  432. package/dist/tempo/client/Methods.js.map +0 -1
  433. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  434. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  435. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  436. package/dist/tempo/client/Subscription.js.map +0 -1
  437. package/dist/tempo/client/index.d.ts.map +0 -1
  438. package/dist/tempo/client/index.js.map +0 -1
  439. package/dist/tempo/index.d.ts.map +0 -1
  440. package/dist/tempo/index.js.map +0 -1
  441. package/dist/tempo/internal/account.d.ts.map +0 -1
  442. package/dist/tempo/internal/account.js.map +0 -1
  443. package/dist/tempo/internal/address.d.ts.map +0 -1
  444. package/dist/tempo/internal/address.js.map +0 -1
  445. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  446. package/dist/tempo/internal/auto-swap.js.map +0 -1
  447. package/dist/tempo/internal/charge.d.ts.map +0 -1
  448. package/dist/tempo/internal/charge.js.map +0 -1
  449. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  450. package/dist/tempo/internal/defaults.js.map +0 -1
  451. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  452. package/dist/tempo/internal/fee-payer.js.map +0 -1
  453. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  454. package/dist/tempo/internal/fee-token.js.map +0 -1
  455. package/dist/tempo/internal/proof.d.ts.map +0 -1
  456. package/dist/tempo/internal/proof.js.map +0 -1
  457. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  458. package/dist/tempo/internal/selectors.js.map +0 -1
  459. package/dist/tempo/internal/types.d.ts.map +0 -1
  460. package/dist/tempo/internal/types.js.map +0 -1
  461. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  462. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  463. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  464. package/dist/tempo/legacy/client/Session.js.map +0 -1
  465. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  466. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  467. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  468. package/dist/tempo/legacy/client/index.js.map +0 -1
  469. package/dist/tempo/legacy/index.d.ts.map +0 -1
  470. package/dist/tempo/legacy/index.js.map +0 -1
  471. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  472. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  473. package/dist/tempo/legacy/server/Session.js +0 -698
  474. package/dist/tempo/legacy/server/Session.js.map +0 -1
  475. package/dist/tempo/legacy/server/index.d.ts +0 -5
  476. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  477. package/dist/tempo/legacy/server/index.js +0 -5
  478. package/dist/tempo/legacy/server/index.js.map +0 -1
  479. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  480. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  481. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  482. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  483. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  484. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  485. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  486. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  487. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  488. package/dist/tempo/legacy/session/Types.js.map +0 -1
  489. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  490. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  491. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  492. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  493. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  494. package/dist/tempo/legacy/session/index.js.map +0 -1
  495. package/dist/tempo/server/Charge.d.ts.map +0 -1
  496. package/dist/tempo/server/Charge.js.map +0 -1
  497. package/dist/tempo/server/Methods.d.ts.map +0 -1
  498. package/dist/tempo/server/Methods.js.map +0 -1
  499. package/dist/tempo/server/Relay.d.ts.map +0 -1
  500. package/dist/tempo/server/Relay.js.map +0 -1
  501. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  502. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  503. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  504. package/dist/tempo/server/Subscription.js.map +0 -1
  505. package/dist/tempo/server/index.d.ts.map +0 -1
  506. package/dist/tempo/server/index.js.map +0 -1
  507. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  508. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  509. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  510. package/dist/tempo/server/internal/request-body.js.map +0 -1
  511. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  512. package/dist/tempo/server/internal/transport.js.map +0 -1
  513. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  514. package/dist/tempo/session/Snapshot.js.map +0 -1
  515. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  516. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  517. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  518. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  519. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  520. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  521. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  522. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  523. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  524. package/dist/tempo/session/client/Runtime.js.map +0 -1
  525. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  526. package/dist/tempo/session/client/Session.js.map +0 -1
  527. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  528. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  529. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  530. package/dist/tempo/session/client/Transports.js.map +0 -1
  531. package/dist/tempo/session/client/index.d.ts.map +0 -1
  532. package/dist/tempo/session/client/index.js.map +0 -1
  533. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  534. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  535. package/dist/tempo/session/index.d.ts.map +0 -1
  536. package/dist/tempo/session/index.js.map +0 -1
  537. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  538. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  539. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  540. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  541. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  542. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  543. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  544. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  545. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  546. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  547. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  548. package/dist/tempo/session/precompile/index.js.map +0 -1
  549. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  550. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  551. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  552. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  553. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  554. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  555. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  556. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  557. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  558. package/dist/tempo/session/server/RequestState.js.map +0 -1
  559. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  560. package/dist/tempo/session/server/Session.js.map +0 -1
  561. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  562. package/dist/tempo/session/server/Settlement.js.map +0 -1
  563. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  564. package/dist/tempo/session/server/Sse.js.map +0 -1
  565. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  566. package/dist/tempo/session/server/Transports.js.map +0 -1
  567. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  568. package/dist/tempo/session/server/Ws.js.map +0 -1
  569. package/dist/tempo/session/server/index.d.ts.map +0 -1
  570. package/dist/tempo/session/server/index.js.map +0 -1
  571. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  572. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  573. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  574. package/dist/tempo/subscription/Receipt.js.map +0 -1
  575. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  576. package/dist/tempo/subscription/Store.js.map +0 -1
  577. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  578. package/dist/tempo/subscription/Types.js.map +0 -1
  579. package/dist/tempo/subscription/index.d.ts.map +0 -1
  580. package/dist/tempo/subscription/index.js.map +0 -1
  581. package/dist/validation/core.d.ts.map +0 -1
  582. package/dist/validation/core.js.map +0 -1
  583. package/dist/validation/index.d.ts.map +0 -1
  584. package/dist/validation/index.js.map +0 -1
  585. package/dist/viem/Account.d.ts.map +0 -1
  586. package/dist/viem/Account.js.map +0 -1
  587. package/dist/viem/Client.d.ts.map +0 -1
  588. package/dist/viem/Client.js.map +0 -1
  589. package/dist/x402/Assets.d.ts.map +0 -1
  590. package/dist/x402/Assets.js.map +0 -1
  591. package/dist/x402/Header.d.ts.map +0 -1
  592. package/dist/x402/Header.js.map +0 -1
  593. package/dist/x402/Types.d.ts.map +0 -1
  594. package/dist/x402/Types.js.map +0 -1
  595. package/dist/x402/client/Exact.d.ts.map +0 -1
  596. package/dist/x402/client/Exact.js.map +0 -1
  597. package/dist/x402/index.d.ts.map +0 -1
  598. package/dist/x402/index.js.map +0 -1
  599. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  600. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  601. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  602. package/dist/x402/internal/RouteBinding.js.map +0 -1
  603. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  604. package/dist/x402/server/EvmCharge.js.map +0 -1
  605. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  606. package/dist/x402/server/Facilitator.js.map +0 -1
  607. package/dist/zod.d.ts.map +0 -1
  608. package/dist/zod.js.map +0 -1
  609. package/src/BodyDigest.test.ts +0 -43
  610. package/src/BodyDigest.ts +0 -55
  611. package/src/Challenge.fuzz.test.ts +0 -121
  612. package/src/Challenge.test-d.ts +0 -82
  613. package/src/Challenge.test.ts +0 -995
  614. package/src/Challenge.ts +0 -683
  615. package/src/Constants.ts +0 -58
  616. package/src/Credential.fuzz.test.ts +0 -62
  617. package/src/Credential.test.ts +0 -378
  618. package/src/Credential.ts +0 -217
  619. package/src/Errors.test.ts +0 -520
  620. package/src/Errors.ts +0 -448
  621. package/src/Expires.test.ts +0 -112
  622. package/src/Expires.ts +0 -59
  623. package/src/Html.ts +0 -67
  624. package/src/Mcp.ts +0 -85
  625. package/src/Method.test.ts +0 -177
  626. package/src/Method.ts +0 -617
  627. package/src/PaymentRequest.test.ts +0 -147
  628. package/src/PaymentRequest.ts +0 -108
  629. package/src/Receipt.test.ts +0 -151
  630. package/src/Receipt.ts +0 -146
  631. package/src/Store.test-d.ts +0 -195
  632. package/src/Store.test.ts +0 -357
  633. package/src/Store.ts +0 -329
  634. package/src/bin.ts +0 -4
  635. package/src/cli/account.ts +0 -269
  636. package/src/cli/cli.test.ts +0 -2221
  637. package/src/cli/cli.ts +0 -1649
  638. package/src/cli/config.test.ts +0 -89
  639. package/src/cli/config.ts +0 -50
  640. package/src/cli/internal.ts +0 -114
  641. package/src/cli/mcp.test.ts +0 -262
  642. package/src/cli/plugins/evm.ts +0 -55
  643. package/src/cli/plugins/index.ts +0 -4
  644. package/src/cli/plugins/plugin.ts +0 -84
  645. package/src/cli/plugins/stripe.ts +0 -174
  646. package/src/cli/plugins/tempo.ts +0 -1102
  647. package/src/cli/sessions/Manager.test.ts +0 -249
  648. package/src/cli/sessions/Manager.ts +0 -93
  649. package/src/cli/sessions/commands.ts +0 -444
  650. package/src/cli/sessions/request.test.ts +0 -51
  651. package/src/cli/sessions/request.ts +0 -353
  652. package/src/cli/sessions/store.test.ts +0 -581
  653. package/src/cli/sessions/store.ts +0 -940
  654. package/src/cli/utils.test.ts +0 -156
  655. package/src/cli/utils.ts +0 -394
  656. package/src/cli/validate/challenge.ts +0 -565
  657. package/src/cli/validate/discovery.test.ts +0 -435
  658. package/src/cli/validate/discovery.ts +0 -221
  659. package/src/cli/validate/helpers.ts +0 -166
  660. package/src/cli/validate/index.ts +0 -229
  661. package/src/cli/validate/messages.ts +0 -7
  662. package/src/cli/validate/payment.ts +0 -774
  663. package/src/cli/validate.test.ts +0 -843
  664. package/src/client/Methods.ts +0 -8
  665. package/src/client/Mppx.test-d.ts +0 -270
  666. package/src/client/Mppx.test.ts +0 -1065
  667. package/src/client/Mppx.ts +0 -466
  668. package/src/client/Transport.test.ts +0 -619
  669. package/src/client/Transport.ts +0 -191
  670. package/src/client/index.ts +0 -29
  671. package/src/client/internal/Fetch.browser.test.ts +0 -197
  672. package/src/client/internal/Fetch.test-d.ts +0 -109
  673. package/src/client/internal/Fetch.test.ts +0 -2336
  674. package/src/client/internal/Fetch.ts +0 -1079
  675. package/src/client/internal/MethodChallenge.ts +0 -35
  676. package/src/client/internal/MethodResponse.ts +0 -67
  677. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  678. package/src/client/internal/protocols/Mcp.ts +0 -186
  679. package/src/client/internal/protocols/Mpp.ts +0 -21
  680. package/src/client/internal/protocols/Protocol.ts +0 -10
  681. package/src/client/internal/protocols/Shared.ts +0 -25
  682. package/src/client/internal/protocols/X402.ts +0 -46
  683. package/src/client/node.test.ts +0 -115
  684. package/src/client/node.ts +0 -247
  685. package/src/discovery/Discovery.test.ts +0 -214
  686. package/src/discovery/Discovery.ts +0 -105
  687. package/src/discovery/OpenApi.test.ts +0 -453
  688. package/src/discovery/OpenApi.ts +0 -224
  689. package/src/discovery/Validate.test.ts +0 -305
  690. package/src/discovery/Validate.ts +0 -77
  691. package/src/discovery/index.ts +0 -3
  692. package/src/env.d.ts +0 -12
  693. package/src/evm/Assets.ts +0 -1
  694. package/src/evm/Chains.ts +0 -11
  695. package/src/evm/Methods.ts +0 -44
  696. package/src/evm/PublicInterface.test-d.ts +0 -134
  697. package/src/evm/Types.ts +0 -140
  698. package/src/evm/client/Charge.test.ts +0 -347
  699. package/src/evm/client/Charge.ts +0 -187
  700. package/src/evm/client/Methods.ts +0 -19
  701. package/src/evm/client/index.ts +0 -6
  702. package/src/evm/index.ts +0 -16
  703. package/src/evm/server/Charge.test.ts +0 -339
  704. package/src/evm/server/Charge.ts +0 -290
  705. package/src/evm/server/Methods.ts +0 -22
  706. package/src/evm/server/index.ts +0 -6
  707. package/src/index.ts +0 -14
  708. package/src/internal/AcceptPayment.test.ts +0 -343
  709. package/src/internal/AcceptPayment.ts +0 -366
  710. package/src/internal/HeaderCodec.ts +0 -36
  711. package/src/internal/changeset.test.ts +0 -106
  712. package/src/internal/constantTimeEqual.test.ts +0 -47
  713. package/src/internal/constantTimeEqual.ts +0 -10
  714. package/src/internal/env.test.ts +0 -42
  715. package/src/internal/env.ts +0 -49
  716. package/src/internal/types.test-d.ts +0 -21
  717. package/src/internal/types.ts +0 -470
  718. package/src/mcp/client/McpClient.integration.test.ts +0 -652
  719. package/src/mcp/client/McpClient.test-d.ts +0 -144
  720. package/src/mcp/client/McpClient.test.ts +0 -463
  721. package/src/mcp/client/McpClient.ts +0 -307
  722. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  723. package/src/mcp/client/index.ts +0 -2
  724. package/src/mcp/server/Transport.test.ts +0 -191
  725. package/src/mcp/server/Transport.ts +0 -111
  726. package/src/mcp/server/index.ts +0 -1
  727. package/src/middlewares/elysia.test.ts +0 -295
  728. package/src/middlewares/elysia.ts +0 -116
  729. package/src/middlewares/express.test.ts +0 -371
  730. package/src/middlewares/express.ts +0 -140
  731. package/src/middlewares/hono.test.ts +0 -476
  732. package/src/middlewares/hono.ts +0 -153
  733. package/src/middlewares/internal/mppx.test.ts +0 -177
  734. package/src/middlewares/internal/mppx.ts +0 -67
  735. package/src/middlewares/nextjs.test.ts +0 -369
  736. package/src/middlewares/nextjs.ts +0 -107
  737. package/src/proxy/Proxy.test.ts +0 -1031
  738. package/src/proxy/Proxy.ts +0 -345
  739. package/src/proxy/Service.test.ts +0 -182
  740. package/src/proxy/Service.ts +0 -253
  741. package/src/proxy/index.ts +0 -6
  742. package/src/proxy/internal/Headers.test.ts +0 -139
  743. package/src/proxy/internal/Headers.ts +0 -66
  744. package/src/proxy/internal/Route.test.ts +0 -217
  745. package/src/proxy/internal/Route.ts +0 -64
  746. package/src/proxy/services/anthropic.test.ts +0 -132
  747. package/src/proxy/services/anthropic.ts +0 -52
  748. package/src/proxy/services/openai.test.ts +0 -157
  749. package/src/proxy/services/openai.ts +0 -59
  750. package/src/proxy/services/stripe.test.ts +0 -175
  751. package/src/proxy/services/stripe.ts +0 -58
  752. package/src/server/Methods.ts +0 -3
  753. package/src/server/Mppx.authorize.test.ts +0 -210
  754. package/src/server/Mppx.test-d.ts +0 -360
  755. package/src/server/Mppx.test.ts +0 -5813
  756. package/src/server/Mppx.ts +0 -2623
  757. package/src/server/NodeListener.test.ts +0 -293
  758. package/src/server/NodeListener.ts +0 -45
  759. package/src/server/Request.test.ts +0 -255
  760. package/src/server/Request.ts +0 -155
  761. package/src/server/Response.test.ts +0 -32
  762. package/src/server/Response.ts +0 -45
  763. package/src/server/Transport.test.ts +0 -598
  764. package/src/server/Transport.ts +0 -320
  765. package/src/server/index.ts +0 -9
  766. package/src/server/internal/html/compose.main.gen.ts +0 -2
  767. package/src/server/internal/html/compose.main.ts +0 -88
  768. package/src/server/internal/html/config.ts +0 -672
  769. package/src/server/internal/html/constants.ts +0 -28
  770. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  771. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  772. package/src/server/internal/html/serviceWorker.ts +0 -27
  773. package/src/server/internal/html/tsconfig.compose.json +0 -8
  774. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  775. package/src/server/internal/html/tsconfig.worker.json +0 -8
  776. package/src/server/internal/scope.ts +0 -43
  777. package/src/stripe/Charge.integration.test.ts +0 -329
  778. package/src/stripe/Methods.test.ts +0 -62
  779. package/src/stripe/Methods.ts +0 -44
  780. package/src/stripe/client/Charge.test.ts +0 -205
  781. package/src/stripe/client/Charge.ts +0 -132
  782. package/src/stripe/client/Methods.ts +0 -37
  783. package/src/stripe/client/index.ts +0 -2
  784. package/src/stripe/index.ts +0 -1
  785. package/src/stripe/internal/constants.ts +0 -7
  786. package/src/stripe/internal/types.ts +0 -46
  787. package/src/stripe/server/Charge.test-d.ts +0 -66
  788. package/src/stripe/server/Charge.test.ts +0 -621
  789. package/src/stripe/server/Charge.ts +0 -434
  790. package/src/stripe/server/Methods.ts +0 -24
  791. package/src/stripe/server/index.ts +0 -2
  792. package/src/stripe/server/internal/html/main.ts +0 -165
  793. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  794. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  795. package/src/stripe/server/internal/html/package.json +0 -9
  796. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  797. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  798. package/src/stripe/server/internal/html/types.ts +0 -5
  799. package/src/stripe/server/internal/html.gen.ts +0 -2
  800. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  801. package/src/tempo/Attribution.test.ts +0 -294
  802. package/src/tempo/Attribution.ts +0 -185
  803. package/src/tempo/Methods.test.ts +0 -425
  804. package/src/tempo/Methods.ts +0 -367
  805. package/src/tempo/Proof.conformance.test.ts +0 -146
  806. package/src/tempo/Proof.test-d.ts +0 -32
  807. package/src/tempo/Proof.test.ts +0 -40
  808. package/src/tempo/Proof.ts +0 -69
  809. package/src/tempo/PublicExports.test-d.ts +0 -130
  810. package/src/tempo/Subscription.integration.test.ts +0 -591
  811. package/src/tempo/client/Charge.test.ts +0 -501
  812. package/src/tempo/client/Charge.ts +0 -289
  813. package/src/tempo/client/Methods.ts +0 -45
  814. package/src/tempo/client/ResolveAccount.ts +0 -46
  815. package/src/tempo/client/Subscription.test.ts +0 -180
  816. package/src/tempo/client/Subscription.ts +0 -156
  817. package/src/tempo/client/index.ts +0 -17
  818. package/src/tempo/index.ts +0 -5
  819. package/src/tempo/internal/account.ts +0 -56
  820. package/src/tempo/internal/address.ts +0 -6
  821. package/src/tempo/internal/auto-swap.test.ts +0 -198
  822. package/src/tempo/internal/auto-swap.ts +0 -188
  823. package/src/tempo/internal/charge.test.ts +0 -66
  824. package/src/tempo/internal/charge.ts +0 -43
  825. package/src/tempo/internal/defaults.test.ts +0 -95
  826. package/src/tempo/internal/defaults.ts +0 -53
  827. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  828. package/src/tempo/internal/fee-payer.ts +0 -808
  829. package/src/tempo/internal/fee-token.test.ts +0 -165
  830. package/src/tempo/internal/fee-token.ts +0 -72
  831. package/src/tempo/internal/proof.test.ts +0 -97
  832. package/src/tempo/internal/proof.ts +0 -87
  833. package/src/tempo/internal/selectors.ts +0 -10
  834. package/src/tempo/internal/types.ts +0 -19
  835. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  836. package/src/tempo/legacy/README.md +0 -9
  837. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  838. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  839. package/src/tempo/legacy/client/Session.test.ts +0 -800
  840. package/src/tempo/legacy/client/Session.ts +0 -397
  841. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  842. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  843. package/src/tempo/legacy/client/index.ts +0 -6
  844. package/src/tempo/legacy/index.ts +0 -6
  845. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  846. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  847. package/src/tempo/legacy/server/Session.ts +0 -1024
  848. package/src/tempo/legacy/server/index.ts +0 -4
  849. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  850. package/src/tempo/legacy/session/Chain.ts +0 -830
  851. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  852. package/src/tempo/legacy/session/Channel.ts +0 -51
  853. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  854. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
  855. package/src/tempo/legacy/session/Types.ts +0 -91
  856. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  857. package/src/tempo/legacy/session/Voucher.ts +0 -183
  858. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  859. package/src/tempo/legacy/session/index.ts +0 -8
  860. package/src/tempo/server/AtomicStore.test-d.ts +0 -50
  861. package/src/tempo/server/Charge.test.ts +0 -6121
  862. package/src/tempo/server/Charge.ts +0 -1351
  863. package/src/tempo/server/Methods.ts +0 -106
  864. package/src/tempo/server/Relay.test.ts +0 -677
  865. package/src/tempo/server/Relay.ts +0 -297
  866. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  867. package/src/tempo/server/SponsorBudget.ts +0 -219
  868. package/src/tempo/server/Sse.test.ts +0 -321
  869. package/src/tempo/server/Subscription.test.ts +0 -1944
  870. package/src/tempo/server/Subscription.ts +0 -1333
  871. package/src/tempo/server/index.ts +0 -12
  872. package/src/tempo/server/internal/html/main.ts +0 -115
  873. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  874. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  875. package/src/tempo/server/internal/html/package.json +0 -10
  876. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  877. package/src/tempo/server/internal/html.gen.ts +0 -2
  878. package/src/tempo/server/internal/request-body.test.ts +0 -210
  879. package/src/tempo/server/internal/request-body.ts +0 -61
  880. package/src/tempo/server/internal/transport.test.ts +0 -903
  881. package/src/tempo/server/internal/transport.ts +0 -310
  882. package/src/tempo/session/README.md +0 -208
  883. package/src/tempo/session/Snapshot.test.ts +0 -41
  884. package/src/tempo/session/Snapshot.ts +0 -95
  885. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  886. package/src/tempo/session/client/ChannelOps.ts +0 -348
  887. package/src/tempo/session/client/ChannelStore.ts +0 -111
  888. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  889. package/src/tempo/session/client/CredentialState.ts +0 -942
  890. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  891. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  892. package/src/tempo/session/client/Runtime.ts +0 -1008
  893. package/src/tempo/session/client/Session.test.ts +0 -1355
  894. package/src/tempo/session/client/Session.ts +0 -420
  895. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  896. package/src/tempo/session/client/SessionManager.ts +0 -996
  897. package/src/tempo/session/client/Transports.test.ts +0 -1141
  898. package/src/tempo/session/client/Transports.ts +0 -1534
  899. package/src/tempo/session/client/index.ts +0 -40
  900. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  901. package/src/tempo/session/index.ts +0 -7
  902. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  903. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  904. package/src/tempo/session/precompile/Chain.ts +0 -1149
  905. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  906. package/src/tempo/session/precompile/Channel.ts +0 -108
  907. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  908. package/src/tempo/session/precompile/Protocol.ts +0 -520
  909. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  910. package/src/tempo/session/precompile/Voucher.ts +0 -162
  911. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  912. package/src/tempo/session/precompile/index.ts +0 -33
  913. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  914. package/src/tempo/session/server/ChannelOps.ts +0 -157
  915. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  916. package/src/tempo/session/server/ChannelStore.ts +0 -835
  917. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  918. package/src/tempo/session/server/CredentialVerification.ts +0 -775
  919. package/src/tempo/session/server/MeteredStream.ts +0 -95
  920. package/src/tempo/session/server/RequestState.test.ts +0 -574
  921. package/src/tempo/session/server/RequestState.ts +0 -507
  922. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  923. package/src/tempo/session/server/Session.test.ts +0 -3862
  924. package/src/tempo/session/server/Session.ts +0 -570
  925. package/src/tempo/session/server/Settlement.test.ts +0 -345
  926. package/src/tempo/session/server/Settlement.ts +0 -527
  927. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  928. package/src/tempo/session/server/Sse.test.ts +0 -557
  929. package/src/tempo/session/server/Sse.ts +0 -254
  930. package/src/tempo/session/server/Transports.test.ts +0 -346
  931. package/src/tempo/session/server/Transports.ts +0 -255
  932. package/src/tempo/session/server/Ws.test.ts +0 -594
  933. package/src/tempo/session/server/Ws.ts +0 -385
  934. package/src/tempo/session/server/index.ts +0 -12
  935. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  936. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  937. package/src/tempo/subscription/Receipt.ts +0 -28
  938. package/src/tempo/subscription/Store.test.ts +0 -609
  939. package/src/tempo/subscription/Store.ts +0 -449
  940. package/src/tempo/subscription/Types.ts +0 -68
  941. package/src/tempo/subscription/index.ts +0 -23
  942. package/src/tsconfig.json +0 -10
  943. package/src/validation/core.ts +0 -386
  944. package/src/validation/index.ts +0 -11
  945. package/src/viem/Account.test.ts +0 -72
  946. package/src/viem/Account.ts +0 -30
  947. package/src/viem/Client.test.ts +0 -366
  948. package/src/viem/Client.ts +0 -93
  949. package/src/x402/Assets.test.ts +0 -253
  950. package/src/x402/Assets.ts +0 -221
  951. package/src/x402/Exact.e2e.test.ts +0 -448
  952. package/src/x402/Exact.localnet.test.ts +0 -475
  953. package/src/x402/Header.test.ts +0 -73
  954. package/src/x402/Header.ts +0 -79
  955. package/src/x402/PublicInterface.test-d.ts +0 -39
  956. package/src/x402/Types.ts +0 -248
  957. package/src/x402/client/Exact.test.ts +0 -309
  958. package/src/x402/client/Exact.ts +0 -186
  959. package/src/x402/index.ts +0 -6
  960. package/src/x402/internal/ChallengeBrand.ts +0 -14
  961. package/src/x402/internal/RouteBinding.ts +0 -18
  962. package/src/x402/server/EvmCharge.ts +0 -394
  963. package/src/x402/server/Facilitator.test.ts +0 -111
  964. package/src/x402/server/Facilitator.ts +0 -56
  965. package/src/zod.test.ts +0 -169
  966. package/src/zod.ts +0 -71
@@ -1,843 +0,0 @@
1
- import type * as http from 'node:http'
2
-
3
- import { afterEach, describe, expect, test, vi } from 'vp/test'
4
- import * as Http from '~test/Http.js'
5
-
6
- import * as Challenge from '../Challenge.js'
7
- import * as Constants from '../Constants.js'
8
- import * as Receipt from '../Receipt.js'
9
- import { missingDiscoverySuggestion } from './validate/messages.js'
10
-
11
- // Keep validate tests out of JSON mode by default, even when the suite runs inside an agent.
12
- const isAgentEnvironmentMock = vi.fn(() => false)
13
-
14
- // Keep CLI orchestration tests independent of the public Tempo RPC and faucet.
15
- vi.doMock('viem/tempo', async () => {
16
- const actual = await vi.importActual<typeof import('viem/tempo')>('viem/tempo')
17
- return {
18
- ...actual,
19
- Actions: {
20
- ...actual.Actions,
21
- faucet: { ...actual.Actions.faucet, fund: vi.fn(async () => []) },
22
- },
23
- }
24
- })
25
-
26
- vi.doMock('viem/actions', async () => {
27
- const actual = await vi.importActual<typeof import('viem/actions')>('viem/actions')
28
- return {
29
- ...actual,
30
- prepareTransactionRequest: vi.fn(async () => ({})),
31
- signTransaction: vi.fn(async () => '0xdeadbeef'),
32
- }
33
- })
34
-
35
- vi.doMock('./utils.js', async () => {
36
- const actual = await vi.importActual<typeof import('./utils.js')>('./utils.js')
37
- return {
38
- ...actual,
39
- isAgentEnvironment: isAgentEnvironmentMock,
40
- }
41
- })
42
-
43
- // Auto-cleanup for test servers
44
- const servers: Http.TestServer[] = []
45
- afterEach(() => {
46
- servers.forEach((s) => s.close())
47
- servers.length = 0
48
- isAgentEnvironmentMock.mockReturnValue(false)
49
- })
50
-
51
- async function testServer(handler: http.RequestListener) {
52
- const s = await Http.createServer(handler)
53
- servers.push(s)
54
- return s
55
- }
56
-
57
- async function serve(argv: string[]) {
58
- const { default: validate } = await import('./validate/index.js')
59
- let output = ''
60
- let exitCode: number | undefined
61
- const origLog = console.log
62
- const origStdout = process.stdout.write
63
- const origStderr = process.stderr.write
64
- console.log = (...args: unknown[]) => {
65
- output += `${args.map(String).join(' ')}\n`
66
- }
67
- process.stdout.write = ((chunk: unknown) => {
68
- output += typeof chunk === 'string' ? chunk : String(chunk)
69
- return true
70
- }) as typeof process.stdout.write
71
- process.stderr.write = ((chunk: unknown) => {
72
- output += typeof chunk === 'string' ? chunk : String(chunk)
73
- return true
74
- }) as typeof process.stderr.write
75
- try {
76
- const { Cli } = await import('incur')
77
- const cli = Cli.create('mppx', {})
78
- cli.command(validate)
79
- await cli.serve(argv, {
80
- stdout(s: string) {
81
- output += s
82
- },
83
- exit(code: number) {
84
- exitCode = code
85
- },
86
- })
87
- } finally {
88
- console.log = origLog
89
- process.stdout.write = origStdout
90
- process.stderr.write = origStderr
91
- }
92
- return { output, exitCode }
93
- }
94
-
95
- function makeChallenge(overrides?: Partial<Challenge.Challenge>) {
96
- return {
97
- id: 'test-id-123',
98
- realm: 'localhost',
99
- method: 'tempo',
100
- intent: 'charge',
101
- request: {
102
- amount: '10000',
103
- currency: '0x20c0000000000000000000000000000000000000',
104
- recipient: '0x1234567890123456789012345678901234567890',
105
- methodDetails: { chainId: 42431 },
106
- },
107
- expires: new Date(Date.now() + 300_000).toISOString(),
108
- ...overrides,
109
- } as Challenge.Challenge
110
- }
111
-
112
- function makeDiscoveryDoc(
113
- endpoints: Record<string, { method?: string; amount?: string; requestBody?: unknown }> = {},
114
- ) {
115
- const paths: Record<string, unknown> = {}
116
- for (const [path, opts] of Object.entries(endpoints)) {
117
- const op: Record<string, unknown> = {
118
- 'x-payment-info': { method: 'tempo', intent: 'charge', amount: opts.amount ?? '10000' },
119
- responses: { '402': { description: 'Payment required' } },
120
- }
121
- if (opts.requestBody) op.requestBody = opts.requestBody
122
- paths[path] = { [opts.method?.toLowerCase() ?? 'post']: op }
123
- }
124
- return JSON.stringify({ openapi: '3.1.0', info: { title: 'Test', version: '1.0.0' }, paths })
125
- }
126
-
127
- async function mppServer(
128
- challenge: Challenge.Challenge,
129
- opts?: { errorStatus?: number; postPaymentStatus?: number },
130
- ) {
131
- return testServer((req, res) => {
132
- const url = new URL(req.url!, 'http://localhost')
133
- if (url.pathname === '/openapi.json') {
134
- res.setHeader('Content-Type', 'application/json')
135
- res.end(makeDiscoveryDoc({ '/api/test': {} }))
136
- return
137
- }
138
- const hasAuth = req.headers[Constants.Headers.authorization.toLowerCase()]
139
- if (hasAuth && hasAuth !== `${Constants.Schemes.payment} dGhpcyBpcyBnYXJiYWdl`) {
140
- const status = opts?.postPaymentStatus ?? 200
141
- const receipt = Receipt.serialize({
142
- method: 'tempo',
143
- status: 'success',
144
- reference: '0x' + 'ab'.repeat(32),
145
- timestamp: new Date().toISOString(),
146
- })
147
- res.writeHead(status, {
148
- [Constants.Headers.paymentReceipt]: receipt,
149
- 'content-type': 'application/json',
150
- })
151
- res.end(JSON.stringify({ result: 'ok' }))
152
- } else if (hasAuth) {
153
- const errorStatus = opts?.errorStatus ?? 402
154
- if (errorStatus === 402) {
155
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
156
- } else {
157
- res.writeHead(errorStatus)
158
- }
159
- res.end()
160
- } else {
161
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
162
- res.end()
163
- }
164
- })
165
- }
166
-
167
- describe('validate: discovery', () => {
168
- test('succeeds with valid discovery doc', { timeout: 15_000 }, async () => {
169
- const server = await mppServer(makeChallenge())
170
- const { output } = await serve(['validate', server.url])
171
- expect(output).toContain('Document found and parseable')
172
- expect(output).toContain('Valid OpenAPI structure')
173
- expect(output).toContain('Paid endpoints found')
174
- })
175
-
176
- test('reports missing discovery doc', { timeout: 15_000 }, async () => {
177
- const server = await testServer((_req, res) => {
178
- res.writeHead(404)
179
- res.end()
180
- })
181
- const { output, exitCode } = await serve(['validate', server.url])
182
- expect(exitCode).toBe(1)
183
- for (const line of missingDiscoverySuggestion.split('\n').filter(Boolean))
184
- expect(output).toContain(line)
185
- })
186
-
187
- test('strips /openapi.json from input URL', { timeout: 15_000 }, async () => {
188
- const server = await mppServer(makeChallenge())
189
- const { output } = await serve(['validate', `${server.url}/openapi.json`])
190
- expect(output).toContain('Document found and parseable')
191
- })
192
-
193
- test('discovers openapi.json at root when subpath given', { timeout: 15_000 }, async () => {
194
- const server = await mppServer(makeChallenge())
195
- const { output } = await serve(['validate', `${server.url}/mpp`])
196
- expect(output).toContain('Document found and parseable')
197
- })
198
-
199
- test('reports invalid JSON', { timeout: 15_000 }, async () => {
200
- const server = await testServer((req, res) => {
201
- if (req.url?.includes('openapi.json')) {
202
- res.setHeader('Content-Type', 'application/json')
203
- res.end('not json{{{')
204
- } else {
205
- res.writeHead(404)
206
- res.end()
207
- }
208
- })
209
- const { output, exitCode } = await serve(['validate', server.url])
210
- expect(exitCode).toBe(1)
211
- expect(output).toContain('Invalid JSON')
212
- })
213
-
214
- test('handles no paid endpoints in discovery', { timeout: 15_000 }, async () => {
215
- const server = await testServer((req, res) => {
216
- if (req.url?.includes('openapi.json')) {
217
- res.setHeader('Content-Type', 'application/json')
218
- res.end(
219
- JSON.stringify({
220
- openapi: '3.1.0',
221
- info: { title: 'T', version: '1' },
222
- paths: { '/health': { get: { responses: { '200': {} } } } },
223
- }),
224
- )
225
- } else {
226
- res.writeHead(200)
227
- res.end()
228
- }
229
- })
230
- const { output, exitCode } = await serve(['validate', server.url])
231
- expect(exitCode).toBe(1)
232
- expect(output).toContain('Paid endpoints found (No endpoints with x-payment-info)')
233
- expect(output).toContain('Use --endpoint to specify endpoints manually.')
234
- })
235
-
236
- test('falls back to 402 response heuristic', { timeout: 15_000 }, async () => {
237
- const challenge = makeChallenge()
238
- const server = await testServer((req, res) => {
239
- const url = new URL(req.url!, 'http://localhost')
240
- if (url.pathname === '/openapi.json') {
241
- res.setHeader('Content-Type', 'application/json')
242
- res.end(
243
- JSON.stringify({
244
- openapi: '3.1.0',
245
- info: { title: 'T', version: '1' },
246
- paths: {
247
- '/api/data': { get: { responses: { '402': { description: 'Payment required' } } } },
248
- },
249
- }),
250
- )
251
- } else {
252
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
253
- res.end()
254
- }
255
- })
256
- const { output } = await serve(['validate', server.url])
257
- expect(output).toContain('Paid endpoints found')
258
- expect(output).toContain('Challenge parseable')
259
- })
260
- })
261
-
262
- describe('validate: challenge', () => {
263
- test('validates correct MPP challenge', { timeout: 15_000 }, async () => {
264
- const server = await mppServer(makeChallenge())
265
- const { output } = await serve(['validate', server.url])
266
- expect(output).toContain('Challenge parseable (tempo/charge)')
267
- expect(output).toContain('Challenge has id')
268
- expect(output).toContain('Challenge has realm')
269
- expect(output).toContain('Valid recipient address')
270
- expect(output).toContain('Valid currency address (testnet)')
271
- expect(output).toContain('Amount is valid integer string')
272
- })
273
-
274
- test('fails on expired challenge', { timeout: 15_000 }, async () => {
275
- const server = await mppServer(makeChallenge({ expires: '2020-01-01T00:00:00Z' }))
276
- const { output } = await serve(['validate', server.url])
277
- expect(output).toContain('Challenge expires in the future (Expired at 2020-01-01T00:00:00Z)')
278
- expect(output).toContain('The expires timestamp must be in the future')
279
- })
280
-
281
- test('warns on realm mismatch', { timeout: 15_000 }, async () => {
282
- const server = await mppServer(makeChallenge({ realm: 'other.example.com' }))
283
- const { output } = await serve(['validate', server.url])
284
- expect(output).toContain(
285
- 'Realm matches server hostname (realm="other.example.com" vs host="localhost")',
286
- )
287
- expect(output).toContain('Set the realm to your production hostname')
288
- })
289
-
290
- test('fails on invalid recipient address', { timeout: 15_000 }, async () => {
291
- const challenge = makeChallenge()
292
- ;(challenge.request as Record<string, unknown>).recipient = 'not-an-address'
293
- const server = await mppServer(challenge)
294
- const { output } = await serve(['validate', server.url])
295
- expect(output).toContain('Valid recipient address (Got: not-an-address)')
296
- expect(output).toContain('Set request.recipient to a valid 0x-prefixed 40-hex-char address')
297
- })
298
-
299
- test('fails on invalid amount', { timeout: 15_000 }, async () => {
300
- const challenge = makeChallenge()
301
- ;(challenge.request as Record<string, unknown>).amount = '12.5'
302
- const server = await mppServer(challenge)
303
- const { output } = await serve(['validate', server.url])
304
- expect(output).toContain('Amount is valid integer string (Got: 12.5)')
305
- expect(output).toContain('request.amount must be a string of digits')
306
- })
307
-
308
- test('detects non-MPP endpoint (x402)', { timeout: 15_000 }, async () => {
309
- const server = await testServer((req, res) => {
310
- const url = new URL(req.url!, 'http://localhost')
311
- if (url.pathname === '/openapi.json') {
312
- res.setHeader('Content-Type', 'application/json')
313
- res.end(makeDiscoveryDoc({ '/api/test': {} }))
314
- } else {
315
- res.writeHead(402, { 'payment-required': 'eyJ0ZXN0IjoxfQ==' })
316
- res.end()
317
- }
318
- })
319
- const { output, exitCode } = await serve(['validate', server.url])
320
- expect(output).toContain('Not an MPP endpoint')
321
- expect(output).toContain('x402 protocol detected')
322
- expect(output).toContain('x402 payment challenge')
323
- expect(exitCode).toBe(1)
324
- })
325
-
326
- test('skips 200 response', { timeout: 15_000 }, async () => {
327
- const server = await testServer((req, res) => {
328
- const url = new URL(req.url!, 'http://localhost')
329
- if (url.pathname === '/openapi.json') {
330
- res.setHeader('Content-Type', 'application/json')
331
- res.end(makeDiscoveryDoc({ '/api/test': { method: 'GET' } }))
332
- } else {
333
- res.writeHead(200)
334
- res.end('ok')
335
- }
336
- })
337
- const { output } = await serve(['validate', server.url])
338
- expect(output).toContain(
339
- 'Returns 402 without credentials (Got 200 (endpoint may not require payment in all cases))',
340
- )
341
- })
342
-
343
- test('skips 401 as auth-gated', { timeout: 15_000 }, async () => {
344
- const server = await testServer((req, res) => {
345
- const url = new URL(req.url!, 'http://localhost')
346
- if (url.pathname === '/openapi.json') {
347
- res.setHeader('Content-Type', 'application/json')
348
- res.end(makeDiscoveryDoc({ '/api/test': {} }))
349
- } else {
350
- res.writeHead(401)
351
- res.end()
352
- }
353
- })
354
- const { output } = await serve(['validate', server.url])
355
- expect(output).toContain(
356
- 'Returns 402 without credentials (Got 401 (endpoint requires auth before payment gate))',
357
- )
358
- })
359
-
360
- test('retries with body on 400', { timeout: 15_000 }, async () => {
361
- const challenge = makeChallenge()
362
- const doc = JSON.stringify({
363
- openapi: '3.1.0',
364
- info: { title: 'T', version: '1' },
365
- paths: {
366
- '/api/test': {
367
- post: {
368
- 'x-payment-info': { method: 'tempo', intent: 'charge', amount: '10000' },
369
- responses: { '402': {} },
370
- requestBody: {
371
- required: true,
372
- content: {
373
- 'application/json': {
374
- schema: {
375
- type: 'object',
376
- required: ['q'],
377
- properties: { q: { type: 'string', example: 'hello' } },
378
- },
379
- },
380
- },
381
- },
382
- },
383
- },
384
- },
385
- })
386
- let requestCount = 0
387
- const server = await testServer((req, res) => {
388
- const url = new URL(req.url!, 'http://localhost')
389
- if (url.pathname === '/openapi.json') {
390
- res.setHeader('Content-Type', 'application/json')
391
- res.end(doc)
392
- } else {
393
- requestCount++
394
- const hasAuth = req.headers[Constants.Headers.authorization.toLowerCase()]
395
- if (hasAuth) {
396
- res.writeHead(402, {
397
- [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge),
398
- })
399
- res.end()
400
- } else if (requestCount === 1) {
401
- res.writeHead(400)
402
- res.end()
403
- } else {
404
- res.writeHead(402, {
405
- [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge),
406
- })
407
- res.end()
408
- }
409
- }
410
- })
411
- const { output } = await serve(['validate', server.url])
412
- expect(output).toContain('Challenge parseable')
413
- expect(requestCount).toBeGreaterThan(1)
414
- })
415
- })
416
-
417
- describe('validate: error handling', () => {
418
- test('passes when malformed credential returns 402', { timeout: 15_000 }, async () => {
419
- const server = await mppServer(makeChallenge())
420
- const { output } = await serve(['validate', server.url])
421
- expect(output).toContain('Malformed credential returns 402 (not 500)')
422
- })
423
-
424
- test('fails when malformed credential returns 500', { timeout: 15_000 }, async () => {
425
- const server = await mppServer(makeChallenge(), { errorStatus: 500 })
426
- const { output } = await serve(['validate', server.url])
427
- expect(output).toContain('Malformed credential returns 402 (Got 500 (server error))')
428
- expect(output).toContain(
429
- 'When the Authorization header contains an invalid credential, respond with 402 (not 500)',
430
- )
431
- })
432
-
433
- test('warns when malformed credential returns other status', { timeout: 15_000 }, async () => {
434
- const server = await mppServer(makeChallenge(), { errorStatus: 422 })
435
- const { output } = await serve(['validate', server.url])
436
- expect(output).toContain('Malformed credential returns 402 (Got 422)')
437
- expect(output).toContain('Returning 422 prevents the client from retrying with a valid payment')
438
- })
439
- })
440
-
441
- describe('validate: --endpoint flag', () => {
442
- test('checks discovery even with --endpoint', { timeout: 15_000 }, async () => {
443
- const challenge = makeChallenge()
444
- const server = await testServer((_req, res) => {
445
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
446
- res.end()
447
- })
448
- const { output } = await serve(['validate', server.url, '--endpoint', 'POST:/api/test'])
449
- expect(output).toContain('Discovery (/openapi.json)')
450
- // Discovery fails (server only returns 402) but doesn't block --endpoint testing
451
- expect(output).toContain('Document found')
452
- expect(output).toContain('Challenge parseable')
453
- })
454
-
455
- test('uses --body directly with --endpoint', { timeout: 15_000 }, async () => {
456
- const challenge = makeChallenge()
457
- const bodies: string[] = []
458
- const server = await testServer((req, res) => {
459
- let body = ''
460
- req.on('data', (chunk) => {
461
- body += chunk
462
- })
463
- req.on('end', () => {
464
- bodies.push(body)
465
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
466
- res.end()
467
- })
468
- })
469
- await serve(['validate', server.url, '--endpoint', 'POST:/api/test', '--body', '{"test":true}'])
470
- // Challenge phase: bare request first (no body)
471
- expect(bodies[0]).toBe('')
472
- // Payment phase: sends body with the credential request
473
- const paymentRequest = bodies.find((b) => b === '{"test":true}')
474
- expect(paymentRequest).toBe('{"test":true}')
475
- })
476
- })
477
-
478
- describe('validate: no MPP endpoints', () => {
479
- test('exits non-zero when all endpoints are x402', { timeout: 15_000 }, async () => {
480
- const server = await testServer((req, res) => {
481
- const url = new URL(req.url!, 'http://localhost')
482
- if (url.pathname === '/openapi.json') {
483
- res.setHeader('Content-Type', 'application/json')
484
- res.end(makeDiscoveryDoc({ '/api/a': {}, '/api/b': {} }))
485
- } else {
486
- res.writeHead(402, { 'payment-required': 'eyJ0ZXN0IjoxfQ==' })
487
- res.end()
488
- }
489
- })
490
- const { output, exitCode } = await serve(['validate', server.url])
491
- expect(exitCode).toBe(1)
492
- expect(output).toContain('No MPP endpoints found.')
493
- expect(output).toContain('This server may use x402 or another payment protocol.')
494
- })
495
-
496
- test('shows auth-gated message when all return 401', { timeout: 15_000 }, async () => {
497
- const server = await testServer((req, res) => {
498
- const url = new URL(req.url!, 'http://localhost')
499
- if (url.pathname === '/openapi.json') {
500
- res.setHeader('Content-Type', 'application/json')
501
- res.end(makeDiscoveryDoc({ '/api/a': {}, '/api/b': {} }))
502
- } else {
503
- res.writeHead(401)
504
- res.end()
505
- }
506
- })
507
- const { output, exitCode } = await serve(['validate', server.url])
508
- expect(exitCode).toBe(1)
509
- expect(output).toContain(
510
- 'Could not reach payment gate on any endpoint (all returned 401/403/200).',
511
- )
512
- expect(output).toContain('The server may require authentication before payment.')
513
- })
514
-
515
- test(
516
- 'mixed: some MPP, some not -- does not show "no MPP" message',
517
- { timeout: 15_000 },
518
- async () => {
519
- const challenge = makeChallenge()
520
- const server = await testServer((req, res) => {
521
- const url = new URL(req.url!, 'http://localhost')
522
- if (url.pathname === '/openapi.json') {
523
- res.setHeader('Content-Type', 'application/json')
524
- res.end(makeDiscoveryDoc({ '/api/paid': {}, '/api/free': {} }))
525
- } else if (url.pathname === '/api/paid') {
526
- res.writeHead(402, {
527
- [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge),
528
- })
529
- res.end()
530
- } else {
531
- res.writeHead(402, { 'payment-required': 'eyJ0ZXN0IjoxfQ==' })
532
- res.end()
533
- }
534
- })
535
- const { output } = await serve(['validate', server.url])
536
- expect(output).toContain('Challenge parseable')
537
- expect(output).toContain('Not an MPP endpoint')
538
- expect(output).not.toContain('No MPP endpoints found')
539
- },
540
- )
541
- })
542
-
543
- describe('validate: summary', () => {
544
- test('shows pass count in summary', { timeout: 15_000 }, async () => {
545
- const server = await mppServer(makeChallenge())
546
- const { output } = await serve(['validate', server.url])
547
- expect(output).toMatch(/\d+ passed/)
548
- expect(output).toContain('Summary:')
549
- })
550
-
551
- test('shows skipped count when endpoints are skipped', { timeout: 15_000 }, async () => {
552
- const challenge = makeChallenge()
553
- const server = await testServer((req, res) => {
554
- const url = new URL(req.url!, 'http://localhost')
555
- if (url.pathname === '/openapi.json') {
556
- res.setHeader('Content-Type', 'application/json')
557
- res.end(makeDiscoveryDoc({ '/api/mpp': {}, '/api/free': { method: 'GET' } }))
558
- } else if (url.pathname === '/api/mpp') {
559
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge) })
560
- res.end()
561
- } else {
562
- res.writeHead(200)
563
- res.end('ok')
564
- }
565
- })
566
- const { output } = await serve(['validate', server.url])
567
- expect(output).toContain('skipped')
568
- })
569
-
570
- test('exits non-zero when there are failures', { timeout: 15_000 }, async () => {
571
- const server = await mppServer(makeChallenge(), { errorStatus: 500 })
572
- const { output, exitCode } = await serve(['validate', server.url])
573
- expect(exitCode).toBe(1)
574
- expect(output).toContain('failed')
575
- })
576
- })
577
-
578
- describe('validate: multi-challenge', () => {
579
- function makeStripeChallenge(): Challenge.Challenge {
580
- return {
581
- id: 'stripe-id-123',
582
- realm: 'localhost',
583
- method: 'stripe',
584
- intent: 'charge',
585
- request: {
586
- amount: '100',
587
- currency: 'usd',
588
- methodDetails: {
589
- networkId: 'profile_test123',
590
- paymentMethodTypes: ['card'],
591
- },
592
- },
593
- expires: new Date(Date.now() + 300_000).toISOString(),
594
- } as Challenge.Challenge
595
- }
596
-
597
- function makeEvmChallenge(): Challenge.Challenge {
598
- return {
599
- id: 'evm-id-123',
600
- realm: 'localhost',
601
- method: 'evm',
602
- intent: 'charge',
603
- request: {
604
- amount: '10000',
605
- currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
606
- recipient: '0x1234567890123456789012345678901234567890',
607
- methodDetails: { chainId: 8453, credentialTypes: ['authorization'], decimals: 6 },
608
- },
609
- expires: new Date(Date.now() + 300_000).toISOString(),
610
- } as Challenge.Challenge
611
- }
612
-
613
- function multiChallengeServer(challenges: Challenge.Challenge[]) {
614
- const header = challenges.map((c) => Challenge.serialize(c)).join(', ')
615
- return testServer((req, res) => {
616
- const url = new URL(req.url!, 'http://localhost')
617
- if (url.pathname === '/openapi.json') {
618
- res.setHeader('Content-Type', 'application/json')
619
- res.end(makeDiscoveryDoc({ '/api/test': {} }))
620
- return
621
- }
622
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: header })
623
- res.end()
624
- })
625
- }
626
-
627
- test('parses multiple challenges', { timeout: 15_000 }, async () => {
628
- const server = await multiChallengeServer([makeChallenge(), makeStripeChallenge()])
629
- const { output } = await serve(['validate', server.url])
630
- expect(output).toContain('2 methods: tempo/charge, stripe/charge')
631
- })
632
-
633
- test('validates Stripe fields', { timeout: 15_000 }, async () => {
634
- const server = await multiChallengeServer([makeStripeChallenge()])
635
- const { output } = await serve(['validate', server.url])
636
- expect(output).toContain('Amount is valid integer string')
637
- expect(output).toContain('Valid currency code (USD)')
638
- expect(output).toContain('Has networkId')
639
- expect(output).toContain('Has paymentMethodTypes (card)')
640
- })
641
-
642
- test('validates EVM fields', { timeout: 15_000 }, async () => {
643
- const server = await multiChallengeServer([makeEvmChallenge()])
644
- const { output } = await serve(['validate', server.url])
645
- expect(output).toContain('Valid recipient address')
646
- expect(output).toContain('Valid currency address')
647
- expect(output).toContain('Amount is valid integer string')
648
- expect(output).toContain('Has chainId (8453)')
649
- })
650
-
651
- test('tags method names when multiple challenges present', { timeout: 15_000 }, async () => {
652
- const server = await multiChallengeServer([
653
- makeChallenge(),
654
- makeStripeChallenge(),
655
- makeEvmChallenge(),
656
- ])
657
- const { output } = await serve(['validate', server.url])
658
- expect(output).toContain('[tempo] Valid recipient address')
659
- expect(output).toContain('[stripe] Valid currency code')
660
- expect(output).toContain('[evm] Has chainId')
661
- })
662
-
663
- test('no tags with single challenge', { timeout: 15_000 }, async () => {
664
- const server = await multiChallengeServer([makeChallenge()])
665
- const { output } = await serve(['validate', server.url])
666
- expect(output).toContain('Valid recipient address')
667
- expect(output).not.toContain('[tempo]')
668
- })
669
-
670
- test('Tempo requires recipient or splits', { timeout: 15_000 }, async () => {
671
- const noRecipient = makeChallenge({
672
- request: {
673
- amount: '10000',
674
- currency: '0x20c0000000000000000000000000000000000000',
675
- methodDetails: { chainId: 42431 },
676
- },
677
- } as Partial<Challenge.Challenge>)
678
- const server = await multiChallengeServer([noRecipient])
679
- const { output } = await serve(['validate', server.url])
680
- expect(output).toContain('Missing recipient (and no splits defined)')
681
- })
682
-
683
- test('Tempo accepts splits without recipient', { timeout: 15_000 }, async () => {
684
- const withSplits = makeChallenge({
685
- request: {
686
- amount: '10000',
687
- currency: '0x20c0000000000000000000000000000000000000',
688
- methodDetails: {
689
- chainId: 42431,
690
- splits: [
691
- { amount: '5000', recipient: '0x1234567890123456789012345678901234567890' },
692
- { amount: '5000', recipient: '0x0987654321098765432109876543210987654321' },
693
- ],
694
- },
695
- },
696
- } as Partial<Challenge.Challenge>)
697
- const server = await multiChallengeServer([withSplits])
698
- const { output } = await serve(['validate', server.url])
699
- expect(output).toContain('Uses splits (no single recipient)')
700
- expect(output).not.toContain('Missing recipient')
701
- })
702
-
703
- test('fails on invalid Stripe amount', { timeout: 15_000 }, async () => {
704
- const bad = makeStripeChallenge()
705
- ;(bad.request as Record<string, unknown>).amount = '1.50'
706
- const server = await multiChallengeServer([bad])
707
- const { output } = await serve(['validate', server.url])
708
- expect(output).toContain('Amount is valid integer string (Got: 1.50)')
709
- })
710
-
711
- test("tempo doesn't block other testnet methods", { timeout: 15_000 }, async () => {
712
- // makeChallenge() defaults to a tempo testnet challenge (chainId 42431),
713
- // which takes the ephemeral-wallet fast path. That path used to return
714
- // immediately, so a server offering evm/stripe alongside tempo would
715
- // never have those methods exercised. It should now fall through and
716
- // try them too, same as it does for tempo mainnet challenges.
717
- const server = await multiChallengeServer([makeChallenge(), makeEvmChallenge()])
718
- const { output } = await serve(['validate', server.url, '--outputJson', '--yes'])
719
- const jsonStart = output.indexOf('{')
720
- const jsonEnd = output.lastIndexOf('}')
721
- const result = JSON.parse(output.slice(jsonStart, jsonEnd + 1))
722
- const paymentLabels = result.endpoints[0].payment.map((r: { label: string }) => r.label)
723
- expect(paymentLabels).toContain('Payment: submitted')
724
- expect(paymentLabels.some((l: string) => l.includes('[evm]'))).toBe(true)
725
- })
726
- })
727
-
728
- describe('validate: payment methods coverage', () => {
729
- test(
730
- 'every method in Constants.Methods produces a payment result',
731
- { timeout: 15_000 },
732
- async () => {
733
- const methods = Object.values(Constants.Methods)
734
- const challenges = methods.map((method) => ({
735
- id: `${method}-id`,
736
- realm: 'localhost',
737
- method,
738
- intent: 'charge',
739
- request: { amount: '100', currency: 'usd', methodDetails: {} },
740
- expires: new Date(Date.now() + 300_000).toISOString(),
741
- })) as Challenge.Challenge[]
742
-
743
- const header = challenges.map((c) => Challenge.serialize(c)).join(', ')
744
- const server = await testServer((req, res) => {
745
- const url = new URL(req.url!, 'http://localhost')
746
- if (url.pathname === '/openapi.json') {
747
- res.setHeader('Content-Type', 'application/json')
748
- res.end(
749
- JSON.stringify({
750
- openapi: '3.1.0',
751
- info: { title: 'T', version: '1' },
752
- paths: {
753
- '/api/test': {
754
- post: { 'x-payment-info': { amount: '100' }, responses: { '402': {} } },
755
- },
756
- },
757
- }),
758
- )
759
- return
760
- }
761
- res.writeHead(402, { [Constants.Headers.wwwAuthenticate]: header })
762
- res.end()
763
- })
764
- const { output } = await serve(['validate', server.url, '--outputJson', '--yes'])
765
- const jsonStart = output.indexOf('{')
766
- const jsonEnd = output.lastIndexOf('}')
767
- const result = JSON.parse(output.slice(jsonStart, jsonEnd + 1))
768
- const paymentLabels = result.endpoints[0].payment.map((r: { label: string }) => r.label)
769
- for (const method of methods) {
770
- expect(paymentLabels.some((l: string) => l.includes(`[${method}]`))).toBe(true)
771
- }
772
- },
773
- )
774
- })
775
-
776
- describe('validate: JSON mode', () => {
777
- function mainnetChallenge() {
778
- return makeChallenge({
779
- request: {
780
- amount: '10000',
781
- currency: '0x20c0000000000000000000000000000000000000',
782
- recipient: '0x1234567890123456789012345678901234567890',
783
- methodDetails: { chainId: 4217 },
784
- },
785
- } as Partial<Challenge.Challenge>)
786
- }
787
-
788
- function parseJson(output: string) {
789
- const jsonStart = output.indexOf('{')
790
- const jsonEnd = output.lastIndexOf('}')
791
- return JSON.parse(output.slice(jsonStart, jsonEnd + 1))
792
- }
793
-
794
- test('does not prompt (non-interactive)', { timeout: 15_000 }, async () => {
795
- const server = await mppServer(mainnetChallenge())
796
- const { output } = await serve(['validate', server.url, '--outputJson'])
797
- const result = parseJson(output)
798
- const allPayment = result.endpoints.flatMap((ep: { payment: unknown[] }) => ep.payment)
799
- expect(allPayment.length).toBeGreaterThan(0)
800
- expect(allPayment.every((r: { severity: string }) => r.severity === 'skip')).toBe(true)
801
- })
802
-
803
- test(
804
- 'auto-enables JSON output when an agent environment is detected',
805
- { timeout: 15_000 },
806
- async () => {
807
- const server = await mppServer(mainnetChallenge())
808
- isAgentEnvironmentMock.mockReturnValue(true)
809
- const { output } = await serve(['validate', server.url])
810
- const result = parseJson(output)
811
- expect(result.summary.skipped).toBeGreaterThan(0)
812
- expect(result.endpoints.length).toBeGreaterThan(0)
813
- },
814
- )
815
-
816
- test('no console leaks before JSON', { timeout: 15_000 }, async () => {
817
- const server = await mppServer(mainnetChallenge())
818
- const { output } = await serve(['validate', server.url, '--outputJson', '--yes'])
819
- const jsonStart = output.indexOf('{')
820
- expect(jsonStart).toBeGreaterThanOrEqual(0)
821
- const beforeJson = output.slice(0, jsonStart)
822
- expect(beforeJson).not.toContain('Using wallet')
823
- expect(beforeJson).not.toContain('Auto-approved')
824
- expect(beforeJson).not.toContain('Attempting')
825
- })
826
-
827
- test('includes suggestions', { timeout: 15_000 }, async () => {
828
- const server = await mppServer(mainnetChallenge())
829
- const { output } = await serve(['validate', server.url, '--outputJson', '--yes'])
830
- const result = parseJson(output)
831
- expect(Array.isArray(result.suggestions)).toBe(true)
832
- })
833
-
834
- test('includes missing discovery suggestions', { timeout: 15_000 }, async () => {
835
- const server = await testServer((_req, res) => {
836
- res.writeHead(404)
837
- res.end()
838
- })
839
- const { output } = await serve(['validate', server.url, '--outputJson'])
840
- const result = parseJson(output)
841
- expect(result.suggestions).toEqual([missingDiscoverySuggestion])
842
- })
843
- })