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,1349 +0,0 @@
1
- import {
2
- type Address,
3
- createClient,
4
- custom,
5
- encodeFunctionData,
6
- erc20Abi,
7
- type Hex,
8
- zeroAddress,
9
- } from 'viem'
10
- import { prepareTransactionRequest, signTransaction, waitForTransactionReceipt } from 'viem/actions'
11
- import { Addresses, Transaction } from 'viem/tempo'
12
- import { beforeAll, describe, expect, test } from 'vp/test'
13
- import { tempoNetwork } from '~test/config.js'
14
- import {
15
- closeChannelOnChain,
16
- deployEscrow,
17
- openChannel,
18
- signOpenChannel,
19
- signTopUpChannel,
20
- topUpChannel,
21
- } from '~test/tempo/legacy/session.js'
22
- import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
23
-
24
- import {
25
- broadcastOpenTransaction,
26
- broadcastTopUpTransaction,
27
- closeOnChain,
28
- escrowAbi,
29
- getOnChainChannel,
30
- settleOnChain,
31
- verifyTopUpTransaction,
32
- } from './Chain.js'
33
- import * as Channel from './Channel.js'
34
- import { signVoucher } from './Voucher.js'
35
-
36
- const UINT128_MAX = 2n ** 128n - 1n
37
- const isLocalnet = tempoNetwork === 'localnet'
38
-
39
- describe('assertUint128 (via settleOnChain / closeOnChain)', () => {
40
- const mockClient = { chain: { id: 42431 } } as any
41
- const dummyEscrow = '0x0000000000000000000000000000000000000001' as Address
42
- const dummyChannelId = '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex
43
-
44
- test('settleOnChain rejects amounts exceeding uint128', async () => {
45
- await expect(
46
- settleOnChain(mockClient, dummyEscrow, {
47
- channelId: dummyChannelId,
48
- cumulativeAmount: UINT128_MAX + 1n,
49
- signature: '0xsig' as Hex,
50
- }),
51
- ).rejects.toThrow('cumulativeAmount exceeds uint128 range')
52
- })
53
-
54
- test('settleOnChain rejects negative amounts', async () => {
55
- await expect(
56
- settleOnChain(mockClient, dummyEscrow, {
57
- channelId: dummyChannelId,
58
- cumulativeAmount: -1n,
59
- signature: '0xsig' as Hex,
60
- }),
61
- ).rejects.toThrow('cumulativeAmount exceeds uint128 range')
62
- })
63
-
64
- test('closeOnChain rejects amounts exceeding uint128', async () => {
65
- await expect(
66
- closeOnChain(mockClient, dummyEscrow, {
67
- channelId: dummyChannelId,
68
- cumulativeAmount: UINT128_MAX + 1n,
69
- signature: '0xsig' as Hex,
70
- }),
71
- ).rejects.toThrow('cumulativeAmount exceeds uint128 range')
72
- })
73
-
74
- test('closeOnChain throws when no account available', async () => {
75
- await expect(
76
- closeOnChain(mockClient, dummyEscrow, {
77
- channelId: dummyChannelId,
78
- cumulativeAmount: 1_000_000n,
79
- signature: '0xsig' as Hex,
80
- }),
81
- ).rejects.toThrow('no account available')
82
- })
83
- })
84
-
85
- describe.runIf(isLocalnet)('on-chain', () => {
86
- const payer = accounts[2]
87
- const recipient = accounts[0].address
88
- const currency = asset
89
-
90
- let escrowContract: Address
91
- let saltCounter = 0
92
-
93
- beforeAll(async () => {
94
- escrowContract = await deployEscrow()
95
- await fundAccount({ address: payer.address, token: Addresses.pathUsd })
96
- await fundAccount({ address: payer.address, token: currency })
97
- })
98
-
99
- function nextSalt(): Hex {
100
- saltCounter++
101
- return `0x${saltCounter.toString(16).padStart(64, '0')}` as Hex
102
- }
103
-
104
- describe('getOnChainChannel', () => {
105
- test('reads channel state after opening', async () => {
106
- const salt = nextSalt()
107
- const deposit = 10_000_000n
108
-
109
- const { channelId } = await openChannel({
110
- escrow: escrowContract,
111
- payer,
112
- payee: recipient,
113
- token: currency,
114
- deposit,
115
- salt,
116
- })
117
-
118
- const channel = await getOnChainChannel(client, escrowContract, channelId)
119
-
120
- expect(channel.deposit).toBe(deposit)
121
- expect(channel.finalized).toBe(false)
122
- expect(channel.settled).toBe(0n)
123
- })
124
- })
125
-
126
- describe('verifyTopUpTransaction', () => {
127
- test('rejects when channel is finalized', async () => {
128
- const salt = nextSalt()
129
- const deposit = 5_000_000n
130
-
131
- const { channelId } = await openChannel({
132
- escrow: escrowContract,
133
- payer,
134
- payee: recipient,
135
- token: currency,
136
- deposit,
137
- salt,
138
- })
139
-
140
- const signature = await signVoucher(
141
- client,
142
- payer,
143
- { channelId, cumulativeAmount: 0n },
144
- escrowContract,
145
- chain.id,
146
- )
147
-
148
- await closeChannelOnChain({
149
- escrow: escrowContract,
150
- payee: accounts[0],
151
- channelId,
152
- cumulativeAmount: 0n,
153
- signature,
154
- })
155
-
156
- await expect(verifyTopUpTransaction(client, escrowContract, channelId, 0n)).rejects.toThrow(
157
- 'channel is finalized on-chain',
158
- )
159
- })
160
-
161
- test('rejects when deposit did not increase', async () => {
162
- const salt = nextSalt()
163
- const deposit = 5_000_000n
164
-
165
- const { channelId } = await openChannel({
166
- escrow: escrowContract,
167
- payer,
168
- payee: recipient,
169
- token: currency,
170
- deposit,
171
- salt,
172
- })
173
-
174
- await expect(
175
- verifyTopUpTransaction(client, escrowContract, channelId, deposit),
176
- ).rejects.toThrow('channel deposit did not increase')
177
- })
178
-
179
- test('succeeds when deposit increased via topUp', async () => {
180
- const salt = nextSalt()
181
- const initialDeposit = 5_000_000n
182
- const topUpAmount = 3_000_000n
183
-
184
- const { channelId } = await openChannel({
185
- escrow: escrowContract,
186
- payer,
187
- payee: recipient,
188
- token: currency,
189
- deposit: initialDeposit,
190
- salt,
191
- })
192
-
193
- await topUpChannel({
194
- escrow: escrowContract,
195
- payer,
196
- channelId,
197
- token: currency,
198
- amount: topUpAmount,
199
- })
200
-
201
- const result = await verifyTopUpTransaction(client, escrowContract, channelId, initialDeposit)
202
-
203
- expect(result.deposit).toBe(initialDeposit + topUpAmount)
204
- })
205
- })
206
-
207
- describe('broadcastOpenTransaction', () => {
208
- test('rejects when payee does not match recipient', async () => {
209
- const wrongPayee = accounts[3].address
210
- const salt = nextSalt()
211
-
212
- const { channelId, serializedTransaction } = await signOpenChannel({
213
- escrow: escrowContract,
214
- payer,
215
- payee: wrongPayee,
216
- token: currency,
217
- deposit: 5_000_000n,
218
- salt,
219
- })
220
-
221
- await expect(
222
- broadcastOpenTransaction({
223
- client,
224
- serializedTransaction,
225
- escrowContract,
226
- channelId,
227
- recipient,
228
- currency,
229
- }),
230
- ).rejects.toThrow('open transaction payee does not match server recipient')
231
- })
232
-
233
- test('rejects when token does not match currency', async () => {
234
- const wrongToken = Addresses.pathUsd
235
- const salt = nextSalt()
236
-
237
- const { channelId, serializedTransaction } = await signOpenChannel({
238
- escrow: escrowContract,
239
- payer,
240
- payee: recipient,
241
- token: wrongToken,
242
- deposit: 5_000_000n,
243
- salt,
244
- })
245
-
246
- await expect(
247
- broadcastOpenTransaction({
248
- client,
249
- serializedTransaction,
250
- escrowContract,
251
- channelId,
252
- recipient,
253
- currency,
254
- }),
255
- ).rejects.toThrow('open transaction token does not match server currency')
256
- })
257
-
258
- test('rejects when transaction channelId does not match claimed channelId', async () => {
259
- const salt = nextSalt()
260
-
261
- const { serializedTransaction } = await signOpenChannel({
262
- escrow: escrowContract,
263
- payer,
264
- payee: recipient,
265
- token: currency,
266
- deposit: 5_000_000n,
267
- salt,
268
- })
269
-
270
- const fakeChannelId =
271
- '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex
272
-
273
- await expect(
274
- broadcastOpenTransaction({
275
- client,
276
- serializedTransaction,
277
- escrowContract,
278
- channelId: fakeChannelId,
279
- recipient,
280
- currency,
281
- }),
282
- ).rejects.toThrow('open transaction does not match claimed channelId')
283
- })
284
-
285
- test('successful broadcast returns txHash and onChain state', async () => {
286
- const salt = nextSalt()
287
- const deposit = 10_000_000n
288
-
289
- const { channelId, serializedTransaction } = await signOpenChannel({
290
- escrow: escrowContract,
291
- payer,
292
- payee: recipient,
293
- token: currency,
294
- deposit,
295
- salt,
296
- })
297
-
298
- const result = await broadcastOpenTransaction({
299
- client,
300
- serializedTransaction,
301
- escrowContract,
302
- channelId,
303
- recipient,
304
- currency,
305
- })
306
-
307
- expect(result.txHash).toBeDefined()
308
- expect(result.onChain.deposit).toBe(deposit)
309
- expect(result.onChain.finalized).toBe(false)
310
- })
311
-
312
- test('fee-payer relay: rejects unauthorized open calls', async () => {
313
- const salt = nextSalt()
314
- const deposit = 5_000_000n
315
-
316
- const { channelId, serializedTransaction } = await signOpenChannel({
317
- escrow: escrowContract,
318
- payer,
319
- payee: recipient,
320
- token: currency,
321
- deposit,
322
- salt,
323
- })
324
-
325
- const transferData = encodeFunctionData({
326
- abi: erc20Abi,
327
- functionName: 'transfer',
328
- args: [recipient, deposit],
329
- })
330
-
331
- const deserialized = Transaction.deserialize(
332
- serializedTransaction as Transaction.TransactionSerializedTempo,
333
- )
334
-
335
- const tampered = (await Transaction.serialize({
336
- ...deserialized,
337
- calls: [
338
- ...((deserialized as any).calls ?? []),
339
- { to: '0x8888888888888888888888888888888888888888' as Address, data: transferData },
340
- ],
341
- } as any)) as unknown as Hex
342
-
343
- await expect(
344
- broadcastOpenTransaction({
345
- client,
346
- serializedTransaction: tampered,
347
- escrowContract,
348
- channelId,
349
- recipient,
350
- currency,
351
- isSponsored: true,
352
- }),
353
- ).rejects.toThrow('fee-sponsored open transaction contains an unauthorized call')
354
- })
355
-
356
- test('fee-payer: rejects unsigned transaction', async () => {
357
- const salt = nextSalt()
358
- const deposit = 5_000_000n
359
-
360
- const { channelId, serializedTransaction } = await signOpenChannel({
361
- escrow: escrowContract,
362
- payer,
363
- payee: recipient,
364
- token: currency,
365
- deposit,
366
- salt,
367
- })
368
-
369
- // Strip the sender signature to simulate the POC attack
370
- const deserialized = Transaction.deserialize(
371
- serializedTransaction as Transaction.TransactionSerializedTempo,
372
- )
373
- const unsigned = await Transaction.serialize({
374
- ...deserialized,
375
- signature: undefined,
376
- from: undefined,
377
- })
378
-
379
- await expect(
380
- broadcastOpenTransaction({
381
- client,
382
- serializedTransaction: unsigned,
383
- escrowContract,
384
- channelId,
385
- recipient,
386
- currency,
387
- feePayer: accounts[0],
388
- }),
389
- ).rejects.toThrow('Transaction must be signed by the sender before fee payer co-signing')
390
- })
391
-
392
- test('fee-payer: rejects non-Tempo transaction', async () => {
393
- const fakeEip1559 =
394
- '0x02f8650182a5bf843b9aca00843b9aca008252089400000000000000000000000000000000000000008080c001a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000' as Hex
395
-
396
- await expect(
397
- broadcastOpenTransaction({
398
- client,
399
- serializedTransaction: fakeEip1559,
400
- escrowContract,
401
- channelId: '0x0000000000000000000000000000000000000000000000000000000000000000' as Hex,
402
- recipient,
403
- currency,
404
- feePayer: accounts[0],
405
- }),
406
- ).rejects.toThrow('Only Tempo (0x76/0x78) transactions are supported')
407
- })
408
-
409
- test('fee-payer: rejects transactions whose gas budget exceeds sponsor policy', async () => {
410
- const salt = nextSalt()
411
- const deposit = 5_000_000n
412
-
413
- const approveData = encodeFunctionData({
414
- abi: erc20Abi,
415
- functionName: 'approve',
416
- args: [escrowContract, deposit],
417
- })
418
- const openData = encodeFunctionData({
419
- abi: escrowAbi,
420
- functionName: 'open',
421
- args: [recipient, currency, deposit, salt, zeroAddress],
422
- })
423
-
424
- const channelId = Channel.computeId({
425
- authorizedSigner: zeroAddress,
426
- chainId: chain.id,
427
- escrowContract,
428
- payee: recipient,
429
- payer: payer.address,
430
- salt,
431
- token: currency,
432
- }) as Hex
433
-
434
- const prepared = await prepareTransactionRequest(client, {
435
- account: payer,
436
- calls: [
437
- { to: currency, data: approveData },
438
- { to: escrowContract, data: openData },
439
- ],
440
- feePayer: true,
441
- feeToken: currency,
442
- } as never)
443
- prepared.gas = 2_000_001n
444
-
445
- const serializedTransaction = await signTransaction(client, prepared as never)
446
-
447
- await expect(
448
- broadcastOpenTransaction({
449
- client,
450
- serializedTransaction: serializedTransaction as Hex,
451
- escrowContract,
452
- channelId,
453
- recipient,
454
- currency,
455
- feePayer: accounts[0],
456
- }),
457
- ).rejects.toThrow('gas exceeds sponsor policy')
458
- })
459
-
460
- test('fee-payer: simulates open before broadcasting and recovers duplicate opens', async () => {
461
- const rpcMethods: string[] = []
462
- const interceptingClient = createClient({
463
- account: accounts[0],
464
- chain: client.chain,
465
- transport: custom({
466
- async request(args: any) {
467
- rpcMethods.push(args.method)
468
- return client.transport.request(args)
469
- },
470
- }),
471
- })
472
-
473
- const salt = nextSalt()
474
- const deposit = 5_000_000n
475
- const approveData = encodeFunctionData({
476
- abi: erc20Abi,
477
- functionName: 'approve',
478
- args: [escrowContract, deposit],
479
- })
480
- const openData = encodeFunctionData({
481
- abi: escrowAbi,
482
- functionName: 'open',
483
- args: [recipient, currency, deposit, salt, zeroAddress],
484
- })
485
- const channelId = Channel.computeId({
486
- authorizedSigner: zeroAddress,
487
- chainId: chain.id,
488
- escrowContract,
489
- payee: recipient,
490
- payer: payer.address,
491
- salt,
492
- token: currency,
493
- }) as Hex
494
- const prepared = await prepareTransactionRequest(client, {
495
- account: payer,
496
- calls: [
497
- { to: currency, data: approveData },
498
- { to: escrowContract, data: openData },
499
- ],
500
- feeToken: currency,
501
- nonceKey: 'expiring',
502
- validBefore: Math.floor(Date.now() / 1_000) + 25,
503
- } as never)
504
- prepared.gas = (prepared.gas ?? 0n) + 5_000n
505
- ;(prepared as Record<string, unknown>).feePayer = true
506
- const serializedTransaction = await signTransaction(client, prepared as never)
507
-
508
- await broadcastOpenTransaction({
509
- client: interceptingClient,
510
- serializedTransaction,
511
- escrowContract,
512
- channelId,
513
- recipient,
514
- currency,
515
- feePayer: accounts[0],
516
- })
517
-
518
- const broadcastIndex = rpcMethods.indexOf('eth_sendRawTransactionSync')
519
- const simulationIndex = rpcMethods.indexOf('eth_call')
520
-
521
- expect(broadcastIndex).toBeGreaterThan(-1)
522
- expect(simulationIndex).toBeGreaterThan(-1)
523
- expect(simulationIndex).toBeLessThan(broadcastIndex)
524
- expect(
525
- rpcMethods.slice(0, broadcastIndex).filter((method) => method === 'eth_call'),
526
- ).toHaveLength(2)
527
-
528
- const recovered = await broadcastOpenTransaction({
529
- client: interceptingClient,
530
- serializedTransaction,
531
- escrowContract,
532
- channelId,
533
- recipient,
534
- currency,
535
- feePayer: accounts[0],
536
- })
537
-
538
- expect(recovered.txHash).toBeUndefined()
539
- expect(recovered.onChain.deposit).toBe(deposit)
540
- })
541
-
542
- test('fee-payer: rejects smuggled second open call', async () => {
543
- const deposit = 5_000_000n
544
- const smuggledDeposit = 7_000_000n
545
- const salt = nextSalt()
546
- const smuggledSalt = nextSalt()
547
-
548
- const approveData = encodeFunctionData({
549
- abi: erc20Abi,
550
- functionName: 'approve',
551
- args: [escrowContract, deposit + smuggledDeposit],
552
- })
553
- const openData = encodeFunctionData({
554
- abi: escrowAbi,
555
- functionName: 'open',
556
- args: [recipient, currency, deposit, salt, zeroAddress],
557
- })
558
- const smuggledOpenData = encodeFunctionData({
559
- abi: escrowAbi,
560
- functionName: 'open',
561
- args: [accounts[3].address, currency, smuggledDeposit, smuggledSalt, zeroAddress],
562
- })
563
-
564
- const channelId = Channel.computeId({
565
- authorizedSigner: zeroAddress,
566
- chainId: chain.id,
567
- escrowContract,
568
- payee: recipient,
569
- payer: payer.address,
570
- salt,
571
- token: currency,
572
- }) as Hex
573
-
574
- const prepared = await prepareTransactionRequest(client, {
575
- account: payer,
576
- calls: [
577
- { to: currency, data: approveData },
578
- { to: escrowContract, data: openData },
579
- { to: escrowContract, data: smuggledOpenData },
580
- ],
581
- feeToken: currency,
582
- nonceKey: 'expiring',
583
- validBefore: Math.floor(Date.now() / 1_000) + 25,
584
- } as never)
585
- prepared.gas = (prepared.gas ?? 0n) + 5_000n
586
- ;(prepared as Record<string, unknown>).feePayer = true
587
-
588
- const serializedTransaction = await signTransaction(client, prepared as never)
589
-
590
- await expect(
591
- broadcastOpenTransaction({
592
- client,
593
- serializedTransaction: serializedTransaction as Hex,
594
- escrowContract,
595
- channelId,
596
- recipient,
597
- currency,
598
- feePayer: accounts[0],
599
- }),
600
- ).rejects.toThrow('fee-sponsored open transaction contains a smuggled call')
601
- })
602
-
603
- test('duplicate broadcast returns fallback with txHash undefined', async () => {
604
- const salt = nextSalt()
605
- const deposit = 5_000_000n
606
-
607
- const { channelId, serializedTransaction } = await signOpenChannel({
608
- escrow: escrowContract,
609
- payer,
610
- payee: recipient,
611
- token: currency,
612
- deposit,
613
- salt,
614
- })
615
-
616
- await broadcastOpenTransaction({
617
- client,
618
- serializedTransaction,
619
- escrowContract,
620
- channelId,
621
- recipient,
622
- currency,
623
- })
624
-
625
- const result = await broadcastOpenTransaction({
626
- client,
627
- serializedTransaction,
628
- escrowContract,
629
- channelId,
630
- recipient,
631
- currency,
632
- })
633
-
634
- expect(result.txHash).toBeUndefined()
635
- expect(result.onChain.deposit).toBe(deposit)
636
- })
637
-
638
- test('waitForConfirmation: false returns derived on-chain state', async () => {
639
- const rpcMethods: string[] = []
640
- const interceptingClient = createClient({
641
- account: accounts[0],
642
- chain: client.chain,
643
- transport: custom({
644
- async request(args: any) {
645
- rpcMethods.push(args.method)
646
- return client.transport.request(args)
647
- },
648
- }),
649
- })
650
- const salt = nextSalt()
651
- const deposit = 10_000_000n
652
-
653
- const { channelId, serializedTransaction } = await signOpenChannel({
654
- escrow: escrowContract,
655
- payer,
656
- payee: recipient,
657
- token: currency,
658
- deposit,
659
- salt,
660
- })
661
-
662
- const result = await broadcastOpenTransaction({
663
- client: interceptingClient,
664
- serializedTransaction,
665
- escrowContract,
666
- channelId,
667
- recipient,
668
- currency,
669
- waitForConfirmation: false,
670
- })
671
-
672
- expect(result.txHash).toBeDefined()
673
- expect(result.onChain.payer.toLowerCase()).toBe(payer.address.toLowerCase())
674
- expect(result.onChain.payee.toLowerCase()).toBe(recipient.toLowerCase())
675
- expect(result.onChain.token.toLowerCase()).toBe(currency.toLowerCase())
676
- expect(result.onChain.deposit).toBe(deposit)
677
- expect(result.onChain.settled).toBe(0n)
678
- expect(result.onChain.finalized).toBe(false)
679
- const simulationIndex = rpcMethods.indexOf('eth_call')
680
- const broadcastIndex = rpcMethods.indexOf('eth_sendRawTransaction')
681
- expect(simulationIndex).toBeGreaterThan(-1)
682
- expect(broadcastIndex).toBeGreaterThan(-1)
683
- expect(simulationIndex).toBeLessThan(broadcastIndex)
684
- })
685
-
686
- test('fee-payer relay: optimistic open simulates before broadcasting', async () => {
687
- const rpcMethods: string[] = []
688
- const interceptingClient = createClient({
689
- account: accounts[0],
690
- chain: client.chain,
691
- transport: custom({
692
- async request(args: any) {
693
- rpcMethods.push(args.method)
694
- return client.transport.request(args)
695
- },
696
- }),
697
- })
698
- const salt = nextSalt()
699
- const deposit = 10_000_000n
700
- const { channelId, serializedTransaction } = await signOpenChannel({
701
- escrow: escrowContract,
702
- payer,
703
- payee: recipient,
704
- token: currency,
705
- deposit,
706
- salt,
707
- })
708
-
709
- await broadcastOpenTransaction({
710
- client: interceptingClient,
711
- serializedTransaction,
712
- escrowContract,
713
- channelId,
714
- recipient,
715
- currency,
716
- isSponsored: true,
717
- waitForConfirmation: false,
718
- })
719
-
720
- const simulationIndex = rpcMethods.indexOf('eth_call')
721
- const broadcastIndex = rpcMethods.indexOf('eth_sendRawTransaction')
722
- expect(simulationIndex).toBeGreaterThan(-1)
723
- expect(broadcastIndex).toBeGreaterThan(-1)
724
- expect(simulationIndex).toBeLessThan(broadcastIndex)
725
- })
726
- })
727
-
728
- describe('broadcastTopUpTransaction', () => {
729
- test('rejects channelId mismatch', async () => {
730
- const salt = nextSalt()
731
- const deposit = 5_000_000n
732
- const topUpAmount = 3_000_000n
733
-
734
- const { channelId } = await openChannel({
735
- escrow: escrowContract,
736
- payer,
737
- payee: recipient,
738
- token: currency,
739
- deposit,
740
- salt,
741
- })
742
-
743
- const { serializedTransaction } = await signTopUpChannel({
744
- escrow: escrowContract,
745
- payer,
746
- channelId,
747
- token: currency,
748
- amount: topUpAmount,
749
- })
750
-
751
- const wrongChannelId =
752
- '0x0000000000000000000000000000000000000000000000000000000000000099' as Hex
753
-
754
- await expect(
755
- broadcastTopUpTransaction({
756
- client,
757
- serializedTransaction,
758
- escrowContract,
759
- channelId: wrongChannelId,
760
- currency: asset,
761
- declaredDeposit: topUpAmount,
762
- previousDeposit: deposit,
763
- }),
764
- ).rejects.toThrow('topUp transaction channelId does not match payload channelId')
765
- })
766
-
767
- test('rejects amount mismatch', async () => {
768
- const salt = nextSalt()
769
- const deposit = 5_000_000n
770
- const topUpAmount = 3_000_000n
771
-
772
- const { channelId } = await openChannel({
773
- escrow: escrowContract,
774
- payer,
775
- payee: recipient,
776
- token: currency,
777
- deposit,
778
- salt,
779
- })
780
-
781
- const { serializedTransaction } = await signTopUpChannel({
782
- escrow: escrowContract,
783
- payer,
784
- channelId,
785
- token: currency,
786
- amount: topUpAmount,
787
- })
788
-
789
- await expect(
790
- broadcastTopUpTransaction({
791
- client,
792
- serializedTransaction,
793
- escrowContract,
794
- channelId,
795
- currency: asset,
796
- declaredDeposit: 9_999_999n,
797
- previousDeposit: deposit,
798
- }),
799
- ).rejects.toThrow('topUp transaction amount')
800
- })
801
-
802
- test('rejects when post-broadcast deposit does not exceed declared previousDeposit', async () => {
803
- const salt = nextSalt()
804
- const deposit = 5_000_000n
805
- const topUpAmount = 1_000_000n
806
-
807
- const { channelId } = await openChannel({
808
- escrow: escrowContract,
809
- payer,
810
- payee: recipient,
811
- token: currency,
812
- deposit,
813
- salt,
814
- })
815
-
816
- const { serializedTransaction } = await signTopUpChannel({
817
- escrow: escrowContract,
818
- payer,
819
- channelId,
820
- token: currency,
821
- amount: topUpAmount,
822
- })
823
-
824
- await expect(
825
- broadcastTopUpTransaction({
826
- client,
827
- serializedTransaction,
828
- escrowContract,
829
- channelId,
830
- currency: asset,
831
- declaredDeposit: topUpAmount,
832
- previousDeposit: deposit + topUpAmount,
833
- }),
834
- ).rejects.toThrow('channel deposit did not increase after topUp')
835
- })
836
-
837
- test('successful broadcast returns txHash and newDeposit', async () => {
838
- const salt = nextSalt()
839
- const deposit = 5_000_000n
840
- const topUpAmount = 3_000_000n
841
-
842
- const { channelId } = await openChannel({
843
- escrow: escrowContract,
844
- payer,
845
- payee: recipient,
846
- token: currency,
847
- deposit,
848
- salt,
849
- })
850
-
851
- const { serializedTransaction } = await signTopUpChannel({
852
- escrow: escrowContract,
853
- payer,
854
- channelId,
855
- token: currency,
856
- amount: topUpAmount,
857
- })
858
-
859
- const result = await broadcastTopUpTransaction({
860
- client,
861
- serializedTransaction,
862
- escrowContract,
863
- channelId,
864
- currency: asset,
865
- declaredDeposit: topUpAmount,
866
- previousDeposit: deposit,
867
- })
868
-
869
- expect(result.txHash).toBeDefined()
870
- expect(result.newDeposit).toBe(deposit + topUpAmount)
871
- })
872
-
873
- test('fee-payer relay: rejects unauthorized topUp calls', async () => {
874
- const salt = nextSalt()
875
- const deposit = 5_000_000n
876
- const topUpAmount = 3_000_000n
877
-
878
- const { channelId } = await openChannel({
879
- escrow: escrowContract,
880
- payer,
881
- payee: recipient,
882
- token: currency,
883
- deposit,
884
- salt,
885
- })
886
-
887
- const { serializedTransaction } = await signTopUpChannel({
888
- escrow: escrowContract,
889
- payer,
890
- channelId,
891
- token: currency,
892
- amount: topUpAmount,
893
- })
894
-
895
- const transferData = encodeFunctionData({
896
- abi: erc20Abi,
897
- functionName: 'transfer',
898
- args: [recipient, topUpAmount],
899
- })
900
-
901
- const deserialized = Transaction.deserialize(
902
- serializedTransaction as Transaction.TransactionSerializedTempo,
903
- )
904
-
905
- const tampered = (await Transaction.serialize({
906
- ...deserialized,
907
- calls: [
908
- ...((deserialized as any).calls ?? []),
909
- { to: '0x8888888888888888888888888888888888888888' as Address, data: transferData },
910
- ],
911
- } as any)) as unknown as Hex
912
-
913
- await expect(
914
- broadcastTopUpTransaction({
915
- client,
916
- serializedTransaction: tampered,
917
- escrowContract,
918
- channelId,
919
- currency: asset,
920
- declaredDeposit: topUpAmount,
921
- previousDeposit: deposit,
922
- isSponsored: true,
923
- }),
924
- ).rejects.toThrow('fee-sponsored topUp transaction contains an unauthorized call')
925
- })
926
-
927
- test('fee-payer: rejects unsigned transaction', async () => {
928
- const salt = nextSalt()
929
- const deposit = 5_000_000n
930
- const topUpAmount = 3_000_000n
931
-
932
- const { channelId } = await openChannel({
933
- escrow: escrowContract,
934
- payer,
935
- payee: recipient,
936
- token: currency,
937
- deposit,
938
- salt,
939
- })
940
-
941
- const { serializedTransaction } = await signTopUpChannel({
942
- escrow: escrowContract,
943
- payer,
944
- channelId,
945
- token: currency,
946
- amount: topUpAmount,
947
- })
948
-
949
- // Strip the sender signature to simulate the POC attack
950
- const deserialized = Transaction.deserialize(
951
- serializedTransaction as Transaction.TransactionSerializedTempo,
952
- )
953
- const unsigned = await Transaction.serialize({
954
- ...deserialized,
955
- signature: undefined,
956
- from: undefined,
957
- })
958
-
959
- await expect(
960
- broadcastTopUpTransaction({
961
- client,
962
- serializedTransaction: unsigned,
963
- escrowContract,
964
- channelId,
965
- currency: asset,
966
- declaredDeposit: topUpAmount,
967
- previousDeposit: deposit,
968
- feePayer: accounts[0],
969
- }),
970
- ).rejects.toThrow('Transaction must be signed by the sender before fee payer co-signing')
971
- })
972
-
973
- test('fee-payer: rejects non-Tempo transaction', async () => {
974
- const fakeEip1559 =
975
- '0x02f8650182a5bf843b9aca00843b9aca008252089400000000000000000000000000000000000000008080c001a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000' as Hex
976
-
977
- await expect(
978
- broadcastTopUpTransaction({
979
- client,
980
- serializedTransaction: fakeEip1559,
981
- escrowContract,
982
- channelId: '0x0000000000000000000000000000000000000000000000000000000000000000' as Hex,
983
- currency: asset,
984
- declaredDeposit: 1_000_000n,
985
- previousDeposit: 0n,
986
- feePayer: accounts[0],
987
- }),
988
- ).rejects.toThrow('Only Tempo (0x76/0x78) transactions are supported')
989
- })
990
-
991
- test('fee-payer: rejects topUp transactions whose gas budget exceeds sponsor policy', async () => {
992
- const salt = nextSalt()
993
- const deposit = 5_000_000n
994
- const topUpAmount = 3_000_000n
995
-
996
- const { channelId } = await openChannel({
997
- escrow: escrowContract,
998
- payer,
999
- payee: recipient,
1000
- token: currency,
1001
- deposit,
1002
- salt,
1003
- })
1004
-
1005
- const approveData = encodeFunctionData({
1006
- abi: erc20Abi,
1007
- functionName: 'approve',
1008
- args: [escrowContract, topUpAmount],
1009
- })
1010
- const topUpData = encodeFunctionData({
1011
- abi: escrowAbi,
1012
- functionName: 'topUp',
1013
- args: [channelId, topUpAmount],
1014
- })
1015
-
1016
- const prepared = await prepareTransactionRequest(client, {
1017
- account: payer,
1018
- calls: [
1019
- { to: currency, data: approveData },
1020
- { to: escrowContract, data: topUpData },
1021
- ],
1022
- feePayer: true,
1023
- feeToken: currency,
1024
- } as never)
1025
- prepared.gas = 2_000_001n
1026
-
1027
- const serializedTransaction = await signTransaction(client, prepared as never)
1028
-
1029
- await expect(
1030
- broadcastTopUpTransaction({
1031
- client,
1032
- serializedTransaction: serializedTransaction as Hex,
1033
- escrowContract,
1034
- channelId,
1035
- currency: asset,
1036
- declaredDeposit: topUpAmount,
1037
- previousDeposit: deposit,
1038
- feePayer: accounts[0],
1039
- }),
1040
- ).rejects.toThrow('gas exceeds sponsor policy')
1041
- })
1042
-
1043
- test('fee-payer: simulates topUp before broadcasting', async () => {
1044
- const rpcMethods: string[] = []
1045
- const interceptingClient = createClient({
1046
- account: accounts[0],
1047
- chain: client.chain,
1048
- transport: custom({
1049
- async request(args: any) {
1050
- rpcMethods.push(args.method)
1051
- return client.transport.request(args)
1052
- },
1053
- }),
1054
- })
1055
-
1056
- const salt = nextSalt()
1057
- const deposit = 5_000_000n
1058
- const topUpAmount = 3_000_000n
1059
-
1060
- const { channelId } = await openChannel({
1061
- escrow: escrowContract,
1062
- payer,
1063
- payee: recipient,
1064
- token: currency,
1065
- deposit,
1066
- salt,
1067
- })
1068
-
1069
- const approveData = encodeFunctionData({
1070
- abi: erc20Abi,
1071
- functionName: 'approve',
1072
- args: [escrowContract, topUpAmount],
1073
- })
1074
- const topUpData = encodeFunctionData({
1075
- abi: escrowAbi,
1076
- functionName: 'topUp',
1077
- args: [channelId, topUpAmount],
1078
- })
1079
- const prepared = await prepareTransactionRequest(client, {
1080
- account: payer,
1081
- calls: [
1082
- { to: currency, data: approveData },
1083
- { to: escrowContract, data: topUpData },
1084
- ],
1085
- feeToken: currency,
1086
- nonceKey: 'expiring',
1087
- validBefore: Math.floor(Date.now() / 1_000) + 25,
1088
- } as never)
1089
- prepared.gas = (prepared.gas ?? 0n) + 5_000n
1090
- ;(prepared as Record<string, unknown>).feePayer = true
1091
- const serializedTransaction = await signTransaction(client, prepared as never)
1092
-
1093
- await broadcastTopUpTransaction({
1094
- client: interceptingClient,
1095
- serializedTransaction,
1096
- escrowContract,
1097
- channelId,
1098
- currency: asset,
1099
- declaredDeposit: topUpAmount,
1100
- previousDeposit: deposit,
1101
- feePayer: accounts[0],
1102
- })
1103
-
1104
- const broadcastIndex = rpcMethods.indexOf('eth_sendRawTransactionSync')
1105
- const simulationIndex = rpcMethods.indexOf('eth_call')
1106
-
1107
- expect(broadcastIndex).toBeGreaterThan(-1)
1108
- expect(simulationIndex).toBeGreaterThan(-1)
1109
- expect(simulationIndex).toBeLessThan(broadcastIndex)
1110
- expect(
1111
- rpcMethods.slice(0, broadcastIndex).filter((method) => method === 'eth_call'),
1112
- ).toHaveLength(2)
1113
- })
1114
-
1115
- test('fee-payer: rejects smuggled second topUp call', async () => {
1116
- const salt = nextSalt()
1117
- const deposit = 5_000_000n
1118
- const topUpAmount = 3_000_000n
1119
- const smuggledAmount = 4_000_000n
1120
-
1121
- const { channelId } = await openChannel({
1122
- escrow: escrowContract,
1123
- payer,
1124
- payee: recipient,
1125
- token: currency,
1126
- deposit,
1127
- salt,
1128
- })
1129
-
1130
- const approveData = encodeFunctionData({
1131
- abi: erc20Abi,
1132
- functionName: 'approve',
1133
- args: [escrowContract, topUpAmount + smuggledAmount],
1134
- })
1135
- const topUpData = encodeFunctionData({
1136
- abi: escrowAbi,
1137
- functionName: 'topUp',
1138
- args: [channelId, topUpAmount],
1139
- })
1140
- const smuggledTopUpData = encodeFunctionData({
1141
- abi: escrowAbi,
1142
- functionName: 'topUp',
1143
- args: [channelId, smuggledAmount],
1144
- })
1145
-
1146
- const prepared = await prepareTransactionRequest(client, {
1147
- account: payer,
1148
- calls: [
1149
- { to: currency, data: approveData },
1150
- { to: escrowContract, data: topUpData },
1151
- { to: escrowContract, data: smuggledTopUpData },
1152
- ],
1153
- feeToken: currency,
1154
- nonceKey: 'expiring',
1155
- validBefore: Math.floor(Date.now() / 1_000) + 25,
1156
- } as never)
1157
- prepared.gas = (prepared.gas ?? 0n) + 5_000n
1158
- ;(prepared as Record<string, unknown>).feePayer = true
1159
-
1160
- const serializedTransaction = await signTransaction(client, prepared as never)
1161
-
1162
- await expect(
1163
- broadcastTopUpTransaction({
1164
- client,
1165
- serializedTransaction: serializedTransaction as Hex,
1166
- escrowContract,
1167
- channelId,
1168
- currency: asset,
1169
- declaredDeposit: topUpAmount,
1170
- previousDeposit: deposit,
1171
- feePayer: accounts[0],
1172
- }),
1173
- ).rejects.toThrow('fee-sponsored topUp transaction contains a smuggled call')
1174
- })
1175
- })
1176
-
1177
- describe('settleOnChain', () => {
1178
- test('settles a channel', async () => {
1179
- const salt = nextSalt()
1180
- const deposit = 10_000_000n
1181
- const settleAmount = 5_000_000n
1182
-
1183
- const { channelId } = await openChannel({
1184
- escrow: escrowContract,
1185
- payer,
1186
- payee: recipient,
1187
- token: currency,
1188
- deposit,
1189
- salt,
1190
- })
1191
-
1192
- const signature = await signVoucher(
1193
- client,
1194
- payer,
1195
- { channelId, cumulativeAmount: settleAmount },
1196
- escrowContract,
1197
- chain.id,
1198
- )
1199
-
1200
- const txHash = await settleOnChain(client, escrowContract, {
1201
- channelId,
1202
- cumulativeAmount: settleAmount,
1203
- signature,
1204
- })
1205
-
1206
- expect(txHash).toBeDefined()
1207
- await waitForTransactionReceipt(client, { hash: txHash })
1208
- const channel = await getOnChainChannel(client, escrowContract, channelId)
1209
- expect(channel.settled).toBe(settleAmount)
1210
- expect(channel.finalized).toBe(false)
1211
- })
1212
-
1213
- test.todo('settles with distinct feePayer != account (fee-sponsored settle)')
1214
-
1215
- test('settles with explicit account (no fee payer)', async () => {
1216
- const salt = nextSalt()
1217
- const deposit = 10_000_000n
1218
- const settleAmount = 5_000_000n
1219
-
1220
- const { channelId } = await openChannel({
1221
- escrow: escrowContract,
1222
- payer,
1223
- payee: recipient,
1224
- token: currency,
1225
- deposit,
1226
- salt,
1227
- })
1228
-
1229
- const signature = await signVoucher(
1230
- client,
1231
- payer,
1232
- { channelId, cumulativeAmount: settleAmount },
1233
- escrowContract,
1234
- chain.id,
1235
- )
1236
-
1237
- // Pass account explicitly — should use it as sender instead of client.account
1238
- const txHash = await settleOnChain(
1239
- client,
1240
- escrowContract,
1241
- {
1242
- channelId,
1243
- cumulativeAmount: settleAmount,
1244
- signature,
1245
- },
1246
- { account: accounts[0] },
1247
- )
1248
-
1249
- expect(txHash).toBeDefined()
1250
- await waitForTransactionReceipt(client, { hash: txHash })
1251
- const channel = await getOnChainChannel(client, escrowContract, channelId)
1252
- expect(channel.settled).toBe(settleAmount)
1253
- expect(channel.finalized).toBe(false)
1254
- })
1255
-
1256
- test('throws when no account available', async () => {
1257
- const noAccountClient = { chain: { id: 42431 } } as any
1258
- const dummyEscrow = '0x0000000000000000000000000000000000000001' as Address
1259
- const dummyChannelId =
1260
- '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex
1261
-
1262
- await expect(
1263
- settleOnChain(noAccountClient, dummyEscrow, {
1264
- channelId: dummyChannelId,
1265
- cumulativeAmount: 1_000_000n,
1266
- signature: '0xsig' as Hex,
1267
- }),
1268
- ).rejects.toThrow('no account available')
1269
- })
1270
- })
1271
-
1272
- describe('closeOnChain', () => {
1273
- test('closes a channel', async () => {
1274
- const salt = nextSalt()
1275
- const deposit = 10_000_000n
1276
- const closeAmount = 5_000_000n
1277
-
1278
- const { channelId } = await openChannel({
1279
- escrow: escrowContract,
1280
- payer,
1281
- payee: recipient,
1282
- token: currency,
1283
- deposit,
1284
- salt,
1285
- })
1286
-
1287
- const signature = await signVoucher(
1288
- client,
1289
- payer,
1290
- { channelId, cumulativeAmount: closeAmount },
1291
- escrowContract,
1292
- chain.id,
1293
- )
1294
-
1295
- const txHash = await closeOnChain(client, escrowContract, {
1296
- channelId,
1297
- cumulativeAmount: closeAmount,
1298
- signature,
1299
- })
1300
-
1301
- expect(txHash).toBeDefined()
1302
- await waitForTransactionReceipt(client, { hash: txHash })
1303
- const channel = await getOnChainChannel(client, escrowContract, channelId)
1304
- expect(channel.finalized).toBe(true)
1305
- })
1306
-
1307
- test.todo('closes with distinct feePayer != account (fee-sponsored close)')
1308
-
1309
- test('closes with explicit account (no fee payer)', async () => {
1310
- const salt = nextSalt()
1311
- const deposit = 10_000_000n
1312
- const closeAmount = 5_000_000n
1313
-
1314
- const { channelId } = await openChannel({
1315
- escrow: escrowContract,
1316
- payer,
1317
- payee: recipient,
1318
- token: currency,
1319
- deposit,
1320
- salt,
1321
- })
1322
-
1323
- const signature = await signVoucher(
1324
- client,
1325
- payer,
1326
- { channelId, cumulativeAmount: closeAmount },
1327
- escrowContract,
1328
- chain.id,
1329
- )
1330
-
1331
- // Pass account explicitly — should use it as sender instead of client.account
1332
- const txHash = await closeOnChain(
1333
- client,
1334
- escrowContract,
1335
- {
1336
- channelId,
1337
- cumulativeAmount: closeAmount,
1338
- signature,
1339
- },
1340
- { account: accounts[0] },
1341
- )
1342
-
1343
- expect(txHash).toBeDefined()
1344
- await waitForTransactionReceipt(client, { hash: txHash })
1345
- const channel = await getOnChainChannel(client, escrowContract, channelId)
1346
- expect(channel.finalized).toBe(true)
1347
- })
1348
- })
1349
- }) // end describe('on-chain')