mppx 0.8.17 → 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 (914) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +21 -4
  4. package/dist/bin.js +3 -3
  5. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  6. package/dist/cli/cli.js +253 -1505
  7. package/dist/cli/plugins/index.js +19 -5
  8. package/dist/cli/plugins/tempo.js +7 -3
  9. package/dist/cli/sessions/Manager.js +7 -4
  10. package/dist/cli/sessions/request.d.ts +2 -0
  11. package/dist/cli/sessions/request.js +18 -0
  12. package/dist/cli/sessions/store.js +28 -14
  13. package/dist/discovery/Discovery.js +2 -1
  14. package/dist/evm/client/Charge.js +8 -0
  15. package/dist/server/core.d.ts +9 -0
  16. package/dist/server/core.js +9 -0
  17. package/dist/stripe/server/Charge.js +2 -4
  18. package/dist/stripe/server/Methods.d.ts +2 -2
  19. package/dist/stripe/server/Methods.js +17 -11
  20. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  21. package/dist/stripe/server/internal/html.gen.js +1 -1
  22. package/dist/stripe/server/spt.d.ts +8 -0
  23. package/dist/stripe/server/spt.js +8 -0
  24. package/dist/tempo/Methods.d.ts +13 -0
  25. package/dist/tempo/Methods.js +14 -3
  26. package/dist/tempo/client/Charge.d.ts +3 -0
  27. package/dist/tempo/client/Charge.js +31 -9
  28. package/dist/tempo/client/Methods.d.ts +13 -0
  29. package/dist/tempo/internal/defaults.d.ts +11 -0
  30. package/dist/tempo/internal/defaults.js +11 -0
  31. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  32. package/dist/tempo/internal/machine-token-charge.js +113 -0
  33. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  34. package/dist/tempo/internal/machine-token-session.js +173 -0
  35. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  36. package/dist/tempo/internal/signature-envelope.js +28 -0
  37. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  38. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  39. package/dist/tempo/legacy/client/Session.d.ts +13 -1
  40. package/dist/tempo/legacy/client/Session.js +3 -3
  41. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  42. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  43. package/dist/tempo/server/Charge.d.ts +3 -0
  44. package/dist/tempo/server/Charge.js +58 -17
  45. package/dist/tempo/server/Methods.d.ts +21 -4
  46. package/dist/tempo/server/Methods.js +8 -4
  47. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  48. package/dist/tempo/server/internal/html.gen.js +1 -1
  49. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  50. package/dist/tempo/session/client/ChannelOps.js +35 -6
  51. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  52. package/dist/tempo/session/client/ChannelStore.js +2 -2
  53. package/dist/tempo/session/client/CredentialState.d.ts +17 -2
  54. package/dist/tempo/session/client/CredentialState.js +77 -76
  55. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  56. package/dist/tempo/session/client/Runtime.js +21 -5
  57. package/dist/tempo/session/client/Session.d.ts +15 -3
  58. package/dist/tempo/session/client/Session.js +186 -63
  59. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  60. package/dist/tempo/session/client/SessionManager.js +35 -11
  61. package/dist/tempo/session/client/Transports.d.ts +2 -0
  62. package/dist/tempo/session/client/Transports.js +12 -2
  63. package/dist/tempo/session/precompile/Chain.d.ts +10 -2
  64. package/dist/tempo/session/precompile/Chain.js +50 -10
  65. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  66. package/dist/tempo/session/precompile/Protocol.js +7 -0
  67. package/dist/tempo/session/precompile/Voucher.d.ts +3 -1
  68. package/dist/tempo/session/precompile/Voucher.js +6 -12
  69. package/dist/tempo/session/server/ChannelStore.d.ts +6 -0
  70. package/dist/tempo/session/server/ChannelStore.js +11 -4
  71. package/dist/tempo/session/server/CredentialVerification.d.ts +11 -9
  72. package/dist/tempo/session/server/CredentialVerification.js +185 -109
  73. package/dist/tempo/session/server/MeteredStream.d.ts +1 -1
  74. package/dist/tempo/session/server/MeteredStream.js +5 -4
  75. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  76. package/dist/tempo/session/server/RequestState.js +61 -15
  77. package/dist/tempo/session/server/Session.d.ts +14 -2
  78. package/dist/tempo/session/server/Session.js +37 -6
  79. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  80. package/dist/tempo/session/server/Settlement.js +53 -21
  81. package/dist/x402/client/Exact.d.ts +8 -0
  82. package/dist/x402/client/Exact.js +40 -10
  83. package/dist/x402/server/EvmCharge.d.ts +22 -0
  84. package/dist/x402/server/EvmCharge.js +23 -1
  85. package/package.json +15 -37
  86. package/dist/BodyDigest.d.ts.map +0 -1
  87. package/dist/BodyDigest.js.map +0 -1
  88. package/dist/Challenge.d.ts.map +0 -1
  89. package/dist/Challenge.js.map +0 -1
  90. package/dist/Constants.d.ts.map +0 -1
  91. package/dist/Constants.js.map +0 -1
  92. package/dist/Credential.d.ts.map +0 -1
  93. package/dist/Credential.js.map +0 -1
  94. package/dist/Errors.d.ts.map +0 -1
  95. package/dist/Errors.js.map +0 -1
  96. package/dist/Expires.d.ts.map +0 -1
  97. package/dist/Expires.js.map +0 -1
  98. package/dist/Html.d.ts.map +0 -1
  99. package/dist/Html.js.map +0 -1
  100. package/dist/Mcp.d.ts.map +0 -1
  101. package/dist/Mcp.js.map +0 -1
  102. package/dist/Method.d.ts.map +0 -1
  103. package/dist/Method.js.map +0 -1
  104. package/dist/PaymentRequest.d.ts.map +0 -1
  105. package/dist/PaymentRequest.js.map +0 -1
  106. package/dist/Receipt.d.ts.map +0 -1
  107. package/dist/Receipt.js.map +0 -1
  108. package/dist/Store.d.ts.map +0 -1
  109. package/dist/Store.js.map +0 -1
  110. package/dist/attestation/Client.d.ts.map +0 -1
  111. package/dist/attestation/Client.js.map +0 -1
  112. package/dist/attestation/Constants.d.ts.map +0 -1
  113. package/dist/attestation/Constants.js.map +0 -1
  114. package/dist/attestation/Server.d.ts.map +0 -1
  115. package/dist/attestation/Server.js.map +0 -1
  116. package/dist/attestation/Types.d.ts.map +0 -1
  117. package/dist/attestation/Types.js.map +0 -1
  118. package/dist/attestation/index.d.ts.map +0 -1
  119. package/dist/attestation/index.js.map +0 -1
  120. package/dist/attestation/internal/HttpMessageSignature.d.ts.map +0 -1
  121. package/dist/attestation/internal/HttpMessageSignature.js.map +0 -1
  122. package/dist/attestation/internal/SigningContext.d.ts.map +0 -1
  123. package/dist/attestation/internal/SigningContext.js.map +0 -1
  124. package/dist/bin.d.ts.map +0 -1
  125. package/dist/bin.js.map +0 -1
  126. package/dist/cli/account.d.ts.map +0 -1
  127. package/dist/cli/account.js.map +0 -1
  128. package/dist/cli/cli.d.ts.map +0 -1
  129. package/dist/cli/cli.js.map +0 -1
  130. package/dist/cli/config.d.ts.map +0 -1
  131. package/dist/cli/config.js.map +0 -1
  132. package/dist/cli/internal.d.ts.map +0 -1
  133. package/dist/cli/internal.js.map +0 -1
  134. package/dist/cli/plugins/evm.d.ts.map +0 -1
  135. package/dist/cli/plugins/evm.js.map +0 -1
  136. package/dist/cli/plugins/index.d.ts.map +0 -1
  137. package/dist/cli/plugins/index.js.map +0 -1
  138. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  139. package/dist/cli/plugins/plugin.js.map +0 -1
  140. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  141. package/dist/cli/plugins/stripe.js.map +0 -1
  142. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  143. package/dist/cli/plugins/tempo.js.map +0 -1
  144. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  145. package/dist/cli/sessions/Manager.js.map +0 -1
  146. package/dist/cli/sessions/commands.d.ts.map +0 -1
  147. package/dist/cli/sessions/commands.js.map +0 -1
  148. package/dist/cli/sessions/request.d.ts.map +0 -1
  149. package/dist/cli/sessions/request.js.map +0 -1
  150. package/dist/cli/sessions/store.d.ts.map +0 -1
  151. package/dist/cli/sessions/store.js.map +0 -1
  152. package/dist/cli/utils.d.ts.map +0 -1
  153. package/dist/cli/utils.js.map +0 -1
  154. package/dist/cli/validate/challenge.d.ts.map +0 -1
  155. package/dist/cli/validate/challenge.js.map +0 -1
  156. package/dist/cli/validate/discovery.d.ts.map +0 -1
  157. package/dist/cli/validate/discovery.js.map +0 -1
  158. package/dist/cli/validate/helpers.d.ts.map +0 -1
  159. package/dist/cli/validate/helpers.js.map +0 -1
  160. package/dist/cli/validate/index.d.ts.map +0 -1
  161. package/dist/cli/validate/index.js.map +0 -1
  162. package/dist/cli/validate/messages.d.ts.map +0 -1
  163. package/dist/cli/validate/messages.js.map +0 -1
  164. package/dist/cli/validate/payment.d.ts.map +0 -1
  165. package/dist/cli/validate/payment.js.map +0 -1
  166. package/dist/client/Methods.d.ts.map +0 -1
  167. package/dist/client/Methods.js.map +0 -1
  168. package/dist/client/Mppx.d.ts.map +0 -1
  169. package/dist/client/Mppx.js.map +0 -1
  170. package/dist/client/Transport.d.ts.map +0 -1
  171. package/dist/client/Transport.js.map +0 -1
  172. package/dist/client/index.d.ts.map +0 -1
  173. package/dist/client/index.js.map +0 -1
  174. package/dist/client/internal/Fetch.d.ts.map +0 -1
  175. package/dist/client/internal/Fetch.js.map +0 -1
  176. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  177. package/dist/client/internal/MethodChallenge.js.map +0 -1
  178. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  179. package/dist/client/internal/MethodResponse.js.map +0 -1
  180. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  181. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  182. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  183. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  184. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  185. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  186. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  187. package/dist/client/internal/protocols/Shared.js.map +0 -1
  188. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  189. package/dist/client/internal/protocols/X402.js.map +0 -1
  190. package/dist/client/node.d.ts.map +0 -1
  191. package/dist/client/node.js.map +0 -1
  192. package/dist/discovery/Discovery.d.ts.map +0 -1
  193. package/dist/discovery/Discovery.js.map +0 -1
  194. package/dist/discovery/OpenApi.d.ts.map +0 -1
  195. package/dist/discovery/OpenApi.js.map +0 -1
  196. package/dist/discovery/Validate.d.ts.map +0 -1
  197. package/dist/discovery/Validate.js.map +0 -1
  198. package/dist/discovery/index.d.ts.map +0 -1
  199. package/dist/discovery/index.js.map +0 -1
  200. package/dist/discovery/internal/Metadata.d.ts.map +0 -1
  201. package/dist/discovery/internal/Metadata.js.map +0 -1
  202. package/dist/evm/Assets.d.ts.map +0 -1
  203. package/dist/evm/Assets.js.map +0 -1
  204. package/dist/evm/Chains.d.ts.map +0 -1
  205. package/dist/evm/Chains.js.map +0 -1
  206. package/dist/evm/Methods.d.ts.map +0 -1
  207. package/dist/evm/Methods.js.map +0 -1
  208. package/dist/evm/Types.d.ts.map +0 -1
  209. package/dist/evm/Types.js.map +0 -1
  210. package/dist/evm/client/Charge.d.ts.map +0 -1
  211. package/dist/evm/client/Charge.js.map +0 -1
  212. package/dist/evm/client/Methods.d.ts.map +0 -1
  213. package/dist/evm/client/Methods.js.map +0 -1
  214. package/dist/evm/client/index.d.ts.map +0 -1
  215. package/dist/evm/client/index.js.map +0 -1
  216. package/dist/evm/index.d.ts.map +0 -1
  217. package/dist/evm/index.js.map +0 -1
  218. package/dist/evm/server/Charge.d.ts.map +0 -1
  219. package/dist/evm/server/Charge.js.map +0 -1
  220. package/dist/evm/server/Methods.d.ts.map +0 -1
  221. package/dist/evm/server/Methods.js.map +0 -1
  222. package/dist/evm/server/index.d.ts.map +0 -1
  223. package/dist/evm/server/index.js.map +0 -1
  224. package/dist/index.d.ts.map +0 -1
  225. package/dist/index.js.map +0 -1
  226. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  227. package/dist/internal/AcceptPayment.js.map +0 -1
  228. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  229. package/dist/internal/HeaderCodec.js.map +0 -1
  230. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  231. package/dist/internal/constantTimeEqual.js.map +0 -1
  232. package/dist/internal/env.d.ts.map +0 -1
  233. package/dist/internal/env.js.map +0 -1
  234. package/dist/internal/types.d.ts.map +0 -1
  235. package/dist/internal/types.js.map +0 -1
  236. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  237. package/dist/mcp/client/McpClient.js.map +0 -1
  238. package/dist/mcp/client/index.d.ts.map +0 -1
  239. package/dist/mcp/client/index.js.map +0 -1
  240. package/dist/mcp/server/Transport.d.ts.map +0 -1
  241. package/dist/mcp/server/Transport.js.map +0 -1
  242. package/dist/mcp/server/index.d.ts.map +0 -1
  243. package/dist/mcp/server/index.js.map +0 -1
  244. package/dist/middlewares/elysia.d.ts.map +0 -1
  245. package/dist/middlewares/elysia.js.map +0 -1
  246. package/dist/middlewares/express.d.ts.map +0 -1
  247. package/dist/middlewares/express.js.map +0 -1
  248. package/dist/middlewares/hono.d.ts.map +0 -1
  249. package/dist/middlewares/hono.js.map +0 -1
  250. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  251. package/dist/middlewares/internal/mppx.js.map +0 -1
  252. package/dist/middlewares/nextjs.d.ts.map +0 -1
  253. package/dist/middlewares/nextjs.js.map +0 -1
  254. package/dist/proxy/Proxy.d.ts.map +0 -1
  255. package/dist/proxy/Proxy.js.map +0 -1
  256. package/dist/proxy/Service.d.ts.map +0 -1
  257. package/dist/proxy/Service.js.map +0 -1
  258. package/dist/proxy/index.d.ts.map +0 -1
  259. package/dist/proxy/index.js.map +0 -1
  260. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  261. package/dist/proxy/internal/Headers.js.map +0 -1
  262. package/dist/proxy/internal/Route.d.ts.map +0 -1
  263. package/dist/proxy/internal/Route.js.map +0 -1
  264. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  265. package/dist/proxy/services/anthropic.js.map +0 -1
  266. package/dist/proxy/services/openai.d.ts.map +0 -1
  267. package/dist/proxy/services/openai.js.map +0 -1
  268. package/dist/proxy/services/stripe.d.ts.map +0 -1
  269. package/dist/proxy/services/stripe.js.map +0 -1
  270. package/dist/server/Methods.d.ts.map +0 -1
  271. package/dist/server/Methods.js.map +0 -1
  272. package/dist/server/Mppx.d.ts.map +0 -1
  273. package/dist/server/Mppx.js.map +0 -1
  274. package/dist/server/NodeListener.d.ts.map +0 -1
  275. package/dist/server/NodeListener.js.map +0 -1
  276. package/dist/server/Request.d.ts.map +0 -1
  277. package/dist/server/Request.js.map +0 -1
  278. package/dist/server/Response.d.ts.map +0 -1
  279. package/dist/server/Response.js.map +0 -1
  280. package/dist/server/Transport.d.ts.map +0 -1
  281. package/dist/server/Transport.js.map +0 -1
  282. package/dist/server/index.d.ts.map +0 -1
  283. package/dist/server/index.js.map +0 -1
  284. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  285. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  286. package/dist/server/internal/html/config.d.ts.map +0 -1
  287. package/dist/server/internal/html/config.js.map +0 -1
  288. package/dist/server/internal/html/constants.d.ts.map +0 -1
  289. package/dist/server/internal/html/constants.js.map +0 -1
  290. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  291. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  292. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  293. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  294. package/dist/server/internal/scope.d.ts.map +0 -1
  295. package/dist/server/internal/scope.js.map +0 -1
  296. package/dist/stripe/Methods.d.ts.map +0 -1
  297. package/dist/stripe/Methods.js.map +0 -1
  298. package/dist/stripe/client/Charge.d.ts.map +0 -1
  299. package/dist/stripe/client/Charge.js.map +0 -1
  300. package/dist/stripe/client/Methods.d.ts.map +0 -1
  301. package/dist/stripe/client/Methods.js.map +0 -1
  302. package/dist/stripe/client/index.d.ts.map +0 -1
  303. package/dist/stripe/client/index.js.map +0 -1
  304. package/dist/stripe/index.d.ts.map +0 -1
  305. package/dist/stripe/index.js.map +0 -1
  306. package/dist/stripe/internal/constants.d.ts.map +0 -1
  307. package/dist/stripe/internal/constants.js.map +0 -1
  308. package/dist/stripe/internal/types.d.ts.map +0 -1
  309. package/dist/stripe/internal/types.js.map +0 -1
  310. package/dist/stripe/server/Charge.d.ts.map +0 -1
  311. package/dist/stripe/server/Charge.js.map +0 -1
  312. package/dist/stripe/server/Methods.d.ts.map +0 -1
  313. package/dist/stripe/server/Methods.js.map +0 -1
  314. package/dist/stripe/server/index.d.ts.map +0 -1
  315. package/dist/stripe/server/index.js.map +0 -1
  316. package/dist/stripe/server/internal/deposit-address.d.ts.map +0 -1
  317. package/dist/stripe/server/internal/deposit-address.js.map +0 -1
  318. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  319. package/dist/stripe/server/internal/html/types.js.map +0 -1
  320. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  321. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  322. package/dist/stripe/server/internal/record-payment.d.ts.map +0 -1
  323. package/dist/stripe/server/internal/record-payment.js.map +0 -1
  324. package/dist/stripe/server/internal/request.d.ts.map +0 -1
  325. package/dist/stripe/server/internal/request.js.map +0 -1
  326. package/dist/tap/Constants.d.ts.map +0 -1
  327. package/dist/tap/Constants.js.map +0 -1
  328. package/dist/tap/Types.d.ts.map +0 -1
  329. package/dist/tap/Types.js.map +0 -1
  330. package/dist/tap/client/index.d.ts.map +0 -1
  331. package/dist/tap/client/index.js.map +0 -1
  332. package/dist/tap/index.d.ts.map +0 -1
  333. package/dist/tap/index.js.map +0 -1
  334. package/dist/tap/server/index.d.ts.map +0 -1
  335. package/dist/tap/server/index.js.map +0 -1
  336. package/dist/tempo/Attribution.d.ts.map +0 -1
  337. package/dist/tempo/Attribution.js.map +0 -1
  338. package/dist/tempo/Methods.d.ts.map +0 -1
  339. package/dist/tempo/Methods.js.map +0 -1
  340. package/dist/tempo/Proof.d.ts.map +0 -1
  341. package/dist/tempo/Proof.js.map +0 -1
  342. package/dist/tempo/client/Charge.d.ts.map +0 -1
  343. package/dist/tempo/client/Charge.js.map +0 -1
  344. package/dist/tempo/client/Methods.d.ts.map +0 -1
  345. package/dist/tempo/client/Methods.js.map +0 -1
  346. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  347. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  348. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  349. package/dist/tempo/client/Subscription.js.map +0 -1
  350. package/dist/tempo/client/index.d.ts.map +0 -1
  351. package/dist/tempo/client/index.js.map +0 -1
  352. package/dist/tempo/index.d.ts.map +0 -1
  353. package/dist/tempo/index.js.map +0 -1
  354. package/dist/tempo/internal/account.d.ts.map +0 -1
  355. package/dist/tempo/internal/account.js.map +0 -1
  356. package/dist/tempo/internal/address.d.ts.map +0 -1
  357. package/dist/tempo/internal/address.js.map +0 -1
  358. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  359. package/dist/tempo/internal/auto-swap.js.map +0 -1
  360. package/dist/tempo/internal/charge.d.ts.map +0 -1
  361. package/dist/tempo/internal/charge.js.map +0 -1
  362. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  363. package/dist/tempo/internal/defaults.js.map +0 -1
  364. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  365. package/dist/tempo/internal/fee-payer.js.map +0 -1
  366. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  367. package/dist/tempo/internal/fee-token.js.map +0 -1
  368. package/dist/tempo/internal/proof.d.ts.map +0 -1
  369. package/dist/tempo/internal/proof.js.map +0 -1
  370. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  371. package/dist/tempo/internal/selectors.js.map +0 -1
  372. package/dist/tempo/internal/types.d.ts.map +0 -1
  373. package/dist/tempo/internal/types.js.map +0 -1
  374. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  375. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  376. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  377. package/dist/tempo/legacy/client/Session.js.map +0 -1
  378. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  379. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  380. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  381. package/dist/tempo/legacy/client/index.js.map +0 -1
  382. package/dist/tempo/legacy/index.d.ts.map +0 -1
  383. package/dist/tempo/legacy/index.js.map +0 -1
  384. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  385. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  386. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  387. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  388. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  389. package/dist/tempo/legacy/session/Types.js.map +0 -1
  390. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  391. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  392. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  393. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  394. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  395. package/dist/tempo/legacy/session/index.js.map +0 -1
  396. package/dist/tempo/server/Charge.d.ts.map +0 -1
  397. package/dist/tempo/server/Charge.js.map +0 -1
  398. package/dist/tempo/server/Methods.d.ts.map +0 -1
  399. package/dist/tempo/server/Methods.js.map +0 -1
  400. package/dist/tempo/server/Relay.d.ts.map +0 -1
  401. package/dist/tempo/server/Relay.js.map +0 -1
  402. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  403. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  404. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  405. package/dist/tempo/server/Subscription.js.map +0 -1
  406. package/dist/tempo/server/index.d.ts.map +0 -1
  407. package/dist/tempo/server/index.js.map +0 -1
  408. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  409. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  410. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  411. package/dist/tempo/server/internal/request-body.js.map +0 -1
  412. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  413. package/dist/tempo/server/internal/transport.js.map +0 -1
  414. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  415. package/dist/tempo/session/Snapshot.js.map +0 -1
  416. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  417. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  418. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  419. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  420. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  421. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  422. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  423. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  424. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  425. package/dist/tempo/session/client/Runtime.js.map +0 -1
  426. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  427. package/dist/tempo/session/client/Session.js.map +0 -1
  428. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  429. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  430. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  431. package/dist/tempo/session/client/Transports.js.map +0 -1
  432. package/dist/tempo/session/client/index.d.ts.map +0 -1
  433. package/dist/tempo/session/client/index.js.map +0 -1
  434. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  435. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  436. package/dist/tempo/session/index.d.ts.map +0 -1
  437. package/dist/tempo/session/index.js.map +0 -1
  438. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  439. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  440. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  441. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  442. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  443. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  444. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  445. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  446. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  447. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  448. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  449. package/dist/tempo/session/precompile/index.js.map +0 -1
  450. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  451. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  452. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  453. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  454. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  455. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  456. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  457. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  458. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  459. package/dist/tempo/session/server/RequestState.js.map +0 -1
  460. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  461. package/dist/tempo/session/server/Session.js.map +0 -1
  462. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  463. package/dist/tempo/session/server/Settlement.js.map +0 -1
  464. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  465. package/dist/tempo/session/server/Sse.js.map +0 -1
  466. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  467. package/dist/tempo/session/server/Transports.js.map +0 -1
  468. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  469. package/dist/tempo/session/server/Ws.js.map +0 -1
  470. package/dist/tempo/session/server/index.d.ts.map +0 -1
  471. package/dist/tempo/session/server/index.js.map +0 -1
  472. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  473. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  474. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  475. package/dist/tempo/subscription/Receipt.js.map +0 -1
  476. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  477. package/dist/tempo/subscription/Store.js.map +0 -1
  478. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  479. package/dist/tempo/subscription/Types.js.map +0 -1
  480. package/dist/tempo/subscription/index.d.ts.map +0 -1
  481. package/dist/tempo/subscription/index.js.map +0 -1
  482. package/dist/validation/core.d.ts.map +0 -1
  483. package/dist/validation/core.js.map +0 -1
  484. package/dist/validation/index.d.ts.map +0 -1
  485. package/dist/validation/index.js.map +0 -1
  486. package/dist/viem/Account.d.ts.map +0 -1
  487. package/dist/viem/Account.js.map +0 -1
  488. package/dist/viem/Client.d.ts.map +0 -1
  489. package/dist/viem/Client.js.map +0 -1
  490. package/dist/web-bot-auth/Constants.d.ts.map +0 -1
  491. package/dist/web-bot-auth/Constants.js.map +0 -1
  492. package/dist/web-bot-auth/Types.d.ts.map +0 -1
  493. package/dist/web-bot-auth/Types.js.map +0 -1
  494. package/dist/web-bot-auth/client/index.d.ts.map +0 -1
  495. package/dist/web-bot-auth/client/index.js.map +0 -1
  496. package/dist/web-bot-auth/index.d.ts.map +0 -1
  497. package/dist/web-bot-auth/index.js.map +0 -1
  498. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +0 -1
  499. package/dist/web-bot-auth/internal/JwkThumbprint.js.map +0 -1
  500. package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +0 -1
  501. package/dist/web-bot-auth/internal/SignatureAgent.js.map +0 -1
  502. package/dist/web-bot-auth/server/index.d.ts.map +0 -1
  503. package/dist/web-bot-auth/server/index.js.map +0 -1
  504. package/dist/x402/Assets.d.ts.map +0 -1
  505. package/dist/x402/Assets.js.map +0 -1
  506. package/dist/x402/Header.d.ts.map +0 -1
  507. package/dist/x402/Header.js.map +0 -1
  508. package/dist/x402/Types.d.ts.map +0 -1
  509. package/dist/x402/Types.js.map +0 -1
  510. package/dist/x402/client/Exact.d.ts.map +0 -1
  511. package/dist/x402/client/Exact.js.map +0 -1
  512. package/dist/x402/index.d.ts.map +0 -1
  513. package/dist/x402/index.js.map +0 -1
  514. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  515. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  516. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  517. package/dist/x402/internal/RouteBinding.js.map +0 -1
  518. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  519. package/dist/x402/server/EvmCharge.js.map +0 -1
  520. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  521. package/dist/x402/server/Facilitator.js.map +0 -1
  522. package/dist/zod.d.ts.map +0 -1
  523. package/dist/zod.js.map +0 -1
  524. package/src/BodyDigest.test.ts +0 -43
  525. package/src/BodyDigest.ts +0 -55
  526. package/src/Challenge.fuzz.test.ts +0 -154
  527. package/src/Challenge.test-d.ts +0 -82
  528. package/src/Challenge.test.ts +0 -1060
  529. package/src/Challenge.ts +0 -687
  530. package/src/Constants.ts +0 -58
  531. package/src/Credential.fuzz.test.ts +0 -62
  532. package/src/Credential.test.ts +0 -378
  533. package/src/Credential.ts +0 -217
  534. package/src/Errors.test.ts +0 -520
  535. package/src/Errors.ts +0 -448
  536. package/src/Expires.test.ts +0 -112
  537. package/src/Expires.ts +0 -59
  538. package/src/Html.ts +0 -67
  539. package/src/Mcp.ts +0 -85
  540. package/src/Method.test.ts +0 -177
  541. package/src/Method.ts +0 -631
  542. package/src/PaymentRequest.test.ts +0 -147
  543. package/src/PaymentRequest.ts +0 -108
  544. package/src/Receipt.test.ts +0 -151
  545. package/src/Receipt.ts +0 -146
  546. package/src/Store.test-d.ts +0 -211
  547. package/src/Store.test.ts +0 -407
  548. package/src/Store.ts +0 -397
  549. package/src/attestation/Attestation.integration.test.ts +0 -208
  550. package/src/attestation/Client.test.ts +0 -83
  551. package/src/attestation/Client.ts +0 -34
  552. package/src/attestation/Constants.ts +0 -15
  553. package/src/attestation/Server.test.ts +0 -60
  554. package/src/attestation/Server.ts +0 -12
  555. package/src/attestation/Types.test-d.ts +0 -54
  556. package/src/attestation/Types.ts +0 -77
  557. package/src/attestation/index.ts +0 -5
  558. package/src/attestation/internal/HttpMessageSignature.test.ts +0 -101
  559. package/src/attestation/internal/HttpMessageSignature.ts +0 -429
  560. package/src/attestation/internal/SigningContext.ts +0 -13
  561. package/src/bin.js +0 -2
  562. package/src/bin.ts +0 -4
  563. package/src/cli/account.ts +0 -269
  564. package/src/cli/cli.test.ts +0 -2221
  565. package/src/cli/cli.ts +0 -1650
  566. package/src/cli/config.test.ts +0 -89
  567. package/src/cli/config.ts +0 -50
  568. package/src/cli/internal.ts +0 -114
  569. package/src/cli/mcp.test.ts +0 -262
  570. package/src/cli/plugins/evm.ts +0 -55
  571. package/src/cli/plugins/index.ts +0 -4
  572. package/src/cli/plugins/plugin.ts +0 -84
  573. package/src/cli/plugins/stripe.ts +0 -174
  574. package/src/cli/plugins/tempo.ts +0 -1102
  575. package/src/cli/sessions/Manager.test.ts +0 -249
  576. package/src/cli/sessions/Manager.ts +0 -93
  577. package/src/cli/sessions/commands.ts +0 -444
  578. package/src/cli/sessions/request.test.ts +0 -51
  579. package/src/cli/sessions/request.ts +0 -353
  580. package/src/cli/sessions/store.test.ts +0 -581
  581. package/src/cli/sessions/store.ts +0 -940
  582. package/src/cli/utils.test.ts +0 -156
  583. package/src/cli/utils.ts +0 -394
  584. package/src/cli/validate/challenge.ts +0 -565
  585. package/src/cli/validate/discovery.test.ts +0 -435
  586. package/src/cli/validate/discovery.ts +0 -221
  587. package/src/cli/validate/helpers.ts +0 -166
  588. package/src/cli/validate/index.ts +0 -229
  589. package/src/cli/validate/messages.ts +0 -7
  590. package/src/cli/validate/payment.ts +0 -774
  591. package/src/cli/validate.test.ts +0 -843
  592. package/src/client/Methods.ts +0 -8
  593. package/src/client/Mppx.test-d.ts +0 -287
  594. package/src/client/Mppx.test.ts +0 -1065
  595. package/src/client/Mppx.ts +0 -487
  596. package/src/client/Transport.test.ts +0 -586
  597. package/src/client/Transport.ts +0 -170
  598. package/src/client/index.ts +0 -29
  599. package/src/client/internal/Fetch.browser.test.ts +0 -197
  600. package/src/client/internal/Fetch.test-d.ts +0 -109
  601. package/src/client/internal/Fetch.test.ts +0 -2336
  602. package/src/client/internal/Fetch.ts +0 -1075
  603. package/src/client/internal/MethodChallenge.ts +0 -35
  604. package/src/client/internal/MethodResponse.ts +0 -67
  605. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  606. package/src/client/internal/protocols/Mcp.ts +0 -186
  607. package/src/client/internal/protocols/Mpp.ts +0 -21
  608. package/src/client/internal/protocols/Protocol.ts +0 -10
  609. package/src/client/internal/protocols/Shared.ts +0 -25
  610. package/src/client/internal/protocols/X402.ts +0 -46
  611. package/src/client/node.test.ts +0 -115
  612. package/src/client/node.ts +0 -247
  613. package/src/discovery/Discovery.test.ts +0 -214
  614. package/src/discovery/Discovery.ts +0 -105
  615. package/src/discovery/OpenApi.test.ts +0 -623
  616. package/src/discovery/OpenApi.ts +0 -192
  617. package/src/discovery/Validate.test.ts +0 -305
  618. package/src/discovery/Validate.ts +0 -77
  619. package/src/discovery/index.ts +0 -3
  620. package/src/discovery/internal/Metadata.ts +0 -51
  621. package/src/env.d.ts +0 -12
  622. package/src/evm/Assets.ts +0 -1
  623. package/src/evm/Chains.ts +0 -11
  624. package/src/evm/Methods.ts +0 -44
  625. package/src/evm/PublicInterface.test-d.ts +0 -134
  626. package/src/evm/Types.ts +0 -140
  627. package/src/evm/client/Charge.test.ts +0 -347
  628. package/src/evm/client/Charge.ts +0 -187
  629. package/src/evm/client/Methods.ts +0 -19
  630. package/src/evm/client/index.ts +0 -6
  631. package/src/evm/index.ts +0 -16
  632. package/src/evm/server/Charge.test.ts +0 -339
  633. package/src/evm/server/Charge.ts +0 -295
  634. package/src/evm/server/Methods.ts +0 -22
  635. package/src/evm/server/index.ts +0 -6
  636. package/src/index.ts +0 -14
  637. package/src/internal/AcceptPayment.test.ts +0 -347
  638. package/src/internal/AcceptPayment.ts +0 -366
  639. package/src/internal/HeaderCodec.ts +0 -36
  640. package/src/internal/changeset.test.ts +0 -106
  641. package/src/internal/constantTimeEqual.test.ts +0 -47
  642. package/src/internal/constantTimeEqual.ts +0 -10
  643. package/src/internal/env.test.ts +0 -42
  644. package/src/internal/env.ts +0 -49
  645. package/src/internal/types.test-d.ts +0 -21
  646. package/src/internal/types.ts +0 -479
  647. package/src/mcp/client/McpClient.integration.test.ts +0 -639
  648. package/src/mcp/client/McpClient.test-d.ts +0 -144
  649. package/src/mcp/client/McpClient.test.ts +0 -463
  650. package/src/mcp/client/McpClient.ts +0 -307
  651. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  652. package/src/mcp/client/index.ts +0 -2
  653. package/src/mcp/server/Transport.test.ts +0 -191
  654. package/src/mcp/server/Transport.ts +0 -111
  655. package/src/mcp/server/index.ts +0 -1
  656. package/src/middlewares/elysia.test.ts +0 -285
  657. package/src/middlewares/elysia.ts +0 -116
  658. package/src/middlewares/express.test.ts +0 -361
  659. package/src/middlewares/express.ts +0 -140
  660. package/src/middlewares/hono.test.ts +0 -473
  661. package/src/middlewares/hono.ts +0 -153
  662. package/src/middlewares/internal/mppx.test.ts +0 -177
  663. package/src/middlewares/internal/mppx.ts +0 -67
  664. package/src/middlewares/nextjs.test.ts +0 -359
  665. package/src/middlewares/nextjs.ts +0 -107
  666. package/src/proxy/Proxy.test.ts +0 -1038
  667. package/src/proxy/Proxy.ts +0 -483
  668. package/src/proxy/Proxy.upstreamError.test.ts +0 -364
  669. package/src/proxy/Service.test.ts +0 -252
  670. package/src/proxy/Service.ts +0 -280
  671. package/src/proxy/index.ts +0 -6
  672. package/src/proxy/internal/Headers.test.ts +0 -139
  673. package/src/proxy/internal/Headers.ts +0 -66
  674. package/src/proxy/internal/Route.test.ts +0 -217
  675. package/src/proxy/internal/Route.ts +0 -64
  676. package/src/proxy/services/anthropic.test.ts +0 -132
  677. package/src/proxy/services/anthropic.ts +0 -53
  678. package/src/proxy/services/hooks.test-d.ts +0 -14
  679. package/src/proxy/services/hooks.test.ts +0 -44
  680. package/src/proxy/services/openai.test.ts +0 -157
  681. package/src/proxy/services/openai.ts +0 -60
  682. package/src/proxy/services/stripe.test.ts +0 -175
  683. package/src/proxy/services/stripe.ts +0 -59
  684. package/src/server/Methods.test-d.ts +0 -88
  685. package/src/server/Methods.test.ts +0 -69
  686. package/src/server/Methods.ts +0 -3
  687. package/src/server/Mppx.authorize.test.ts +0 -210
  688. package/src/server/Mppx.test-d.ts +0 -494
  689. package/src/server/Mppx.test.ts +0 -6711
  690. package/src/server/Mppx.ts +0 -2919
  691. package/src/server/NodeListener.test.ts +0 -293
  692. package/src/server/NodeListener.ts +0 -45
  693. package/src/server/Request.test.ts +0 -255
  694. package/src/server/Request.ts +0 -155
  695. package/src/server/Response.test.ts +0 -32
  696. package/src/server/Response.ts +0 -45
  697. package/src/server/Transport.test.ts +0 -598
  698. package/src/server/Transport.ts +0 -320
  699. package/src/server/index.ts +0 -9
  700. package/src/server/internal/html/compose.main.gen.ts +0 -2
  701. package/src/server/internal/html/compose.main.ts +0 -88
  702. package/src/server/internal/html/config.ts +0 -672
  703. package/src/server/internal/html/constants.ts +0 -28
  704. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  705. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  706. package/src/server/internal/html/serviceWorker.ts +0 -27
  707. package/src/server/internal/html/tsconfig.compose.json +0 -8
  708. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  709. package/src/server/internal/html/tsconfig.worker.json +0 -8
  710. package/src/server/internal/scope.ts +0 -43
  711. package/src/stripe/Charge.integration.test.ts +0 -329
  712. package/src/stripe/Methods.test.ts +0 -62
  713. package/src/stripe/Methods.ts +0 -44
  714. package/src/stripe/client/Charge.test.ts +0 -205
  715. package/src/stripe/client/Charge.ts +0 -132
  716. package/src/stripe/client/Methods.ts +0 -37
  717. package/src/stripe/client/index.ts +0 -2
  718. package/src/stripe/index.ts +0 -1
  719. package/src/stripe/internal/constants.ts +0 -7
  720. package/src/stripe/internal/types.ts +0 -47
  721. package/src/stripe/server/Charge.test-d.ts +0 -81
  722. package/src/stripe/server/Charge.test.ts +0 -700
  723. package/src/stripe/server/Charge.ts +0 -487
  724. package/src/stripe/server/Methods.test-d.ts +0 -157
  725. package/src/stripe/server/Methods.test.ts +0 -403
  726. package/src/stripe/server/Methods.ts +0 -441
  727. package/src/stripe/server/index.ts +0 -2
  728. package/src/stripe/server/internal/deposit-address.ts +0 -57
  729. package/src/stripe/server/internal/html/main.ts +0 -165
  730. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  731. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  732. package/src/stripe/server/internal/html/package.json +0 -9
  733. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  734. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  735. package/src/stripe/server/internal/html/types.ts +0 -5
  736. package/src/stripe/server/internal/html.gen.ts +0 -2
  737. package/src/stripe/server/internal/record-payment.ts +0 -66
  738. package/src/stripe/server/internal/request.ts +0 -49
  739. package/src/tap/Constants.ts +0 -32
  740. package/src/tap/Tap.test.ts +0 -125
  741. package/src/tap/Types.ts +0 -11
  742. package/src/tap/client/index.ts +0 -54
  743. package/src/tap/index.ts +0 -4
  744. package/src/tap/server/index.ts +0 -48
  745. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  746. package/src/tempo/Attribution.test.ts +0 -294
  747. package/src/tempo/Attribution.ts +0 -185
  748. package/src/tempo/Methods.test.ts +0 -425
  749. package/src/tempo/Methods.ts +0 -367
  750. package/src/tempo/Proof.conformance.test.ts +0 -146
  751. package/src/tempo/Proof.test-d.ts +0 -32
  752. package/src/tempo/Proof.test.ts +0 -40
  753. package/src/tempo/Proof.ts +0 -69
  754. package/src/tempo/PublicExports.test-d.ts +0 -130
  755. package/src/tempo/Subscription.integration.test.ts +0 -591
  756. package/src/tempo/client/Charge.test.ts +0 -501
  757. package/src/tempo/client/Charge.ts +0 -271
  758. package/src/tempo/client/Methods.ts +0 -45
  759. package/src/tempo/client/ResolveAccount.ts +0 -46
  760. package/src/tempo/client/Subscription.test.ts +0 -180
  761. package/src/tempo/client/Subscription.ts +0 -156
  762. package/src/tempo/client/index.ts +0 -17
  763. package/src/tempo/index.ts +0 -5
  764. package/src/tempo/internal/account.ts +0 -56
  765. package/src/tempo/internal/address.test.ts +0 -42
  766. package/src/tempo/internal/address.ts +0 -6
  767. package/src/tempo/internal/auto-swap.test.ts +0 -198
  768. package/src/tempo/internal/auto-swap.ts +0 -145
  769. package/src/tempo/internal/charge.test.ts +0 -66
  770. package/src/tempo/internal/charge.ts +0 -43
  771. package/src/tempo/internal/defaults.test.ts +0 -95
  772. package/src/tempo/internal/defaults.ts +0 -53
  773. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  774. package/src/tempo/internal/fee-payer.ts +0 -808
  775. package/src/tempo/internal/fee-token.test.ts +0 -165
  776. package/src/tempo/internal/fee-token.ts +0 -72
  777. package/src/tempo/internal/proof.test.ts +0 -97
  778. package/src/tempo/internal/proof.ts +0 -87
  779. package/src/tempo/internal/selectors.ts +0 -10
  780. package/src/tempo/internal/types.ts +0 -19
  781. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  782. package/src/tempo/legacy/README.md +0 -9
  783. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  784. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  785. package/src/tempo/legacy/client/Session.test.ts +0 -800
  786. package/src/tempo/legacy/client/Session.ts +0 -397
  787. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  788. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  789. package/src/tempo/legacy/client/index.ts +0 -6
  790. package/src/tempo/legacy/index.ts +0 -4
  791. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  792. package/src/tempo/legacy/session/Chain.ts +0 -830
  793. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  794. package/src/tempo/legacy/session/Channel.ts +0 -51
  795. package/src/tempo/legacy/session/Types.ts +0 -91
  796. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  797. package/src/tempo/legacy/session/Voucher.ts +0 -183
  798. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  799. package/src/tempo/legacy/session/index.ts +0 -8
  800. package/src/tempo/server/AtomicStore.test-d.ts +0 -63
  801. package/src/tempo/server/Charge.test.ts +0 -6056
  802. package/src/tempo/server/Charge.ts +0 -1379
  803. package/src/tempo/server/Methods.ts +0 -86
  804. package/src/tempo/server/Relay.test.ts +0 -677
  805. package/src/tempo/server/Relay.ts +0 -297
  806. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  807. package/src/tempo/server/SponsorBudget.ts +0 -219
  808. package/src/tempo/server/Sse.test.ts +0 -321
  809. package/src/tempo/server/Subscription.test.ts +0 -1944
  810. package/src/tempo/server/Subscription.ts +0 -1336
  811. package/src/tempo/server/index.ts +0 -12
  812. package/src/tempo/server/internal/html/main.ts +0 -115
  813. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  814. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  815. package/src/tempo/server/internal/html/package.json +0 -10
  816. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  817. package/src/tempo/server/internal/html.gen.ts +0 -2
  818. package/src/tempo/server/internal/request-body.test.ts +0 -210
  819. package/src/tempo/server/internal/request-body.ts +0 -61
  820. package/src/tempo/server/internal/transport.test.ts +0 -922
  821. package/src/tempo/server/internal/transport.ts +0 -322
  822. package/src/tempo/session/README.md +0 -320
  823. package/src/tempo/session/Snapshot.test.ts +0 -41
  824. package/src/tempo/session/Snapshot.ts +0 -95
  825. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  826. package/src/tempo/session/client/ChannelOps.ts +0 -348
  827. package/src/tempo/session/client/ChannelStore.ts +0 -111
  828. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  829. package/src/tempo/session/client/CredentialState.ts +0 -942
  830. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  831. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  832. package/src/tempo/session/client/Runtime.ts +0 -1008
  833. package/src/tempo/session/client/Session.test.ts +0 -1355
  834. package/src/tempo/session/client/Session.ts +0 -420
  835. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  836. package/src/tempo/session/client/SessionManager.ts +0 -996
  837. package/src/tempo/session/client/Transports.test.ts +0 -1141
  838. package/src/tempo/session/client/Transports.ts +0 -1534
  839. package/src/tempo/session/client/index.ts +0 -40
  840. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  841. package/src/tempo/session/index.ts +0 -7
  842. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  843. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  844. package/src/tempo/session/precompile/Chain.ts +0 -1269
  845. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  846. package/src/tempo/session/precompile/Channel.ts +0 -108
  847. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  848. package/src/tempo/session/precompile/Protocol.ts +0 -520
  849. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  850. package/src/tempo/session/precompile/Voucher.ts +0 -162
  851. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  852. package/src/tempo/session/precompile/index.ts +0 -33
  853. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  854. package/src/tempo/session/server/ChannelOps.ts +0 -157
  855. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  856. package/src/tempo/session/server/ChannelStore.ts +0 -856
  857. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  858. package/src/tempo/session/server/CredentialVerification.ts +0 -1087
  859. package/src/tempo/session/server/MeteredStream.ts +0 -99
  860. package/src/tempo/session/server/RequestState.test.ts +0 -574
  861. package/src/tempo/session/server/RequestState.ts +0 -507
  862. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  863. package/src/tempo/session/server/Session.test.ts +0 -4247
  864. package/src/tempo/session/server/Session.ts +0 -669
  865. package/src/tempo/session/server/Settlement.test.ts +0 -345
  866. package/src/tempo/session/server/Settlement.ts +0 -527
  867. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  868. package/src/tempo/session/server/Sse.test.ts +0 -634
  869. package/src/tempo/session/server/Sse.ts +0 -261
  870. package/src/tempo/session/server/Transports.test.ts +0 -346
  871. package/src/tempo/session/server/Transports.ts +0 -256
  872. package/src/tempo/session/server/Ws.test.ts +0 -765
  873. package/src/tempo/session/server/Ws.ts +0 -391
  874. package/src/tempo/session/server/index.ts +0 -12
  875. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  876. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  877. package/src/tempo/subscription/Receipt.ts +0 -28
  878. package/src/tempo/subscription/Store.test.ts +0 -609
  879. package/src/tempo/subscription/Store.ts +0 -449
  880. package/src/tempo/subscription/Types.ts +0 -68
  881. package/src/tempo/subscription/index.ts +0 -23
  882. package/src/tsconfig.json +0 -10
  883. package/src/validation/core.ts +0 -386
  884. package/src/validation/index.ts +0 -11
  885. package/src/viem/Account.test.ts +0 -72
  886. package/src/viem/Account.ts +0 -30
  887. package/src/viem/Client.test.ts +0 -366
  888. package/src/viem/Client.ts +0 -93
  889. package/src/web-bot-auth/Constants.ts +0 -24
  890. package/src/web-bot-auth/Types.ts +0 -9
  891. package/src/web-bot-auth/WebBotAuth.test.ts +0 -182
  892. package/src/web-bot-auth/client/index.ts +0 -84
  893. package/src/web-bot-auth/index.ts +0 -6
  894. package/src/web-bot-auth/internal/JwkThumbprint.ts +0 -21
  895. package/src/web-bot-auth/internal/SignatureAgent.ts +0 -18
  896. package/src/web-bot-auth/server/index.ts +0 -113
  897. package/src/x402/Assets.test.ts +0 -253
  898. package/src/x402/Assets.ts +0 -221
  899. package/src/x402/Exact.e2e.test.ts +0 -488
  900. package/src/x402/Exact.localnet.test.ts +0 -475
  901. package/src/x402/Header.test.ts +0 -73
  902. package/src/x402/Header.ts +0 -79
  903. package/src/x402/PublicInterface.test-d.ts +0 -39
  904. package/src/x402/Types.ts +0 -248
  905. package/src/x402/client/Exact.test.ts +0 -309
  906. package/src/x402/client/Exact.ts +0 -186
  907. package/src/x402/index.ts +0 -6
  908. package/src/x402/internal/ChallengeBrand.ts +0 -14
  909. package/src/x402/internal/RouteBinding.ts +0 -18
  910. package/src/x402/server/EvmCharge.ts +0 -410
  911. package/src/x402/server/Facilitator.test.ts +0 -111
  912. package/src/x402/server/Facilitator.ts +0 -56
  913. package/src/zod.test.ts +0 -169
  914. package/src/zod.ts +0 -71
@@ -1,1087 +0,0 @@
1
- import {
2
- isAddress,
3
- isAddressEqual,
4
- zeroAddress,
5
- type Account as viem_Account,
6
- type Address,
7
- type Hex,
8
- } from 'viem'
9
-
10
- import type * as Challenge from '../../../Challenge.js'
11
- import {
12
- AmountExceedsDepositError,
13
- ChannelClosedError,
14
- ChannelNotFoundError,
15
- InsufficientBalanceError,
16
- InvalidSignatureError,
17
- VerificationFailedError,
18
- } from '../../../Errors.js'
19
- import type * as FeePayer from '../../internal/fee-payer.js'
20
- import * as Chain from '../precompile/Chain.js'
21
- import { readChannelClosedReceiptFields } from '../precompile/Chain.js'
22
- import * as Channel from '../precompile/Channel.js'
23
- import {
24
- createSessionReceipt,
25
- uint96,
26
- type ChannelDescriptor,
27
- type SessionCredentialPayload,
28
- type SessionReceipt,
29
- } from '../precompile/Protocol.js'
30
- import * as Voucher from '../precompile/Voucher.js'
31
- import * as ChannelStore from './ChannelStore.js'
32
- import { getChallengePaymentFields } from './RequestState.js'
33
- import { assertSettlementSender, getClientAccount, type OnSessionSettlement } from './Settlement.js'
34
-
35
- /** Returns the effective voucher signer for a TIP-1034 descriptor. */
36
- export function authorizedSigner(descriptor: Channel.ChannelDescriptor): Address {
37
- return isAddressEqual(descriptor.authorizedSigner, zeroAddress)
38
- ? descriptor.payer
39
- : descriptor.authorizedSigner
40
- }
41
-
42
- /** Asserts that a credential payload includes a TIP-1034 descriptor. */
43
- export function assertDescriptor(payload: {
44
- descriptor?: Channel.ChannelDescriptor | undefined
45
- }): asserts payload is { descriptor: Channel.ChannelDescriptor } {
46
- if (!payload.descriptor)
47
- throw new VerificationFailedError({
48
- reason: 'descriptor required for TIP-1034 session action',
49
- })
50
- }
51
-
52
- /** Asserts that two TIP-1034 descriptors identify the same channel. */
53
- export function assertSameDescriptor(a: Channel.ChannelDescriptor, b: Channel.ChannelDescriptor) {
54
- if (
55
- !isAddressEqual(a.payer, b.payer) ||
56
- !isAddressEqual(a.payee, b.payee) ||
57
- !isAddressEqual(a.operator, b.operator) ||
58
- !isAddressEqual(a.token, b.token) ||
59
- !isAddressEqual(a.authorizedSigner, b.authorizedSigner) ||
60
- a.salt.toLowerCase() !== b.salt.toLowerCase() ||
61
- a.expiringNonceHash.toLowerCase() !== b.expiringNonceHash.toLowerCase()
62
- )
63
- throw new VerificationFailedError({
64
- reason: 'credential descriptor does not match stored channel',
65
- })
66
- }
67
-
68
- /**
69
- * Validates a TIP-1034 descriptor against channel ID, server destination, and token.
70
- */
71
- export function validateChannelDescriptor(
72
- descriptor: Channel.ChannelDescriptor,
73
- channelId: Address | `0x${string}`,
74
- chainId: number,
75
- escrow: Address,
76
- recipient: Address,
77
- currency: Address,
78
- expectedOperator?: Address | undefined,
79
- ): void {
80
- const computed = Channel.computeId({ ...descriptor, chainId, escrow })
81
- if (computed.toLowerCase() !== channelId.toLowerCase()) {
82
- throw new VerificationFailedError({ reason: 'channel descriptor does not match channelId' })
83
- }
84
- if (!isAddressEqual(descriptor.payee, recipient)) {
85
- throw new VerificationFailedError({
86
- reason: 'channel descriptor payee does not match server destination',
87
- })
88
- }
89
- if (!isAddressEqual(descriptor.token, currency)) {
90
- throw new VerificationFailedError({
91
- reason: 'channel descriptor token does not match server token',
92
- })
93
- }
94
- if (expectedOperator !== undefined && !isAddressEqual(descriptor.operator, expectedOperator)) {
95
- throw new VerificationFailedError({
96
- reason: 'channel descriptor operator does not match server operator',
97
- })
98
- }
99
- }
100
-
101
- /** Validates on-chain channel state before accepting or charging a credential. */
102
- export function validateChannelState(state: Chain.ChannelState, amount?: bigint): void {
103
- if (state.deposit === 0n) {
104
- throw new ChannelNotFoundError({ reason: 'channel not funded on-chain' })
105
- }
106
- if (state.closeRequestedAt !== 0) {
107
- throw new ChannelClosedError({ reason: 'channel has a pending close request' })
108
- }
109
- if (amount !== undefined && state.deposit - state.settled < amount) {
110
- throw new InsufficientBalanceError({
111
- reason: 'channel available balance insufficient for requested amount',
112
- })
113
- }
114
- }
115
-
116
- /** Asserts that an opening channel covers the route's requested payment. */
117
- export function assertOpenCredentialCoversRequest(parameters: {
118
- cumulativeAmount: bigint
119
- openDeposit: bigint
120
- requestAmount: bigint
121
- }): void {
122
- const { cumulativeAmount, openDeposit, requestAmount } = parameters
123
- if (openDeposit < requestAmount)
124
- throw new VerificationFailedError({ reason: 'open deposit is less than request amount' })
125
- if (cumulativeAmount < requestAmount)
126
- throw new VerificationFailedError({ reason: 'voucher amount is less than request amount' })
127
- }
128
-
129
- /** Verifies that the credential source is authorized to spend from the channel. */
130
- export function assertCredentialSourceCanSpend(parameters: {
131
- chainId: number
132
- channel: Pick<ChannelStore.State, 'authorizedSigner' | 'payer'>
133
- source?: string | undefined
134
- }): void {
135
- const sourceAddress = readCredentialSourceAddress(parameters.source, parameters.chainId)
136
- if (
137
- isAddressEqual(sourceAddress, parameters.channel.payer) ||
138
- isAddressEqual(sourceAddress, parameters.channel.authorizedSigner)
139
- )
140
- return
141
- throw new VerificationFailedError({
142
- reason: 'credential source does not match channel payer or authorized signer',
143
- })
144
- }
145
-
146
- function readCredentialSourceAddress(source: string | undefined, chainId: number): Address {
147
- const prefix = `did:pkh:eip155:${chainId}:`
148
- if (!source?.startsWith(prefix))
149
- throw new VerificationFailedError({ reason: 'credential source does not match channel' })
150
- const address = source.slice(prefix.length)
151
- if (isAddress(address, { strict: false })) return address
152
- throw new VerificationFailedError({ reason: 'invalid credential source' })
153
- }
154
-
155
- const sessionCredentialActions = [
156
- 'open',
157
- 'topUp',
158
- 'voucher',
159
- 'close',
160
- ] as const satisfies readonly SessionCredentialPayload['action'][]
161
- const sessionCredentialActionSet = new Set<string>(sessionCredentialActions)
162
-
163
- /** Shared action and channel fields required on every session credential payload. */
164
- export type SessionCredentialPayloadHeader = {
165
- /** Credential action discriminator. */
166
- action: SessionCredentialPayload['action']
167
- /** Channel ID the credential acts on. */
168
- channelId: Hex
169
- }
170
-
171
- type SessionCredentialPayloadData = {
172
- candidate: Record<string, unknown>
173
- header: SessionCredentialPayloadHeader
174
- }
175
-
176
- function isObject(value: unknown): value is Record<string, unknown> {
177
- return value !== null && typeof value === 'object'
178
- }
179
-
180
- function isSessionCredentialAction(value: unknown): value is SessionCredentialPayload['action'] {
181
- return typeof value === 'string' && sessionCredentialActionSet.has(value)
182
- }
183
-
184
- function isHex(value: unknown): value is Hex {
185
- return typeof value === 'string' && /^0x[0-9a-fA-F]*$/.test(value)
186
- }
187
-
188
- function isHash(value: unknown): value is Hex {
189
- return typeof value === 'string' && /^0x[0-9a-fA-F]{64}$/.test(value)
190
- }
191
-
192
- function readAddress(value: unknown, field: string): Address {
193
- if (typeof value === 'string' && isAddress(value, { strict: false })) return value
194
- throw new VerificationFailedError({ reason: `invalid session credential ${field}` })
195
- }
196
-
197
- function readHash(value: unknown, field: string): Hex {
198
- if (isHash(value)) return value
199
- throw new VerificationFailedError({ reason: `invalid session credential ${field}` })
200
- }
201
-
202
- function readHex(value: unknown, field: string): Hex {
203
- if (isHex(value)) return value
204
- throw new VerificationFailedError({ reason: `invalid session credential ${field}` })
205
- }
206
-
207
- function readRawAmount(value: unknown, field: string): string {
208
- if (typeof value === 'string' && /^[0-9]+$/.test(value)) return value
209
- throw new VerificationFailedError({ reason: `invalid session credential ${field}` })
210
- }
211
-
212
- function readPayloadObject(payload: unknown): Record<string, unknown> {
213
- if (!isObject(payload))
214
- throw new VerificationFailedError({ reason: 'invalid session credential payload' })
215
- return payload
216
- }
217
-
218
- function readDescriptor(value: unknown): ChannelDescriptor {
219
- if (value === undefined)
220
- throw new VerificationFailedError({
221
- reason: 'descriptor required for TIP-1034 session action',
222
- })
223
- const candidate = readPayloadObject(value)
224
- return {
225
- payer: readAddress(candidate.payer, 'descriptor.payer'),
226
- payee: readAddress(candidate.payee, 'descriptor.payee'),
227
- operator: readAddress(candidate.operator, 'descriptor.operator'),
228
- token: readAddress(candidate.token, 'descriptor.token'),
229
- salt: readHash(candidate.salt, 'descriptor.salt'),
230
- authorizedSigner: readAddress(candidate.authorizedSigner, 'descriptor.authorizedSigner'),
231
- expiringNonceHash: readHash(candidate.expiringNonceHash, 'descriptor.expiringNonceHash'),
232
- }
233
- }
234
-
235
- function readPayloadHeader(payload: unknown): SessionCredentialPayloadData {
236
- const candidate = readPayloadObject(payload)
237
- if (!isSessionCredentialAction(candidate.action)) {
238
- throw new VerificationFailedError({ reason: 'invalid session credential action' })
239
- }
240
- return {
241
- candidate,
242
- header: {
243
- action: candidate.action,
244
- channelId: ChannelStore.normalizeChannelId(readHash(candidate.channelId, 'channelId')),
245
- },
246
- }
247
- }
248
-
249
- /** Validates the action discriminator for a TIP-1034 session credential payload. */
250
- export function requireSessionCredentialAction(
251
- payload: unknown,
252
- ): SessionCredentialPayload['action'] {
253
- const candidate = readPayloadObject(payload)
254
- if (!isSessionCredentialAction(candidate.action)) {
255
- throw new VerificationFailedError({ reason: 'invalid session credential action' })
256
- }
257
- return candidate.action
258
- }
259
-
260
- /** Validates the shared action and channel fields for a TIP-1034 session credential payload. */
261
- export function requireSessionCredentialPayloadHeader(
262
- payload: unknown,
263
- ): SessionCredentialPayloadHeader {
264
- return readPayloadHeader(payload).header
265
- }
266
-
267
- /** Validates action-specific fields for a TIP-1034 session credential payload. */
268
- export function requireSessionCredentialPayload(payload: unknown): SessionCredentialPayload {
269
- const { candidate, header } = readPayloadHeader(payload)
270
- switch (header.action) {
271
- case 'open':
272
- return {
273
- action: 'open',
274
- type: readTransactionType(candidate.type),
275
- channelId: header.channelId,
276
- transaction: readHex(candidate.transaction, 'transaction'),
277
- signature: readHex(candidate.signature, 'signature'),
278
- descriptor: readDescriptor(candidate.descriptor),
279
- cumulativeAmount: readRawAmount(candidate.cumulativeAmount, 'cumulativeAmount'),
280
- ...(candidate.authorizedSigner === undefined
281
- ? {}
282
- : {
283
- authorizedSigner: readAddress(candidate.authorizedSigner, 'authorizedSigner'),
284
- }),
285
- }
286
- case 'topUp':
287
- return {
288
- action: 'topUp',
289
- type: readTransactionType(candidate.type),
290
- channelId: header.channelId,
291
- transaction: readHex(candidate.transaction, 'transaction'),
292
- descriptor: readDescriptor(candidate.descriptor),
293
- additionalDeposit: readRawAmount(candidate.additionalDeposit, 'additionalDeposit'),
294
- }
295
- case 'voucher':
296
- return {
297
- action: 'voucher',
298
- channelId: header.channelId,
299
- descriptor: readDescriptor(candidate.descriptor),
300
- cumulativeAmount: readRawAmount(candidate.cumulativeAmount, 'cumulativeAmount'),
301
- signature: readHex(candidate.signature, 'signature'),
302
- }
303
- case 'close':
304
- return {
305
- action: 'close',
306
- channelId: header.channelId,
307
- descriptor: readDescriptor(candidate.descriptor),
308
- cumulativeAmount: readRawAmount(candidate.cumulativeAmount, 'cumulativeAmount'),
309
- signature: readHex(candidate.signature, 'signature'),
310
- }
311
- }
312
- }
313
-
314
- function readTransactionType(value: unknown): 'transaction' {
315
- if (value === 'transaction') return value
316
- throw new VerificationFailedError({ reason: 'invalid session credential transaction type' })
317
- }
318
-
319
- /** Shared inputs required to broadcast a verified precompile session credential payload. */
320
- export type BroadcastCredentialPayloadParameters = {
321
- /** Optional account override used for payee-side close settlement. */
322
- account?: viem_Account | undefined
323
- /** Challenge echoed by the credential. */
324
- challenge: Challenge.Challenge
325
- /** Milliseconds before voucher verification refreshes on-chain channel state. */
326
- channelStateTtl: number
327
- /** Chain ID used for channel ID derivation and voucher domain separation. */
328
- chainId: number
329
- /** viem client used for precompile reads and transaction broadcasts. */
330
- client: Chain.TransactionClient
331
- /** Optional payer identifier from the HTTP credential source field. */
332
- credentialSource?: string | undefined
333
- /** TIP20EscrowChannel precompile address for this session method. */
334
- escrow: Address
335
- /** Operator address advertised in the HMAC-bound challenge details. */
336
- expectedOperator?: Address | undefined
337
- /** Fee-payer account, or `true` when the client transport delegates co-signing to a hosted relay. */
338
- feePayer?: viem_Account | true | undefined
339
- /** Optional policy for fee-sponsored close/open/top-up transactions. */
340
- feePayerPolicy?: Partial<FeePayer.Policy> | undefined
341
- /** Optional fee token override for close transactions. */
342
- feeToken?: Address | undefined
343
- /** Last successful on-chain refresh timestamp per channel ID. */
344
- lastOnChainVerified: Map<Hex, number>
345
- /** Minimum allowed voucher delta in raw units. */
346
- minVoucherDelta: bigint
347
- /** Callback invoked after an on-chain settlement or close transaction is confirmed. */
348
- onSessionSettlement?: OnSessionSettlement | undefined
349
- /** Discriminated session credential payload to verify. */
350
- payload: SessionCredentialPayload
351
- /** Server-side channel store. */
352
- store: ChannelStore.ChannelStore
353
- }
354
-
355
- /** @deprecated Use {@link BroadcastCredentialPayloadParameters}. */
356
- export type VerifyCredentialPayloadParameters = BroadcastCredentialPayloadParameters
357
-
358
- /** Narrows shared credential broadcast inputs to one payload action. */
359
- export type BroadcastCredentialActionParameters<action extends SessionCredentialPayload['action']> =
360
- Omit<BroadcastCredentialPayloadParameters, 'payload'> & {
361
- /** Credential payload for the selected action. */
362
- payload: Extract<SessionCredentialPayload, { action: action }>
363
- }
364
-
365
- /** @deprecated Use {@link BroadcastCredentialActionParameters}. */
366
- export type VerifyCredentialActionParameters<action extends SessionCredentialPayload['action']> =
367
- BroadcastCredentialActionParameters<action>
368
-
369
- /** Inputs for broadcasting an open transaction credential and initial voucher. */
370
- export type OpenCredentialActionParameters = BroadcastCredentialActionParameters<'open'>
371
-
372
- /** Inputs for broadcasting a top-up transaction credential. */
373
- export type TopUpCredentialActionParameters = BroadcastCredentialActionParameters<'topUp'>
374
-
375
- /** Inputs for broadcasting and accepting an incremental voucher credential. */
376
- export type VoucherCredentialActionParameters = BroadcastCredentialActionParameters<'voucher'>
377
-
378
- /** Inputs for broadcasting and settling a cooperative close credential. */
379
- export type CloseCredentialActionParameters = BroadcastCredentialActionParameters<'close'>
380
-
381
- const refreshOnChainVerificationCache = {
382
- close: false,
383
- open: true,
384
- topUp: true,
385
- voucher: false,
386
- } satisfies Record<SessionCredentialPayload['action'], boolean>
387
-
388
- /** Inputs for validating a session credential without applying its state transition. */
389
- export type ValidateCredentialPayloadParameters = Pick<
390
- BroadcastCredentialPayloadParameters,
391
- | 'account'
392
- | 'channelStateTtl'
393
- | 'chainId'
394
- | 'client'
395
- | 'credentialSource'
396
- | 'escrow'
397
- | 'expectedOperator'
398
- | 'feePayer'
399
- | 'feePayerPolicy'
400
- | 'lastOnChainVerified'
401
- | 'minVoucherDelta'
402
- | 'payload'
403
- | 'store'
404
- | 'challenge'
405
- >
406
-
407
- /** Non-mutating result produced by session credential validation. */
408
- export type CredentialPayloadValidation = {
409
- /** Session action validated from the credential. */
410
- action: SessionCredentialPayload['action']
411
- /** Normalized channel ID targeted by the credential. */
412
- channelId: Hex
413
- }
414
-
415
- /** Validates all action-specific session credential invariants without changing payment state. */
416
- export async function validateCredentialPayload(
417
- parameters: ValidateCredentialPayloadParameters,
418
- ): Promise<CredentialPayloadValidation> {
419
- const { payload } = parameters
420
- switch (payload.action) {
421
- case 'open':
422
- await validateOpenCredential(parameters, payload)
423
- break
424
- case 'topUp':
425
- await validateTopUpCredential(parameters, payload)
426
- break
427
- case 'voucher':
428
- await validateVoucherCredential(parameters, payload)
429
- break
430
- case 'close':
431
- await validateCloseCredential(parameters, payload)
432
- break
433
- }
434
- return { action: payload.action, channelId: ChannelStore.normalizeChannelId(payload.channelId) }
435
- }
436
-
437
- async function validateOpenCredential(
438
- parameters: ValidateCredentialPayloadParameters,
439
- payload: Extract<SessionCredentialPayload, { action: 'open' }>,
440
- ) {
441
- const { challenge, chainId, client, escrow } = parameters
442
- const request = getChallengePaymentFields(challenge)
443
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
444
- const cumulativeAmount = uint96(BigInt(payload.cumulativeAmount))
445
- assertDescriptor(payload)
446
- if (
447
- payload.authorizedSigner !== undefined &&
448
- !isAddressEqual(payload.authorizedSigner, payload.descriptor.authorizedSigner)
449
- )
450
- throw new VerificationFailedError({
451
- reason: 'credential authorizedSigner does not match descriptor',
452
- })
453
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
454
- validateChannelDescriptor(
455
- payload.descriptor,
456
- channelId,
457
- chainId,
458
- escrow,
459
- request.recipient,
460
- request.currency,
461
- expectedOperator,
462
- )
463
- const transaction = Chain.validateOpenCredentialTransaction({
464
- challengeExpires: challenge.expires,
465
- chainId,
466
- escrowContract: escrow,
467
- expectedAuthorizedSigner: payload.descriptor.authorizedSigner,
468
- expectedChannelId: channelId,
469
- expectedCurrency: request.currency,
470
- expectedOperator,
471
- expectedPayee: request.recipient,
472
- expectedExpiringNonceHash: payload.descriptor.expiringNonceHash,
473
- expectedPayer: payload.descriptor.payer,
474
- feePayer: parameters.feePayer,
475
- feePayerPolicy: parameters.feePayerPolicy,
476
- serializedTransaction: payload.transaction,
477
- })
478
- assertOpenCredentialCoversRequest({
479
- cumulativeAmount,
480
- openDeposit: transaction.openDeposit,
481
- requestAmount: request.amount,
482
- })
483
- assertSameDescriptor(transaction.descriptor, payload.descriptor)
484
- if (cumulativeAmount > transaction.openDeposit)
485
- throw new AmountExceedsDepositError({ reason: 'voucher amount exceeds open deposit' })
486
- const valid = await Voucher.verifyVoucher(
487
- escrow,
488
- chainId,
489
- { channelId, cumulativeAmount, signature: payload.signature },
490
- authorizedSigner(transaction.descriptor),
491
- )
492
- if (!valid) throw new InvalidSignatureError({ reason: 'invalid voucher signature' })
493
- await Chain.simulateCredentialTransaction({
494
- client,
495
- feePayer: parameters.feePayer,
496
- transaction: transaction.transaction,
497
- })
498
- }
499
-
500
- async function validateTopUpCredential(
501
- parameters: ValidateCredentialPayloadParameters,
502
- payload: Extract<SessionCredentialPayload, { action: 'topUp' }>,
503
- ) {
504
- const { challenge, chainId, client, escrow, store } = parameters
505
- const request = getChallengePaymentFields(challenge)
506
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
507
- const additionalDeposit = uint96(BigInt(payload.additionalDeposit))
508
- assertDescriptor(payload)
509
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
510
- validateChannelDescriptor(
511
- payload.descriptor,
512
- channelId,
513
- chainId,
514
- escrow,
515
- request.recipient,
516
- request.currency,
517
- expectedOperator,
518
- )
519
- const channel = await ChannelStore.loadPrecompileChannel({
520
- descriptor: payload.descriptor,
521
- channelId,
522
- chainId,
523
- escrow,
524
- store,
525
- validateDescriptor: true,
526
- })
527
- const transaction = Chain.validateTopUpCredentialTransaction({
528
- additionalDeposit,
529
- challengeExpires: challenge.expires,
530
- chainId,
531
- descriptor: channel.descriptor,
532
- escrowContract: escrow,
533
- expectedChannelId: channelId,
534
- expectedCurrency: request.currency,
535
- feePayer: parameters.feePayer,
536
- feePayerPolicy: parameters.feePayerPolicy,
537
- serializedTransaction: payload.transaction,
538
- })
539
- validateChannelState(await Chain.getChannelState(client, channelId, escrow))
540
- await Chain.simulateCredentialTransaction({
541
- client,
542
- feePayer: parameters.feePayer,
543
- transaction: transaction.transaction,
544
- })
545
- }
546
-
547
- async function validateVoucherCredential(
548
- parameters: ValidateCredentialPayloadParameters,
549
- payload: Extract<SessionCredentialPayload, { action: 'voucher' }>,
550
- ) {
551
- const {
552
- challenge,
553
- chainId,
554
- client,
555
- credentialSource,
556
- escrow,
557
- minVoucherDelta,
558
- store,
559
- channelStateTtl,
560
- lastOnChainVerified,
561
- } = parameters
562
- const request = getChallengePaymentFields(challenge)
563
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
564
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
565
- const voucher = Voucher.parseVoucherFromPayload(
566
- channelId,
567
- payload.cumulativeAmount,
568
- payload.signature,
569
- )
570
- assertDescriptor(payload)
571
- validateChannelDescriptor(
572
- payload.descriptor,
573
- channelId,
574
- chainId,
575
- escrow,
576
- request.recipient,
577
- request.currency,
578
- expectedOperator,
579
- )
580
- const channel = await ChannelStore.loadPrecompileChannel({
581
- descriptor: payload.descriptor,
582
- channelId,
583
- chainId,
584
- escrow,
585
- store,
586
- validateDescriptor: true,
587
- })
588
- assertCredentialSourceCanSpend({ chainId, channel, source: credentialSource })
589
- if (channel.finalized) throw new ChannelClosedError({ reason: 'channel is finalized' })
590
- const channelState = await resolveVoucherChannelState({
591
- channel,
592
- channelId,
593
- channelStateTtl,
594
- client,
595
- escrow,
596
- lastOnChainVerified,
597
- })
598
- await ChannelStore.validateVoucher({
599
- channel,
600
- channelState,
601
- methodDetails: { chainId, escrowContract: escrow },
602
- minVoucherDelta,
603
- voucher,
604
- })
605
- }
606
-
607
- async function resolveVoucherChannelState(parameters: {
608
- channel: ChannelStore.State
609
- channelId: Hex
610
- channelStateTtl: number
611
- client: Chain.TransactionClient
612
- escrow: Address
613
- lastOnChainVerified: Map<Hex, number>
614
- }): Promise<Chain.ChannelState> {
615
- const { channel, channelId, channelStateTtl, client, escrow, lastOnChainVerified } = parameters
616
- const isStale = Date.now() - (lastOnChainVerified.get(channelId) ?? 0) > channelStateTtl
617
- const state = isStale ? await Chain.getChannelState(client, channelId, escrow) : undefined
618
- if (state) lastOnChainVerified.set(channelId, Date.now())
619
- return {
620
- deposit: state?.deposit ?? uint96(channel.deposit),
621
- settled: state?.settled ?? uint96(channel.settledOnChain),
622
- closeRequestedAt: state?.closeRequestedAt ?? Number(channel.closeRequestedAt),
623
- }
624
- }
625
-
626
- async function validateCloseCredential(
627
- parameters: ValidateCredentialPayloadParameters,
628
- payload: Extract<SessionCredentialPayload, { action: 'close' }>,
629
- ) {
630
- const { challenge, chainId, client, escrow, store } = parameters
631
- const request = getChallengePaymentFields(challenge)
632
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
633
- const cumulativeAmount = uint96(BigInt(payload.cumulativeAmount))
634
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
635
- assertDescriptor(payload)
636
- validateChannelDescriptor(
637
- payload.descriptor,
638
- channelId,
639
- chainId,
640
- escrow,
641
- request.recipient,
642
- request.currency,
643
- expectedOperator,
644
- )
645
- const channel = await ChannelStore.loadPrecompileChannel({
646
- descriptor: payload.descriptor,
647
- channelId,
648
- chainId,
649
- escrow,
650
- store,
651
- })
652
- if (channel.finalized) throw new ChannelClosedError({ reason: 'channel is already finalized' })
653
- const state = await Chain.getChannelState(client, channelId, escrow)
654
- if (state.closeRequestedAt !== 0)
655
- throw new ChannelClosedError({ reason: 'channel has a pending close request' })
656
- if (state.deposit === 0n && (cumulativeAmount !== 0n || channel.spent !== 0n))
657
- throw new ChannelClosedError({ reason: 'channel deposit is zero (settled)' })
658
- if (cumulativeAmount < channel.spent)
659
- throw new VerificationFailedError({
660
- reason: `close voucher amount must be >= ${channel.spent} (spent)`,
661
- })
662
- if (cumulativeAmount < state.settled)
663
- throw new VerificationFailedError({
664
- reason: `close voucher amount must be >= ${state.settled} (on-chain settled)`,
665
- })
666
- const valid = await Voucher.verifyVoucher(
667
- escrow,
668
- chainId,
669
- { channelId, cumulativeAmount, signature: payload.signature },
670
- channel.authorizedSigner,
671
- )
672
- if (!valid) throw new InvalidSignatureError({ reason: 'invalid voucher signature' })
673
- const captureAmount = uint96(channel.spent > state.settled ? channel.spent : state.settled)
674
- if (captureAmount > state.deposit)
675
- throw new AmountExceedsDepositError({ reason: 'close capture amount exceeds on-chain deposit' })
676
- const account = parameters.account ?? getClientAccount(client)
677
- assertSettlementSender({
678
- operation: 'close',
679
- channelId,
680
- operator: channel.operator,
681
- payee: channel.payee,
682
- sender: account?.address,
683
- })
684
- }
685
-
686
- /** Broadcasts a validated session credential payload and applies its state transition. */
687
- export async function broadcastCredentialPayload(
688
- context: BroadcastCredentialPayloadParameters,
689
- ): Promise<SessionReceipt> {
690
- const receipt = await broadcastCredentialAction(context)
691
- if (refreshOnChainVerificationCache[context.payload.action])
692
- context.lastOnChainVerified.set(receipt.channelId, Date.now())
693
- return receipt
694
- }
695
-
696
- /** @deprecated Use {@link broadcastCredentialPayload}. */
697
- export async function verifyCredentialPayload(
698
- context: VerifyCredentialPayloadParameters,
699
- ): Promise<SessionReceipt> {
700
- return broadcastCredentialPayload(context)
701
- }
702
-
703
- function broadcastCredentialAction(
704
- context: BroadcastCredentialPayloadParameters,
705
- ): Promise<SessionReceipt> {
706
- const { payload } = context
707
- switch (payload.action) {
708
- case 'open':
709
- return handleOpenCredential(actionContext(context, payload))
710
- case 'topUp':
711
- return handleTopUpCredential(actionContext(context, payload))
712
- case 'voucher':
713
- return handleVoucherCredential(actionContext(context, payload))
714
- case 'close':
715
- return handleCloseCredential(actionContext(context, payload))
716
- }
717
- }
718
-
719
- function actionContext<action extends SessionCredentialPayload['action']>(
720
- context: BroadcastCredentialPayloadParameters,
721
- payload: Extract<SessionCredentialPayload, { action: action }>,
722
- ): BroadcastCredentialActionParameters<action> {
723
- return { ...context, payload }
724
- }
725
-
726
- async function handleOpenCredential(
727
- parameters: OpenCredentialActionParameters,
728
- ): Promise<SessionReceipt> {
729
- const { store, client, challenge, payload, chainId, escrow } = parameters
730
- const request = getChallengePaymentFields(challenge)
731
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
732
- const cumulativeAmount = uint96(BigInt(payload.cumulativeAmount))
733
- assertDescriptor(payload)
734
- if (
735
- payload.authorizedSigner !== undefined &&
736
- !isAddressEqual(payload.authorizedSigner, payload.descriptor.authorizedSigner)
737
- )
738
- throw new VerificationFailedError({
739
- reason: 'credential authorizedSigner does not match descriptor',
740
- })
741
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
742
- validateChannelDescriptor(
743
- payload.descriptor,
744
- channelId,
745
- chainId,
746
- escrow,
747
- request.recipient,
748
- request.currency,
749
- expectedOperator,
750
- )
751
-
752
- const result = await Chain.broadcastOpenTransaction({
753
- challengeExpires: challenge.expires,
754
- chainId,
755
- client,
756
- escrowContract: escrow,
757
- expectedAuthorizedSigner: payload.descriptor.authorizedSigner,
758
- expectedChannelId: channelId,
759
- expectedCurrency: request.currency,
760
- expectedOperator,
761
- expectedPayee: request.recipient,
762
- expectedExpiringNonceHash: payload.descriptor.expiringNonceHash,
763
- expectedPayer: payload.descriptor.payer,
764
- feePayer: parameters.feePayer,
765
- feePayerPolicy: parameters.feePayerPolicy,
766
- serializedTransaction: payload.transaction,
767
- async beforeBroadcast(prepared) {
768
- assertOpenCredentialCoversRequest({
769
- cumulativeAmount,
770
- openDeposit: prepared.openDeposit,
771
- requestAmount: request.amount,
772
- })
773
- assertSameDescriptor(prepared.descriptor, payload.descriptor)
774
- if (cumulativeAmount > prepared.openDeposit)
775
- throw new AmountExceedsDepositError({ reason: 'voucher amount exceeds open deposit' })
776
- const valid = await Voucher.verifyVoucher(
777
- escrow,
778
- chainId,
779
- { channelId, cumulativeAmount: cumulativeAmount, signature: payload.signature },
780
- authorizedSigner(prepared.descriptor),
781
- )
782
- if (!valid) throw new InvalidSignatureError({ reason: 'invalid voucher signature' })
783
- },
784
- })
785
- const { descriptor, state } = result
786
- assertSameDescriptor(descriptor, payload.descriptor)
787
- validateChannelState(state, request.amount)
788
-
789
- const updated = await store.updateChannel(channelId, (current) =>
790
- ChannelStore.openChannelState({
791
- authorizedSigner: authorizedSigner(descriptor),
792
- chainId,
793
- channelId,
794
- current,
795
- descriptor,
796
- escrow,
797
- expiringNonceHash: result.expiringNonceHash,
798
- cumulativeAmount,
799
- signature: payload.signature,
800
- state,
801
- }),
802
- )
803
- if (!updated) throw new VerificationFailedError({ reason: 'failed to create channel' })
804
- return createSessionReceipt({
805
- challengeId: challenge.id,
806
- channelId,
807
- acceptedCumulative: updated.highestVoucherAmount,
808
- spent: updated.spent,
809
- units: updated.units,
810
- txHash: result.txHash,
811
- })
812
- }
813
-
814
- async function handleTopUpCredential(
815
- parameters: TopUpCredentialActionParameters,
816
- ): Promise<SessionReceipt> {
817
- const { store, client, challenge, payload, chainId, escrow } = parameters
818
- const request = getChallengePaymentFields(challenge)
819
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
820
- const additionalDeposit = uint96(BigInt(payload.additionalDeposit))
821
- assertDescriptor(payload)
822
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
823
- validateChannelDescriptor(
824
- payload.descriptor,
825
- channelId,
826
- chainId,
827
- escrow,
828
- request.recipient,
829
- request.currency,
830
- expectedOperator,
831
- )
832
- const channel = await ChannelStore.loadPrecompileChannel({
833
- descriptor: payload.descriptor,
834
- channelId,
835
- chainId,
836
- escrow,
837
- store,
838
- validateDescriptor: true,
839
- })
840
- const result = await Chain.broadcastTopUpTransaction({
841
- additionalDeposit,
842
- challengeExpires: challenge.expires,
843
- chainId,
844
- client,
845
- descriptor: channel.descriptor,
846
- escrowContract: escrow,
847
- expectedChannelId: channelId,
848
- expectedCurrency: request.currency,
849
- feePayer: parameters.feePayer,
850
- feePayerPolicy: parameters.feePayerPolicy,
851
- serializedTransaction: payload.transaction,
852
- })
853
- const { state } = result
854
- validateChannelState(state)
855
-
856
- const updated = await store.updateChannel(channelId, (current) =>
857
- ChannelStore.topUpChannelState({ current, state }),
858
- )
859
- return createSessionReceipt({
860
- challengeId: challenge.id,
861
- channelId,
862
- acceptedCumulative: updated?.highestVoucherAmount ?? channel.highestVoucherAmount,
863
- spent: updated?.spent ?? channel.spent,
864
- units: updated?.units ?? channel.units,
865
- txHash: result.txHash,
866
- })
867
- }
868
-
869
- async function handleVoucherCredential(
870
- parameters: VoucherCredentialActionParameters,
871
- ): Promise<SessionReceipt> {
872
- const {
873
- store,
874
- client,
875
- challenge,
876
- credentialSource,
877
- payload,
878
- chainId,
879
- escrow,
880
- minVoucherDelta,
881
- channelStateTtl,
882
- lastOnChainVerified,
883
- } = parameters
884
- const request = getChallengePaymentFields(challenge)
885
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
886
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
887
- const voucher = Voucher.parseVoucherFromPayload(
888
- channelId,
889
- payload.cumulativeAmount,
890
- payload.signature,
891
- )
892
- assertDescriptor(payload)
893
- validateChannelDescriptor(
894
- payload.descriptor,
895
- channelId,
896
- chainId,
897
- escrow,
898
- request.recipient,
899
- request.currency,
900
- expectedOperator,
901
- )
902
- const channel = await ChannelStore.loadPrecompileChannel({
903
- descriptor: payload.descriptor,
904
- channelId,
905
- chainId,
906
- escrow,
907
- store,
908
- validateDescriptor: true,
909
- })
910
- assertCredentialSourceCanSpend({ chainId, channel, source: credentialSource })
911
- if (channel.finalized) throw new ChannelClosedError({ reason: 'channel is finalized' })
912
- const channelState = await resolveVoucherChannelState({
913
- channel,
914
- channelId,
915
- channelStateTtl,
916
- client,
917
- escrow,
918
- lastOnChainVerified,
919
- })
920
- if (channelState.closeRequestedAt !== 0) {
921
- await store.updateChannel(channelId, (current) =>
922
- current
923
- ? {
924
- ...current,
925
- closeRequestedAt:
926
- BigInt(channelState.closeRequestedAt) > current.closeRequestedAt
927
- ? BigInt(channelState.closeRequestedAt)
928
- : current.closeRequestedAt,
929
- }
930
- : current,
931
- )
932
- }
933
- return ChannelStore.verifyAndAcceptVoucher({
934
- store,
935
- minVoucherDelta,
936
- challenge,
937
- channel,
938
- voucher,
939
- channelState,
940
- methodDetails: { chainId, escrowContract: escrow },
941
- })
942
- }
943
-
944
- async function handleCloseCredential(
945
- parameters: CloseCredentialActionParameters,
946
- ): Promise<SessionReceipt> {
947
- const { store, client, challenge, payload, chainId, escrow } = parameters
948
- const request = getChallengePaymentFields(challenge)
949
- const expectedOperator = parameters.expectedOperator ?? zeroAddress
950
- const cumulativeAmount = uint96(BigInt(payload.cumulativeAmount))
951
- const channelId = ChannelStore.normalizeChannelId(payload.channelId)
952
- assertDescriptor(payload)
953
- validateChannelDescriptor(
954
- payload.descriptor,
955
- channelId,
956
- chainId,
957
- escrow,
958
- request.recipient,
959
- request.currency,
960
- expectedOperator,
961
- )
962
- const channel = await ChannelStore.loadPrecompileChannel({
963
- descriptor: payload.descriptor,
964
- channelId,
965
- chainId,
966
- escrow,
967
- store,
968
- })
969
- if (channel.finalized) throw new ChannelClosedError({ reason: 'channel is already finalized' })
970
- const state = await Chain.getChannelState(client, channelId, escrow)
971
- if (state.closeRequestedAt !== 0)
972
- throw new ChannelClosedError({ reason: 'channel has a pending close request' })
973
- if (state.deposit === 0n && (cumulativeAmount !== 0n || channel.spent !== 0n))
974
- throw new ChannelClosedError({ reason: 'channel deposit is zero (settled)' })
975
- if (cumulativeAmount < channel.spent)
976
- throw new VerificationFailedError({
977
- reason: `close voucher amount must be >= ${channel.spent} (spent)`,
978
- })
979
- if (cumulativeAmount < state.settled)
980
- throw new VerificationFailedError({
981
- reason: `close voucher amount must be >= ${state.settled} (on-chain settled)`,
982
- })
983
- const valid = await Voucher.verifyVoucher(
984
- escrow,
985
- chainId,
986
- { channelId, cumulativeAmount: cumulativeAmount, signature: payload.signature },
987
- channel.authorizedSigner,
988
- )
989
- if (!valid) throw new InvalidSignatureError({ reason: 'invalid voucher signature' })
990
- let captureAmount = uint96(channel.spent > state.settled ? channel.spent : state.settled)
991
- if (captureAmount > state.deposit)
992
- throw new AmountExceedsDepositError({ reason: 'close capture amount exceeds on-chain deposit' })
993
- const pendingCloseStartedAt = BigInt(Math.floor(Date.now() / 1000) || 1)
994
- const previousCloseRequestedAt = channel.closeRequestedAt
995
- let pendingCloseMarked = false
996
- await store.updateChannel(channelId, (current) => {
997
- const next = ChannelStore.markPendingClose({
998
- closeRequestedAt: pendingCloseStartedAt,
999
- cumulativeAmount,
1000
- current,
1001
- onChainDeposit: state.deposit,
1002
- onChainSettled: state.settled,
1003
- })
1004
- if (next.state) {
1005
- captureAmount = next.captureAmount
1006
- pendingCloseMarked = true
1007
- }
1008
- return next.state
1009
- })
1010
- const account = parameters.account ?? getClientAccount(client)
1011
- let txHash: Hex | undefined
1012
- let receipt: Awaited<ReturnType<typeof Chain.waitForSuccessfulReceipt>>
1013
- try {
1014
- assertSettlementSender({
1015
- operation: 'close',
1016
- channelId,
1017
- operator: channel.operator,
1018
- payee: channel.payee,
1019
- sender: account?.address,
1020
- })
1021
- txHash = await Chain.closeOnChain(
1022
- client,
1023
- channel.descriptor,
1024
- cumulativeAmount,
1025
- captureAmount,
1026
- payload.signature,
1027
- escrow,
1028
- account
1029
- ? {
1030
- account,
1031
- ...(typeof parameters.feePayer === 'object' ? { feePayer: parameters.feePayer } : {}),
1032
- ...(parameters.feePayerPolicy ? { feePayerPolicy: parameters.feePayerPolicy } : {}),
1033
- ...(parameters.feeToken ? { feeToken: parameters.feeToken } : {}),
1034
- candidateFeeTokens: [channel.token],
1035
- }
1036
- : undefined,
1037
- )
1038
- receipt = await Chain.waitForSuccessfulReceipt(client, txHash)
1039
- } catch (error) {
1040
- if (pendingCloseMarked) {
1041
- await store.updateChannel(channelId, (current) =>
1042
- current && current.closeRequestedAt === pendingCloseStartedAt
1043
- ? { ...current, closeRequestedAt: previousCloseRequestedAt }
1044
- : current,
1045
- )
1046
- }
1047
- throw error
1048
- }
1049
- const closed = readChannelClosedReceiptFields(
1050
- Chain.getChannelEvent(receipt, 'ChannelClosed', channelId),
1051
- )
1052
- const { refundedToPayer, settledToPayee } = closed
1053
- if (settledToPayee > captureAmount || settledToPayee + refundedToPayer > state.deposit)
1054
- throw new VerificationFailedError({ reason: 'ChannelClosed amounts do not match state' })
1055
- const updated = await store.updateChannel(channelId, (current) =>
1056
- ChannelStore.finalizeClosedChannelState({
1057
- captureAmount,
1058
- channelId,
1059
- cumulativeAmount,
1060
- current,
1061
- signature: payload.signature,
1062
- }),
1063
- )
1064
- if (parameters.onSessionSettlement && txHash) {
1065
- try {
1066
- await parameters.onSessionSettlement(
1067
- Object.freeze({
1068
- txHash,
1069
- channelId,
1070
- trigger: 'close' as const,
1071
- amount: settledToPayee,
1072
- delta: settledToPayee - state.settled,
1073
- }),
1074
- )
1075
- } catch {
1076
- // Errors are isolated — observers cannot break the settlement flow.
1077
- }
1078
- }
1079
- return createSessionReceipt({
1080
- challengeId: challenge.id,
1081
- channelId,
1082
- acceptedCumulative: cumulativeAmount,
1083
- spent: updated?.spent ?? channel.spent,
1084
- units: updated?.units ?? channel.units,
1085
- txHash,
1086
- })
1087
- }