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,1008 +0,0 @@
1
- import { parseUnits, type Hex } from 'viem'
2
-
3
- import type {
4
- ChannelDescriptor,
5
- NeedVoucherEvent,
6
- RawAmountString,
7
- SessionCredentialPayload,
8
- SessionReceipt,
9
- } from '../precompile/Protocol.js'
10
- import * as Ws from '../precompile/Protocol.js'
11
- import type { SessionSnapshot } from '../Snapshot.js'
12
- import type { ChannelEntry } from './ChannelOps.js'
13
- import type { SessionContext } from './CredentialState.js'
14
- import type { TempoSessionChallenge } from './Transports.js'
15
- import type { ActiveSocketSession } from './Transports.js'
16
-
17
- export { deserializeSnapshot, serializeSnapshot } from '../Snapshot.js'
18
- export type { SessionSnapshot } from '../Snapshot.js'
19
-
20
- /** Initial manager state before a session challenge is observed. */
21
- export type IdleSessionState = { status: 'idle' }
22
-
23
- /** State after a tempo/session challenge has been selected but before a credential is created. */
24
- export type ChallengedSessionState = { status: 'challenged'; challengeId: string }
25
-
26
- /** State while a server snapshot is being used to hydrate a reusable channel. */
27
- export type HydratingSessionState = {
28
- status: 'hydrating'
29
- challengeId: string
30
- snapshot: SessionSnapshot
31
- }
32
-
33
- /** State while the client is creating or submitting an opening channel credential. */
34
- export type OpeningSessionState = { status: 'opening'; challengeId: string }
35
-
36
- /** Active state variant used after a channel is opened, hydrated, or receives a receipt. */
37
- export type ActiveSessionState = {
38
- status: 'active'
39
- challengeId: string
40
- channelId: Hex
41
- descriptor: ChannelDescriptor
42
- /** Highest cumulative voucher amount accepted by the server. */
43
- acceptedCumulative: RawAmountString
44
- /** Current channel deposit ceiling, tracked independently from accepted cumulative spend. */
45
- deposit: RawAmountString
46
- /** Amount actually consumed by delivered work/content. */
47
- spent: RawAmountString
48
- /** Paid units delivered by the server. */
49
- units: number
50
- }
51
-
52
- /** State when the server needs a larger cumulative voucher but no top-up is needed. */
53
- export type VoucherNeededSessionState = {
54
- status: 'voucherNeeded'
55
- challengeId: string
56
- channelId: Hex
57
- descriptor: ChannelDescriptor
58
- requiredCumulative: RawAmountString
59
- deposit: RawAmountString
60
- }
61
-
62
- /** State when the server-required cumulative amount exceeds current channel deposit. */
63
- export type ToppingUpSessionState = {
64
- status: 'toppingUp'
65
- challengeId: string
66
- channelId: Hex
67
- descriptor: ChannelDescriptor
68
- deposit: RawAmountString
69
- }
70
-
71
- /** State while the server is settling accepted voucher spend on-chain. */
72
- export type SettlingSessionState = {
73
- status: 'settling'
74
- channelId: Hex
75
- descriptor: ChannelDescriptor
76
- deposit: RawAmountString
77
- }
78
-
79
- /** State after unilateral close has been requested and withdrawal is not yet available. */
80
- export type CloseRequestedSessionState = {
81
- status: 'closeRequested'
82
- channelId: Hex
83
- descriptor: ChannelDescriptor
84
- }
85
-
86
- /** State after the unilateral close delay has elapsed and funds can be withdrawn. */
87
- export type WithdrawableSessionState = {
88
- status: 'withdrawable'
89
- channelId: Hex
90
- descriptor: ChannelDescriptor
91
- }
92
-
93
- /** State while a cooperative close credential or close transaction is in flight. */
94
- export type ClosingSessionState = {
95
- status: 'closing'
96
- channelId: Hex
97
- descriptor: ChannelDescriptor
98
- }
99
-
100
- /** Terminal state after channel close finalization. */
101
- export type ClosedSessionState = {
102
- status: 'closed'
103
- channelId: Hex
104
- descriptor: ChannelDescriptor
105
- }
106
-
107
- /** Pure state-machine state for a TIP-1034 session. */
108
- export type SessionState =
109
- | IdleSessionState
110
- | ChallengedSessionState
111
- | HydratingSessionState
112
- | OpeningSessionState
113
- | ActiveSessionState
114
- | VoucherNeededSessionState
115
- | ToppingUpSessionState
116
- | SettlingSessionState
117
- | CloseRequestedSessionState
118
- | WithdrawableSessionState
119
- | ClosingSessionState
120
- | ClosedSessionState
121
-
122
- /** Data required to construct active session state. */
123
- export type CreateActiveStateParameters = Omit<ActiveSessionState, 'status'>
124
-
125
- /** State variants that can follow a need-voucher event. */
126
- export type NeedVoucherSessionState = VoucherNeededSessionState | ToppingUpSessionState
127
-
128
- /** Events accepted by the pure session reducer. */
129
- export type SessionEvent =
130
- | { type: 'challengeReceived'; challengeId: string }
131
- | { type: 'challenge'; challengeId: string; snapshot?: SessionSnapshot | undefined }
132
- | {
133
- type: 'activated'
134
- challengeId: string
135
- entry: ChannelEntry
136
- spent: RawAmountString
137
- units?: number | undefined
138
- }
139
- | {
140
- type: 'opened'
141
- receipt: SessionReceipt
142
- descriptor: ChannelDescriptor
143
- deposit: RawAmountString
144
- }
145
- | { type: 'hydrated'; snapshot: SessionSnapshot }
146
- | { type: 'receiptAccepted'; receipt: SessionReceipt; entry: ChannelEntry }
147
- | { type: 'needVoucher'; event: NeedVoucherEvent; descriptor: ChannelDescriptor }
148
- | { type: 'topUpStarted' }
149
- | { type: 'voucherAccepted'; receipt: SessionReceipt; deposit?: string | undefined }
150
- | { type: 'settleStarted' }
151
- | { type: 'settled'; receipt: SessionReceipt; deposit?: string | undefined }
152
- | { type: 'closeRequested' }
153
- | { type: 'withdrawable' }
154
- | { type: 'closeStarted' }
155
- | { type: 'closed'; receipt?: SessionReceipt | undefined }
156
-
157
- /** IO work requested by the pure reducer. */
158
- export type SessionEffect =
159
- | { type: 'hydrate'; snapshot: SessionSnapshot }
160
- | { type: 'open' }
161
- | { type: 'topUp'; channelId: Hex; amount: string }
162
- | { type: 'voucher'; payload?: SessionCredentialPayload | undefined }
163
- | { type: 'settle'; channelId: Hex }
164
- | { type: 'requestClose'; channelId: Hex }
165
- | { type: 'withdraw'; channelId: Hex }
166
- | { type: 'close'; channelId: Hex }
167
-
168
- /** Effects emitted by need-voucher transition planning. */
169
- export type NeedVoucherSessionEffect =
170
- | Extract<SessionEffect, { type: 'topUp' }>
171
- | Extract<SessionEffect, { type: 'voucher' }>
172
-
173
- /** Inputs for deciding whether a need-voucher event needs a voucher or deposit top-up first. */
174
- export type ResolveNeedVoucherTransitionParameters = {
175
- /** Current challenge ID retained by the active session state. */
176
- challengeId: string
177
- /** Descriptor for the channel requiring more authorization. */
178
- descriptor: ChannelDescriptor
179
- /** Server event describing required cumulative authorization and current deposit. */
180
- event: NeedVoucherEvent
181
- }
182
-
183
- /** Result of the need-voucher transition decision. */
184
- export type NeedVoucherTransition = {
185
- /** Next machine state. */
186
- state: NeedVoucherSessionState
187
- /** Driver effects required to satisfy the server request. */
188
- effects: NeedVoucherSessionEffect[]
189
- }
190
-
191
- /** Return value for every pure state-machine transition. */
192
- export type SessionTransition = {
193
- /** State after applying the event. */
194
- state: SessionState
195
- /** Declarative IO requested from the transport/precompile driver. */
196
- effects: SessionEffect[]
197
- }
198
-
199
- /** Initial state for a TIP-1034 session state machine. */
200
- export const initialState = { status: 'idle' } satisfies SessionState
201
-
202
- /** Constructs the canonical active state shape for the reducer and transport drivers. */
203
- export function createActiveState(parameters: CreateActiveStateParameters): ActiveSessionState {
204
- return { status: 'active', ...parameters }
205
- }
206
-
207
- /** Applies a state-machine event and returns the next state plus requested effects. */
208
- export function reduce(state: SessionState, event: SessionEvent): SessionTransition {
209
- switch (event.type) {
210
- case 'challengeReceived':
211
- if (state.status === 'closing' || state.status === 'closed') return invalid(state, event)
212
- return {
213
- state: { status: 'challenged', challengeId: event.challengeId },
214
- effects: [],
215
- }
216
- case 'challenge': {
217
- if (state.status !== 'idle' && state.status !== 'active') return invalid(state, event)
218
- if (event.snapshot) {
219
- return {
220
- state: { status: 'hydrating', challengeId: event.challengeId, snapshot: event.snapshot },
221
- effects: [{ type: 'hydrate', snapshot: event.snapshot }],
222
- }
223
- }
224
- return {
225
- state: { status: 'opening', challengeId: event.challengeId },
226
- effects: [{ type: 'open' }],
227
- }
228
- }
229
- case 'hydrated':
230
- if (state.status !== 'hydrating') return invalid(state, event)
231
- return {
232
- state: activeFromSnapshot(state.challengeId, event.snapshot),
233
- effects: [],
234
- }
235
- case 'activated':
236
- if (state.status === 'closing' || state.status === 'closed') return invalid(state, event)
237
- return {
238
- state: activeStateFromChannel({
239
- challengeId: event.challengeId,
240
- entry: event.entry,
241
- spent: event.spent,
242
- units: event.units ?? 0,
243
- }),
244
- effects: [],
245
- }
246
- case 'opened':
247
- if (state.status !== 'opening') return invalid(state, event)
248
- return {
249
- state: activeFromReceipt(state.challengeId, event.receipt, event.descriptor, event.deposit),
250
- effects: [],
251
- }
252
- case 'receiptAccepted':
253
- if (state.status === 'closing' || state.status === 'closed') return invalid(state, event)
254
- return {
255
- state: activeStateFromReceipt(event.receipt, event.entry),
256
- effects: [],
257
- }
258
- case 'needVoucher': {
259
- if (state.status !== 'active') return invalid(state, event)
260
- return resolveNeedVoucherTransition({
261
- challengeId: state.challengeId,
262
- descriptor: event.descriptor,
263
- event: event.event,
264
- })
265
- }
266
- case 'topUpStarted':
267
- if (state.status !== 'voucherNeeded') return invalid(state, event)
268
- return {
269
- state: {
270
- status: 'toppingUp',
271
- challengeId: state.challengeId,
272
- channelId: state.channelId,
273
- descriptor: state.descriptor,
274
- deposit: state.deposit,
275
- },
276
- effects: [],
277
- }
278
- case 'voucherAccepted':
279
- if (state.status !== 'voucherNeeded' && state.status !== 'toppingUp')
280
- return invalid(state, event)
281
- return {
282
- state: activeFromReceipt(
283
- state.challengeId,
284
- event.receipt,
285
- state.descriptor,
286
- event.deposit ?? state.deposit,
287
- ),
288
- effects: [],
289
- }
290
- case 'settleStarted':
291
- if (state.status !== 'active') return invalid(state, event)
292
- return {
293
- state: {
294
- status: 'settling',
295
- channelId: state.channelId,
296
- descriptor: state.descriptor,
297
- deposit: state.deposit,
298
- },
299
- effects: [{ type: 'settle', channelId: state.channelId }],
300
- }
301
- case 'settled':
302
- if (state.status !== 'settling') return invalid(state, event)
303
- return {
304
- state: activeFromReceipt(
305
- event.receipt.challengeId,
306
- event.receipt,
307
- state.descriptor,
308
- event.deposit ?? state.deposit,
309
- ),
310
- effects: [],
311
- }
312
- case 'closeRequested':
313
- if (state.status !== 'active') return invalid(state, event)
314
- return {
315
- state: {
316
- status: 'closeRequested',
317
- channelId: state.channelId,
318
- descriptor: state.descriptor,
319
- },
320
- effects: [{ type: 'requestClose', channelId: state.channelId }],
321
- }
322
- case 'withdrawable':
323
- if (state.status !== 'closeRequested') return invalid(state, event)
324
- return {
325
- state: { status: 'withdrawable', channelId: state.channelId, descriptor: state.descriptor },
326
- effects: [{ type: 'withdraw', channelId: state.channelId }],
327
- }
328
- case 'closeStarted':
329
- if (
330
- state.status !== 'active' &&
331
- state.status !== 'withdrawable' &&
332
- state.status !== 'closeRequested'
333
- )
334
- return invalid(state, event)
335
- return {
336
- state: { status: 'closing', channelId: state.channelId, descriptor: state.descriptor },
337
- effects: [{ type: 'close', channelId: state.channelId }],
338
- }
339
- case 'closed':
340
- if (state.status !== 'closing' && state.status !== 'withdrawable')
341
- return invalid(state, event)
342
- return {
343
- state: { status: 'closed', channelId: state.channelId, descriptor: state.descriptor },
344
- effects: [],
345
- }
346
- }
347
- }
348
-
349
- /** Applies a reducer event to mutable manager runtime state. */
350
- export function dispatchSessionEvent(
351
- runtime: Pick<SessionManagerRuntime, 'state'>,
352
- event: SessionEvent,
353
- ): SessionTransition {
354
- const transition = reduce(runtime.state, event)
355
- runtime.state = transition.state
356
- return transition
357
- }
358
-
359
- /** Decides whether a need-voucher event can be answered by voucher or requires top-up first. */
360
- export function resolveNeedVoucherTransition(
361
- parameters: ResolveNeedVoucherTransitionParameters,
362
- ): NeedVoucherTransition {
363
- const { challengeId, descriptor, event } = parameters
364
- const required = BigInt(event.requiredCumulative)
365
- const deposit = BigInt(event.deposit)
366
-
367
- if (required > deposit) {
368
- return {
369
- state: {
370
- status: 'toppingUp',
371
- challengeId,
372
- channelId: event.channelId,
373
- descriptor,
374
- deposit: event.deposit,
375
- },
376
- effects: [
377
- { type: 'topUp', channelId: event.channelId, amount: (required - deposit).toString() },
378
- ],
379
- }
380
- }
381
-
382
- return {
383
- state: {
384
- status: 'voucherNeeded',
385
- challengeId,
386
- channelId: event.channelId,
387
- descriptor,
388
- requiredCumulative: event.requiredCumulative,
389
- deposit: event.deposit,
390
- },
391
- effects: [{ type: 'voucher' }],
392
- }
393
- }
394
-
395
- function activeFromSnapshot(challengeId: string, snapshot: SessionSnapshot): SessionState {
396
- return createActiveState({
397
- challengeId,
398
- channelId: snapshot.channelId,
399
- descriptor: snapshot.descriptor,
400
- acceptedCumulative: snapshot.acceptedCumulative,
401
- deposit: snapshot.deposit,
402
- spent: snapshot.spent,
403
- units: snapshot.units ?? 0,
404
- })
405
- }
406
-
407
- function activeFromReceipt(
408
- challengeId: string,
409
- receipt: SessionReceipt,
410
- descriptor: ChannelDescriptor,
411
- deposit: RawAmountString,
412
- ): SessionState {
413
- return createActiveState({
414
- challengeId,
415
- channelId: receipt.channelId,
416
- descriptor,
417
- acceptedCumulative: receipt.acceptedCumulative,
418
- deposit,
419
- spent: receipt.spent,
420
- units: receipt.units ?? 0,
421
- })
422
- }
423
-
424
- function invalid(state: SessionState, event: SessionEvent): never {
425
- throw new Error(`Invalid session transition: ${state.status} + ${event.type}`)
426
- }
427
-
428
- /** Inputs for validating a cumulative authorization against the local client cap. */
429
- export type LocalVoucherLimitParameters = {
430
- /** Cumulative amount being authorized or accepted. */
431
- cumulativeAmount: bigint
432
- /** Optional maximum local authorization boundary. Null means uncapped. */
433
- maxVoucherCumulative: bigint | null
434
- }
435
-
436
- /** Inputs for validating a payment receipt against local client state. */
437
- export type LocalReceiptValidationParameters = {
438
- /** Active local channel cache entry. */
439
- channel: ChannelEntry | null
440
- /** Optional local authorization cap. Null means uncapped. */
441
- maxVoucherCumulative: bigint | null
442
- /** Receipt returned by the server. */
443
- receipt: SessionReceipt
444
- }
445
-
446
- /** Inputs for deriving the next locally observed spend from a receipt. */
447
- export type NextReceiptSpendParameters = {
448
- /** Active local channel cache entry. */
449
- channel: ChannelEntry | null
450
- /** Optional local authorization cap. Null means uncapped. */
451
- maxVoucherCumulative: bigint | null
452
- /** Receipt returned by the server, when present. */
453
- receipt: SessionReceipt | null | undefined
454
- /** Current locally observed spend. */
455
- spent: bigint
456
- }
457
-
458
- /** Inputs for resolving the initial channel deposit in automatic client mode. */
459
- export type ResolveOpeningDepositParameters = {
460
- /** Caller-provided raw deposit override. */
461
- contextDepositRaw?: string | undefined
462
- /** Optional local maximum cumulative deposit/authorization boundary. */
463
- maxDeposit?: bigint | undefined
464
- /** Current request amount in raw token units. */
465
- requestAmount: bigint
466
- /** Server-suggested opening deposit in raw token units. */
467
- suggestedDepositRaw?: string | undefined
468
- }
469
-
470
- /** Throws when a cumulative voucher amount exceeds the caller's local cap. */
471
- export function assertVoucherWithinLocalLimit(parameters: LocalVoucherLimitParameters): void {
472
- const { cumulativeAmount, maxVoucherCumulative } = parameters
473
- if (maxVoucherCumulative === null) return
474
- if (cumulativeAmount <= maxVoucherCumulative) return
475
- throw new Error(
476
- `requested voucher amount ${cumulativeAmount} exceeds local maxDeposit ${maxVoucherCumulative}`,
477
- )
478
- }
479
-
480
- /** Validates a server receipt without allowing it to increase the local signing boundary. */
481
- export function assertReceiptWithinLocalState(parameters: LocalReceiptValidationParameters): void {
482
- const { channel, maxVoucherCumulative, receipt } = parameters
483
- if (!channel || receipt.channelId !== channel.channelId) return
484
- const acceptedCumulative = BigInt(receipt.acceptedCumulative)
485
- const receiptSpent = BigInt(receipt.spent)
486
- if (receiptSpent > acceptedCumulative) {
487
- throw new Error('receipt spent exceeds accepted cumulative voucher amount')
488
- }
489
- if (acceptedCumulative > channel.cumulativeAmount) {
490
- throw new Error('receipt accepted cumulative exceeds local voucher state')
491
- }
492
- if (receiptSpent > channel.cumulativeAmount) {
493
- throw new Error('receipt spent exceeds local voucher state')
494
- }
495
- assertVoucherWithinLocalLimit({ cumulativeAmount: acceptedCumulative, maxVoucherCumulative })
496
- assertVoucherWithinLocalLimit({ cumulativeAmount: receiptSpent, maxVoucherCumulative })
497
- }
498
-
499
- /** Returns the monotonic next local spend after validating an optional receipt. */
500
- export function nextSpentFromReceipt(parameters: NextReceiptSpendParameters): bigint {
501
- const { channel, maxVoucherCumulative, receipt, spent } = parameters
502
- if (!receipt || receipt.channelId !== channel?.channelId) return spent
503
- assertReceiptWithinLocalState({ channel, maxVoucherCumulative, receipt })
504
- const next = BigInt(receipt.spent)
505
- return spent > next ? spent : next
506
- }
507
-
508
- /** Parses a manager amount. Bigints are raw units; strings are parsed using token decimals. */
509
- export function parseManagerAmount(amount: string | bigint, decimals: number): bigint {
510
- if (typeof amount === 'bigint') return amount
511
- return parseUnits(amount, decimals)
512
- }
513
-
514
- /** Resolves the opening deposit from explicit context, server hint, request amount, and local cap. */
515
- export function resolveOpeningDeposit(parameters: ResolveOpeningDepositParameters): bigint {
516
- const { contextDepositRaw, maxDeposit, requestAmount, suggestedDepositRaw } = parameters
517
- assertWithinMaxDeposit(requestAmount, maxDeposit)
518
- if (contextDepositRaw !== undefined) {
519
- const deposit = BigInt(contextDepositRaw)
520
- if (deposit < requestAmount) {
521
- throw new Error(`opening deposit ${deposit} below request amount ${requestAmount}`)
522
- }
523
- return deposit
524
- }
525
-
526
- const suggestedDeposit =
527
- suggestedDepositRaw !== undefined ? BigInt(suggestedDepositRaw) : undefined
528
- const proposed =
529
- suggestedDeposit !== undefined && suggestedDeposit > requestAmount
530
- ? suggestedDeposit
531
- : requestAmount
532
- if (maxDeposit !== undefined) return proposed < maxDeposit ? proposed : maxDeposit
533
- return proposed
534
- }
535
-
536
- /** Resolves a bounded automatic refill, preferring explicit policy over server headroom. */
537
- export function resolveAutomaticTopUp(parameters: {
538
- deposit: bigint
539
- maxDeposit?: bigint | null | undefined
540
- requiredCumulative: bigint
541
- suggestedDeposit?: bigint | undefined
542
- topUpAmount?: bigint | null | undefined
543
- }): bigint {
544
- const { deposit, maxDeposit, requiredCumulative, suggestedDeposit, topUpAmount } = parameters
545
- if (requiredCumulative <= deposit) return 0n
546
- assertVoucherWithinLocalLimit({
547
- cumulativeAmount: requiredCumulative,
548
- maxVoucherCumulative: maxDeposit ?? null,
549
- })
550
- const shortfall = requiredCumulative - deposit
551
- const preferred = topUpAmount ?? suggestedDeposit ?? shortfall
552
- const proposed = preferred > shortfall ? preferred : shortfall
553
- if (maxDeposit === null || maxDeposit === undefined) return proposed
554
- const remaining = maxDeposit - deposit
555
- return proposed < remaining ? proposed : remaining
556
- }
557
-
558
- /** Enforces the optional client-side maximum cumulative voucher authorization. */
559
- export function assertWithinMaxDeposit(
560
- cumulativeAmount: bigint,
561
- maxDeposit: bigint | undefined,
562
- ): void {
563
- assertVoucherWithinLocalLimit({
564
- cumulativeAmount,
565
- maxVoucherCumulative: maxDeposit ?? null,
566
- })
567
- }
568
-
569
- /** Predicate used when waiting for a specific session receipt. */
570
- export type SessionReceiptPredicate = (receipt: SessionReceipt) => boolean
571
-
572
- /** Resolved data required to close a locally active session channel. */
573
- export type CloseTarget = {
574
- /** Challenge used to bind the close credential. */
575
- challenge: TempoSessionChallenge
576
- /** Local channel cache entry being closed. */
577
- channel: ChannelEntry
578
- /** Channel ID being closed. */
579
- channelId: Hex
580
- }
581
-
582
- /** Inputs for choosing the active close target. */
583
- export type ResolveCloseTargetParameters = {
584
- /** Current active channel cache entry. */
585
- channel: ChannelEntry | null
586
- /** Active WebSocket session, when close is happening in-band. */
587
- currentSocket: ActiveSocketSession | null
588
- /** Last HTTP/SSE challenge observed by the manager. */
589
- lastChallenge: TempoSessionChallenge | null
590
- }
591
-
592
- /** Inputs for validating socket close-ready spend before signing the final close voucher. */
593
- export type CloseReadySpendParameters = {
594
- /** Local cumulative voucher authorization. */
595
- cumulativeAmount: bigint
596
- /** Spend reported by the close-ready receipt. */
597
- readySpent: bigint
598
- /** Latest receipt-tracked local spend. */
599
- spent: bigint
600
- }
601
-
602
- /** Inputs for matching the expected final close receipt. */
603
- export type ExpectedCloseReceiptParameters = {
604
- /** Challenge ID used for the close credential. */
605
- challengeId: string
606
- /** Channel ID being closed. */
607
- channelId: Hex
608
- /** Expected final cumulative/spent amount. */
609
- expectedCloseAmount: string
610
- /** Receipt to test. */
611
- receipt: SessionReceipt
612
- }
613
-
614
- /** Resolves the currently closeable channel and challenge, or undefined when no channel is open. */
615
- export function resolveCloseTarget(
616
- parameters: ResolveCloseTargetParameters,
617
- ): CloseTarget | undefined {
618
- const { channel, currentSocket, lastChallenge } = parameters
619
- if (!channel?.opened) return undefined
620
-
621
- const challenge = currentSocket?.challenge ?? lastChallenge
622
- const channelId = currentSocket?.channelId ?? channel.channelId
623
-
624
- if (!challenge) {
625
- throw new Error(
626
- 'Cannot close session: no challenge available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or make a request first to receive a fresh 402 challenge.',
627
- )
628
- }
629
- if (!channelId) {
630
- throw new Error(
631
- 'Cannot close session: no channel ID available. The session may not have been fully opened.',
632
- )
633
- }
634
-
635
- return { challenge, channel, channelId }
636
- }
637
-
638
- /** Highest spend the client may sign for during close based on local receipts and vouchers. */
639
- export function localCloseSpendLimit(parameters: Omit<CloseReadySpendParameters, 'readySpent'>) {
640
- const { cumulativeAmount, spent } = parameters
641
- return cumulativeAmount > spent ? cumulativeAmount : spent
642
- }
643
-
644
- /** Throws when a close-ready receipt asks the client to sign beyond local state. */
645
- export function assertCloseReadyWithinLocalState(parameters: CloseReadySpendParameters): void {
646
- const { cumulativeAmount, readySpent, spent } = parameters
647
- if (readySpent > localCloseSpendLimit({ cumulativeAmount, spent })) {
648
- throw new Error('close-ready spent exceeds local voucher state')
649
- }
650
- }
651
-
652
- /** Returns whether a receipt is the expected final close settlement receipt. */
653
- export function isExpectedCloseReceipt(parameters: ExpectedCloseReceiptParameters): boolean {
654
- const { challengeId, channelId, expectedCloseAmount, receipt } = parameters
655
- return (
656
- Boolean(receipt.txHash) &&
657
- receipt.challengeId === challengeId &&
658
- receipt.channelId === channelId &&
659
- receipt.acceptedCumulative === expectedCloseAmount &&
660
- receipt.spent === expectedCloseAmount
661
- )
662
- }
663
-
664
- /** Parameters used to project cached client channel data into an active machine state. */
665
- export type ActiveStateFromChannelParameters = {
666
- /** Challenge ID associated with the active payment flow. */
667
- challengeId: string
668
- /** Cached channel entry that owns descriptor, deposit, and cumulative authorization. */
669
- entry: ChannelEntry
670
- /** Latest locally observed spend in raw units. */
671
- spent: string
672
- /** Paid units observed by the active flow. */
673
- units: number
674
- }
675
-
676
- /** Parameters used to project a closed channel into machine state. */
677
- export type ClosedStateFromChannelParameters = {
678
- /** Channel ID that has been closed. */
679
- channelId: Hex
680
- /** Cached channel entry that owns the descriptor. */
681
- entry: ChannelEntry
682
- }
683
-
684
- /** Inputs for computing the safest fallback close amount when no fresh close-ready receipt is available. */
685
- export type FallbackCloseAmountParameters = {
686
- /** Challenge ID being closed. */
687
- challengeId: string
688
- /** Channel ID being closed. */
689
- channelId: Hex
690
- /** Last socket close-ready receipt, when one was received. */
691
- closeReadyReceipt?: SessionReceipt | null | undefined
692
- /** Current local cumulative voucher authorization. */
693
- cumulativeAmount: bigint
694
- /** Number of application chunks delivered over the socket. */
695
- deliveredChunks?: bigint | undefined
696
- /** Current socket challenge ID, used to decide whether socket delivery data applies. */
697
- socketChallengeId?: string | undefined
698
- /** Current socket channel ID, used to decide whether socket delivery data applies. */
699
- socketChannelId?: Hex | undefined
700
- /** Latest locally observed spend from receipts. */
701
- spent: bigint
702
- /** Per-message socket charge in raw units. */
703
- tickCost?: bigint | undefined
704
- }
705
-
706
- /** Minimal mutable session runtime state that must be restored when an auto-drive attempt fails. */
707
- export type RuntimeState = {
708
- /** Current client channel cache entry, when one is active. */
709
- channel: ChannelEntry | null
710
- /** Latest locally observed spend from receipts. */
711
- spent: bigint
712
- /** Current public state-machine state. */
713
- state: SessionState
714
- }
715
-
716
- /** Mutable client runtime state owned by one auto-driving `sessionManager()` instance. */
717
- export type SessionManagerRuntime = RuntimeState & {
718
- /** Last Tempo session challenge observed by HTTP/SSE/WebSocket bootstrap. */
719
- lastChallenge: TempoSessionChallenge | null
720
- /** Last HTTP resource URL usable for management POSTs. */
721
- lastUrl: RequestInfo | URL | null
722
- /** Active WebSocket payment session bookkeeping, when a socket is open. */
723
- socketSession: ActiveSocketSession | null
724
- }
725
-
726
- /** Immutable snapshot of mutable runtime fields needed for rollback. */
727
- export type RuntimeSnapshot = {
728
- /** Channel fields mutated during optimistic open/top-up/voucher attempts. */
729
- channel: {
730
- cumulativeAmount: bigint
731
- deposit: bigint
732
- entry: ChannelEntry
733
- opened: boolean
734
- } | null
735
- /** Latest locally observed spend when the snapshot was taken. */
736
- spent: bigint
737
- /** State-machine state when the snapshot was taken. */
738
- state: SessionState
739
- }
740
-
741
- /** Inputs for applying a server receipt to manager-local runtime state. */
742
- export type ApplySessionReceiptToRuntimeParameters = {
743
- /** Optional local cumulative authorization cap. Null means uncapped. */
744
- maxVoucherCumulative: bigint | null
745
- /** Receipt returned by a server transport, when present. */
746
- receipt: SessionReceipt | null | undefined
747
- /** Mutable manager runtime state to update. */
748
- runtime: SessionManagerRuntime
749
- }
750
-
751
- /** Inputs for restoring local cumulative authorization after a failed optimistic voucher retry. */
752
- export type RestoreCumulativeAuthorizationParameters = {
753
- /** Active local channel entry, when one is available. */
754
- channel: ChannelEntry | null
755
- /** Channel ID whose optimistic cumulative amount should be restored. */
756
- channelId: Hex
757
- /** Previous cumulative voucher authorization in raw units. */
758
- cumulativeAmount: bigint
759
- /** Last challenge ID observed by the manager, when known. */
760
- challengeId?: string | undefined
761
- /** Latest locally observed spend in raw units. */
762
- spent: bigint
763
- /** Current public state-machine state, used to preserve active unit count. */
764
- state: SessionState
765
- }
766
-
767
- /** Projects cached channel data into an active state-machine state. */
768
- export function activeStateFromChannel(parameters: ActiveStateFromChannelParameters): SessionState {
769
- return createActiveState({
770
- challengeId: parameters.challengeId,
771
- channelId: parameters.entry.channelId,
772
- descriptor: parameters.entry.descriptor,
773
- acceptedCumulative: parameters.entry.cumulativeAmount.toString(),
774
- deposit: parameters.entry.deposit.toString(),
775
- spent: parameters.spent,
776
- units: parameters.units,
777
- })
778
- }
779
-
780
- /** Creates the initial mutable runtime state for an auto-driving session manager. */
781
- export function createSessionManagerRuntime(): SessionManagerRuntime {
782
- return {
783
- channel: null,
784
- lastChallenge: null,
785
- lastUrl: null,
786
- spent: 0n,
787
- socketSession: null,
788
- state: initialState,
789
- }
790
- }
791
-
792
- /** Validates a receipt, advances observed spend, and projects matching receipts into public state. */
793
- export function applySessionReceiptToRuntime(
794
- parameters: ApplySessionReceiptToRuntimeParameters,
795
- ): void {
796
- const { maxVoucherCumulative, receipt, runtime } = parameters
797
- runtime.spent = nextSpentFromReceipt({
798
- channel: runtime.channel,
799
- maxVoucherCumulative,
800
- receipt,
801
- spent: runtime.spent,
802
- })
803
- if (receipt && runtime.channel?.channelId === receipt.channelId) {
804
- dispatchSessionEvent(runtime, {
805
- type: 'receiptAccepted',
806
- receipt,
807
- entry: runtime.channel,
808
- })
809
- }
810
- }
811
-
812
- /** Projects a verified receipt plus local descriptor/deposit data into an active state-machine state. */
813
- export function activeStateFromReceipt(receipt: SessionReceipt, entry: ChannelEntry): SessionState {
814
- return createActiveState({
815
- challengeId: receipt.challengeId,
816
- channelId: receipt.channelId,
817
- descriptor: entry.descriptor,
818
- acceptedCumulative: receipt.acceptedCumulative,
819
- deposit: entry.deposit.toString(),
820
- spent: receipt.spent,
821
- units: receipt.units ?? 0,
822
- })
823
- }
824
-
825
- /** Projects a closed channel into the public closed state-machine state. */
826
- export function closedStateFromChannel(parameters: ClosedStateFromChannelParameters): SessionState {
827
- return {
828
- status: 'closed',
829
- channelId: parameters.channelId,
830
- descriptor: parameters.entry.descriptor,
831
- }
832
- }
833
-
834
- /** Projects a final close receipt into the public closed state-machine state. */
835
- export function closedStateFromReceipt(receipt: SessionReceipt, entry: ChannelEntry): SessionState {
836
- return closedStateFromChannel({ channelId: receipt.channelId, entry })
837
- }
838
-
839
- /**
840
- * Computes the fallback close amount without authorizing more than the local cumulative voucher.
841
- *
842
- * Priority:
843
- * 1. Matching close-ready receipt spend.
844
- * 2. Matching socket delivery estimate (`deliveredChunks * tickCost`) clamped by cumulative.
845
- * 3. Latest receipt-tracked spend for HTTP/SSE.
846
- */
847
- export function computeFallbackCloseAmount(parameters: FallbackCloseAmountParameters): bigint {
848
- const {
849
- challengeId,
850
- channelId,
851
- closeReadyReceipt,
852
- cumulativeAmount,
853
- deliveredChunks = 0n,
854
- socketChallengeId,
855
- socketChannelId,
856
- spent,
857
- tickCost = 0n,
858
- } = parameters
859
-
860
- if (
861
- closeReadyReceipt &&
862
- closeReadyReceipt.challengeId === challengeId &&
863
- closeReadyReceipt.channelId === channelId
864
- ) {
865
- return BigInt(closeReadyReceipt.spent)
866
- }
867
-
868
- if (socketChallengeId === challengeId && socketChannelId === channelId && tickCost > 0n) {
869
- const deliveryEstimate = deliveredChunks * tickCost
870
- const bestSpent = spent > deliveryEstimate ? spent : deliveryEstimate
871
- return bestSpent > cumulativeAmount ? cumulativeAmount : bestSpent
872
- }
873
-
874
- return spent
875
- }
876
-
877
- /**
878
- * Restores a channel's cumulative voucher boundary and returns the refreshed active state.
879
- *
880
- * Returns `undefined` when the active channel does not match or no challenge is
881
- * available to label the active state.
882
- */
883
- export function restoreCumulativeAuthorization(
884
- parameters: RestoreCumulativeAuthorizationParameters,
885
- ): ActiveSessionState | undefined {
886
- const { channel, channelId, challengeId, cumulativeAmount, spent, state } = parameters
887
- if (!channel || channel.channelId !== channelId) return undefined
888
- channel.cumulativeAmount = cumulativeAmount
889
- if (!challengeId) return undefined
890
- return reduce(state, {
891
- type: 'activated',
892
- challengeId,
893
- entry: channel,
894
- spent: spent.toString(),
895
- units: state.status === 'active' ? state.units : 0,
896
- }).state as ActiveSessionState
897
- }
898
-
899
- /** Captures mutable session runtime fields before an optimistic manager action. */
900
- export function captureRuntimeSnapshot(runtime: RuntimeState): RuntimeSnapshot {
901
- return {
902
- channel:
903
- runtime.channel === null
904
- ? null
905
- : {
906
- entry: runtime.channel,
907
- cumulativeAmount: runtime.channel.cumulativeAmount,
908
- deposit: runtime.channel.deposit,
909
- opened: runtime.channel.opened,
910
- },
911
- spent: runtime.spent,
912
- state: runtime.state,
913
- }
914
- }
915
-
916
- /** Restores mutable session runtime fields from a previous snapshot. */
917
- export function restoreRuntimeSnapshot(
918
- snapshot: RuntimeSnapshot,
919
- currentChannel: ChannelEntry | null,
920
- ): RuntimeState {
921
- if (snapshot.channel) {
922
- snapshot.channel.entry.cumulativeAmount = snapshot.channel.cumulativeAmount
923
- snapshot.channel.entry.deposit = snapshot.channel.deposit
924
- snapshot.channel.entry.opened = snapshot.channel.opened
925
- return {
926
- channel: snapshot.channel.entry,
927
- spent: snapshot.spent,
928
- state: snapshot.state,
929
- }
930
- }
931
-
932
- if (currentChannel) currentChannel.opened = false
933
- return {
934
- channel: null,
935
- spent: snapshot.spent,
936
- state: snapshot.state,
937
- }
938
- }
939
-
940
- /** Creates a session credential for the selected challenge/context. */
941
- export type CreateSocketCloseCredential = (
942
- challenge: TempoSessionChallenge,
943
- context: SessionContext,
944
- ) => Promise<string>
945
-
946
- /** Inputs for cooperatively closing an active WebSocket session in-band. */
947
- export type CloseSocketSessionParameters = {
948
- /** Raw WebSocket used by the active paid stream. */
949
- activeSocket: WebSocket
950
- /** Creates the signed close credential. */
951
- createSessionCredential: CreateSocketCloseCredential
952
- /** Active WebSocket session state. */
953
- currentSocket: ActiveSocketSession
954
- /** Latest locally tracked spend from receipts. */
955
- spent: bigint
956
- /** Channel/challenge pair being closed. */
957
- target: CloseTarget
958
- /** Waits for the server's close-ready receipt after requesting stream close. */
959
- waitForCloseReady(): Promise<SessionReceipt>
960
- /** Waits for the final settlement receipt matching `predicate`. */
961
- waitForReceipt(predicate: SessionReceiptPredicate): Promise<SessionReceipt>
962
- }
963
-
964
- /** Cooperatively closes an active paid WebSocket session and returns the final receipt. */
965
- export async function closeSocketSession(
966
- parameters: CloseSocketSessionParameters,
967
- ): Promise<SessionReceipt> {
968
- const { activeSocket, currentSocket, target } = parameters
969
- const ready =
970
- currentSocket.closeReadyReceipt ??
971
- (await (async () => {
972
- activeSocket.send(Ws.formatCloseRequestMessage())
973
- return parameters.waitForCloseReady()
974
- })())
975
- const readySpent = BigInt(ready.spent)
976
- assertCloseReadyWithinLocalState({
977
- cumulativeAmount: target.channel.cumulativeAmount,
978
- readySpent,
979
- spent: parameters.spent,
980
- })
981
-
982
- const credential = await parameters.createSessionCredential(target.challenge, {
983
- action: 'close',
984
- channelId: target.channelId,
985
- descriptor: target.channel.descriptor,
986
- cumulativeAmountRaw: readySpent.toString(),
987
- })
988
-
989
- const expectedCloseAmount = readySpent.toString()
990
- currentSocket.expectedCloseAmount = expectedCloseAmount
991
- try {
992
- const pendingReceipt = parameters.waitForReceipt((receipt) =>
993
- isExpectedCloseReceipt({
994
- challengeId: target.challenge.id,
995
- channelId: target.channelId,
996
- expectedCloseAmount,
997
- receipt,
998
- }),
999
- )
1000
- activeSocket.send(Ws.formatAuthorizationMessage(credential))
1001
- const receipt = await pendingReceipt
1002
- activeSocket.close()
1003
- currentSocket.closeReadyReceipt = null
1004
- return receipt
1005
- } finally {
1006
- currentSocket.expectedCloseAmount = null
1007
- }
1008
- }