mppx 0.8.15 → 0.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (966) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +61 -39
  4. package/dist/Constants.d.ts +17 -17
  5. package/dist/Errors.d.ts +3 -3
  6. package/dist/Method.d.ts +35 -5
  7. package/dist/Method.js +7 -22
  8. package/dist/Store.d.ts +19 -0
  9. package/dist/Store.js +43 -0
  10. package/dist/attestation/Client.d.ts +17 -0
  11. package/dist/attestation/Client.js +28 -0
  12. package/dist/attestation/Constants.d.ts +15 -0
  13. package/dist/attestation/Constants.js +15 -0
  14. package/dist/attestation/Server.d.ts +4 -0
  15. package/dist/attestation/Server.js +8 -0
  16. package/dist/attestation/Types.d.ts +76 -0
  17. package/dist/attestation/Types.js +2 -0
  18. package/dist/attestation/index.d.ts +6 -0
  19. package/dist/attestation/index.js +6 -0
  20. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  21. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  22. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  23. package/dist/attestation/internal/SigningContext.js +11 -0
  24. package/dist/bin.js +3 -3
  25. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  26. package/dist/cli/account.d.ts +14 -14
  27. package/dist/cli/cli.d.ts +6 -6
  28. package/dist/cli/cli.js +253 -1504
  29. package/dist/cli/plugins/index.js +19 -5
  30. package/dist/cli/plugins/tempo.js +7 -3
  31. package/dist/cli/sessions/Manager.js +7 -4
  32. package/dist/cli/sessions/commands.d.ts +4 -4
  33. package/dist/cli/sessions/request.d.ts +2 -0
  34. package/dist/cli/sessions/request.js +18 -0
  35. package/dist/cli/sessions/store.js +28 -14
  36. package/dist/cli/utils.d.ts +1 -1
  37. package/dist/cli/validate/index.d.ts +3 -3
  38. package/dist/client/Mppx.d.ts +3 -0
  39. package/dist/client/Mppx.js +13 -5
  40. package/dist/client/Transport.d.ts +3 -5
  41. package/dist/client/Transport.js +1 -17
  42. package/dist/client/internal/Fetch.js +2 -6
  43. package/dist/discovery/Discovery.js +2 -1
  44. package/dist/discovery/OpenApi.d.ts +3 -5
  45. package/dist/discovery/OpenApi.js +13 -34
  46. package/dist/discovery/internal/Metadata.d.ts +20 -0
  47. package/dist/discovery/internal/Metadata.js +36 -0
  48. package/dist/evm/Methods.d.ts +11 -11
  49. package/dist/evm/Types.d.ts +17 -17
  50. package/dist/evm/client/Charge.d.ts +11 -11
  51. package/dist/evm/client/Charge.js +8 -0
  52. package/dist/evm/client/Methods.d.ts +11 -11
  53. package/dist/evm/server/Charge.d.ts +1 -1
  54. package/dist/evm/server/Charge.js +2 -0
  55. package/dist/evm/server/Methods.d.ts +11 -11
  56. package/dist/internal/HeaderCodec.d.ts +2 -2
  57. package/dist/internal/types.d.ts +6 -0
  58. package/dist/proxy/Proxy.d.ts +2 -0
  59. package/dist/proxy/Proxy.js +117 -9
  60. package/dist/proxy/Service.d.ts +36 -1
  61. package/dist/proxy/Service.js +9 -8
  62. package/dist/proxy/services/anthropic.js +1 -0
  63. package/dist/proxy/services/openai.js +1 -0
  64. package/dist/proxy/services/stripe.js +1 -0
  65. package/dist/server/Mppx.d.ts +75 -13
  66. package/dist/server/Mppx.js +201 -23
  67. package/dist/server/core.d.ts +9 -0
  68. package/dist/server/core.js +9 -0
  69. package/dist/server/internal/html/config.d.ts +9 -9
  70. package/dist/server/internal/html/constants.d.ts +17 -17
  71. package/dist/stripe/Methods.d.ts +10 -10
  72. package/dist/stripe/client/Charge.d.ts +10 -10
  73. package/dist/stripe/client/Methods.d.ts +10 -10
  74. package/dist/stripe/internal/constants.d.ts +1 -1
  75. package/dist/stripe/internal/constants.js +1 -1
  76. package/dist/stripe/internal/types.d.ts +1 -0
  77. package/dist/stripe/server/Charge.d.ts +11 -11
  78. package/dist/stripe/server/Charge.js +51 -5
  79. package/dist/stripe/server/Methods.d.ts +137 -48
  80. package/dist/stripe/server/Methods.js +265 -4
  81. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  82. package/dist/stripe/server/internal/deposit-address.js +28 -0
  83. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  84. package/dist/stripe/server/internal/html.gen.js +1 -1
  85. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  86. package/dist/stripe/server/internal/record-payment.js +42 -0
  87. package/dist/stripe/server/internal/request.d.ts +25 -0
  88. package/dist/stripe/server/internal/request.js +29 -0
  89. package/dist/stripe/server/spt.d.ts +8 -0
  90. package/dist/stripe/server/spt.js +8 -0
  91. package/dist/tap/Constants.d.ts +28 -0
  92. package/dist/tap/Constants.js +32 -0
  93. package/dist/tap/Types.d.ts +11 -0
  94. package/dist/tap/Types.js +2 -0
  95. package/dist/tap/client/index.d.ts +26 -0
  96. package/dist/tap/client/index.js +33 -0
  97. package/dist/tap/index.d.ts +5 -0
  98. package/dist/tap/index.js +5 -0
  99. package/dist/tap/server/index.d.ts +20 -0
  100. package/dist/tap/server/index.js +36 -0
  101. package/dist/tempo/Attribution.d.ts +1 -1
  102. package/dist/tempo/Methods.d.ts +73 -60
  103. package/dist/tempo/Methods.js +14 -3
  104. package/dist/tempo/Proof.d.ts +16 -16
  105. package/dist/tempo/client/Charge.d.ts +22 -19
  106. package/dist/tempo/client/Charge.js +32 -16
  107. package/dist/tempo/client/Methods.d.ts +51 -38
  108. package/dist/tempo/client/Subscription.d.ts +23 -23
  109. package/dist/tempo/internal/address.d.ts +2 -1
  110. package/dist/tempo/internal/address.js +3 -1
  111. package/dist/tempo/internal/auto-swap.js +4 -19
  112. package/dist/tempo/internal/defaults.d.ts +17 -6
  113. package/dist/tempo/internal/defaults.js +11 -0
  114. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  115. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  116. package/dist/tempo/internal/machine-token-charge.js +113 -0
  117. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  118. package/dist/tempo/internal/machine-token-session.js +173 -0
  119. package/dist/tempo/internal/proof.d.ts +17 -17
  120. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  121. package/dist/tempo/internal/signature-envelope.js +28 -0
  122. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  123. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  124. package/dist/tempo/legacy/client/Session.d.ts +33 -21
  125. package/dist/tempo/legacy/client/Session.js +3 -3
  126. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  127. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  128. package/dist/tempo/legacy/index.d.ts +1 -3
  129. package/dist/tempo/legacy/index.js +1 -3
  130. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  131. package/dist/tempo/server/Charge.d.ts +28 -11
  132. package/dist/tempo/server/Charge.js +101 -55
  133. package/dist/tempo/server/Methods.d.ts +58 -56
  134. package/dist/tempo/server/Methods.js +8 -18
  135. package/dist/tempo/server/Relay.d.ts +1 -1
  136. package/dist/tempo/server/Relay.js +2 -2
  137. package/dist/tempo/server/Subscription.d.ts +25 -25
  138. package/dist/tempo/server/Subscription.js +2 -0
  139. package/dist/tempo/server/index.d.ts +1 -1
  140. package/dist/tempo/server/index.js +1 -1
  141. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  142. package/dist/tempo/server/internal/html.gen.js +1 -1
  143. package/dist/tempo/server/internal/transport.d.ts +2 -0
  144. package/dist/tempo/server/internal/transport.js +9 -2
  145. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  146. package/dist/tempo/session/client/ChannelOps.js +35 -6
  147. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  148. package/dist/tempo/session/client/ChannelStore.js +2 -2
  149. package/dist/tempo/session/client/CredentialState.d.ts +18 -3
  150. package/dist/tempo/session/client/CredentialState.js +77 -76
  151. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  152. package/dist/tempo/session/client/Runtime.js +21 -5
  153. package/dist/tempo/session/client/Session.d.ts +34 -22
  154. package/dist/tempo/session/client/Session.js +186 -63
  155. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  156. package/dist/tempo/session/client/SessionManager.js +35 -11
  157. package/dist/tempo/session/client/Transports.d.ts +2 -0
  158. package/dist/tempo/session/client/Transports.js +12 -2
  159. package/dist/tempo/session/precompile/Chain.d.ts +37 -2
  160. package/dist/tempo/session/precompile/Chain.js +116 -15
  161. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  162. package/dist/tempo/session/precompile/Protocol.js +7 -0
  163. package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
  164. package/dist/tempo/session/precompile/Voucher.js +6 -12
  165. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  166. package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
  167. package/dist/tempo/session/server/ChannelStore.js +27 -12
  168. package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
  169. package/dist/tempo/session/server/CredentialVerification.js +359 -89
  170. package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
  171. package/dist/tempo/session/server/MeteredStream.js +8 -5
  172. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  173. package/dist/tempo/session/server/RequestState.js +61 -15
  174. package/dist/tempo/session/server/Session.d.ts +46 -23
  175. package/dist/tempo/session/server/Session.js +150 -56
  176. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  177. package/dist/tempo/session/server/Settlement.js +53 -21
  178. package/dist/tempo/session/server/Sse.d.ts +3 -1
  179. package/dist/tempo/session/server/Sse.js +2 -1
  180. package/dist/tempo/session/server/Transports.d.ts +1 -1
  181. package/dist/tempo/session/server/Transports.js +1 -0
  182. package/dist/tempo/session/server/Ws.d.ts +6 -1
  183. package/dist/tempo/session/server/Ws.js +1 -0
  184. package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
  185. package/dist/web-bot-auth/Constants.d.ts +20 -0
  186. package/dist/web-bot-auth/Constants.js +24 -0
  187. package/dist/web-bot-auth/Types.d.ts +10 -0
  188. package/dist/web-bot-auth/Types.js +2 -0
  189. package/dist/web-bot-auth/client/index.d.ts +29 -0
  190. package/dist/web-bot-auth/client/index.js +64 -0
  191. package/dist/web-bot-auth/index.d.ts +7 -0
  192. package/dist/web-bot-auth/index.js +7 -0
  193. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  194. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  195. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  196. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  197. package/dist/web-bot-auth/server/index.d.ts +35 -0
  198. package/dist/web-bot-auth/server/index.js +88 -0
  199. package/dist/x402/Types.d.ts +6 -6
  200. package/dist/x402/client/Exact.d.ts +8 -0
  201. package/dist/x402/client/Exact.js +40 -10
  202. package/dist/x402/server/EvmCharge.d.ts +22 -0
  203. package/dist/x402/server/EvmCharge.js +54 -20
  204. package/package.json +28 -34
  205. package/dist/BodyDigest.d.ts.map +0 -1
  206. package/dist/BodyDigest.js.map +0 -1
  207. package/dist/Challenge.d.ts.map +0 -1
  208. package/dist/Challenge.js.map +0 -1
  209. package/dist/Constants.d.ts.map +0 -1
  210. package/dist/Constants.js.map +0 -1
  211. package/dist/Credential.d.ts.map +0 -1
  212. package/dist/Credential.js.map +0 -1
  213. package/dist/Errors.d.ts.map +0 -1
  214. package/dist/Errors.js.map +0 -1
  215. package/dist/Expires.d.ts.map +0 -1
  216. package/dist/Expires.js.map +0 -1
  217. package/dist/Html.d.ts.map +0 -1
  218. package/dist/Html.js.map +0 -1
  219. package/dist/Mcp.d.ts.map +0 -1
  220. package/dist/Mcp.js.map +0 -1
  221. package/dist/Method.d.ts.map +0 -1
  222. package/dist/Method.js.map +0 -1
  223. package/dist/PaymentRequest.d.ts.map +0 -1
  224. package/dist/PaymentRequest.js.map +0 -1
  225. package/dist/Receipt.d.ts.map +0 -1
  226. package/dist/Receipt.js.map +0 -1
  227. package/dist/Store.d.ts.map +0 -1
  228. package/dist/Store.js.map +0 -1
  229. package/dist/bin.d.ts.map +0 -1
  230. package/dist/bin.js.map +0 -1
  231. package/dist/cli/account.d.ts.map +0 -1
  232. package/dist/cli/account.js.map +0 -1
  233. package/dist/cli/cli.d.ts.map +0 -1
  234. package/dist/cli/cli.js.map +0 -1
  235. package/dist/cli/config.d.ts.map +0 -1
  236. package/dist/cli/config.js.map +0 -1
  237. package/dist/cli/internal.d.ts.map +0 -1
  238. package/dist/cli/internal.js.map +0 -1
  239. package/dist/cli/plugins/evm.d.ts.map +0 -1
  240. package/dist/cli/plugins/evm.js.map +0 -1
  241. package/dist/cli/plugins/index.d.ts.map +0 -1
  242. package/dist/cli/plugins/index.js.map +0 -1
  243. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  244. package/dist/cli/plugins/plugin.js.map +0 -1
  245. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  246. package/dist/cli/plugins/stripe.js.map +0 -1
  247. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  248. package/dist/cli/plugins/tempo.js.map +0 -1
  249. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  250. package/dist/cli/sessions/Manager.js.map +0 -1
  251. package/dist/cli/sessions/commands.d.ts.map +0 -1
  252. package/dist/cli/sessions/commands.js.map +0 -1
  253. package/dist/cli/sessions/request.d.ts.map +0 -1
  254. package/dist/cli/sessions/request.js.map +0 -1
  255. package/dist/cli/sessions/store.d.ts.map +0 -1
  256. package/dist/cli/sessions/store.js.map +0 -1
  257. package/dist/cli/utils.d.ts.map +0 -1
  258. package/dist/cli/utils.js.map +0 -1
  259. package/dist/cli/validate/challenge.d.ts.map +0 -1
  260. package/dist/cli/validate/challenge.js.map +0 -1
  261. package/dist/cli/validate/discovery.d.ts.map +0 -1
  262. package/dist/cli/validate/discovery.js.map +0 -1
  263. package/dist/cli/validate/helpers.d.ts.map +0 -1
  264. package/dist/cli/validate/helpers.js.map +0 -1
  265. package/dist/cli/validate/index.d.ts.map +0 -1
  266. package/dist/cli/validate/index.js.map +0 -1
  267. package/dist/cli/validate/messages.d.ts.map +0 -1
  268. package/dist/cli/validate/messages.js.map +0 -1
  269. package/dist/cli/validate/payment.d.ts.map +0 -1
  270. package/dist/cli/validate/payment.js.map +0 -1
  271. package/dist/client/Methods.d.ts.map +0 -1
  272. package/dist/client/Methods.js.map +0 -1
  273. package/dist/client/Mppx.d.ts.map +0 -1
  274. package/dist/client/Mppx.js.map +0 -1
  275. package/dist/client/Transport.d.ts.map +0 -1
  276. package/dist/client/Transport.js.map +0 -1
  277. package/dist/client/index.d.ts.map +0 -1
  278. package/dist/client/index.js.map +0 -1
  279. package/dist/client/internal/Fetch.d.ts.map +0 -1
  280. package/dist/client/internal/Fetch.js.map +0 -1
  281. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  282. package/dist/client/internal/MethodChallenge.js.map +0 -1
  283. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  284. package/dist/client/internal/MethodResponse.js.map +0 -1
  285. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  286. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  287. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  288. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  289. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  290. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  291. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  292. package/dist/client/internal/protocols/Shared.js.map +0 -1
  293. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  294. package/dist/client/internal/protocols/X402.js.map +0 -1
  295. package/dist/client/node.d.ts.map +0 -1
  296. package/dist/client/node.js.map +0 -1
  297. package/dist/discovery/Discovery.d.ts.map +0 -1
  298. package/dist/discovery/Discovery.js.map +0 -1
  299. package/dist/discovery/OpenApi.d.ts.map +0 -1
  300. package/dist/discovery/OpenApi.js.map +0 -1
  301. package/dist/discovery/Validate.d.ts.map +0 -1
  302. package/dist/discovery/Validate.js.map +0 -1
  303. package/dist/discovery/index.d.ts.map +0 -1
  304. package/dist/discovery/index.js.map +0 -1
  305. package/dist/evm/Assets.d.ts.map +0 -1
  306. package/dist/evm/Assets.js.map +0 -1
  307. package/dist/evm/Chains.d.ts.map +0 -1
  308. package/dist/evm/Chains.js.map +0 -1
  309. package/dist/evm/Methods.d.ts.map +0 -1
  310. package/dist/evm/Methods.js.map +0 -1
  311. package/dist/evm/Types.d.ts.map +0 -1
  312. package/dist/evm/Types.js.map +0 -1
  313. package/dist/evm/client/Charge.d.ts.map +0 -1
  314. package/dist/evm/client/Charge.js.map +0 -1
  315. package/dist/evm/client/Methods.d.ts.map +0 -1
  316. package/dist/evm/client/Methods.js.map +0 -1
  317. package/dist/evm/client/index.d.ts.map +0 -1
  318. package/dist/evm/client/index.js.map +0 -1
  319. package/dist/evm/index.d.ts.map +0 -1
  320. package/dist/evm/index.js.map +0 -1
  321. package/dist/evm/server/Charge.d.ts.map +0 -1
  322. package/dist/evm/server/Charge.js.map +0 -1
  323. package/dist/evm/server/Methods.d.ts.map +0 -1
  324. package/dist/evm/server/Methods.js.map +0 -1
  325. package/dist/evm/server/index.d.ts.map +0 -1
  326. package/dist/evm/server/index.js.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
  328. package/dist/index.js.map +0 -1
  329. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  330. package/dist/internal/AcceptPayment.js.map +0 -1
  331. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  332. package/dist/internal/HeaderCodec.js.map +0 -1
  333. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  334. package/dist/internal/constantTimeEqual.js.map +0 -1
  335. package/dist/internal/env.d.ts.map +0 -1
  336. package/dist/internal/env.js.map +0 -1
  337. package/dist/internal/types.d.ts.map +0 -1
  338. package/dist/internal/types.js.map +0 -1
  339. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  340. package/dist/mcp/client/McpClient.js.map +0 -1
  341. package/dist/mcp/client/index.d.ts.map +0 -1
  342. package/dist/mcp/client/index.js.map +0 -1
  343. package/dist/mcp/server/Transport.d.ts.map +0 -1
  344. package/dist/mcp/server/Transport.js.map +0 -1
  345. package/dist/mcp/server/index.d.ts.map +0 -1
  346. package/dist/mcp/server/index.js.map +0 -1
  347. package/dist/middlewares/elysia.d.ts.map +0 -1
  348. package/dist/middlewares/elysia.js.map +0 -1
  349. package/dist/middlewares/express.d.ts.map +0 -1
  350. package/dist/middlewares/express.js.map +0 -1
  351. package/dist/middlewares/hono.d.ts.map +0 -1
  352. package/dist/middlewares/hono.js.map +0 -1
  353. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  354. package/dist/middlewares/internal/mppx.js.map +0 -1
  355. package/dist/middlewares/nextjs.d.ts.map +0 -1
  356. package/dist/middlewares/nextjs.js.map +0 -1
  357. package/dist/proxy/Proxy.d.ts.map +0 -1
  358. package/dist/proxy/Proxy.js.map +0 -1
  359. package/dist/proxy/Service.d.ts.map +0 -1
  360. package/dist/proxy/Service.js.map +0 -1
  361. package/dist/proxy/index.d.ts.map +0 -1
  362. package/dist/proxy/index.js.map +0 -1
  363. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  364. package/dist/proxy/internal/Headers.js.map +0 -1
  365. package/dist/proxy/internal/Route.d.ts.map +0 -1
  366. package/dist/proxy/internal/Route.js.map +0 -1
  367. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  368. package/dist/proxy/services/anthropic.js.map +0 -1
  369. package/dist/proxy/services/openai.d.ts.map +0 -1
  370. package/dist/proxy/services/openai.js.map +0 -1
  371. package/dist/proxy/services/stripe.d.ts.map +0 -1
  372. package/dist/proxy/services/stripe.js.map +0 -1
  373. package/dist/server/Methods.d.ts.map +0 -1
  374. package/dist/server/Methods.js.map +0 -1
  375. package/dist/server/Mppx.d.ts.map +0 -1
  376. package/dist/server/Mppx.js.map +0 -1
  377. package/dist/server/NodeListener.d.ts.map +0 -1
  378. package/dist/server/NodeListener.js.map +0 -1
  379. package/dist/server/Request.d.ts.map +0 -1
  380. package/dist/server/Request.js.map +0 -1
  381. package/dist/server/Response.d.ts.map +0 -1
  382. package/dist/server/Response.js.map +0 -1
  383. package/dist/server/Transport.d.ts.map +0 -1
  384. package/dist/server/Transport.js.map +0 -1
  385. package/dist/server/index.d.ts.map +0 -1
  386. package/dist/server/index.js.map +0 -1
  387. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  388. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  389. package/dist/server/internal/html/config.d.ts.map +0 -1
  390. package/dist/server/internal/html/config.js.map +0 -1
  391. package/dist/server/internal/html/constants.d.ts.map +0 -1
  392. package/dist/server/internal/html/constants.js.map +0 -1
  393. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  394. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  395. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  396. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  397. package/dist/server/internal/scope.d.ts.map +0 -1
  398. package/dist/server/internal/scope.js.map +0 -1
  399. package/dist/stripe/Methods.d.ts.map +0 -1
  400. package/dist/stripe/Methods.js.map +0 -1
  401. package/dist/stripe/client/Charge.d.ts.map +0 -1
  402. package/dist/stripe/client/Charge.js.map +0 -1
  403. package/dist/stripe/client/Methods.d.ts.map +0 -1
  404. package/dist/stripe/client/Methods.js.map +0 -1
  405. package/dist/stripe/client/index.d.ts.map +0 -1
  406. package/dist/stripe/client/index.js.map +0 -1
  407. package/dist/stripe/index.d.ts.map +0 -1
  408. package/dist/stripe/index.js.map +0 -1
  409. package/dist/stripe/internal/constants.d.ts.map +0 -1
  410. package/dist/stripe/internal/constants.js.map +0 -1
  411. package/dist/stripe/internal/types.d.ts.map +0 -1
  412. package/dist/stripe/internal/types.js.map +0 -1
  413. package/dist/stripe/server/Charge.d.ts.map +0 -1
  414. package/dist/stripe/server/Charge.js.map +0 -1
  415. package/dist/stripe/server/Methods.d.ts.map +0 -1
  416. package/dist/stripe/server/Methods.js.map +0 -1
  417. package/dist/stripe/server/index.d.ts.map +0 -1
  418. package/dist/stripe/server/index.js.map +0 -1
  419. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  420. package/dist/stripe/server/internal/html/types.js.map +0 -1
  421. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  422. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  423. package/dist/tempo/Attribution.d.ts.map +0 -1
  424. package/dist/tempo/Attribution.js.map +0 -1
  425. package/dist/tempo/Methods.d.ts.map +0 -1
  426. package/dist/tempo/Methods.js.map +0 -1
  427. package/dist/tempo/Proof.d.ts.map +0 -1
  428. package/dist/tempo/Proof.js.map +0 -1
  429. package/dist/tempo/client/Charge.d.ts.map +0 -1
  430. package/dist/tempo/client/Charge.js.map +0 -1
  431. package/dist/tempo/client/Methods.d.ts.map +0 -1
  432. package/dist/tempo/client/Methods.js.map +0 -1
  433. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  434. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  435. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  436. package/dist/tempo/client/Subscription.js.map +0 -1
  437. package/dist/tempo/client/index.d.ts.map +0 -1
  438. package/dist/tempo/client/index.js.map +0 -1
  439. package/dist/tempo/index.d.ts.map +0 -1
  440. package/dist/tempo/index.js.map +0 -1
  441. package/dist/tempo/internal/account.d.ts.map +0 -1
  442. package/dist/tempo/internal/account.js.map +0 -1
  443. package/dist/tempo/internal/address.d.ts.map +0 -1
  444. package/dist/tempo/internal/address.js.map +0 -1
  445. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  446. package/dist/tempo/internal/auto-swap.js.map +0 -1
  447. package/dist/tempo/internal/charge.d.ts.map +0 -1
  448. package/dist/tempo/internal/charge.js.map +0 -1
  449. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  450. package/dist/tempo/internal/defaults.js.map +0 -1
  451. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  452. package/dist/tempo/internal/fee-payer.js.map +0 -1
  453. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  454. package/dist/tempo/internal/fee-token.js.map +0 -1
  455. package/dist/tempo/internal/proof.d.ts.map +0 -1
  456. package/dist/tempo/internal/proof.js.map +0 -1
  457. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  458. package/dist/tempo/internal/selectors.js.map +0 -1
  459. package/dist/tempo/internal/types.d.ts.map +0 -1
  460. package/dist/tempo/internal/types.js.map +0 -1
  461. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  462. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  463. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  464. package/dist/tempo/legacy/client/Session.js.map +0 -1
  465. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  466. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  467. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  468. package/dist/tempo/legacy/client/index.js.map +0 -1
  469. package/dist/tempo/legacy/index.d.ts.map +0 -1
  470. package/dist/tempo/legacy/index.js.map +0 -1
  471. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  472. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  473. package/dist/tempo/legacy/server/Session.js +0 -698
  474. package/dist/tempo/legacy/server/Session.js.map +0 -1
  475. package/dist/tempo/legacy/server/index.d.ts +0 -5
  476. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  477. package/dist/tempo/legacy/server/index.js +0 -5
  478. package/dist/tempo/legacy/server/index.js.map +0 -1
  479. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  480. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  481. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  482. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  483. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  484. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  485. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  486. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  487. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  488. package/dist/tempo/legacy/session/Types.js.map +0 -1
  489. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  490. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  491. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  492. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  493. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  494. package/dist/tempo/legacy/session/index.js.map +0 -1
  495. package/dist/tempo/server/Charge.d.ts.map +0 -1
  496. package/dist/tempo/server/Charge.js.map +0 -1
  497. package/dist/tempo/server/Methods.d.ts.map +0 -1
  498. package/dist/tempo/server/Methods.js.map +0 -1
  499. package/dist/tempo/server/Relay.d.ts.map +0 -1
  500. package/dist/tempo/server/Relay.js.map +0 -1
  501. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  502. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  503. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  504. package/dist/tempo/server/Subscription.js.map +0 -1
  505. package/dist/tempo/server/index.d.ts.map +0 -1
  506. package/dist/tempo/server/index.js.map +0 -1
  507. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  508. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  509. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  510. package/dist/tempo/server/internal/request-body.js.map +0 -1
  511. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  512. package/dist/tempo/server/internal/transport.js.map +0 -1
  513. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  514. package/dist/tempo/session/Snapshot.js.map +0 -1
  515. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  516. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  517. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  518. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  519. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  520. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  521. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  522. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  523. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  524. package/dist/tempo/session/client/Runtime.js.map +0 -1
  525. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  526. package/dist/tempo/session/client/Session.js.map +0 -1
  527. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  528. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  529. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  530. package/dist/tempo/session/client/Transports.js.map +0 -1
  531. package/dist/tempo/session/client/index.d.ts.map +0 -1
  532. package/dist/tempo/session/client/index.js.map +0 -1
  533. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  534. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  535. package/dist/tempo/session/index.d.ts.map +0 -1
  536. package/dist/tempo/session/index.js.map +0 -1
  537. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  538. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  539. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  540. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  541. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  542. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  543. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  544. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  545. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  546. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  547. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  548. package/dist/tempo/session/precompile/index.js.map +0 -1
  549. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  550. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  551. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  552. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  553. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  554. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  555. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  556. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  557. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  558. package/dist/tempo/session/server/RequestState.js.map +0 -1
  559. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  560. package/dist/tempo/session/server/Session.js.map +0 -1
  561. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  562. package/dist/tempo/session/server/Settlement.js.map +0 -1
  563. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  564. package/dist/tempo/session/server/Sse.js.map +0 -1
  565. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  566. package/dist/tempo/session/server/Transports.js.map +0 -1
  567. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  568. package/dist/tempo/session/server/Ws.js.map +0 -1
  569. package/dist/tempo/session/server/index.d.ts.map +0 -1
  570. package/dist/tempo/session/server/index.js.map +0 -1
  571. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  572. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  573. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  574. package/dist/tempo/subscription/Receipt.js.map +0 -1
  575. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  576. package/dist/tempo/subscription/Store.js.map +0 -1
  577. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  578. package/dist/tempo/subscription/Types.js.map +0 -1
  579. package/dist/tempo/subscription/index.d.ts.map +0 -1
  580. package/dist/tempo/subscription/index.js.map +0 -1
  581. package/dist/validation/core.d.ts.map +0 -1
  582. package/dist/validation/core.js.map +0 -1
  583. package/dist/validation/index.d.ts.map +0 -1
  584. package/dist/validation/index.js.map +0 -1
  585. package/dist/viem/Account.d.ts.map +0 -1
  586. package/dist/viem/Account.js.map +0 -1
  587. package/dist/viem/Client.d.ts.map +0 -1
  588. package/dist/viem/Client.js.map +0 -1
  589. package/dist/x402/Assets.d.ts.map +0 -1
  590. package/dist/x402/Assets.js.map +0 -1
  591. package/dist/x402/Header.d.ts.map +0 -1
  592. package/dist/x402/Header.js.map +0 -1
  593. package/dist/x402/Types.d.ts.map +0 -1
  594. package/dist/x402/Types.js.map +0 -1
  595. package/dist/x402/client/Exact.d.ts.map +0 -1
  596. package/dist/x402/client/Exact.js.map +0 -1
  597. package/dist/x402/index.d.ts.map +0 -1
  598. package/dist/x402/index.js.map +0 -1
  599. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  600. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  601. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  602. package/dist/x402/internal/RouteBinding.js.map +0 -1
  603. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  604. package/dist/x402/server/EvmCharge.js.map +0 -1
  605. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  606. package/dist/x402/server/Facilitator.js.map +0 -1
  607. package/dist/zod.d.ts.map +0 -1
  608. package/dist/zod.js.map +0 -1
  609. package/src/BodyDigest.test.ts +0 -43
  610. package/src/BodyDigest.ts +0 -55
  611. package/src/Challenge.fuzz.test.ts +0 -121
  612. package/src/Challenge.test-d.ts +0 -82
  613. package/src/Challenge.test.ts +0 -995
  614. package/src/Challenge.ts +0 -683
  615. package/src/Constants.ts +0 -58
  616. package/src/Credential.fuzz.test.ts +0 -62
  617. package/src/Credential.test.ts +0 -378
  618. package/src/Credential.ts +0 -217
  619. package/src/Errors.test.ts +0 -520
  620. package/src/Errors.ts +0 -448
  621. package/src/Expires.test.ts +0 -112
  622. package/src/Expires.ts +0 -59
  623. package/src/Html.ts +0 -67
  624. package/src/Mcp.ts +0 -85
  625. package/src/Method.test.ts +0 -177
  626. package/src/Method.ts +0 -617
  627. package/src/PaymentRequest.test.ts +0 -147
  628. package/src/PaymentRequest.ts +0 -108
  629. package/src/Receipt.test.ts +0 -151
  630. package/src/Receipt.ts +0 -146
  631. package/src/Store.test-d.ts +0 -195
  632. package/src/Store.test.ts +0 -357
  633. package/src/Store.ts +0 -329
  634. package/src/bin.ts +0 -4
  635. package/src/cli/account.ts +0 -269
  636. package/src/cli/cli.test.ts +0 -2221
  637. package/src/cli/cli.ts +0 -1649
  638. package/src/cli/config.test.ts +0 -89
  639. package/src/cli/config.ts +0 -50
  640. package/src/cli/internal.ts +0 -114
  641. package/src/cli/mcp.test.ts +0 -262
  642. package/src/cli/plugins/evm.ts +0 -55
  643. package/src/cli/plugins/index.ts +0 -4
  644. package/src/cli/plugins/plugin.ts +0 -84
  645. package/src/cli/plugins/stripe.ts +0 -174
  646. package/src/cli/plugins/tempo.ts +0 -1102
  647. package/src/cli/sessions/Manager.test.ts +0 -249
  648. package/src/cli/sessions/Manager.ts +0 -93
  649. package/src/cli/sessions/commands.ts +0 -444
  650. package/src/cli/sessions/request.test.ts +0 -51
  651. package/src/cli/sessions/request.ts +0 -353
  652. package/src/cli/sessions/store.test.ts +0 -581
  653. package/src/cli/sessions/store.ts +0 -940
  654. package/src/cli/utils.test.ts +0 -156
  655. package/src/cli/utils.ts +0 -394
  656. package/src/cli/validate/challenge.ts +0 -565
  657. package/src/cli/validate/discovery.test.ts +0 -435
  658. package/src/cli/validate/discovery.ts +0 -221
  659. package/src/cli/validate/helpers.ts +0 -166
  660. package/src/cli/validate/index.ts +0 -229
  661. package/src/cli/validate/messages.ts +0 -7
  662. package/src/cli/validate/payment.ts +0 -774
  663. package/src/cli/validate.test.ts +0 -843
  664. package/src/client/Methods.ts +0 -8
  665. package/src/client/Mppx.test-d.ts +0 -270
  666. package/src/client/Mppx.test.ts +0 -1065
  667. package/src/client/Mppx.ts +0 -466
  668. package/src/client/Transport.test.ts +0 -619
  669. package/src/client/Transport.ts +0 -191
  670. package/src/client/index.ts +0 -29
  671. package/src/client/internal/Fetch.browser.test.ts +0 -197
  672. package/src/client/internal/Fetch.test-d.ts +0 -109
  673. package/src/client/internal/Fetch.test.ts +0 -2336
  674. package/src/client/internal/Fetch.ts +0 -1079
  675. package/src/client/internal/MethodChallenge.ts +0 -35
  676. package/src/client/internal/MethodResponse.ts +0 -67
  677. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  678. package/src/client/internal/protocols/Mcp.ts +0 -186
  679. package/src/client/internal/protocols/Mpp.ts +0 -21
  680. package/src/client/internal/protocols/Protocol.ts +0 -10
  681. package/src/client/internal/protocols/Shared.ts +0 -25
  682. package/src/client/internal/protocols/X402.ts +0 -46
  683. package/src/client/node.test.ts +0 -115
  684. package/src/client/node.ts +0 -247
  685. package/src/discovery/Discovery.test.ts +0 -214
  686. package/src/discovery/Discovery.ts +0 -105
  687. package/src/discovery/OpenApi.test.ts +0 -453
  688. package/src/discovery/OpenApi.ts +0 -224
  689. package/src/discovery/Validate.test.ts +0 -305
  690. package/src/discovery/Validate.ts +0 -77
  691. package/src/discovery/index.ts +0 -3
  692. package/src/env.d.ts +0 -12
  693. package/src/evm/Assets.ts +0 -1
  694. package/src/evm/Chains.ts +0 -11
  695. package/src/evm/Methods.ts +0 -44
  696. package/src/evm/PublicInterface.test-d.ts +0 -134
  697. package/src/evm/Types.ts +0 -140
  698. package/src/evm/client/Charge.test.ts +0 -347
  699. package/src/evm/client/Charge.ts +0 -187
  700. package/src/evm/client/Methods.ts +0 -19
  701. package/src/evm/client/index.ts +0 -6
  702. package/src/evm/index.ts +0 -16
  703. package/src/evm/server/Charge.test.ts +0 -339
  704. package/src/evm/server/Charge.ts +0 -290
  705. package/src/evm/server/Methods.ts +0 -22
  706. package/src/evm/server/index.ts +0 -6
  707. package/src/index.ts +0 -14
  708. package/src/internal/AcceptPayment.test.ts +0 -343
  709. package/src/internal/AcceptPayment.ts +0 -366
  710. package/src/internal/HeaderCodec.ts +0 -36
  711. package/src/internal/changeset.test.ts +0 -106
  712. package/src/internal/constantTimeEqual.test.ts +0 -47
  713. package/src/internal/constantTimeEqual.ts +0 -10
  714. package/src/internal/env.test.ts +0 -42
  715. package/src/internal/env.ts +0 -49
  716. package/src/internal/types.test-d.ts +0 -21
  717. package/src/internal/types.ts +0 -470
  718. package/src/mcp/client/McpClient.integration.test.ts +0 -652
  719. package/src/mcp/client/McpClient.test-d.ts +0 -144
  720. package/src/mcp/client/McpClient.test.ts +0 -463
  721. package/src/mcp/client/McpClient.ts +0 -307
  722. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  723. package/src/mcp/client/index.ts +0 -2
  724. package/src/mcp/server/Transport.test.ts +0 -191
  725. package/src/mcp/server/Transport.ts +0 -111
  726. package/src/mcp/server/index.ts +0 -1
  727. package/src/middlewares/elysia.test.ts +0 -295
  728. package/src/middlewares/elysia.ts +0 -116
  729. package/src/middlewares/express.test.ts +0 -371
  730. package/src/middlewares/express.ts +0 -140
  731. package/src/middlewares/hono.test.ts +0 -476
  732. package/src/middlewares/hono.ts +0 -153
  733. package/src/middlewares/internal/mppx.test.ts +0 -177
  734. package/src/middlewares/internal/mppx.ts +0 -67
  735. package/src/middlewares/nextjs.test.ts +0 -369
  736. package/src/middlewares/nextjs.ts +0 -107
  737. package/src/proxy/Proxy.test.ts +0 -1031
  738. package/src/proxy/Proxy.ts +0 -345
  739. package/src/proxy/Service.test.ts +0 -182
  740. package/src/proxy/Service.ts +0 -253
  741. package/src/proxy/index.ts +0 -6
  742. package/src/proxy/internal/Headers.test.ts +0 -139
  743. package/src/proxy/internal/Headers.ts +0 -66
  744. package/src/proxy/internal/Route.test.ts +0 -217
  745. package/src/proxy/internal/Route.ts +0 -64
  746. package/src/proxy/services/anthropic.test.ts +0 -132
  747. package/src/proxy/services/anthropic.ts +0 -52
  748. package/src/proxy/services/openai.test.ts +0 -157
  749. package/src/proxy/services/openai.ts +0 -59
  750. package/src/proxy/services/stripe.test.ts +0 -175
  751. package/src/proxy/services/stripe.ts +0 -58
  752. package/src/server/Methods.ts +0 -3
  753. package/src/server/Mppx.authorize.test.ts +0 -210
  754. package/src/server/Mppx.test-d.ts +0 -360
  755. package/src/server/Mppx.test.ts +0 -5813
  756. package/src/server/Mppx.ts +0 -2623
  757. package/src/server/NodeListener.test.ts +0 -293
  758. package/src/server/NodeListener.ts +0 -45
  759. package/src/server/Request.test.ts +0 -255
  760. package/src/server/Request.ts +0 -155
  761. package/src/server/Response.test.ts +0 -32
  762. package/src/server/Response.ts +0 -45
  763. package/src/server/Transport.test.ts +0 -598
  764. package/src/server/Transport.ts +0 -320
  765. package/src/server/index.ts +0 -9
  766. package/src/server/internal/html/compose.main.gen.ts +0 -2
  767. package/src/server/internal/html/compose.main.ts +0 -88
  768. package/src/server/internal/html/config.ts +0 -672
  769. package/src/server/internal/html/constants.ts +0 -28
  770. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  771. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  772. package/src/server/internal/html/serviceWorker.ts +0 -27
  773. package/src/server/internal/html/tsconfig.compose.json +0 -8
  774. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  775. package/src/server/internal/html/tsconfig.worker.json +0 -8
  776. package/src/server/internal/scope.ts +0 -43
  777. package/src/stripe/Charge.integration.test.ts +0 -329
  778. package/src/stripe/Methods.test.ts +0 -62
  779. package/src/stripe/Methods.ts +0 -44
  780. package/src/stripe/client/Charge.test.ts +0 -205
  781. package/src/stripe/client/Charge.ts +0 -132
  782. package/src/stripe/client/Methods.ts +0 -37
  783. package/src/stripe/client/index.ts +0 -2
  784. package/src/stripe/index.ts +0 -1
  785. package/src/stripe/internal/constants.ts +0 -7
  786. package/src/stripe/internal/types.ts +0 -46
  787. package/src/stripe/server/Charge.test-d.ts +0 -66
  788. package/src/stripe/server/Charge.test.ts +0 -621
  789. package/src/stripe/server/Charge.ts +0 -434
  790. package/src/stripe/server/Methods.ts +0 -24
  791. package/src/stripe/server/index.ts +0 -2
  792. package/src/stripe/server/internal/html/main.ts +0 -165
  793. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  794. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  795. package/src/stripe/server/internal/html/package.json +0 -9
  796. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  797. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  798. package/src/stripe/server/internal/html/types.ts +0 -5
  799. package/src/stripe/server/internal/html.gen.ts +0 -2
  800. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  801. package/src/tempo/Attribution.test.ts +0 -294
  802. package/src/tempo/Attribution.ts +0 -185
  803. package/src/tempo/Methods.test.ts +0 -425
  804. package/src/tempo/Methods.ts +0 -367
  805. package/src/tempo/Proof.conformance.test.ts +0 -146
  806. package/src/tempo/Proof.test-d.ts +0 -32
  807. package/src/tempo/Proof.test.ts +0 -40
  808. package/src/tempo/Proof.ts +0 -69
  809. package/src/tempo/PublicExports.test-d.ts +0 -130
  810. package/src/tempo/Subscription.integration.test.ts +0 -591
  811. package/src/tempo/client/Charge.test.ts +0 -501
  812. package/src/tempo/client/Charge.ts +0 -289
  813. package/src/tempo/client/Methods.ts +0 -45
  814. package/src/tempo/client/ResolveAccount.ts +0 -46
  815. package/src/tempo/client/Subscription.test.ts +0 -180
  816. package/src/tempo/client/Subscription.ts +0 -156
  817. package/src/tempo/client/index.ts +0 -17
  818. package/src/tempo/index.ts +0 -5
  819. package/src/tempo/internal/account.ts +0 -56
  820. package/src/tempo/internal/address.ts +0 -6
  821. package/src/tempo/internal/auto-swap.test.ts +0 -198
  822. package/src/tempo/internal/auto-swap.ts +0 -188
  823. package/src/tempo/internal/charge.test.ts +0 -66
  824. package/src/tempo/internal/charge.ts +0 -43
  825. package/src/tempo/internal/defaults.test.ts +0 -95
  826. package/src/tempo/internal/defaults.ts +0 -53
  827. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  828. package/src/tempo/internal/fee-payer.ts +0 -808
  829. package/src/tempo/internal/fee-token.test.ts +0 -165
  830. package/src/tempo/internal/fee-token.ts +0 -72
  831. package/src/tempo/internal/proof.test.ts +0 -97
  832. package/src/tempo/internal/proof.ts +0 -87
  833. package/src/tempo/internal/selectors.ts +0 -10
  834. package/src/tempo/internal/types.ts +0 -19
  835. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  836. package/src/tempo/legacy/README.md +0 -9
  837. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  838. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  839. package/src/tempo/legacy/client/Session.test.ts +0 -800
  840. package/src/tempo/legacy/client/Session.ts +0 -397
  841. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  842. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  843. package/src/tempo/legacy/client/index.ts +0 -6
  844. package/src/tempo/legacy/index.ts +0 -6
  845. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  846. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  847. package/src/tempo/legacy/server/Session.ts +0 -1024
  848. package/src/tempo/legacy/server/index.ts +0 -4
  849. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  850. package/src/tempo/legacy/session/Chain.ts +0 -830
  851. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  852. package/src/tempo/legacy/session/Channel.ts +0 -51
  853. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  854. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
  855. package/src/tempo/legacy/session/Types.ts +0 -91
  856. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  857. package/src/tempo/legacy/session/Voucher.ts +0 -183
  858. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  859. package/src/tempo/legacy/session/index.ts +0 -8
  860. package/src/tempo/server/AtomicStore.test-d.ts +0 -50
  861. package/src/tempo/server/Charge.test.ts +0 -6121
  862. package/src/tempo/server/Charge.ts +0 -1351
  863. package/src/tempo/server/Methods.ts +0 -106
  864. package/src/tempo/server/Relay.test.ts +0 -677
  865. package/src/tempo/server/Relay.ts +0 -297
  866. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  867. package/src/tempo/server/SponsorBudget.ts +0 -219
  868. package/src/tempo/server/Sse.test.ts +0 -321
  869. package/src/tempo/server/Subscription.test.ts +0 -1944
  870. package/src/tempo/server/Subscription.ts +0 -1333
  871. package/src/tempo/server/index.ts +0 -12
  872. package/src/tempo/server/internal/html/main.ts +0 -115
  873. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  874. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  875. package/src/tempo/server/internal/html/package.json +0 -10
  876. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  877. package/src/tempo/server/internal/html.gen.ts +0 -2
  878. package/src/tempo/server/internal/request-body.test.ts +0 -210
  879. package/src/tempo/server/internal/request-body.ts +0 -61
  880. package/src/tempo/server/internal/transport.test.ts +0 -903
  881. package/src/tempo/server/internal/transport.ts +0 -310
  882. package/src/tempo/session/README.md +0 -208
  883. package/src/tempo/session/Snapshot.test.ts +0 -41
  884. package/src/tempo/session/Snapshot.ts +0 -95
  885. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  886. package/src/tempo/session/client/ChannelOps.ts +0 -348
  887. package/src/tempo/session/client/ChannelStore.ts +0 -111
  888. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  889. package/src/tempo/session/client/CredentialState.ts +0 -942
  890. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  891. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  892. package/src/tempo/session/client/Runtime.ts +0 -1008
  893. package/src/tempo/session/client/Session.test.ts +0 -1355
  894. package/src/tempo/session/client/Session.ts +0 -420
  895. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  896. package/src/tempo/session/client/SessionManager.ts +0 -996
  897. package/src/tempo/session/client/Transports.test.ts +0 -1141
  898. package/src/tempo/session/client/Transports.ts +0 -1534
  899. package/src/tempo/session/client/index.ts +0 -40
  900. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  901. package/src/tempo/session/index.ts +0 -7
  902. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  903. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  904. package/src/tempo/session/precompile/Chain.ts +0 -1149
  905. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  906. package/src/tempo/session/precompile/Channel.ts +0 -108
  907. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  908. package/src/tempo/session/precompile/Protocol.ts +0 -520
  909. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  910. package/src/tempo/session/precompile/Voucher.ts +0 -162
  911. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  912. package/src/tempo/session/precompile/index.ts +0 -33
  913. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  914. package/src/tempo/session/server/ChannelOps.ts +0 -157
  915. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  916. package/src/tempo/session/server/ChannelStore.ts +0 -835
  917. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  918. package/src/tempo/session/server/CredentialVerification.ts +0 -775
  919. package/src/tempo/session/server/MeteredStream.ts +0 -95
  920. package/src/tempo/session/server/RequestState.test.ts +0 -574
  921. package/src/tempo/session/server/RequestState.ts +0 -507
  922. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  923. package/src/tempo/session/server/Session.test.ts +0 -3862
  924. package/src/tempo/session/server/Session.ts +0 -570
  925. package/src/tempo/session/server/Settlement.test.ts +0 -345
  926. package/src/tempo/session/server/Settlement.ts +0 -527
  927. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  928. package/src/tempo/session/server/Sse.test.ts +0 -557
  929. package/src/tempo/session/server/Sse.ts +0 -254
  930. package/src/tempo/session/server/Transports.test.ts +0 -346
  931. package/src/tempo/session/server/Transports.ts +0 -255
  932. package/src/tempo/session/server/Ws.test.ts +0 -594
  933. package/src/tempo/session/server/Ws.ts +0 -385
  934. package/src/tempo/session/server/index.ts +0 -12
  935. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  936. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  937. package/src/tempo/subscription/Receipt.ts +0 -28
  938. package/src/tempo/subscription/Store.test.ts +0 -609
  939. package/src/tempo/subscription/Store.ts +0 -449
  940. package/src/tempo/subscription/Types.ts +0 -68
  941. package/src/tempo/subscription/index.ts +0 -23
  942. package/src/tsconfig.json +0 -10
  943. package/src/validation/core.ts +0 -386
  944. package/src/validation/index.ts +0 -11
  945. package/src/viem/Account.test.ts +0 -72
  946. package/src/viem/Account.ts +0 -30
  947. package/src/viem/Client.test.ts +0 -366
  948. package/src/viem/Client.ts +0 -93
  949. package/src/x402/Assets.test.ts +0 -253
  950. package/src/x402/Assets.ts +0 -221
  951. package/src/x402/Exact.e2e.test.ts +0 -448
  952. package/src/x402/Exact.localnet.test.ts +0 -475
  953. package/src/x402/Header.test.ts +0 -73
  954. package/src/x402/Header.ts +0 -79
  955. package/src/x402/PublicInterface.test-d.ts +0 -39
  956. package/src/x402/Types.ts +0 -248
  957. package/src/x402/client/Exact.test.ts +0 -309
  958. package/src/x402/client/Exact.ts +0 -186
  959. package/src/x402/index.ts +0 -6
  960. package/src/x402/internal/ChallengeBrand.ts +0 -14
  961. package/src/x402/internal/RouteBinding.ts +0 -18
  962. package/src/x402/server/EvmCharge.ts +0 -394
  963. package/src/x402/server/Facilitator.test.ts +0 -111
  964. package/src/x402/server/Facilitator.ts +0 -56
  965. package/src/zod.test.ts +0 -169
  966. package/src/zod.ts +0 -71
@@ -1,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')