mppx 0.6.31 → 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 (477) hide show
  1. package/CHANGELOG.md +17 -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/Response.d.ts.map +1 -1
  62. package/dist/server/Response.js +2 -1
  63. package/dist/server/Response.js.map +1 -1
  64. package/dist/server/Transport.d.ts.map +1 -1
  65. package/dist/server/Transport.js +4 -3
  66. package/dist/server/Transport.js.map +1 -1
  67. package/dist/server/index.d.ts +1 -0
  68. package/dist/server/index.d.ts.map +1 -1
  69. package/dist/server/index.js +1 -0
  70. package/dist/server/index.js.map +1 -1
  71. package/dist/stripe/client/Charge.d.ts +1 -1
  72. package/dist/stripe/client/Charge.d.ts.map +1 -1
  73. package/dist/stripe/client/Charge.js +3 -1
  74. package/dist/stripe/client/Charge.js.map +1 -1
  75. package/dist/stripe/server/Charge.d.ts +1 -1
  76. package/dist/stripe/server/Charge.d.ts.map +1 -1
  77. package/dist/stripe/server/Charge.js +9 -2
  78. package/dist/stripe/server/Charge.js.map +1 -1
  79. package/dist/stripe/server/Methods.d.ts +1 -1
  80. package/dist/stripe/server/Methods.d.ts.map +1 -1
  81. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  82. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  83. package/dist/stripe/server/internal/html.gen.js +1 -1
  84. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  85. package/dist/tempo/Methods.d.ts +18 -0
  86. package/dist/tempo/Methods.d.ts.map +1 -1
  87. package/dist/tempo/Methods.js +16 -1
  88. package/dist/tempo/Methods.js.map +1 -1
  89. package/dist/tempo/client/Charge.d.ts +6 -0
  90. package/dist/tempo/client/Charge.d.ts.map +1 -1
  91. package/dist/tempo/client/Charge.js +9 -2
  92. package/dist/tempo/client/Charge.js.map +1 -1
  93. package/dist/tempo/client/Methods.d.ts +36 -7
  94. package/dist/tempo/client/Methods.d.ts.map +1 -1
  95. package/dist/tempo/client/Methods.js +12 -5
  96. package/dist/tempo/client/Methods.js.map +1 -1
  97. package/dist/tempo/client/index.d.ts +7 -4
  98. package/dist/tempo/client/index.d.ts.map +1 -1
  99. package/dist/tempo/client/index.js +5 -3
  100. package/dist/tempo/client/index.js.map +1 -1
  101. package/dist/tempo/index.d.ts +1 -0
  102. package/dist/tempo/index.d.ts.map +1 -1
  103. package/dist/tempo/index.js +1 -0
  104. package/dist/tempo/index.js.map +1 -1
  105. package/dist/tempo/internal/fee-payer.d.ts +21 -1
  106. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  107. package/dist/tempo/internal/fee-payer.js +109 -4
  108. package/dist/tempo/internal/fee-payer.js.map +1 -1
  109. package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
  110. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
  111. package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
  112. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
  113. package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
  114. package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
  115. package/dist/tempo/{client → legacy/client}/Session.js +14 -7
  116. package/dist/tempo/legacy/client/Session.js.map +1 -0
  117. package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
  118. package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
  119. package/dist/tempo/{client → legacy/client}/SessionManager.js +20 -16
  120. package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
  121. package/dist/tempo/legacy/client/index.d.ts +7 -0
  122. package/dist/tempo/legacy/client/index.d.ts.map +1 -0
  123. package/dist/tempo/legacy/client/index.js +5 -0
  124. package/dist/tempo/legacy/client/index.js.map +1 -0
  125. package/dist/tempo/legacy/index.d.ts +7 -0
  126. package/dist/tempo/legacy/index.d.ts.map +1 -0
  127. package/dist/tempo/legacy/index.js +7 -0
  128. package/dist/tempo/legacy/index.js.map +1 -0
  129. package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
  130. package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
  131. package/dist/tempo/{server → legacy/server}/Session.js +12 -10
  132. package/dist/tempo/legacy/server/Session.js.map +1 -0
  133. package/dist/tempo/legacy/server/index.d.ts +5 -0
  134. package/dist/tempo/legacy/server/index.d.ts.map +1 -0
  135. package/dist/tempo/legacy/server/index.js +5 -0
  136. package/dist/tempo/legacy/server/index.js.map +1 -0
  137. package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
  138. package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
  139. package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
  140. package/dist/tempo/legacy/session/Chain.js.map +1 -0
  141. package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
  142. package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
  143. package/dist/tempo/legacy/session/Channel.js.map +1 -0
  144. package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
  145. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
  146. package/dist/tempo/legacy/session/ChannelStore.js +6 -0
  147. package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
  148. package/dist/tempo/legacy/session/Types.d.ts +73 -0
  149. package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
  150. package/dist/tempo/legacy/session/Types.js.map +1 -0
  151. package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
  152. package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
  153. package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
  154. package/dist/tempo/legacy/session/Voucher.js.map +1 -0
  155. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
  156. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
  157. package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
  158. package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
  159. package/dist/tempo/legacy/session/index.d.ts +9 -0
  160. package/dist/tempo/legacy/session/index.d.ts.map +1 -0
  161. package/dist/tempo/legacy/session/index.js +9 -0
  162. package/dist/tempo/legacy/session/index.js.map +1 -0
  163. package/dist/tempo/server/Charge.d.ts +1 -1
  164. package/dist/tempo/server/Charge.d.ts.map +1 -1
  165. package/dist/tempo/server/Charge.js +13 -16
  166. package/dist/tempo/server/Charge.js.map +1 -1
  167. package/dist/tempo/server/Methods.d.ts +63 -6
  168. package/dist/tempo/server/Methods.d.ts.map +1 -1
  169. package/dist/tempo/server/Methods.js +36 -8
  170. package/dist/tempo/server/Methods.js.map +1 -1
  171. package/dist/tempo/server/Subscription.d.ts +1 -1
  172. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  173. package/dist/tempo/server/index.d.ts +6 -5
  174. package/dist/tempo/server/index.d.ts.map +1 -1
  175. package/dist/tempo/server/index.js +5 -5
  176. package/dist/tempo/server/index.js.map +1 -1
  177. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  178. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  179. package/dist/tempo/server/internal/html.gen.js +1 -1
  180. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  181. package/dist/tempo/server/internal/request-body.d.ts +7 -2
  182. package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
  183. package/dist/tempo/server/internal/request-body.js +20 -3
  184. package/dist/tempo/server/internal/request-body.js.map +1 -1
  185. package/dist/tempo/server/internal/transport.d.ts +8 -4
  186. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  187. package/dist/tempo/server/internal/transport.js +8 -7
  188. package/dist/tempo/server/internal/transport.js.map +1 -1
  189. package/dist/tempo/session/Snapshot.d.ts +32 -0
  190. package/dist/tempo/session/Snapshot.d.ts.map +1 -0
  191. package/dist/tempo/session/Snapshot.js +37 -0
  192. package/dist/tempo/session/Snapshot.js.map +1 -0
  193. package/dist/tempo/session/client/ChannelOps.d.ts +82 -0
  194. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
  195. package/dist/tempo/session/client/ChannelOps.js +204 -0
  196. package/dist/tempo/session/client/ChannelOps.js.map +1 -0
  197. package/dist/tempo/session/client/CredentialState.d.ts +262 -0
  198. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
  199. package/dist/tempo/session/client/CredentialState.js +417 -0
  200. package/dist/tempo/session/client/CredentialState.js.map +1 -0
  201. package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
  202. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
  203. package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
  204. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
  205. package/dist/tempo/session/client/Runtime.d.ts +464 -0
  206. package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
  207. package/dist/tempo/session/client/Runtime.js +499 -0
  208. package/dist/tempo/session/client/Runtime.js.map +1 -0
  209. package/dist/tempo/session/client/Session.d.ts +132 -0
  210. package/dist/tempo/session/client/Session.d.ts.map +1 -0
  211. package/dist/tempo/session/client/Session.js +55 -0
  212. package/dist/tempo/session/client/Session.js.map +1 -0
  213. package/dist/tempo/session/client/SessionManager.d.ts +120 -0
  214. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
  215. package/dist/tempo/session/client/SessionManager.js +627 -0
  216. package/dist/tempo/session/client/SessionManager.js.map +1 -0
  217. package/dist/tempo/session/client/Transports.d.ts +449 -0
  218. package/dist/tempo/session/client/Transports.d.ts.map +1 -0
  219. package/dist/tempo/session/client/Transports.js +721 -0
  220. package/dist/tempo/session/client/Transports.js.map +1 -0
  221. package/dist/tempo/session/client/index.d.ts +12 -0
  222. package/dist/tempo/session/client/index.d.ts.map +1 -0
  223. package/dist/tempo/session/client/index.js +5 -0
  224. package/dist/tempo/session/client/index.js.map +1 -0
  225. package/dist/tempo/session/index.d.ts +7 -8
  226. package/dist/tempo/session/index.d.ts.map +1 -1
  227. package/dist/tempo/session/index.js +7 -8
  228. package/dist/tempo/session/index.js.map +1 -1
  229. package/dist/tempo/session/precompile/Chain.d.ts +319 -0
  230. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
  231. package/dist/tempo/session/precompile/Chain.js +492 -0
  232. package/dist/tempo/session/precompile/Chain.js.map +1 -0
  233. package/dist/tempo/session/precompile/Channel.d.ts +46 -0
  234. package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
  235. package/dist/tempo/session/precompile/Channel.js +56 -0
  236. package/dist/tempo/session/precompile/Channel.js.map +1 -0
  237. package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
  238. package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
  239. package/dist/tempo/session/precompile/Protocol.js +264 -0
  240. package/dist/tempo/session/precompile/Protocol.js.map +1 -0
  241. package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
  242. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
  243. package/dist/tempo/session/precompile/Voucher.js +126 -0
  244. package/dist/tempo/session/precompile/Voucher.js.map +1 -0
  245. package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
  246. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
  247. package/dist/tempo/session/precompile/escrow.abi.js +224 -0
  248. package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
  249. package/dist/tempo/session/precompile/index.d.ts +24 -0
  250. package/dist/tempo/session/precompile/index.d.ts.map +1 -0
  251. package/dist/tempo/session/precompile/index.js +22 -0
  252. package/dist/tempo/session/precompile/index.js.map +1 -0
  253. package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
  254. package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
  255. package/dist/tempo/session/server/ChannelOps.js +91 -0
  256. package/dist/tempo/session/server/ChannelOps.js.map +1 -0
  257. package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
  258. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
  259. package/dist/tempo/session/server/ChannelStore.js +404 -0
  260. package/dist/tempo/session/server/ChannelStore.js.map +1 -0
  261. package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
  262. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
  263. package/dist/tempo/session/server/CredentialVerification.js +494 -0
  264. package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
  265. package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
  266. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
  267. package/dist/tempo/session/server/MeteredStream.js +42 -0
  268. package/dist/tempo/session/server/MeteredStream.js.map +1 -0
  269. package/dist/tempo/session/server/RequestState.d.ts +208 -0
  270. package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
  271. package/dist/tempo/session/server/RequestState.js +252 -0
  272. package/dist/tempo/session/server/RequestState.js.map +1 -0
  273. package/dist/tempo/session/server/Session.d.ts +169 -0
  274. package/dist/tempo/session/server/Session.d.ts.map +1 -0
  275. package/dist/tempo/session/server/Session.js +351 -0
  276. package/dist/tempo/session/server/Session.js.map +1 -0
  277. package/dist/tempo/session/server/Settlement.d.ts +185 -0
  278. package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
  279. package/dist/tempo/session/server/Settlement.js +250 -0
  280. package/dist/tempo/session/server/Settlement.js.map +1 -0
  281. package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
  282. package/dist/tempo/session/server/Sse.d.ts.map +1 -0
  283. package/dist/tempo/session/server/Sse.js +184 -0
  284. package/dist/tempo/session/server/Sse.js.map +1 -0
  285. package/dist/tempo/session/server/Transports.d.ts +89 -0
  286. package/dist/tempo/session/server/Transports.d.ts.map +1 -0
  287. package/dist/tempo/session/server/Transports.js +149 -0
  288. package/dist/tempo/session/server/Transports.js.map +1 -0
  289. package/dist/tempo/session/server/Ws.d.ts +48 -0
  290. package/dist/tempo/session/server/Ws.d.ts.map +1 -0
  291. package/dist/tempo/session/server/Ws.js +244 -0
  292. package/dist/tempo/session/server/Ws.js.map +1 -0
  293. package/dist/tempo/session/server/index.d.ts +4 -0
  294. package/dist/tempo/session/server/index.d.ts.map +1 -0
  295. package/dist/tempo/session/server/index.js +2 -0
  296. package/dist/tempo/session/server/index.js.map +1 -0
  297. package/package.json +6 -1
  298. package/src/Challenge.ts +9 -7
  299. package/src/Constants.ts +58 -0
  300. package/src/Credential.ts +5 -4
  301. package/src/Method.ts +46 -5
  302. package/src/Receipt.ts +3 -2
  303. package/src/cli/cli.test.ts +23 -28
  304. package/src/cli/cli.ts +23 -10
  305. package/src/cli/mcp.test.ts +21 -7
  306. package/src/cli/plugins/tempo.ts +21 -8
  307. package/src/cli/utils.test.ts +25 -1
  308. package/src/cli/utils.ts +10 -0
  309. package/src/client/Methods.ts +5 -2
  310. package/src/client/Mppx.test-d.ts +10 -0
  311. package/src/client/Mppx.test.ts +75 -0
  312. package/src/client/Transport.ts +4 -5
  313. package/src/client/index.ts +11 -1
  314. package/src/client/internal/Fetch.test.ts +29 -4
  315. package/src/client/internal/Fetch.ts +17 -5
  316. package/src/env.d.ts +1 -1
  317. package/src/index.ts +1 -0
  318. package/src/internal/AcceptPayment.test.ts +61 -0
  319. package/src/internal/AcceptPayment.ts +21 -14
  320. package/src/mcp-sdk/client/McpClient.integration.test.ts +8 -7
  321. package/src/mcp-sdk/client/McpClient.test-d.ts +7 -0
  322. package/src/mcp-sdk/client/McpClient.ts +99 -67
  323. package/src/mcp-sdk/client/McpClient.unit.test.ts +131 -0
  324. package/src/middlewares/elysia.test.ts +8 -4
  325. package/src/middlewares/express.test.ts +8 -4
  326. package/src/middlewares/hono.test.ts +4 -4
  327. package/src/middlewares/nextjs.test.ts +8 -4
  328. package/src/proxy/Proxy.test.ts +8 -8
  329. package/src/server/Mppx.test-d.ts +54 -0
  330. package/src/server/Mppx.test.ts +200 -7
  331. package/src/server/Mppx.ts +487 -406
  332. package/src/server/Response.ts +2 -1
  333. package/src/server/Transport.ts +4 -3
  334. package/src/server/index.ts +1 -0
  335. package/src/stripe/client/Charge.test.ts +20 -5
  336. package/src/stripe/client/Charge.ts +6 -2
  337. package/src/stripe/server/Charge.test.ts +114 -1
  338. package/src/stripe/server/Charge.ts +13 -2
  339. package/src/stripe/server/internal/html.gen.ts +1 -1
  340. package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
  341. package/src/tempo/Methods.test.ts +45 -17
  342. package/src/tempo/Methods.ts +22 -0
  343. package/src/tempo/PublicExports.test-d.ts +105 -0
  344. package/src/tempo/client/Charge.test.ts +85 -0
  345. package/src/tempo/client/Charge.ts +19 -2
  346. package/src/tempo/client/Methods.ts +18 -6
  347. package/src/tempo/client/index.ts +15 -4
  348. package/src/tempo/index.ts +1 -0
  349. package/src/tempo/internal/fee-payer.test.ts +241 -17
  350. package/src/tempo/internal/fee-payer.ts +150 -4
  351. package/src/tempo/internal/fee-token.test.ts +14 -9
  352. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
  353. package/src/tempo/legacy/README.md +9 -0
  354. package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
  355. package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
  356. package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
  357. package/src/tempo/{client → legacy/client}/Session.ts +25 -11
  358. package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
  359. package/src/tempo/{client → legacy/client}/SessionManager.ts +41 -20
  360. package/src/tempo/legacy/client/index.ts +6 -0
  361. package/src/tempo/legacy/index.ts +6 -0
  362. package/src/tempo/{server → legacy/server}/Session.test.ts +45 -45
  363. package/src/tempo/{server → legacy/server}/Session.ts +32 -23
  364. package/src/tempo/legacy/server/index.ts +4 -0
  365. package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
  366. package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
  367. package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
  368. package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
  369. package/src/tempo/legacy/session/ChannelStore.ts +39 -0
  370. package/src/tempo/legacy/session/Types.ts +91 -0
  371. package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
  372. package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
  373. package/src/tempo/legacy/session/index.ts +8 -0
  374. package/src/tempo/server/AtomicStore.test-d.ts +16 -11
  375. package/src/tempo/server/Charge.test.ts +92 -14
  376. package/src/tempo/server/Charge.ts +18 -16
  377. package/src/tempo/server/Methods.ts +54 -8
  378. package/src/tempo/server/Sse.test.ts +2 -2
  379. package/src/tempo/server/index.ts +6 -5
  380. package/src/tempo/server/internal/html.gen.ts +1 -1
  381. package/src/tempo/server/internal/request-body.test.ts +37 -4
  382. package/src/tempo/server/internal/request-body.ts +25 -6
  383. package/src/tempo/server/internal/transport.test.ts +4 -4
  384. package/src/tempo/server/internal/transport.ts +19 -10
  385. package/src/tempo/session/Snapshot.test.ts +41 -0
  386. package/src/tempo/session/Snapshot.ts +74 -0
  387. package/src/tempo/session/client/ChannelOps.test.ts +163 -0
  388. package/src/tempo/session/client/ChannelOps.ts +344 -0
  389. package/src/tempo/session/client/CredentialState.test.ts +645 -0
  390. package/src/tempo/session/client/CredentialState.ts +814 -0
  391. package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
  392. package/src/tempo/session/client/Runtime.test.ts +1092 -0
  393. package/src/tempo/session/client/Runtime.ts +986 -0
  394. package/src/tempo/session/client/Session.test.ts +734 -0
  395. package/src/tempo/session/client/Session.ts +97 -0
  396. package/src/tempo/session/client/SessionManager.test.ts +1308 -0
  397. package/src/tempo/session/client/SessionManager.ts +845 -0
  398. package/src/tempo/session/client/Transports.test.ts +837 -0
  399. package/src/tempo/session/client/Transports.ts +1292 -0
  400. package/src/tempo/session/client/index.ts +37 -0
  401. package/src/tempo/session/index.ts +7 -8
  402. package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
  403. package/src/tempo/session/precompile/Chain.test.ts +1258 -0
  404. package/src/tempo/session/precompile/Chain.ts +979 -0
  405. package/src/tempo/session/precompile/Channel.test.ts +138 -0
  406. package/src/tempo/session/precompile/Channel.ts +103 -0
  407. package/src/tempo/session/precompile/Protocol.test.ts +358 -0
  408. package/src/tempo/session/precompile/Protocol.ts +520 -0
  409. package/src/tempo/session/precompile/Voucher.test.ts +316 -0
  410. package/src/tempo/session/precompile/Voucher.ts +160 -0
  411. package/src/tempo/session/precompile/escrow.abi.ts +226 -0
  412. package/src/tempo/session/precompile/index.ts +33 -0
  413. package/src/tempo/session/server/ChannelOps.test.ts +129 -0
  414. package/src/tempo/session/server/ChannelOps.ts +157 -0
  415. package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
  416. package/src/tempo/session/server/ChannelStore.ts +835 -0
  417. package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
  418. package/src/tempo/session/server/CredentialVerification.ts +710 -0
  419. package/src/tempo/session/server/MeteredStream.ts +88 -0
  420. package/src/tempo/session/server/RequestState.test.ts +531 -0
  421. package/src/tempo/session/server/RequestState.ts +499 -0
  422. package/src/tempo/session/server/Session.integration.test.ts +444 -0
  423. package/src/tempo/session/server/Session.test.ts +3253 -0
  424. package/src/tempo/session/server/Session.ts +543 -0
  425. package/src/tempo/session/server/Settlement.test.ts +242 -0
  426. package/src/tempo/session/server/Settlement.ts +470 -0
  427. package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
  428. package/src/tempo/session/server/Sse.ts +256 -0
  429. package/src/tempo/session/server/Transports.test.ts +346 -0
  430. package/src/tempo/session/server/Transports.ts +255 -0
  431. package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
  432. package/src/tempo/session/server/Ws.ts +384 -0
  433. package/src/tempo/session/server/index.ts +8 -0
  434. package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
  435. package/dist/tempo/client/ChannelOps.js.map +0 -1
  436. package/dist/tempo/client/Session.d.ts.map +0 -1
  437. package/dist/tempo/client/Session.js.map +0 -1
  438. package/dist/tempo/client/SessionManager.d.ts.map +0 -1
  439. package/dist/tempo/client/SessionManager.js.map +0 -1
  440. package/dist/tempo/server/Session.d.ts.map +0 -1
  441. package/dist/tempo/server/Session.js.map +0 -1
  442. package/dist/tempo/session/Chain.d.ts.map +0 -1
  443. package/dist/tempo/session/Chain.js.map +0 -1
  444. package/dist/tempo/session/Channel.d.ts.map +0 -1
  445. package/dist/tempo/session/Channel.js.map +0 -1
  446. package/dist/tempo/session/ChannelStore.d.ts +0 -117
  447. package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
  448. package/dist/tempo/session/ChannelStore.js +0 -172
  449. package/dist/tempo/session/ChannelStore.js.map +0 -1
  450. package/dist/tempo/session/Receipt.d.ts +0 -22
  451. package/dist/tempo/session/Receipt.d.ts.map +0 -1
  452. package/dist/tempo/session/Receipt.js +0 -34
  453. package/dist/tempo/session/Receipt.js.map +0 -1
  454. package/dist/tempo/session/Sse.d.ts.map +0 -1
  455. package/dist/tempo/session/Sse.js +0 -363
  456. package/dist/tempo/session/Sse.js.map +0 -1
  457. package/dist/tempo/session/Types.d.ts +0 -78
  458. package/dist/tempo/session/Types.d.ts.map +0 -1
  459. package/dist/tempo/session/Types.js.map +0 -1
  460. package/dist/tempo/session/Voucher.d.ts.map +0 -1
  461. package/dist/tempo/session/Voucher.js.map +0 -1
  462. package/dist/tempo/session/Ws.d.ts +0 -87
  463. package/dist/tempo/session/Ws.d.ts.map +0 -1
  464. package/dist/tempo/session/Ws.js +0 -443
  465. package/dist/tempo/session/Ws.js.map +0 -1
  466. package/dist/tempo/session/escrow.abi.js.map +0 -1
  467. package/src/tempo/session/ChannelStore.ts +0 -308
  468. package/src/tempo/session/Receipt.test.ts +0 -89
  469. package/src/tempo/session/Receipt.ts +0 -46
  470. package/src/tempo/session/Sse.ts +0 -462
  471. package/src/tempo/session/Types.ts +0 -86
  472. package/src/tempo/session/Ws.ts +0 -576
  473. /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
  474. /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
  475. /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
  476. /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
  477. /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
@@ -1,16 +1,18 @@
1
1
  import type { Hex } from 'ox'
2
2
  import { parseUnits, type Account as viem_Account, type Address } from 'viem'
3
3
 
4
- import * as Challenge from '../../Challenge.js'
5
- import * as Fetch from '../../client/internal/Fetch.js'
6
- import * as PaymentCredential from '../../Credential.js'
7
- import * as AcceptPayment from '../../internal/AcceptPayment.js'
8
- import type * as Account from '../../viem/Account.js'
9
- import type * as Client from '../../viem/Client.js'
10
- import { deserializeSessionReceipt } from '../session/Receipt.js'
11
- import { parseEvent } from '../session/Sse.js'
12
- import type { SessionCredentialPayload, SessionReceipt } from '../session/Types.js'
13
- import * as Ws from '../session/Ws.js'
4
+ import * as Challenge from '../../../Challenge.js'
5
+ import * as Fetch from '../../../client/internal/Fetch.js'
6
+ import * as Constants from '../../../Constants.js'
7
+ import * as PaymentCredential from '../../../Credential.js'
8
+ import * as AcceptPayment from '../../../internal/AcceptPayment.js'
9
+ import type * as Account from '../../../viem/Account.js'
10
+ import type * as Client from '../../../viem/Client.js'
11
+ import { deserializeSessionReceipt } from '../../session/precompile/Protocol.js'
12
+ import type { SessionReceipt } from '../../session/precompile/Protocol.js'
13
+ import { parseEvent } from '../../session/precompile/Protocol.js'
14
+ import * as Ws from '../../session/precompile/Protocol.js'
15
+ import type { LegacySessionCredentialPayload } from '../session/Types.js'
14
16
  import type { ChannelEntry } from './ChannelOps.js'
15
17
  import { session as sessionPlugin } from './Session.js'
16
18
 
@@ -46,13 +48,20 @@ const WebSocketReadyState = {
46
48
  // Keep protocol/policy close codes on the server side and use an app-defined code here.
47
49
  const ClientWebSocketProtocolErrorCloseCode = 3008
48
50
 
51
+ /** Auto-driving legacy client manager for HTTP, SSE, and WebSocket sessions. */
49
52
  export type SessionManager = {
53
+ /** Active legacy channel ID, when opened or recovered. */
50
54
  readonly channelId: Hex.Hex | undefined
55
+ /** Local cumulative voucher authorization in raw token units. */
51
56
  readonly cumulative: bigint
57
+ /** Whether the manager currently has an open local channel. */
52
58
  readonly opened: boolean
53
59
 
60
+ /** Opens a legacy contract-backed channel before the first paid request. */
54
61
  open(options?: { deposit?: bigint }): Promise<void>
62
+ /** Performs the HTTP 402 challenge/retry flow and returns receipt metadata. */
55
63
  fetch(input: RequestInfo | URL, init?: SessionRequestInit): Promise<PaymentResponse>
64
+ /** Opens a paid SSE stream and responds to voucher requests. */
56
65
  sse(
57
66
  input: RequestInfo | URL,
58
67
  init?: SessionRequestInit & {
@@ -60,6 +69,7 @@ export type SessionManager = {
60
69
  signal?: AbortSignal | undefined
61
70
  },
62
71
  ): Promise<AsyncIterable<string>>
72
+ /** Opens a paid WebSocket session and manages in-band payment frames. */
63
73
  ws(
64
74
  input: string | URL,
65
75
  init?: {
@@ -69,13 +79,19 @@ export type SessionManager = {
69
79
  signal?: AbortSignal | undefined
70
80
  },
71
81
  ): Promise<WebSocket>
82
+ /** Cooperatively closes the active legacy channel. */
72
83
  close(): Promise<SessionReceipt | undefined>
73
84
  }
74
85
 
86
+ /** HTTP response enriched with latest legacy session metadata. */
75
87
  export type PaymentResponse = Response & {
88
+ /** Parsed payment receipt, when the response included one. */
76
89
  receipt: SessionReceipt | null
90
+ /** Last session challenge observed by the manager. */
77
91
  challenge: Challenge.Challenge | null
92
+ /** Active channel ID, when available. */
78
93
  channelId: Hex.Hex | null
94
+ /** Local cumulative voucher authorization in raw token units. */
79
95
  cumulative: bigint
80
96
  }
81
97
 
@@ -250,7 +266,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
250
266
  }
251
267
 
252
268
  function toPaymentResponse(response: Response): PaymentResponse {
253
- const receiptHeader = response.headers.get('Payment-Receipt')
269
+ const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
254
270
  const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : null
255
271
  updateSpentFromReceipt(receipt)
256
272
  return Object.assign(response, {
@@ -425,13 +441,13 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
425
441
  if (!lastUrl) throw new Error('No URL available — call fetch() or sse() before open().')
426
442
  const response = await fetchFn(lastUrl, {
427
443
  method: 'POST',
428
- headers: { Authorization: credential },
444
+ headers: { [Constants.Headers.authorization]: credential },
429
445
  })
430
446
  if (!response.ok) {
431
447
  const body = await response.text().catch(() => '')
432
- const wwwAuth = response.headers.get('WWW-Authenticate') ?? ''
448
+ const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
433
449
  throw new Error(
434
- `Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [WWW-Authenticate: ${wwwAuth}]` : ''}`,
450
+ `Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
435
451
  )
436
452
  }
437
453
  },
@@ -504,7 +520,10 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
504
520
  })
505
521
  const voucherResponse = await fetchFn(input, {
506
522
  method: 'POST',
507
- headers: { Authorization: credential },
523
+ headers: {
524
+ Accept: 'text/event-stream',
525
+ [Constants.Headers.authorization]: credential,
526
+ },
508
527
  })
509
528
  if (!voucherResponse.ok) {
510
529
  throw new Error(`Voucher POST failed with status ${voucherResponse.status}`)
@@ -575,7 +594,8 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
575
594
  activeSocketChallenge = challenge
576
595
  wsDeliveredChunks = 0n
577
596
  wsTickCost = BigInt(challenge.request.amount as string)
578
- const openCredential = PaymentCredential.deserialize<SessionCredentialPayload>(credential)
597
+ const openCredential =
598
+ PaymentCredential.deserialize<LegacySessionCredentialPayload>(credential)
579
599
  activeSocketChannelId = openCredential.payload.channelId
580
600
  const rawSocket = new WebSocketImpl(wsUrl, protocols)
581
601
  activeSocket = rawSocket
@@ -819,7 +839,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
819
839
 
820
840
  const response = await fetchFn(lastUrl, {
821
841
  method: 'POST',
822
- headers: { Authorization: credential },
842
+ headers: { [Constants.Headers.authorization]: credential },
823
843
  })
824
844
  if (!response.ok) {
825
845
  const body = await response.text().catch(() => '')
@@ -835,12 +855,12 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
835
855
  return body
836
856
  }
837
857
  })()
838
- const wwwAuth = response.headers.get('WWW-Authenticate') ?? ''
858
+ const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
839
859
  throw new Error(
840
- `Close request failed with status ${response.status}${detail ? `: ${detail}` : ''}${wwwAuth ? ` [WWW-Authenticate: ${wwwAuth}]` : ''}`,
860
+ `Close request failed with status ${response.status}${detail ? `: ${detail}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
841
861
  )
842
862
  }
843
- const receiptHeader = response.headers.get('Payment-Receipt')
863
+ const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
844
864
  const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : undefined
845
865
 
846
866
  return receipt
@@ -850,6 +870,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
850
870
  return self
851
871
  }
852
872
 
873
+ /** Type helpers for the legacy auto-driving session manager. */
853
874
  export declare namespace sessionManager {
854
875
  type Parameters = Account.getResolver.Parameters &
855
876
  Client.getResolver.Parameters & {
@@ -0,0 +1,6 @@
1
+ /** Legacy contract-backed session client method. */
2
+ export { session } from './Session.js'
3
+ /** Legacy contract-backed session manager. */
4
+ export { sessionManager } from './SessionManager.js'
5
+ /** Legacy client session manager types. */
6
+ export type { PaymentResponse, SessionManager } from './SessionManager.js'
@@ -0,0 +1,6 @@
1
+ /** Legacy contract-backed session client surface. */
2
+ export * as Client from './client/index.js'
3
+ /** Legacy contract-backed session server surface. */
4
+ export * as Server from './server/index.js'
5
+ /** Legacy contract-backed session channel primitives. */
6
+ export * as Session from './session/index.js'
@@ -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,
@@ -2285,7 +2285,7 @@ describe.runIf(isLocalnet)('session', () => {
2285
2285
  })
2286
2286
  }
2287
2287
 
2288
- const credential = Credential.deserialize<SessionCredentialPayload>(authorization)
2288
+ const credential = Credential.deserialize<LegacySessionCredentialPayload>(authorization)
2289
2289
  if (credential.payload.action === 'open') {
2290
2290
  return new Response('ok', {
2291
2291
  status: 200,
@@ -4201,7 +4201,7 @@ describe.runIf(isLocalnet)('session', () => {
4201
4201
  const backingStore = Store.memory()
4202
4202
  const routeHandler = Mppx_server.create({
4203
4203
  methods: [
4204
- tempo_server.session({
4204
+ tempo_server.sessionLegacy({
4205
4205
  store: backingStore,
4206
4206
  getClient: () => client,
4207
4207
  account: recipientAccount,
@@ -4243,7 +4243,7 @@ describe.runIf(isLocalnet)('session', () => {
4243
4243
  const backingStore = Store.memory()
4244
4244
  const routeHandler = Mppx_server.create({
4245
4245
  methods: [
4246
- tempo_server.session({
4246
+ tempo_server.sessionLegacy({
4247
4247
  store: backingStore,
4248
4248
  getClient: () => client,
4249
4249
  account: recipientAccount,
@@ -4286,7 +4286,7 @@ describe.runIf(isLocalnet)('session', () => {
4286
4286
  const backingStore = Store.memory()
4287
4287
  const routeHandler = Mppx_server.create({
4288
4288
  methods: [
4289
- tempo_server.session({
4289
+ tempo_server.sessionLegacy({
4290
4290
  store: backingStore,
4291
4291
  getClient: () => client,
4292
4292
  account: recipientAccount,
@@ -4336,7 +4336,7 @@ describe.runIf(isLocalnet)('session', () => {
4336
4336
  const backingStore = Store.memory()
4337
4337
  const routeHandler = Mppx_server.create({
4338
4338
  methods: [
4339
- tempo_server.session({
4339
+ tempo_server.sessionLegacy({
4340
4340
  store: backingStore,
4341
4341
  getClient: () => client,
4342
4342
  account: recipientAccount,
@@ -4381,7 +4381,7 @@ describe.runIf(isLocalnet)('session', () => {
4381
4381
  test('behavior: withReceipt accepts async generator and returns Response', async () => {
4382
4382
  const handler = Mppx_server.create({
4383
4383
  methods: [
4384
- tempo_server.session({
4384
+ tempo_server.sessionLegacy({
4385
4385
  account: accounts[0],
4386
4386
  currency: asset,
4387
4387
  escrowContract,
@@ -4401,7 +4401,7 @@ describe.runIf(isLocalnet)('session', () => {
4401
4401
 
4402
4402
  if (result.status === 200) {
4403
4403
  // async generator function should be accepted and return Response
4404
- const response = result.withReceipt(async function* (_stream) {
4404
+ const response = result.withReceipt(async function* (_stream: unknown) {
4405
4405
  yield 'token'
4406
4406
  })
4407
4407
  expectTypeOf(response).toEqualTypeOf<Response>()
@@ -4426,7 +4426,7 @@ describe.runIf(isLocalnet)('session', () => {
4426
4426
  test('behavior: non-SSE session withReceipt only accepts Response', async () => {
4427
4427
  const handler = Mppx_server.create({
4428
4428
  methods: [
4429
- tempo_server.session({
4429
+ tempo_server.sessionLegacy({
4430
4430
  account: accounts[0],
4431
4431
  currency: asset,
4432
4432
  escrowContract,
@@ -4453,7 +4453,7 @@ describe.runIf(isLocalnet)('session', () => {
4453
4453
  const backingStore = Store.memory()
4454
4454
  const routeHandler = Mppx_server.create({
4455
4455
  methods: [
4456
- tempo_server.session({
4456
+ tempo_server.sessionLegacy({
4457
4457
  store: backingStore,
4458
4458
  getClient: () => client,
4459
4459
  account: recipientAccount,
@@ -4488,7 +4488,7 @@ describe.runIf(isLocalnet)('session', () => {
4488
4488
  }
4489
4489
 
4490
4490
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4491
- return result.withReceipt(async function* (stream) {
4491
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4492
4492
  await stream.charge()
4493
4493
  yield 'chunk-1'
4494
4494
  await stream.charge()
@@ -4531,7 +4531,7 @@ describe.runIf(isLocalnet)('session', () => {
4531
4531
  const backingStore = Store.memory()
4532
4532
  const routeHandler = Mppx_server.create({
4533
4533
  methods: [
4534
- tempo_server.session({
4534
+ tempo_server.sessionLegacy({
4535
4535
  store: backingStore,
4536
4536
  getClient: () => client,
4537
4537
  account: recipientAccount,
@@ -4616,7 +4616,7 @@ describe.runIf(isLocalnet)('session', () => {
4616
4616
  const backingStore = Store.memory()
4617
4617
  const route = Mppx_server.create({
4618
4618
  methods: [
4619
- tempo_server.session({
4619
+ tempo_server.sessionLegacy({
4620
4620
  store: backingStore,
4621
4621
  getClient: () => client,
4622
4622
  account: recipientAccount,
@@ -4699,7 +4699,7 @@ describe.runIf(isLocalnet)('session', () => {
4699
4699
  const backingStore = Store.memory()
4700
4700
  const routeHandler = Mppx_server.create({
4701
4701
  methods: [
4702
- tempo_server.session({
4702
+ tempo_server.sessionLegacy({
4703
4703
  store: backingStore,
4704
4704
  getClient: () => client,
4705
4705
  account: recipientAccount,
@@ -4734,7 +4734,7 @@ describe.runIf(isLocalnet)('session', () => {
4734
4734
  }
4735
4735
 
4736
4736
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4737
- return result.withReceipt(async function* (stream) {
4737
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4738
4738
  await stream.charge()
4739
4739
  yield 'chunk-1'
4740
4740
  await stream.charge()
@@ -4773,7 +4773,7 @@ describe.runIf(isLocalnet)('session', () => {
4773
4773
  const backingStore = Store.memory()
4774
4774
  const routeHandler = Mppx_server.create({
4775
4775
  methods: [
4776
- tempo_server.session({
4776
+ tempo_server.sessionLegacy({
4777
4777
  store: backingStore,
4778
4778
  getClient: () => client,
4779
4779
  account: recipientAccount,
@@ -4793,7 +4793,7 @@ describe.runIf(isLocalnet)('session', () => {
4793
4793
  if (result.status === 402) return result.challenge
4794
4794
 
4795
4795
  if (request.headers.get('Accept')?.includes('text/event-stream')) {
4796
- return result.withReceipt(async function* (stream) {
4796
+ return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
4797
4797
  await stream.charge()
4798
4798
  yield 'chunk-1'
4799
4799
  await stream.charge()
@@ -4845,7 +4845,7 @@ describe.runIf(isLocalnet)('session', () => {
4845
4845
  const backingStore = Store.memory()
4846
4846
  const routeHandler = Mppx_server.create({
4847
4847
  methods: [
4848
- tempo_server.session({
4848
+ tempo_server.sessionLegacy({
4849
4849
  store: backingStore,
4850
4850
  getClient: () => client,
4851
4851
  account: recipientAccount,
@@ -4958,7 +4958,7 @@ describe.runIf(isLocalnet)('session', () => {
4958
4958
  const backingStore = Store.memory()
4959
4959
  const routeHandler = Mppx_server.create({
4960
4960
  methods: [
4961
- tempo_server.session({
4961
+ tempo_server.sessionLegacy({
4962
4962
  store: backingStore,
4963
4963
  getClient: () => client,
4964
4964
  account: recipientAccount,
@@ -5071,7 +5071,7 @@ describe.runIf(isLocalnet)('session', () => {
5071
5071
  const backingStore = Store.memory()
5072
5072
  const routeHandler = Mppx_server.create({
5073
5073
  methods: [
5074
- tempo_server.session({
5074
+ tempo_server.sessionLegacy({
5075
5075
  store: backingStore,
5076
5076
  getClient: () => client,
5077
5077
  account: recipientAccount,
@@ -5181,7 +5181,7 @@ describe.runIf(isLocalnet)('session', () => {
5181
5181
  test('rejects websocket receipts bound to a different channel', async () => {
5182
5182
  const routeHandler = Mppx_server.create({
5183
5183
  methods: [
5184
- tempo_server.session({
5184
+ tempo_server.sessionLegacy({
5185
5185
  store: Store.memory(),
5186
5186
  getClient: () => client,
5187
5187
  account: recipientAccount,
@@ -5268,7 +5268,7 @@ describe.runIf(isLocalnet)('session', () => {
5268
5268
  const backingStore = Store.memory()
5269
5269
  const routeHandler = Mppx_server.create({
5270
5270
  methods: [
5271
- tempo_server.session({
5271
+ tempo_server.sessionLegacy({
5272
5272
  store: backingStore,
5273
5273
  getClient: () => client,
5274
5274
  account: recipientAccount,
@@ -5361,7 +5361,7 @@ describe.runIf(isLocalnet)('session', () => {
5361
5361
  test('rejects close-ready receipts beyond local voucher state', async () => {
5362
5362
  const routeHandler = Mppx_server.create({
5363
5363
  methods: [
5364
- tempo_server.session({
5364
+ tempo_server.sessionLegacy({
5365
5365
  store: Store.memory(),
5366
5366
  getClient: () => client,
5367
5367
  account: recipientAccount,
@@ -5470,7 +5470,7 @@ describe.runIf(isLocalnet)('session', () => {
5470
5470
  const backingStore = Store.memory()
5471
5471
  const routeHandler = Mppx_server.create({
5472
5472
  methods: [
5473
- tempo_server.session({
5473
+ tempo_server.sessionLegacy({
5474
5474
  store: backingStore,
5475
5475
  getClient: () => client,
5476
5476
  account: recipientAccount,
@@ -5572,7 +5572,7 @@ describe.runIf(isLocalnet)('session', () => {
5572
5572
  test('rejects tx-bearing open receipts replayed during websocket close', async () => {
5573
5573
  const routeHandler = Mppx_server.create({
5574
5574
  methods: [
5575
- tempo_server.session({
5575
+ tempo_server.sessionLegacy({
5576
5576
  store: Store.memory(),
5577
5577
  getClient: () => client,
5578
5578
  account: recipientAccount,
@@ -5691,7 +5691,7 @@ describe('monotonicity and TOCTOU (unit tests)', () => {
5691
5691
 
5692
5692
  function seedChannel(
5693
5693
  store: ChannelStore.ChannelStore,
5694
- overrides: Partial<ChannelStore.State> = {},
5694
+ overrides: Partial<ChannelStore.BaseState & ChannelStore.LegacyContractBackendState> = {},
5695
5695
  ) {
5696
5696
  return store.updateChannel(testChannelId, () => ({
5697
5697
  channelId: testChannelId,
@@ -6031,7 +6031,7 @@ describe('session default currency resolution', () => {
6031
6031
  test('challenge contains USDC currency (mainnet default)', async () => {
6032
6032
  const handler = Mppx_server.create({
6033
6033
  methods: [
6034
- tempo_server.session({
6034
+ tempo_server.sessionLegacy({
6035
6035
  store: Store.memory(),
6036
6036
  getClient: () => mockMainnetClient,
6037
6037
  account: mockAccount,
@@ -6058,7 +6058,7 @@ describe('session default currency resolution', () => {
6058
6058
  test('challenge contains pathUSD currency when testnet: true', async () => {
6059
6059
  const handler = Mppx_server.create({
6060
6060
  methods: [
6061
- tempo_server.session({
6061
+ tempo_server.sessionLegacy({
6062
6062
  store: Store.memory(),
6063
6063
  getClient: () => mockTestnetClient,
6064
6064
  account: mockAccount,
@@ -6085,7 +6085,7 @@ describe('session default currency resolution', () => {
6085
6085
  test('challenge contains pathUSD currency (unknown chain)', async () => {
6086
6086
  const handler = Mppx_server.create({
6087
6087
  methods: [
6088
- tempo_server.session({
6088
+ tempo_server.sessionLegacy({
6089
6089
  store: Store.memory(),
6090
6090
  getClient: () => mockTestnetClient,
6091
6091
  account: mockAccount,
@@ -6111,7 +6111,7 @@ describe('session default currency resolution', () => {
6111
6111
  test('explicit currency in challenge overrides testnet default', async () => {
6112
6112
  const handler = Mppx_server.create({
6113
6113
  methods: [
6114
- tempo_server.session({
6114
+ tempo_server.sessionLegacy({
6115
6115
  store: Store.memory(),
6116
6116
  getClient: () => mockClient,
6117
6117
  account: mockAccount,
@@ -6140,7 +6140,7 @@ describe('session default currency resolution', () => {
6140
6140
  test('handler.session throws for zero-amount routes', () => {
6141
6141
  const handler = Mppx_server.create({
6142
6142
  methods: [
6143
- tempo_server.session({
6143
+ tempo_server.sessionLegacy({
6144
6144
  store: Store.memory(),
6145
6145
  getClient: () => mockClient,
6146
6146
  account: mockAccount,
@@ -20,6 +20,7 @@ import {
20
20
  } from 'viem'
21
21
  import { tempo as tempo_chain } from 'viem/tempo/chains'
22
22
 
23
+ import * as Constants from '../../../Constants.js'
23
24
  import {
24
25
  AmountExceedsDepositError,
25
26
  BadRequestError,
@@ -29,18 +30,25 @@ import {
29
30
  InsufficientBalanceError,
30
31
  InvalidSignatureError,
31
32
  VerificationFailedError,
32
- } from '../../Errors.js'
33
- import type { Challenge, Credential } from '../../index.js'
34
- import type { LooseOmit, NoExtraKeys } from '../../internal/types.js'
35
- import * as Method from '../../Method.js'
36
- import * as Store from '../../Store.js'
37
- import * as Client from '../../viem/Client.js'
38
- import type * as z from '../../zod.js'
39
- import * as Account from '../internal/account.js'
40
- import * as defaults from '../internal/defaults.js'
41
- import * as FeePayer from '../internal/fee-payer.js'
42
- import type * as types from '../internal/types.js'
43
- import * as Methods from '../Methods.js'
33
+ } from '../../../Errors.js'
34
+ import type { Challenge, Credential } from '../../../index.js'
35
+ import type { LooseOmit, NoExtraKeys } from '../../../internal/types.js'
36
+ import * as Method from '../../../Method.js'
37
+ import * as Store from '../../../Store.js'
38
+ import * as Client from '../../../viem/Client.js'
39
+ import type * as z from '../../../zod.js'
40
+ import * as Account from '../../internal/account.js'
41
+ import * as defaults from '../../internal/defaults.js'
42
+ import * as FeePayer from '../../internal/fee-payer.js'
43
+ import type * as types from '../../internal/types.js'
44
+ import * as Methods from '../../Methods.js'
45
+ import {
46
+ captureRequestBodyProbe,
47
+ isSessionContentRequest,
48
+ } from '../../server/internal/request-body.js'
49
+ import * as Transport from '../../server/internal/transport.js'
50
+ import { createSessionReceipt } from '../../session/precompile/Protocol.js'
51
+ import type { SessionReceipt } from '../../session/precompile/Protocol.js'
44
52
  import {
45
53
  broadcastOpenTransaction,
46
54
  broadcastTopUpTransaction,
@@ -50,11 +58,8 @@ import {
50
58
  settleOnChain,
51
59
  } from '../session/Chain.js'
52
60
  import * as ChannelStore from '../session/ChannelStore.js'
53
- import { createSessionReceipt } from '../session/Receipt.js'
54
- import type { SessionCredentialPayload, SessionReceipt, SignedVoucher } from '../session/Types.js'
61
+ import type { LegacySessionCredentialPayload, LegacySignedVoucher } from '../session/Types.js'
55
62
  import { parseVoucherFromPayload, verifyVoucher } from '../session/Voucher.js'
56
- import { captureRequestBodyProbe, isSessionContentRequest } from './internal/request-body.js'
57
- import * as Transport from './internal/transport.js'
58
63
 
59
64
  /** Challenge methodDetails shape for session methods. */
60
65
  type SessionMethodDetails = {
@@ -63,6 +68,7 @@ type SessionMethodDetails = {
63
68
  channelId?: Hex | undefined
64
69
  minVoucherDelta?: string | undefined
65
70
  feePayer?: boolean | undefined
71
+ sessionProtocol?: Constants.SessionProtocol | undefined
66
72
  }
67
73
 
68
74
  /**
@@ -183,11 +189,13 @@ export function session<const parameters extends session.Parameters>(
183
189
  chainId,
184
190
  escrowContract: resolvedEscrow,
185
191
  feePayer: resolvedFeePayer,
192
+ sessionProtocol: Constants.SessionProtocols.v1,
186
193
  }
187
194
  },
188
195
 
189
196
  async verify({ credential, envelope, request }) {
190
- const { challenge, payload } = credential as Credential.Credential<SessionCredentialPayload>
197
+ const { challenge, payload } =
198
+ credential as Credential.Credential<LegacySessionCredentialPayload>
191
199
 
192
200
  const resolvedRequest = (() => {
193
201
  const parsed = Methods.session.schema.request.safeParse(request)
@@ -315,7 +323,7 @@ export function session<const parameters extends session.Parameters>(
315
323
  // during verification. Non-billable requests are treated as management
316
324
  // updates; billable requests fall through to the application handler.
317
325
  respond({ credential, envelope, input }) {
318
- const { payload } = credential as Credential.Credential<SessionCredentialPayload>
326
+ const { payload } = credential as Credential.Credential<LegacySessionCredentialPayload>
319
327
  const request = envelope?.capturedRequest ?? captureRequestBodyProbe(input)
320
328
 
321
329
  if (payload.action === 'close') return new Response(null, { status: 204 })
@@ -333,6 +341,7 @@ function isSseNegotiationRequest(input: Pick<Method.CapturedRequest, 'headers'>)
333
341
  return input.headers.get('Accept')?.includes('text/event-stream') ?? false
334
342
  }
335
343
 
344
+ /** Type helpers for the legacy contract-backed session server method. */
336
345
  export declare namespace session {
337
346
  type Defaults = LooseOmit<
338
347
  Method.RequestDefaults<typeof Methods.session>,
@@ -537,7 +546,7 @@ async function verifyAndAcceptVoucher(parameters: {
537
546
  challenge: Challenge.Challenge
538
547
  channel: ChannelStore.State
539
548
  channelId: Hex
540
- voucher: SignedVoucher
549
+ voucher: LegacySignedVoucher
541
550
  onChain: OnChainChannel
542
551
  }): Promise<SessionReceipt> {
543
552
  const { store, minVoucherDelta, challenge, channel, channelId, voucher, onChain } = parameters
@@ -635,7 +644,7 @@ async function handleOpen(
635
644
  store: ChannelStore.ChannelStore,
636
645
  client: viem_Client,
637
646
  challenge: Challenge.Challenge,
638
- payload: SessionCredentialPayload & { action: 'open' },
647
+ payload: LegacySessionCredentialPayload & { action: 'open' },
639
648
  methodDetails: SessionMethodDetails,
640
649
  feePayer: viem_Account | undefined,
641
650
  isSponsored: boolean,
@@ -774,7 +783,7 @@ async function handleTopUp(
774
783
  store: ChannelStore.ChannelStore,
775
784
  client: viem_Client,
776
785
  challenge: Challenge.Challenge,
777
- payload: SessionCredentialPayload & { action: 'topUp' },
786
+ payload: LegacySessionCredentialPayload & { action: 'topUp' },
778
787
  methodDetails: SessionMethodDetails,
779
788
  feePayer: viem_Account | undefined,
780
789
  isSponsored: boolean,
@@ -824,7 +833,7 @@ async function handleVoucher(
824
833
  client: viem_Client,
825
834
  minVoucherDelta: bigint,
826
835
  challenge: Challenge.Challenge,
827
- payload: SessionCredentialPayload & { action: 'voucher' },
836
+ payload: LegacySessionCredentialPayload & { action: 'voucher' },
828
837
  methodDetails: SessionMethodDetails,
829
838
  channelStateTtl: number,
830
839
  lastOnChainVerified: Map<Hex, number>,
@@ -896,7 +905,7 @@ async function handleClose(
896
905
  store: ChannelStore.ChannelStore,
897
906
  client: viem_Client,
898
907
  challenge: Challenge.Challenge,
899
- payload: SessionCredentialPayload & { action: 'close' },
908
+ payload: LegacySessionCredentialPayload & { action: 'close' },
900
909
  methodDetails: SessionMethodDetails,
901
910
  account?: viem_Account,
902
911
  feePayer?: viem_Account,
@@ -0,0 +1,4 @@
1
+ /** Legacy contract-backed session server method. */
2
+ export { session } from './Session.js'
3
+ /** Legacy contract-backed one-shot settle helper. */
4
+ export { settle } from './Session.js'