mppx 0.6.30 → 0.7.0

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 (483) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/Challenge.d.ts.map +1 -1
  3. package/dist/Challenge.js +9 -7
  4. package/dist/Challenge.js.map +1 -1
  5. package/dist/Constants.d.ts +46 -0
  6. package/dist/Constants.d.ts.map +1 -0
  7. package/dist/Constants.js +46 -0
  8. package/dist/Constants.js.map +1 -0
  9. package/dist/Credential.d.ts.map +1 -1
  10. package/dist/Credential.js +5 -4
  11. package/dist/Credential.js.map +1 -1
  12. package/dist/Method.d.ts +32 -4
  13. package/dist/Method.d.ts.map +1 -1
  14. package/dist/Method.js +5 -2
  15. package/dist/Method.js.map +1 -1
  16. package/dist/Receipt.d.ts.map +1 -1
  17. package/dist/Receipt.js +3 -2
  18. package/dist/Receipt.js.map +1 -1
  19. package/dist/cli/cli.d.ts.map +1 -1
  20. package/dist/cli/cli.js +19 -11
  21. package/dist/cli/cli.js.map +1 -1
  22. package/dist/cli/plugins/tempo.d.ts.map +1 -1
  23. package/dist/cli/plugins/tempo.js +17 -6
  24. package/dist/cli/plugins/tempo.js.map +1 -1
  25. package/dist/cli/utils.d.ts +5 -0
  26. package/dist/cli/utils.d.ts.map +1 -1
  27. package/dist/cli/utils.js +10 -0
  28. package/dist/cli/utils.js.map +1 -1
  29. package/dist/client/Methods.d.ts +5 -2
  30. package/dist/client/Methods.d.ts.map +1 -1
  31. package/dist/client/Methods.js +5 -2
  32. package/dist/client/Methods.js.map +1 -1
  33. package/dist/client/Transport.d.ts.map +1 -1
  34. package/dist/client/Transport.js +4 -5
  35. package/dist/client/Transport.js.map +1 -1
  36. package/dist/client/index.d.ts +2 -1
  37. package/dist/client/index.d.ts.map +1 -1
  38. package/dist/client/index.js +2 -1
  39. package/dist/client/index.js.map +1 -1
  40. package/dist/client/internal/Fetch.d.ts.map +1 -1
  41. package/dist/client/internal/Fetch.js +14 -6
  42. package/dist/client/internal/Fetch.js.map +1 -1
  43. package/dist/evm/server/Methods.d.ts +1 -1
  44. package/dist/evm/server/Methods.d.ts.map +1 -1
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/internal/AcceptPayment.d.ts +3 -0
  50. package/dist/internal/AcceptPayment.d.ts.map +1 -1
  51. package/dist/internal/AcceptPayment.js +15 -11
  52. package/dist/internal/AcceptPayment.js.map +1 -1
  53. package/dist/mcp-sdk/client/McpClient.d.ts +12 -5
  54. package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -1
  55. package/dist/mcp-sdk/client/McpClient.js +55 -42
  56. package/dist/mcp-sdk/client/McpClient.js.map +1 -1
  57. package/dist/server/Mppx.d.ts +11 -3
  58. package/dist/server/Mppx.d.ts.map +1 -1
  59. package/dist/server/Mppx.js +76 -27
  60. package/dist/server/Mppx.js.map +1 -1
  61. package/dist/server/Request.js +24 -10
  62. package/dist/server/Request.js.map +1 -1
  63. package/dist/server/Response.d.ts.map +1 -1
  64. package/dist/server/Response.js +2 -1
  65. package/dist/server/Response.js.map +1 -1
  66. package/dist/server/Transport.d.ts.map +1 -1
  67. package/dist/server/Transport.js +4 -3
  68. package/dist/server/Transport.js.map +1 -1
  69. package/dist/server/index.d.ts +1 -0
  70. package/dist/server/index.d.ts.map +1 -1
  71. package/dist/server/index.js +1 -0
  72. package/dist/server/index.js.map +1 -1
  73. package/dist/stripe/client/Charge.d.ts +1 -1
  74. package/dist/stripe/client/Charge.d.ts.map +1 -1
  75. package/dist/stripe/client/Charge.js +3 -1
  76. package/dist/stripe/client/Charge.js.map +1 -1
  77. package/dist/stripe/server/Charge.d.ts +1 -1
  78. package/dist/stripe/server/Charge.d.ts.map +1 -1
  79. package/dist/stripe/server/Charge.js +9 -2
  80. package/dist/stripe/server/Charge.js.map +1 -1
  81. package/dist/stripe/server/Methods.d.ts +1 -1
  82. package/dist/stripe/server/Methods.d.ts.map +1 -1
  83. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  84. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  85. package/dist/stripe/server/internal/html.gen.js +1 -1
  86. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  87. package/dist/tempo/Methods.d.ts +18 -0
  88. package/dist/tempo/Methods.d.ts.map +1 -1
  89. package/dist/tempo/Methods.js +16 -1
  90. package/dist/tempo/Methods.js.map +1 -1
  91. package/dist/tempo/client/Charge.d.ts +6 -0
  92. package/dist/tempo/client/Charge.d.ts.map +1 -1
  93. package/dist/tempo/client/Charge.js +9 -2
  94. package/dist/tempo/client/Charge.js.map +1 -1
  95. package/dist/tempo/client/Methods.d.ts +36 -7
  96. package/dist/tempo/client/Methods.d.ts.map +1 -1
  97. package/dist/tempo/client/Methods.js +12 -5
  98. package/dist/tempo/client/Methods.js.map +1 -1
  99. package/dist/tempo/client/index.d.ts +7 -4
  100. package/dist/tempo/client/index.d.ts.map +1 -1
  101. package/dist/tempo/client/index.js +5 -3
  102. package/dist/tempo/client/index.js.map +1 -1
  103. package/dist/tempo/index.d.ts +1 -0
  104. package/dist/tempo/index.d.ts.map +1 -1
  105. package/dist/tempo/index.js +1 -0
  106. package/dist/tempo/index.js.map +1 -1
  107. package/dist/tempo/internal/fee-payer.d.ts +21 -1
  108. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  109. package/dist/tempo/internal/fee-payer.js +109 -4
  110. package/dist/tempo/internal/fee-payer.js.map +1 -1
  111. package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
  112. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
  113. package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
  114. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
  115. package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
  116. package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
  117. package/dist/tempo/{client → legacy/client}/Session.js +14 -7
  118. package/dist/tempo/legacy/client/Session.js.map +1 -0
  119. package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
  120. package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
  121. package/dist/tempo/{client → legacy/client}/SessionManager.js +20 -16
  122. package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
  123. package/dist/tempo/legacy/client/index.d.ts +7 -0
  124. package/dist/tempo/legacy/client/index.d.ts.map +1 -0
  125. package/dist/tempo/legacy/client/index.js +5 -0
  126. package/dist/tempo/legacy/client/index.js.map +1 -0
  127. package/dist/tempo/legacy/index.d.ts +7 -0
  128. package/dist/tempo/legacy/index.d.ts.map +1 -0
  129. package/dist/tempo/legacy/index.js +7 -0
  130. package/dist/tempo/legacy/index.js.map +1 -0
  131. package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
  132. package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
  133. package/dist/tempo/{server → legacy/server}/Session.js +28 -23
  134. package/dist/tempo/legacy/server/Session.js.map +1 -0
  135. package/dist/tempo/legacy/server/index.d.ts +5 -0
  136. package/dist/tempo/legacy/server/index.d.ts.map +1 -0
  137. package/dist/tempo/legacy/server/index.js +5 -0
  138. package/dist/tempo/legacy/server/index.js.map +1 -0
  139. package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
  140. package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
  141. package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
  142. package/dist/tempo/legacy/session/Chain.js.map +1 -0
  143. package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
  144. package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
  145. package/dist/tempo/legacy/session/Channel.js.map +1 -0
  146. package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
  147. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
  148. package/dist/tempo/legacy/session/ChannelStore.js +6 -0
  149. package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
  150. package/dist/tempo/legacy/session/Types.d.ts +73 -0
  151. package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
  152. package/dist/tempo/legacy/session/Types.js.map +1 -0
  153. package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
  154. package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
  155. package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
  156. package/dist/tempo/legacy/session/Voucher.js.map +1 -0
  157. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
  158. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
  159. package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
  160. package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
  161. package/dist/tempo/legacy/session/index.d.ts +9 -0
  162. package/dist/tempo/legacy/session/index.d.ts.map +1 -0
  163. package/dist/tempo/legacy/session/index.js +9 -0
  164. package/dist/tempo/legacy/session/index.js.map +1 -0
  165. package/dist/tempo/server/Charge.d.ts +1 -1
  166. package/dist/tempo/server/Charge.d.ts.map +1 -1
  167. package/dist/tempo/server/Charge.js +13 -16
  168. package/dist/tempo/server/Charge.js.map +1 -1
  169. package/dist/tempo/server/Methods.d.ts +63 -6
  170. package/dist/tempo/server/Methods.d.ts.map +1 -1
  171. package/dist/tempo/server/Methods.js +36 -8
  172. package/dist/tempo/server/Methods.js.map +1 -1
  173. package/dist/tempo/server/Subscription.d.ts +1 -1
  174. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  175. package/dist/tempo/server/index.d.ts +6 -5
  176. package/dist/tempo/server/index.d.ts.map +1 -1
  177. package/dist/tempo/server/index.js +5 -5
  178. package/dist/tempo/server/index.js.map +1 -1
  179. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  180. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  181. package/dist/tempo/server/internal/html.gen.js +1 -1
  182. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  183. package/dist/tempo/server/internal/request-body.d.ts +7 -2
  184. package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
  185. package/dist/tempo/server/internal/request-body.js +20 -3
  186. package/dist/tempo/server/internal/request-body.js.map +1 -1
  187. package/dist/tempo/server/internal/transport.d.ts +8 -4
  188. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  189. package/dist/tempo/server/internal/transport.js +8 -7
  190. package/dist/tempo/server/internal/transport.js.map +1 -1
  191. package/dist/tempo/session/Snapshot.d.ts +32 -0
  192. package/dist/tempo/session/Snapshot.d.ts.map +1 -0
  193. package/dist/tempo/session/Snapshot.js +37 -0
  194. package/dist/tempo/session/Snapshot.js.map +1 -0
  195. package/dist/tempo/session/client/ChannelOps.d.ts +82 -0
  196. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
  197. package/dist/tempo/session/client/ChannelOps.js +204 -0
  198. package/dist/tempo/session/client/ChannelOps.js.map +1 -0
  199. package/dist/tempo/session/client/CredentialState.d.ts +262 -0
  200. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
  201. package/dist/tempo/session/client/CredentialState.js +417 -0
  202. package/dist/tempo/session/client/CredentialState.js.map +1 -0
  203. package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
  204. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
  205. package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
  206. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
  207. package/dist/tempo/session/client/Runtime.d.ts +464 -0
  208. package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
  209. package/dist/tempo/session/client/Runtime.js +499 -0
  210. package/dist/tempo/session/client/Runtime.js.map +1 -0
  211. package/dist/tempo/session/client/Session.d.ts +132 -0
  212. package/dist/tempo/session/client/Session.d.ts.map +1 -0
  213. package/dist/tempo/session/client/Session.js +55 -0
  214. package/dist/tempo/session/client/Session.js.map +1 -0
  215. package/dist/tempo/session/client/SessionManager.d.ts +120 -0
  216. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
  217. package/dist/tempo/session/client/SessionManager.js +627 -0
  218. package/dist/tempo/session/client/SessionManager.js.map +1 -0
  219. package/dist/tempo/session/client/Transports.d.ts +449 -0
  220. package/dist/tempo/session/client/Transports.d.ts.map +1 -0
  221. package/dist/tempo/session/client/Transports.js +721 -0
  222. package/dist/tempo/session/client/Transports.js.map +1 -0
  223. package/dist/tempo/session/client/index.d.ts +12 -0
  224. package/dist/tempo/session/client/index.d.ts.map +1 -0
  225. package/dist/tempo/session/client/index.js +5 -0
  226. package/dist/tempo/session/client/index.js.map +1 -0
  227. package/dist/tempo/session/index.d.ts +7 -8
  228. package/dist/tempo/session/index.d.ts.map +1 -1
  229. package/dist/tempo/session/index.js +7 -8
  230. package/dist/tempo/session/index.js.map +1 -1
  231. package/dist/tempo/session/precompile/Chain.d.ts +319 -0
  232. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
  233. package/dist/tempo/session/precompile/Chain.js +492 -0
  234. package/dist/tempo/session/precompile/Chain.js.map +1 -0
  235. package/dist/tempo/session/precompile/Channel.d.ts +46 -0
  236. package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
  237. package/dist/tempo/session/precompile/Channel.js +56 -0
  238. package/dist/tempo/session/precompile/Channel.js.map +1 -0
  239. package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
  240. package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
  241. package/dist/tempo/session/precompile/Protocol.js +264 -0
  242. package/dist/tempo/session/precompile/Protocol.js.map +1 -0
  243. package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
  244. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
  245. package/dist/tempo/session/precompile/Voucher.js +126 -0
  246. package/dist/tempo/session/precompile/Voucher.js.map +1 -0
  247. package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
  248. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
  249. package/dist/tempo/session/precompile/escrow.abi.js +224 -0
  250. package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
  251. package/dist/tempo/session/precompile/index.d.ts +24 -0
  252. package/dist/tempo/session/precompile/index.d.ts.map +1 -0
  253. package/dist/tempo/session/precompile/index.js +22 -0
  254. package/dist/tempo/session/precompile/index.js.map +1 -0
  255. package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
  256. package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
  257. package/dist/tempo/session/server/ChannelOps.js +91 -0
  258. package/dist/tempo/session/server/ChannelOps.js.map +1 -0
  259. package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
  260. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
  261. package/dist/tempo/session/server/ChannelStore.js +404 -0
  262. package/dist/tempo/session/server/ChannelStore.js.map +1 -0
  263. package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
  264. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
  265. package/dist/tempo/session/server/CredentialVerification.js +494 -0
  266. package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
  267. package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
  268. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
  269. package/dist/tempo/session/server/MeteredStream.js +42 -0
  270. package/dist/tempo/session/server/MeteredStream.js.map +1 -0
  271. package/dist/tempo/session/server/RequestState.d.ts +208 -0
  272. package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
  273. package/dist/tempo/session/server/RequestState.js +252 -0
  274. package/dist/tempo/session/server/RequestState.js.map +1 -0
  275. package/dist/tempo/session/server/Session.d.ts +169 -0
  276. package/dist/tempo/session/server/Session.d.ts.map +1 -0
  277. package/dist/tempo/session/server/Session.js +351 -0
  278. package/dist/tempo/session/server/Session.js.map +1 -0
  279. package/dist/tempo/session/server/Settlement.d.ts +185 -0
  280. package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
  281. package/dist/tempo/session/server/Settlement.js +250 -0
  282. package/dist/tempo/session/server/Settlement.js.map +1 -0
  283. package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
  284. package/dist/tempo/session/server/Sse.d.ts.map +1 -0
  285. package/dist/tempo/session/server/Sse.js +184 -0
  286. package/dist/tempo/session/server/Sse.js.map +1 -0
  287. package/dist/tempo/session/server/Transports.d.ts +89 -0
  288. package/dist/tempo/session/server/Transports.d.ts.map +1 -0
  289. package/dist/tempo/session/server/Transports.js +149 -0
  290. package/dist/tempo/session/server/Transports.js.map +1 -0
  291. package/dist/tempo/session/server/Ws.d.ts +48 -0
  292. package/dist/tempo/session/server/Ws.d.ts.map +1 -0
  293. package/dist/tempo/session/server/Ws.js +244 -0
  294. package/dist/tempo/session/server/Ws.js.map +1 -0
  295. package/dist/tempo/session/server/index.d.ts +4 -0
  296. package/dist/tempo/session/server/index.d.ts.map +1 -0
  297. package/dist/tempo/session/server/index.js +2 -0
  298. package/dist/tempo/session/server/index.js.map +1 -0
  299. package/package.json +8 -3
  300. package/src/Challenge.ts +9 -7
  301. package/src/Constants.ts +58 -0
  302. package/src/Credential.ts +5 -4
  303. package/src/Method.ts +46 -5
  304. package/src/Receipt.ts +3 -2
  305. package/src/cli/cli.test.ts +23 -28
  306. package/src/cli/cli.ts +23 -10
  307. package/src/cli/mcp.test.ts +21 -7
  308. package/src/cli/plugins/tempo.ts +21 -8
  309. package/src/cli/utils.test.ts +25 -1
  310. package/src/cli/utils.ts +10 -0
  311. package/src/client/Methods.ts +5 -2
  312. package/src/client/Mppx.test-d.ts +10 -0
  313. package/src/client/Mppx.test.ts +75 -0
  314. package/src/client/Transport.ts +4 -5
  315. package/src/client/index.ts +11 -1
  316. package/src/client/internal/Fetch.test.ts +29 -4
  317. package/src/client/internal/Fetch.ts +17 -5
  318. package/src/env.d.ts +1 -1
  319. package/src/index.ts +1 -0
  320. package/src/internal/AcceptPayment.test.ts +61 -0
  321. package/src/internal/AcceptPayment.ts +21 -14
  322. package/src/mcp-sdk/client/McpClient.integration.test.ts +8 -7
  323. package/src/mcp-sdk/client/McpClient.test-d.ts +7 -0
  324. package/src/mcp-sdk/client/McpClient.ts +99 -67
  325. package/src/mcp-sdk/client/McpClient.unit.test.ts +131 -0
  326. package/src/middlewares/elysia.test.ts +8 -4
  327. package/src/middlewares/express.test.ts +8 -4
  328. package/src/middlewares/hono.test.ts +4 -4
  329. package/src/middlewares/nextjs.test.ts +8 -4
  330. package/src/proxy/Proxy.test.ts +8 -8
  331. package/src/server/Mppx.test-d.ts +54 -0
  332. package/src/server/Mppx.test.ts +274 -7
  333. package/src/server/Mppx.ts +487 -406
  334. package/src/server/Request.test.ts +81 -0
  335. package/src/server/Request.ts +23 -9
  336. package/src/server/Response.ts +2 -1
  337. package/src/server/Transport.ts +4 -3
  338. package/src/server/index.ts +1 -0
  339. package/src/stripe/client/Charge.test.ts +20 -5
  340. package/src/stripe/client/Charge.ts +6 -2
  341. package/src/stripe/server/Charge.test.ts +114 -1
  342. package/src/stripe/server/Charge.ts +13 -2
  343. package/src/stripe/server/internal/html/package.json +1 -1
  344. package/src/stripe/server/internal/html.gen.ts +1 -1
  345. package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
  346. package/src/tempo/Methods.test.ts +45 -17
  347. package/src/tempo/Methods.ts +22 -0
  348. package/src/tempo/PublicExports.test-d.ts +105 -0
  349. package/src/tempo/client/Charge.test.ts +85 -0
  350. package/src/tempo/client/Charge.ts +19 -2
  351. package/src/tempo/client/Methods.ts +18 -6
  352. package/src/tempo/client/index.ts +15 -4
  353. package/src/tempo/index.ts +1 -0
  354. package/src/tempo/internal/fee-payer.test.ts +241 -17
  355. package/src/tempo/internal/fee-payer.ts +150 -4
  356. package/src/tempo/internal/fee-token.test.ts +14 -9
  357. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
  358. package/src/tempo/legacy/README.md +9 -0
  359. package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
  360. package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
  361. package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
  362. package/src/tempo/{client → legacy/client}/Session.ts +25 -11
  363. package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
  364. package/src/tempo/{client → legacy/client}/SessionManager.ts +41 -20
  365. package/src/tempo/legacy/client/index.ts +6 -0
  366. package/src/tempo/legacy/index.ts +6 -0
  367. package/src/tempo/{server → legacy/server}/Session.test.ts +162 -63
  368. package/src/tempo/{server → legacy/server}/Session.ts +49 -37
  369. package/src/tempo/legacy/server/index.ts +4 -0
  370. package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
  371. package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
  372. package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
  373. package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
  374. package/src/tempo/legacy/session/ChannelStore.ts +39 -0
  375. package/src/tempo/legacy/session/Types.ts +91 -0
  376. package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
  377. package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
  378. package/src/tempo/legacy/session/index.ts +8 -0
  379. package/src/tempo/server/AtomicStore.test-d.ts +16 -11
  380. package/src/tempo/server/Charge.test.ts +92 -14
  381. package/src/tempo/server/Charge.ts +18 -16
  382. package/src/tempo/server/Methods.ts +54 -8
  383. package/src/tempo/server/Sse.test.ts +2 -2
  384. package/src/tempo/server/index.ts +6 -5
  385. package/src/tempo/server/internal/html/package.json +1 -1
  386. package/src/tempo/server/internal/html.gen.ts +1 -1
  387. package/src/tempo/server/internal/request-body.test.ts +37 -4
  388. package/src/tempo/server/internal/request-body.ts +25 -6
  389. package/src/tempo/server/internal/transport.test.ts +4 -4
  390. package/src/tempo/server/internal/transport.ts +19 -10
  391. package/src/tempo/session/Snapshot.test.ts +41 -0
  392. package/src/tempo/session/Snapshot.ts +74 -0
  393. package/src/tempo/session/client/ChannelOps.test.ts +163 -0
  394. package/src/tempo/session/client/ChannelOps.ts +344 -0
  395. package/src/tempo/session/client/CredentialState.test.ts +645 -0
  396. package/src/tempo/session/client/CredentialState.ts +814 -0
  397. package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
  398. package/src/tempo/session/client/Runtime.test.ts +1092 -0
  399. package/src/tempo/session/client/Runtime.ts +986 -0
  400. package/src/tempo/session/client/Session.test.ts +734 -0
  401. package/src/tempo/session/client/Session.ts +97 -0
  402. package/src/tempo/session/client/SessionManager.test.ts +1308 -0
  403. package/src/tempo/session/client/SessionManager.ts +845 -0
  404. package/src/tempo/session/client/Transports.test.ts +837 -0
  405. package/src/tempo/session/client/Transports.ts +1292 -0
  406. package/src/tempo/session/client/index.ts +37 -0
  407. package/src/tempo/session/index.ts +7 -8
  408. package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
  409. package/src/tempo/session/precompile/Chain.test.ts +1258 -0
  410. package/src/tempo/session/precompile/Chain.ts +979 -0
  411. package/src/tempo/session/precompile/Channel.test.ts +138 -0
  412. package/src/tempo/session/precompile/Channel.ts +103 -0
  413. package/src/tempo/session/precompile/Protocol.test.ts +358 -0
  414. package/src/tempo/session/precompile/Protocol.ts +520 -0
  415. package/src/tempo/session/precompile/Voucher.test.ts +316 -0
  416. package/src/tempo/session/precompile/Voucher.ts +160 -0
  417. package/src/tempo/session/precompile/escrow.abi.ts +226 -0
  418. package/src/tempo/session/precompile/index.ts +33 -0
  419. package/src/tempo/session/server/ChannelOps.test.ts +129 -0
  420. package/src/tempo/session/server/ChannelOps.ts +157 -0
  421. package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
  422. package/src/tempo/session/server/ChannelStore.ts +835 -0
  423. package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
  424. package/src/tempo/session/server/CredentialVerification.ts +710 -0
  425. package/src/tempo/session/server/MeteredStream.ts +88 -0
  426. package/src/tempo/session/server/RequestState.test.ts +531 -0
  427. package/src/tempo/session/server/RequestState.ts +499 -0
  428. package/src/tempo/session/server/Session.integration.test.ts +444 -0
  429. package/src/tempo/session/server/Session.test.ts +3253 -0
  430. package/src/tempo/session/server/Session.ts +543 -0
  431. package/src/tempo/session/server/Settlement.test.ts +242 -0
  432. package/src/tempo/session/server/Settlement.ts +470 -0
  433. package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
  434. package/src/tempo/session/server/Sse.ts +256 -0
  435. package/src/tempo/session/server/Transports.test.ts +346 -0
  436. package/src/tempo/session/server/Transports.ts +255 -0
  437. package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
  438. package/src/tempo/session/server/Ws.ts +384 -0
  439. package/src/tempo/session/server/index.ts +8 -0
  440. package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
  441. package/dist/tempo/client/ChannelOps.js.map +0 -1
  442. package/dist/tempo/client/Session.d.ts.map +0 -1
  443. package/dist/tempo/client/Session.js.map +0 -1
  444. package/dist/tempo/client/SessionManager.d.ts.map +0 -1
  445. package/dist/tempo/client/SessionManager.js.map +0 -1
  446. package/dist/tempo/server/Session.d.ts.map +0 -1
  447. package/dist/tempo/server/Session.js.map +0 -1
  448. package/dist/tempo/session/Chain.d.ts.map +0 -1
  449. package/dist/tempo/session/Chain.js.map +0 -1
  450. package/dist/tempo/session/Channel.d.ts.map +0 -1
  451. package/dist/tempo/session/Channel.js.map +0 -1
  452. package/dist/tempo/session/ChannelStore.d.ts +0 -117
  453. package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
  454. package/dist/tempo/session/ChannelStore.js +0 -172
  455. package/dist/tempo/session/ChannelStore.js.map +0 -1
  456. package/dist/tempo/session/Receipt.d.ts +0 -22
  457. package/dist/tempo/session/Receipt.d.ts.map +0 -1
  458. package/dist/tempo/session/Receipt.js +0 -34
  459. package/dist/tempo/session/Receipt.js.map +0 -1
  460. package/dist/tempo/session/Sse.d.ts.map +0 -1
  461. package/dist/tempo/session/Sse.js +0 -363
  462. package/dist/tempo/session/Sse.js.map +0 -1
  463. package/dist/tempo/session/Types.d.ts +0 -78
  464. package/dist/tempo/session/Types.d.ts.map +0 -1
  465. package/dist/tempo/session/Types.js.map +0 -1
  466. package/dist/tempo/session/Voucher.d.ts.map +0 -1
  467. package/dist/tempo/session/Voucher.js.map +0 -1
  468. package/dist/tempo/session/Ws.d.ts +0 -87
  469. package/dist/tempo/session/Ws.d.ts.map +0 -1
  470. package/dist/tempo/session/Ws.js +0 -443
  471. package/dist/tempo/session/Ws.js.map +0 -1
  472. package/dist/tempo/session/escrow.abi.js.map +0 -1
  473. package/src/tempo/session/ChannelStore.ts +0 -308
  474. package/src/tempo/session/Receipt.test.ts +0 -89
  475. package/src/tempo/session/Receipt.ts +0 -46
  476. package/src/tempo/session/Sse.ts +0 -462
  477. package/src/tempo/session/Types.ts +0 -86
  478. package/src/tempo/session/Ws.ts +0 -576
  479. /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
  480. /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
  481. /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
  482. /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
  483. /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
@@ -21,10 +21,8 @@ import { waitForTransactionReceipt } from 'viem/actions'
21
21
  import { Account as TempoAccount, Actions, Addresses } from 'viem/tempo'
22
22
  import { beforeAll, beforeEach, describe, expect, expectTypeOf, test } from 'vp/test'
23
23
  import { WebSocketServer } from 'ws'
24
- import { nodeEnv } from '~test/config.js'
24
+ import { tempoNetwork } from '~test/config.js'
25
25
  import * as Http from '~test/Http.js'
26
-
27
- const isLocalnet = nodeEnv === 'localnet'
28
26
  import {
29
27
  closeChannelOnChain,
30
28
  deployEscrow,
@@ -32,7 +30,7 @@ import {
32
30
  signOpenChannel,
33
31
  signTopUpChannel,
34
32
  topUpChannel,
35
- } from '~test/tempo/session.js'
33
+ } from '~test/tempo/legacy/session.js'
36
34
  import { accounts, asset, chain, client, fundAccount, http } from '~test/tempo/viem.js'
37
35
 
38
36
  import {
@@ -40,21 +38,22 @@ import {
40
38
  ChannelNotFoundError,
41
39
  InsufficientBalanceError,
42
40
  InvalidSignatureError,
43
- } from '../../Errors.js'
44
- import * as NodeRequest from '../../server/Request.js'
45
- import * as Store from '../../Store.js'
46
- import { sessionManager } from '../client/SessionManager.js'
41
+ } from '../../../Errors.js'
42
+ import * as NodeRequest from '../../../server/Request.js'
43
+ import * as Store from '../../../Store.js'
47
44
  import {
48
45
  chainId as chainIdDefaults,
49
46
  escrowContract as escrowContractDefaults,
50
- } from '../internal/defaults.js'
51
- import type * as Methods from '../Methods.js'
47
+ } from '../../internal/defaults.js'
48
+ import type * as Methods from '../../Methods.js'
49
+ import { deserializeSessionReceipt } from '../../session/precompile/Protocol.js'
50
+ import { serializeSessionReceipt } from '../../session/precompile/Protocol.js'
51
+ import type { SessionReceipt } from '../../session/precompile/Protocol.js'
52
+ import * as TempoWs from '../../session/server/Ws.js'
53
+ import { sessionManager } from '../client/SessionManager.js'
52
54
  import * as ChannelStore from '../session/ChannelStore.js'
53
- import { deserializeSessionReceipt } from '../session/Receipt.js'
54
- import { serializeSessionReceipt } from '../session/Receipt.js'
55
- import type { SessionCredentialPayload, SessionReceipt } from '../session/Types.js'
55
+ import type { LegacySessionCredentialPayload } from '../session/Types.js'
56
56
  import { signVoucher } from '../session/Voucher.js'
57
- import * as TempoWs from '../session/Ws.js'
58
57
  import { charge, session, settle } from './Session.js'
59
58
 
60
59
  const payer = accounts[2]
@@ -62,6 +61,7 @@ const delegatedSigner = accounts[4]
62
61
  const recipientAccount = accounts[0]
63
62
  const recipient = accounts[0].address
64
63
  const currency = asset
64
+ const isLocalnet = tempoNetwork === 'localnet'
65
65
 
66
66
  let escrowContract: Address
67
67
  let saltCounter = 0
@@ -112,7 +112,7 @@ describe.runIf(isLocalnet)('session', () => {
112
112
  function createHandler(overrides: Partial<session.Parameters> = {}) {
113
113
  return Mppx_server.create({
114
114
  methods: [
115
- tempo_server.session({
115
+ tempo_server.sessionLegacy({
116
116
  store: rawStore,
117
117
  getClient: () => client,
118
118
  account: recipientAccount,
@@ -486,7 +486,7 @@ describe.runIf(isLocalnet)('session', () => {
486
486
  },
487
487
  request: makeRequest(),
488
488
  }),
489
- ).rejects.toThrow('voucher amount is below settled on-chain amount')
489
+ ).rejects.toThrow('voucher amount is at or below settled on-chain amount')
490
490
  })
491
491
 
492
492
  test('zero signer fallback uses payer', async () => {
@@ -698,27 +698,128 @@ describe.runIf(isLocalnet)('session', () => {
698
698
  ).rejects.toThrow(InvalidSignatureError)
699
699
  })
700
700
 
701
- test('rejects non-increasing voucher replay', async () => {
701
+ test('accepts lower voucher replay idempotently', async () => {
702
702
  const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
703
703
  const server = createServer()
704
704
  await openServerChannel(server, channelId, serializedTransaction)
705
705
 
706
+ const before = await store.getChannel(channelId)
707
+
708
+ // A non-advancing voucher (below highest, above settled) is accepted
709
+ // idempotently with the current highest amount, per the session spec.
710
+ const receipt = (await server.verify({
711
+ credential: {
712
+ challenge: makeChallenge({ id: 'challenge-2', channelId }),
713
+ payload: {
714
+ action: 'voucher' as const,
715
+ channelId,
716
+ cumulativeAmount: '500000',
717
+ signature: await signTestVoucher(channelId, 500000n),
718
+ },
719
+ },
720
+ request: makeRequest(),
721
+ })) as SessionReceipt
722
+
723
+ expect(receipt.status).toBe('success')
724
+ expect(receipt.acceptedCumulative).toBe('1000000')
725
+
726
+ // Channel state is unchanged - no advance, no additional charge.
727
+ const after = await store.getChannel(channelId)
728
+ expect(after).toEqual(before)
729
+ })
730
+
731
+ test('accepts lower replay after a higher voucher has advanced the channel', async () => {
732
+ const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
733
+ const server = createServer()
734
+ await openServerChannel(server, channelId, serializedTransaction)
735
+
736
+ // Advance the channel from the opening 1000000 to 5000000.
737
+ await server.verify({
738
+ credential: {
739
+ challenge: makeChallenge({ id: 'challenge-advance', channelId }),
740
+ payload: {
741
+ action: 'voucher' as const,
742
+ channelId,
743
+ cumulativeAmount: '5000000',
744
+ signature: await signTestVoucher(channelId, 5000000n),
745
+ },
746
+ },
747
+ request: makeRequest(),
748
+ })
749
+
750
+ const before = await store.getChannel(channelId)
751
+
752
+ // A lower (but above-settled) voucher returns the current highest
753
+ // without rewinding state.
754
+ const receipt = (await server.verify({
755
+ credential: {
756
+ challenge: makeChallenge({ id: 'challenge-lower', channelId }),
757
+ payload: {
758
+ action: 'voucher' as const,
759
+ channelId,
760
+ cumulativeAmount: '3000000',
761
+ signature: await signTestVoucher(channelId, 3000000n),
762
+ },
763
+ },
764
+ request: makeRequest(),
765
+ })) as SessionReceipt
766
+
767
+ expect(receipt.status).toBe('success')
768
+ expect(receipt.acceptedCumulative).toBe('5000000')
769
+
770
+ const after = await store.getChannel(channelId)
771
+ expect(after).toEqual(before)
772
+ })
773
+
774
+ test('accepts lower voucher replay even when below minVoucherDelta', async () => {
775
+ const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
776
+ // Non-advancing replay must short-circuit before the delta check.
777
+ const server = createServer({ minVoucherDelta: '2' })
778
+ await openServerChannel(server, channelId, serializedTransaction)
779
+
780
+ const before = await store.getChannel(channelId)
781
+
782
+ const receipt = (await server.verify({
783
+ credential: {
784
+ challenge: makeChallenge({ id: 'challenge-lower-delta', channelId }),
785
+ payload: {
786
+ action: 'voucher' as const,
787
+ channelId,
788
+ cumulativeAmount: '500000',
789
+ signature: await signTestVoucher(channelId, 500000n),
790
+ },
791
+ },
792
+ request: makeRequest(),
793
+ })) as SessionReceipt
794
+
795
+ expect(receipt.status).toBe('success')
796
+ expect(receipt.acceptedCumulative).toBe('1000000')
797
+
798
+ const after = await store.getChannel(channelId)
799
+ expect(after).toEqual(before)
800
+ })
801
+
802
+ test('rejects lower voucher replay signed by the wrong signer', async () => {
803
+ const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
804
+ const server = createServer()
805
+ await openServerChannel(server, channelId, serializedTransaction)
806
+
807
+ // A valid signature from a different account must NOT be treated as an
808
+ // idempotent replay.
706
809
  await expect(
707
810
  server.verify({
708
811
  credential: {
709
- challenge: makeChallenge({ id: 'challenge-2', channelId }),
812
+ challenge: makeChallenge({ id: 'challenge-wrong-signer', channelId }),
710
813
  payload: {
711
814
  action: 'voucher' as const,
712
815
  channelId,
713
816
  cumulativeAmount: '500000',
714
- signature: await signTestVoucher(channelId, 500000n),
817
+ signature: await signTestVoucher(channelId, 500000n, accounts[3]),
715
818
  },
716
819
  },
717
820
  request: makeRequest(),
718
821
  }),
719
- ).rejects.toThrow(
720
- 'voucher cumulativeAmount must be strictly greater than highest accepted voucher',
721
- )
822
+ ).rejects.toThrow(InvalidSignatureError)
722
823
  })
723
824
 
724
825
  test('rejects replay of settled voucher', async () => {
@@ -743,7 +844,7 @@ describe.runIf(isLocalnet)('session', () => {
743
844
  },
744
845
  request: makeRequest(),
745
846
  }),
746
- ).rejects.toThrow('voucher cumulativeAmount is below on-chain settled amount')
847
+ ).rejects.toThrow('voucher cumulativeAmount is at or below on-chain settled amount')
747
848
  })
748
849
 
749
850
  test('rejects voucher exceeding deposit', async () => {
@@ -820,17 +921,15 @@ describe.runIf(isLocalnet)('session', () => {
820
921
  payload: {
821
922
  action: 'voucher' as const,
822
923
  channelId,
823
- // Attacker submits cumulativeAmount=500000, which is <= highestVoucherAmount (1000000)
824
- // but > settled (0). Rejected by non-increasing cumulative amount check before signature validation.
924
+ // Forged signature for a non-advancing amount (500000 <= highest
925
+ // 1000000, > settled 0). Rejected by signature verification.
825
926
  cumulativeAmount: '500000',
826
927
  signature: `0x${'ab'.repeat(65)}` as Hex,
827
928
  },
828
929
  },
829
930
  request: makeRequest(),
830
931
  }),
831
- ).rejects.toThrow(
832
- 'voucher cumulativeAmount must be strictly greater than highest accepted voucher',
833
- )
932
+ ).rejects.toThrow('invalid voucher signature')
834
933
  })
835
934
 
836
935
  test('rejects forged voucher with valid amount but invalid signature', async () => {
@@ -967,7 +1066,7 @@ describe.runIf(isLocalnet)('session', () => {
967
1066
  },
968
1067
  request: makeRequest(),
969
1068
  }),
970
- ).rejects.toThrow('voucher cumulativeAmount is below on-chain settled amount')
1069
+ ).rejects.toThrow('voucher cumulativeAmount is at or below on-chain settled amount')
971
1070
  })
972
1071
 
973
1072
  test('rejects leaked voucher used in open action with mismatched channel', async () => {
@@ -2186,7 +2285,7 @@ describe.runIf(isLocalnet)('session', () => {
2186
2285
  })
2187
2286
  }
2188
2287
 
2189
- const credential = Credential.deserialize<SessionCredentialPayload>(authorization)
2288
+ const credential = Credential.deserialize<LegacySessionCredentialPayload>(authorization)
2190
2289
  if (credential.payload.action === 'open') {
2191
2290
  return new Response('ok', {
2192
2291
  status: 200,
@@ -2510,7 +2609,7 @@ describe.runIf(isLocalnet)('session', () => {
2510
2609
  },
2511
2610
  request: makeRequest(),
2512
2611
  }),
2513
- ).rejects.toThrow('voucher cumulativeAmount is below on-chain settled amount')
2612
+ ).rejects.toThrow('voucher cumulativeAmount is at or below on-chain settled amount')
2514
2613
  })
2515
2614
 
2516
2615
  test('close after recovery respects on-chain settled as minimum', async () => {
@@ -4102,7 +4201,7 @@ describe.runIf(isLocalnet)('session', () => {
4102
4201
  const backingStore = Store.memory()
4103
4202
  const routeHandler = Mppx_server.create({
4104
4203
  methods: [
4105
- tempo_server.session({
4204
+ tempo_server.sessionLegacy({
4106
4205
  store: backingStore,
4107
4206
  getClient: () => client,
4108
4207
  account: recipientAccount,
@@ -4144,7 +4243,7 @@ describe.runIf(isLocalnet)('session', () => {
4144
4243
  const backingStore = Store.memory()
4145
4244
  const routeHandler = Mppx_server.create({
4146
4245
  methods: [
4147
- tempo_server.session({
4246
+ tempo_server.sessionLegacy({
4148
4247
  store: backingStore,
4149
4248
  getClient: () => client,
4150
4249
  account: recipientAccount,
@@ -4187,7 +4286,7 @@ describe.runIf(isLocalnet)('session', () => {
4187
4286
  const backingStore = Store.memory()
4188
4287
  const routeHandler = Mppx_server.create({
4189
4288
  methods: [
4190
- tempo_server.session({
4289
+ tempo_server.sessionLegacy({
4191
4290
  store: backingStore,
4192
4291
  getClient: () => client,
4193
4292
  account: recipientAccount,
@@ -4237,7 +4336,7 @@ describe.runIf(isLocalnet)('session', () => {
4237
4336
  const backingStore = Store.memory()
4238
4337
  const routeHandler = Mppx_server.create({
4239
4338
  methods: [
4240
- tempo_server.session({
4339
+ tempo_server.sessionLegacy({
4241
4340
  store: backingStore,
4242
4341
  getClient: () => client,
4243
4342
  account: recipientAccount,
@@ -4282,7 +4381,7 @@ describe.runIf(isLocalnet)('session', () => {
4282
4381
  test('behavior: withReceipt accepts async generator and returns Response', async () => {
4283
4382
  const handler = Mppx_server.create({
4284
4383
  methods: [
4285
- tempo_server.session({
4384
+ tempo_server.sessionLegacy({
4286
4385
  account: accounts[0],
4287
4386
  currency: asset,
4288
4387
  escrowContract,
@@ -4302,7 +4401,7 @@ describe.runIf(isLocalnet)('session', () => {
4302
4401
 
4303
4402
  if (result.status === 200) {
4304
4403
  // async generator function should be accepted and return Response
4305
- const response = result.withReceipt(async function* (_stream) {
4404
+ const response = result.withReceipt(async function* (_stream: unknown) {
4306
4405
  yield 'token'
4307
4406
  })
4308
4407
  expectTypeOf(response).toEqualTypeOf<Response>()
@@ -4327,7 +4426,7 @@ describe.runIf(isLocalnet)('session', () => {
4327
4426
  test('behavior: non-SSE session withReceipt only accepts Response', async () => {
4328
4427
  const handler = Mppx_server.create({
4329
4428
  methods: [
4330
- tempo_server.session({
4429
+ tempo_server.sessionLegacy({
4331
4430
  account: accounts[0],
4332
4431
  currency: asset,
4333
4432
  escrowContract,
@@ -4354,7 +4453,7 @@ describe.runIf(isLocalnet)('session', () => {
4354
4453
  const backingStore = Store.memory()
4355
4454
  const routeHandler = Mppx_server.create({
4356
4455
  methods: [
4357
- tempo_server.session({
4456
+ tempo_server.sessionLegacy({
4358
4457
  store: backingStore,
4359
4458
  getClient: () => client,
4360
4459
  account: recipientAccount,
@@ -4385,11 +4484,11 @@ describe.runIf(isLocalnet)('session', () => {
4385
4484
  if (result.status === 402) return result.challenge
4386
4485
 
4387
4486
  if (action === 'voucher') {
4388
- return new Response(null, { status: 200 })
4487
+ return result.withReceipt()
4389
4488
  }
4390
4489
 
4391
4490
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4392
- return result.withReceipt(async function* (stream) {
4491
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4393
4492
  await stream.charge()
4394
4493
  yield 'chunk-1'
4395
4494
  await stream.charge()
@@ -4432,7 +4531,7 @@ describe.runIf(isLocalnet)('session', () => {
4432
4531
  const backingStore = Store.memory()
4433
4532
  const routeHandler = Mppx_server.create({
4434
4533
  methods: [
4435
- tempo_server.session({
4534
+ tempo_server.sessionLegacy({
4436
4535
  store: backingStore,
4437
4536
  getClient: () => client,
4438
4537
  account: recipientAccount,
@@ -4463,7 +4562,7 @@ describe.runIf(isLocalnet)('session', () => {
4463
4562
  if (result.status === 402) return result.challenge
4464
4563
 
4465
4564
  if (action === 'voucher') {
4466
- return new Response(null, { status: 200 })
4565
+ return result.withReceipt()
4467
4566
  }
4468
4567
 
4469
4568
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
@@ -4517,7 +4616,7 @@ describe.runIf(isLocalnet)('session', () => {
4517
4616
  const backingStore = Store.memory()
4518
4617
  const route = Mppx_server.create({
4519
4618
  methods: [
4520
- tempo_server.session({
4619
+ tempo_server.sessionLegacy({
4521
4620
  store: backingStore,
4522
4621
  getClient: () => client,
4523
4622
  account: recipientAccount,
@@ -4600,7 +4699,7 @@ describe.runIf(isLocalnet)('session', () => {
4600
4699
  const backingStore = Store.memory()
4601
4700
  const routeHandler = Mppx_server.create({
4602
4701
  methods: [
4603
- tempo_server.session({
4702
+ tempo_server.sessionLegacy({
4604
4703
  store: backingStore,
4605
4704
  getClient: () => client,
4606
4705
  account: recipientAccount,
@@ -4631,11 +4730,11 @@ describe.runIf(isLocalnet)('session', () => {
4631
4730
  if (result.status === 402) return result.challenge
4632
4731
 
4633
4732
  if (action === 'voucher') {
4634
- return new Response(null, { status: 200 })
4733
+ return result.withReceipt()
4635
4734
  }
4636
4735
 
4637
4736
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4638
- return result.withReceipt(async function* (stream) {
4737
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4639
4738
  await stream.charge()
4640
4739
  yield 'chunk-1'
4641
4740
  await stream.charge()
@@ -4674,7 +4773,7 @@ describe.runIf(isLocalnet)('session', () => {
4674
4773
  const backingStore = Store.memory()
4675
4774
  const routeHandler = Mppx_server.create({
4676
4775
  methods: [
4677
- tempo_server.session({
4776
+ tempo_server.sessionLegacy({
4678
4777
  store: backingStore,
4679
4778
  getClient: () => client,
4680
4779
  account: recipientAccount,
@@ -4694,7 +4793,7 @@ describe.runIf(isLocalnet)('session', () => {
4694
4793
  if (result.status === 402) return result.challenge
4695
4794
 
4696
4795
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4697
- return result.withReceipt(async function* (stream) {
4796
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4698
4797
  await stream.charge()
4699
4798
  yield 'chunk-1'
4700
4799
  await stream.charge()
@@ -4746,7 +4845,7 @@ describe.runIf(isLocalnet)('session', () => {
4746
4845
  const backingStore = Store.memory()
4747
4846
  const routeHandler = Mppx_server.create({
4748
4847
  methods: [
4749
- tempo_server.session({
4848
+ tempo_server.sessionLegacy({
4750
4849
  store: backingStore,
4751
4850
  getClient: () => client,
4752
4851
  account: recipientAccount,
@@ -4859,7 +4958,7 @@ describe.runIf(isLocalnet)('session', () => {
4859
4958
  const backingStore = Store.memory()
4860
4959
  const routeHandler = Mppx_server.create({
4861
4960
  methods: [
4862
- tempo_server.session({
4961
+ tempo_server.sessionLegacy({
4863
4962
  store: backingStore,
4864
4963
  getClient: () => client,
4865
4964
  account: recipientAccount,
@@ -4972,7 +5071,7 @@ describe.runIf(isLocalnet)('session', () => {
4972
5071
  const backingStore = Store.memory()
4973
5072
  const routeHandler = Mppx_server.create({
4974
5073
  methods: [
4975
- tempo_server.session({
5074
+ tempo_server.sessionLegacy({
4976
5075
  store: backingStore,
4977
5076
  getClient: () => client,
4978
5077
  account: recipientAccount,
@@ -5082,7 +5181,7 @@ describe.runIf(isLocalnet)('session', () => {
5082
5181
  test('rejects websocket receipts bound to a different channel', async () => {
5083
5182
  const routeHandler = Mppx_server.create({
5084
5183
  methods: [
5085
- tempo_server.session({
5184
+ tempo_server.sessionLegacy({
5086
5185
  store: Store.memory(),
5087
5186
  getClient: () => client,
5088
5187
  account: recipientAccount,
@@ -5169,7 +5268,7 @@ describe.runIf(isLocalnet)('session', () => {
5169
5268
  const backingStore = Store.memory()
5170
5269
  const routeHandler = Mppx_server.create({
5171
5270
  methods: [
5172
- tempo_server.session({
5271
+ tempo_server.sessionLegacy({
5173
5272
  store: backingStore,
5174
5273
  getClient: () => client,
5175
5274
  account: recipientAccount,
@@ -5262,7 +5361,7 @@ describe.runIf(isLocalnet)('session', () => {
5262
5361
  test('rejects close-ready receipts beyond local voucher state', async () => {
5263
5362
  const routeHandler = Mppx_server.create({
5264
5363
  methods: [
5265
- tempo_server.session({
5364
+ tempo_server.sessionLegacy({
5266
5365
  store: Store.memory(),
5267
5366
  getClient: () => client,
5268
5367
  account: recipientAccount,
@@ -5371,7 +5470,7 @@ describe.runIf(isLocalnet)('session', () => {
5371
5470
  const backingStore = Store.memory()
5372
5471
  const routeHandler = Mppx_server.create({
5373
5472
  methods: [
5374
- tempo_server.session({
5473
+ tempo_server.sessionLegacy({
5375
5474
  store: backingStore,
5376
5475
  getClient: () => client,
5377
5476
  account: recipientAccount,
@@ -5473,7 +5572,7 @@ describe.runIf(isLocalnet)('session', () => {
5473
5572
  test('rejects tx-bearing open receipts replayed during websocket close', async () => {
5474
5573
  const routeHandler = Mppx_server.create({
5475
5574
  methods: [
5476
- tempo_server.session({
5575
+ tempo_server.sessionLegacy({
5477
5576
  store: Store.memory(),
5478
5577
  getClient: () => client,
5479
5578
  account: recipientAccount,
@@ -5592,7 +5691,7 @@ describe('monotonicity and TOCTOU (unit tests)', () => {
5592
5691
 
5593
5692
  function seedChannel(
5594
5693
  store: ChannelStore.ChannelStore,
5595
- overrides: Partial<ChannelStore.State> = {},
5694
+ overrides: Partial<ChannelStore.BaseState & ChannelStore.LegacyContractBackendState> = {},
5596
5695
  ) {
5597
5696
  return store.updateChannel(testChannelId, () => ({
5598
5697
  channelId: testChannelId,
@@ -5932,7 +6031,7 @@ describe('session default currency resolution', () => {
5932
6031
  test('challenge contains USDC currency (mainnet default)', async () => {
5933
6032
  const handler = Mppx_server.create({
5934
6033
  methods: [
5935
- tempo_server.session({
6034
+ tempo_server.sessionLegacy({
5936
6035
  store: Store.memory(),
5937
6036
  getClient: () => mockMainnetClient,
5938
6037
  account: mockAccount,
@@ -5959,7 +6058,7 @@ describe('session default currency resolution', () => {
5959
6058
  test('challenge contains pathUSD currency when testnet: true', async () => {
5960
6059
  const handler = Mppx_server.create({
5961
6060
  methods: [
5962
- tempo_server.session({
6061
+ tempo_server.sessionLegacy({
5963
6062
  store: Store.memory(),
5964
6063
  getClient: () => mockTestnetClient,
5965
6064
  account: mockAccount,
@@ -5986,7 +6085,7 @@ describe('session default currency resolution', () => {
5986
6085
  test('challenge contains pathUSD currency (unknown chain)', async () => {
5987
6086
  const handler = Mppx_server.create({
5988
6087
  methods: [
5989
- tempo_server.session({
6088
+ tempo_server.sessionLegacy({
5990
6089
  store: Store.memory(),
5991
6090
  getClient: () => mockTestnetClient,
5992
6091
  account: mockAccount,
@@ -6012,7 +6111,7 @@ describe('session default currency resolution', () => {
6012
6111
  test('explicit currency in challenge overrides testnet default', async () => {
6013
6112
  const handler = Mppx_server.create({
6014
6113
  methods: [
6015
- tempo_server.session({
6114
+ tempo_server.sessionLegacy({
6016
6115
  store: Store.memory(),
6017
6116
  getClient: () => mockClient,
6018
6117
  account: mockAccount,
@@ -6041,7 +6140,7 @@ describe('session default currency resolution', () => {
6041
6140
  test('handler.session throws for zero-amount routes', () => {
6042
6141
  const handler = Mppx_server.create({
6043
6142
  methods: [
6044
- tempo_server.session({
6143
+ tempo_server.sessionLegacy({
6045
6144
  store: Store.memory(),
6046
6145
  getClient: () => mockClient,
6047
6146
  account: mockAccount,