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
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Server-side TIP-1034 precompile session payment method for request/response flows.
3
+ *
4
+ * Handles the full TIP20EscrowChannel lifecycle (open, voucher, top-up, close)
5
+ * and one-shot settlement. Each incoming request carries a session credential
6
+ * with a cumulative voucher that the server validates and records.
7
+ */
8
+ import { type Address, type Hex } from 'viem';
9
+ import type { LooseOmit, NoExtraKeys } from '../../../internal/types.js';
10
+ import * as Method from '../../../Method.js';
11
+ import * as Store from '../../../Store.js';
12
+ import * as Client from '../../../viem/Client.js';
13
+ import * as Account from '../../internal/account.js';
14
+ import * as FeePayer from '../../internal/fee-payer.js';
15
+ import type * as types from '../../internal/types.js';
16
+ import * as Methods from '../../Methods.js';
17
+ import * as Transport from '../../server/internal/transport.js';
18
+ import { deserializeSnapshot as deserializeSessionSnapshot, serializeSnapshot as serializeSessionSnapshot } from '../Snapshot.js';
19
+ import * as ChannelStore from './ChannelStore.js';
20
+ import { type ResolveSessionChannelId } from './RequestState.js';
21
+ import { type SettlementSchedule } from './Settlement.js';
22
+ /** Server-side automatic settlement schedule. */
23
+ export type { SettlementSchedule } from './Settlement.js';
24
+ /** Server-side hook types for request-identity channel bootstrap. */
25
+ export type { ResolveSessionChannelId, ResolveSessionChannelIdParameters, SessionChannelIdRequest, } from './RequestState.js';
26
+ export { settle, settleBatch } from './Settlement.js';
27
+ /** Creates a server-side TIP20EscrowChannel precompile session payment method. */
28
+ export declare function session<const parameters extends session.Parameters>(p?: NoExtraKeys<parameters, session.Parameters>): Method.Server<{
29
+ readonly name: "tempo";
30
+ readonly intent: "session";
31
+ readonly schema: {
32
+ readonly credential: {
33
+ readonly payload: import("zod/mini").ZodMiniDiscriminatedUnion<[import("zod/mini").ZodMiniObject<{
34
+ action: import("zod/mini").ZodMiniLiteral<"open">;
35
+ authorizedSigner: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
36
+ channelId: import("zod/mini").ZodMiniString<string>;
37
+ cumulativeAmount: import("zod/mini").ZodMiniString<string>;
38
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
39
+ signature: import("zod/mini").ZodMiniString<string>;
40
+ transaction: import("zod/mini").ZodMiniString<string>;
41
+ type: import("zod/mini").ZodMiniLiteral<"transaction">;
42
+ }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
43
+ action: import("zod/mini").ZodMiniLiteral<"topUp">;
44
+ additionalDeposit: import("zod/mini").ZodMiniString<string>;
45
+ channelId: import("zod/mini").ZodMiniString<string>;
46
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
47
+ transaction: import("zod/mini").ZodMiniString<string>;
48
+ type: import("zod/mini").ZodMiniLiteral<"transaction">;
49
+ }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
50
+ action: import("zod/mini").ZodMiniLiteral<"voucher">;
51
+ channelId: import("zod/mini").ZodMiniString<string>;
52
+ cumulativeAmount: import("zod/mini").ZodMiniString<string>;
53
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
54
+ signature: import("zod/mini").ZodMiniString<string>;
55
+ }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
56
+ action: import("zod/mini").ZodMiniLiteral<"close">;
57
+ channelId: import("zod/mini").ZodMiniString<string>;
58
+ cumulativeAmount: import("zod/mini").ZodMiniString<string>;
59
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
60
+ signature: import("zod/mini").ZodMiniString<string>;
61
+ }, import("zod/v4/core").$strip>], "action">;
62
+ };
63
+ readonly request: import("zod/mini").ZodMiniPipe<import("zod/mini").ZodMiniObject<{
64
+ amount: import("zod/mini").ZodMiniString<string>;
65
+ chainId: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniNumber<number>>;
66
+ channelId: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
67
+ currency: import("zod/mini").ZodMiniString<string>;
68
+ decimals: import("zod/mini").ZodMiniNumber<number>;
69
+ escrowContract: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
70
+ feePayer: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniPipe<import("zod/mini").ZodMiniUnion<readonly [import("zod/mini").ZodMiniBoolean<boolean>, import("zod/mini").ZodMiniCustom<import("viem").Account, import("viem").Account>]>, import("zod/mini").ZodMiniTransform<boolean, boolean | import("viem").Account>>>;
71
+ minVoucherDelta: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
72
+ operator: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
73
+ recipient: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
74
+ sessionProtocol: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniEnum<{
75
+ v1: "v1";
76
+ v2: "v2";
77
+ }>>;
78
+ sessionSnapshot: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../Snapshot.js").SessionSnapshot, import("../Snapshot.js").SessionSnapshot>>;
79
+ suggestedDeposit: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
80
+ unitType: import("zod/mini").ZodMiniString<string>;
81
+ }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniTransform<{
82
+ methodDetails: {
83
+ sessionSnapshot?: import("../Snapshot.js").SessionSnapshot | undefined;
84
+ sessionProtocol?: "v1" | "v2" | undefined;
85
+ operator?: string | undefined;
86
+ feePayer?: boolean | undefined;
87
+ chainId?: number | undefined;
88
+ minVoucherDelta?: string | undefined;
89
+ channelId?: string | undefined;
90
+ escrowContract: string | undefined;
91
+ };
92
+ suggestedDeposit?: string | undefined;
93
+ amount: string;
94
+ currency: string;
95
+ unitType: string;
96
+ recipient?: string | undefined;
97
+ }, {
98
+ amount: string;
99
+ currency: string;
100
+ decimals: number;
101
+ unitType: string;
102
+ chainId?: number | undefined;
103
+ channelId?: string | undefined;
104
+ escrowContract?: string | undefined;
105
+ feePayer?: boolean | undefined;
106
+ minVoucherDelta?: string | undefined;
107
+ operator?: string | undefined;
108
+ recipient?: string | undefined;
109
+ sessionProtocol?: "v1" | "v2" | undefined;
110
+ sessionSnapshot?: import("../Snapshot.js").SessionSnapshot | undefined;
111
+ suggestedDeposit?: string | undefined;
112
+ }>>;
113
+ };
114
+ }, session.DeriveDefaults<parameters>, parameters["sse"] extends false | undefined ? undefined : Transport.Sse, {}, undefined>;
115
+ export declare namespace session {
116
+ const serializeSnapshot: typeof serializeSessionSnapshot;
117
+ const deserializeSnapshot: typeof deserializeSessionSnapshot;
118
+ /** Request defaults inferred from the Tempo session method schema. */
119
+ type Defaults = LooseOmit<Method.RequestDefaults<typeof Methods.session>, 'escrowContract' | 'feePayer' | 'recipient'>;
120
+ /** Partial fee-sponsor policy used for server-submitted session transactions. */
121
+ type FeePayerPolicy = Partial<FeePayer.Policy>;
122
+ /** Parameters accepted by the TIP-1034 server session payment method. */
123
+ type Parameters = {
124
+ /** TTL in milliseconds for cached on-chain channel state. After this duration, the server re-queries on-chain state during voucher handling to detect forced close requests. @default 5_000 */
125
+ channelStateTtl?: number | undefined;
126
+ /** Override the fee-sponsor policy used for sponsored open/topUp transactions and server-driven close transactions. */
127
+ feePayerPolicy?: FeePayerPolicy | undefined;
128
+ /** Minimum voucher delta to accept (numeric string, default: "0"). */
129
+ minVoucherDelta?: string | undefined;
130
+ /** Resolve a reusable channel ID from request identity when no credential/request channel ID is present. */
131
+ resolveChannelId?: ResolveSessionChannelId | undefined;
132
+ /** Enables same-route HEAD bootstrap using a zero-amount identity proof. */
133
+ bootstrap?: boolean | undefined;
134
+ /**
135
+ * Atomic store backend for channel state.
136
+ *
137
+ * Session mutations must be linearizable across instances so spent,
138
+ * highest-voucher, top-up, and close/finalization updates cannot race.
139
+ * Use `Store.memory()` for tests or local single-process usage.
140
+ */
141
+ store?: Store.AtomicStore | undefined;
142
+ /** Enable SSE streaming. Pass `true` for defaults or an options object to configure SSE. */
143
+ sse?: boolean | Transport.sse.Options | undefined;
144
+ /** Tempo chain ID used for TIP-1034 channel escrow challenges. Defaults to the resolved client chain ID. Pass the Tempo testnet chain ID here instead of using legacy session's `testnet` boolean. */
145
+ chainId?: number | undefined;
146
+ /** TIP20EscrowChannel precompile address override. */
147
+ escrowContract?: Address | undefined;
148
+ /** Server-owned automatic settlement cadence. Clients do not receive or control this schedule. */
149
+ settlementSchedule?: SettlementSchedule | undefined;
150
+ /** Optional fee token used for server-driven close transactions. */
151
+ feeToken?: Address | undefined;
152
+ } & Account.resolve.Parameters & Client.getResolver.Parameters & Defaults;
153
+ /** Defaults derived from `session()` parameters for handler type inference. */
154
+ type DeriveDefaults<parameters extends Parameters> = types.DeriveDefaults<parameters, Defaults> & {
155
+ decimals: number;
156
+ escrowContract: Address;
157
+ };
158
+ }
159
+ /**
160
+ * Charge against a precompile-backed channel's balance.
161
+ *
162
+ * Exported so consumers can deduct from a channel outside the `session()`
163
+ * handler.
164
+ *
165
+ * Delegates to the shared `deductFromChannel` atomic helper and translates
166
+ * failure modes into typed errors (`InsufficientBalanceError`, `ChannelClosedError`).
167
+ */
168
+ export declare function charge(store: ChannelStore.ChannelStore, channelId: Hex, amount: bigint): Promise<ChannelStore.State>;
169
+ //# sourceMappingURL=Session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/server/Session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ /**
2
+ * Server-side TIP-1034 precompile session payment method for request/response flows.
3
+ *
4
+ * Handles the full TIP20EscrowChannel lifecycle (open, voucher, top-up, close)
5
+ * and one-shot settlement. Each incoming request carries a session credential
6
+ * with a cumulative voucher that the server validates and records.
7
+ */
8
+ import { isAddress } from 'viem';
9
+ import { tempo as tempo_chain } from 'viem/chains';
10
+ import * as Challenge from '../../../Challenge.js';
11
+ import * as Constants from '../../../Constants.js';
12
+ import * as Errors from '../../../Errors.js';
13
+ import * as Expires from '../../../Expires.js';
14
+ import * as Method from '../../../Method.js';
15
+ import * as Store from '../../../Store.js';
16
+ import * as Client from '../../../viem/Client.js';
17
+ import * as Account from '../../internal/account.js';
18
+ import * as defaults from '../../internal/defaults.js';
19
+ import * as Methods from '../../Methods.js';
20
+ import * as ChargeServer from '../../server/Charge.js';
21
+ import * as Transport from '../../server/internal/transport.js';
22
+ import { tip20ChannelEscrow } from '../precompile/Protocol.js';
23
+ import { deserializeSnapshot as deserializeSessionSnapshot, serializeSnapshot as serializeSessionSnapshot, } from '../Snapshot.js';
24
+ import * as ChannelStore from './ChannelStore.js';
25
+ import { verifyCredentialPayload } from './CredentialVerification.js';
26
+ import { requireSessionCredentialPayload } from './CredentialVerification.js';
27
+ import { resolveCredentialVerificationContext, resolveSessionChannelId, resolveSessionSnapshot, resolveSessionPaymentRequest, } from './RequestState.js';
28
+ import { respondToSessionCredential } from './RequestState.js';
29
+ import { applyVerifiedHttpAccounting, chargeSessionChannel } from './Settlement.js';
30
+ import { maybeSettleScheduled } from './Settlement.js';
31
+ import { resolveSettlementSchedule } from './Settlement.js';
32
+ export { settle, settleBatch } from './Settlement.js';
33
+ function deriveServerDefaults(values) {
34
+ // `Method.toServer()` models defaults from request input fields. Tempo session
35
+ // defaults are assembled after account/currency resolution, so keep the
36
+ // unavoidable generic bridge in one place instead of the control-flow body.
37
+ return values;
38
+ }
39
+ function deriveTransport(transport) {
40
+ return transport;
41
+ }
42
+ async function resolveBootstrapChargeRequest(parameters) {
43
+ const { decimals, defaultRecipient, getClient, parameterChainId, paymentRequest } = parameters;
44
+ const chainId = paymentRequest.chainId ?? parameterChainId ?? (await getClient({})).chain?.id;
45
+ return {
46
+ amount: '0',
47
+ ...(chainId !== undefined ? { chainId } : {}),
48
+ currency: paymentRequest.currency,
49
+ decimals,
50
+ recipient: paymentRequest.recipient ?? defaultRecipient,
51
+ };
52
+ }
53
+ function isBootstrapChargeCredential(credential) {
54
+ return (credential?.challenge.method === Constants.Methods.tempo &&
55
+ credential.challenge.intent === Constants.Intents.charge);
56
+ }
57
+ function createBootstrapChallenge(parameters) {
58
+ return Challenge.fromMethod(Methods.charge, {
59
+ expires: parameters.expires,
60
+ realm: parameters.realm,
61
+ request: parameters.request,
62
+ secretKey: parameters.secretKey,
63
+ });
64
+ }
65
+ function respondBootstrapChallenge(challenge, error) {
66
+ const headers = new Headers({
67
+ [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge),
68
+ 'Cache-Control': 'no-store',
69
+ });
70
+ if (!error)
71
+ return new Response(null, { status: 402, headers });
72
+ headers.set('Content-Type', 'application/problem+json');
73
+ return new Response(JSON.stringify(error.toProblemDetails(challenge.id)), {
74
+ status: error.status,
75
+ headers,
76
+ });
77
+ }
78
+ function assertBootstrapChallengeMatches(expected, actual) {
79
+ if (actual.method !== Constants.Methods.tempo || actual.intent !== Constants.Intents.charge)
80
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'not a bootstrap challenge' });
81
+ if (!sameRequestValue(expected.request.amount, actual.request.amount))
82
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap amount mismatch' });
83
+ if (!sameRequestValue(expected.request.currency, actual.request.currency))
84
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap currency mismatch' });
85
+ if (!sameRequestValue(expected.request.recipient, actual.request.recipient))
86
+ throw new Errors.InvalidChallengeError({
87
+ id: actual.id,
88
+ reason: 'bootstrap recipient mismatch',
89
+ });
90
+ const expectedChainId = readMethodDetail(expected.request, 'chainId');
91
+ const actualChainId = readMethodDetail(actual.request, 'chainId');
92
+ if (!sameRequestValue(expectedChainId, actualChainId))
93
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap chain mismatch' });
94
+ }
95
+ function readMethodDetail(request, key) {
96
+ if (!request || typeof request !== 'object')
97
+ return undefined;
98
+ const methodDetails = request.methodDetails;
99
+ if (!methodDetails || typeof methodDetails !== 'object')
100
+ return undefined;
101
+ return methodDetails[key];
102
+ }
103
+ function sameRequestValue(a, b) {
104
+ return a === b || (a === undefined && b === undefined);
105
+ }
106
+ function readBootstrapAddress(value, label) {
107
+ if (typeof value === 'string' && isAddress(value, { strict: false }))
108
+ return value;
109
+ throw new Errors.VerificationFailedError({ reason: `missing bootstrap ${label}` });
110
+ }
111
+ function resolveBootstrapEscrowContract(paymentRequest, parameterEscrowContract) {
112
+ const requestEscrow = paymentRequest.escrowContract;
113
+ if (requestEscrow === undefined)
114
+ return parameterEscrowContract ?? tip20ChannelEscrow;
115
+ return readBootstrapAddress(requestEscrow, 'escrowContract');
116
+ }
117
+ function readBootstrapChainId(value) {
118
+ if (typeof value === 'number')
119
+ return value;
120
+ throw new Errors.VerificationFailedError({ reason: 'missing bootstrap chainId' });
121
+ }
122
+ async function verifyBootstrapCredential(parameters) {
123
+ const { challenge, charge, credential, rawRequest, secretKey } = parameters;
124
+ if (!Challenge.verify(credential.challenge, { secretKey }))
125
+ throw new Errors.InvalidChallengeError({
126
+ id: credential.challenge.id,
127
+ reason: 'challenge was not issued by this server',
128
+ });
129
+ Expires.assert(credential.challenge.expires, credential.challenge.id);
130
+ assertBootstrapChallengeMatches(challenge, credential.challenge);
131
+ return charge.verify({
132
+ credential: {
133
+ ...credential,
134
+ payload: Methods.charge.schema.credential.payload.parse(credential.payload),
135
+ },
136
+ request: rawRequest,
137
+ });
138
+ }
139
+ async function handleBootstrapPreflight(parameters) {
140
+ const request = await resolveBootstrapChargeRequest(parameters);
141
+ const challenge = createBootstrapChallenge({
142
+ expires: parameters.expires,
143
+ realm: parameters.realm,
144
+ request,
145
+ secretKey: parameters.secretKey,
146
+ });
147
+ if (!parameters.credential)
148
+ return respondBootstrapChallenge(challenge);
149
+ if (!isBootstrapChargeCredential(parameters.credential))
150
+ return undefined;
151
+ try {
152
+ await verifyBootstrapCredential({
153
+ challenge,
154
+ charge: parameters.charge,
155
+ credential: parameters.credential,
156
+ rawRequest: request,
157
+ secretKey: parameters.secretKey,
158
+ });
159
+ }
160
+ catch (error) {
161
+ return respondBootstrapChallenge(challenge, error instanceof Errors.PaymentError ? error : new Errors.VerificationFailedError());
162
+ }
163
+ const channelId = await resolveSessionChannelId({
164
+ capturedRequest: parameters.capturedRequest,
165
+ credential: parameters.credential,
166
+ request: parameters.paymentRequest,
167
+ resolveChannelId: parameters.resolveChannelId,
168
+ source: parameters.credential.source,
169
+ store: parameters.store,
170
+ });
171
+ const snapshot = await resolveSessionSnapshot({
172
+ amount: 0n,
173
+ channelId,
174
+ expected: {
175
+ chainId: readBootstrapChainId(request.chainId),
176
+ currency: readBootstrapAddress(request.currency, 'currency'),
177
+ escrowContract: resolveBootstrapEscrowContract(parameters.paymentRequest, parameters.parameterEscrowContract),
178
+ recipient: readBootstrapAddress(request.recipient, 'recipient'),
179
+ },
180
+ store: parameters.store,
181
+ });
182
+ const headers = new Headers({ 'Cache-Control': 'no-store' });
183
+ if (snapshot) {
184
+ headers.set(Constants.Headers.paymentSession, snapshot.channelId);
185
+ headers.set(Constants.Headers.paymentSessionSnapshot, serializeSessionSnapshot(snapshot));
186
+ }
187
+ return new Response(null, { status: 204, headers });
188
+ }
189
+ /** Creates a server-side TIP20EscrowChannel precompile session payment method. */
190
+ export function session(p) {
191
+ const parameters = p;
192
+ const { amount, channelStateTtl = 5_000, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, operator, store: rawStore = Store.memory(), suggestedDeposit, unitType, } = parameters;
193
+ const settlementSchedule = resolveSettlementSchedule(parameters.settlementSchedule, decimals);
194
+ const store = ChannelStore.fromStore(rawStore);
195
+ const lastOnChainVerified = new Map();
196
+ const { account, feePayer, recipient } = Account.resolve(parameters);
197
+ const getClient = Client.getResolver({
198
+ chain: tempo_chain,
199
+ getClient: parameters.getClient,
200
+ rpcUrl: defaults.rpcUrl,
201
+ });
202
+ const bootstrapCharge = ChargeServer.charge({
203
+ account,
204
+ chainId: parameters.chainId,
205
+ currency,
206
+ decimals,
207
+ getClient: parameters.getClient,
208
+ recipient,
209
+ store: rawStore,
210
+ });
211
+ const transport = parameters.sse
212
+ ? Transport.sse({
213
+ store,
214
+ ...(typeof parameters.sse === 'object' ? parameters.sse : undefined),
215
+ })
216
+ : undefined;
217
+ return Method.toServer(Methods.session, {
218
+ defaults: deriveServerDefaults({
219
+ amount,
220
+ currency,
221
+ decimals,
222
+ operator,
223
+ recipient,
224
+ suggestedDeposit,
225
+ unitType,
226
+ }),
227
+ transport: deriveTransport(transport),
228
+ preflight: parameters.bootstrap
229
+ ? async ({ capturedRequest, credential, expires, input, options, realm, secretKey }) => {
230
+ if (input.method !== 'HEAD')
231
+ return undefined;
232
+ return handleBootstrapPreflight({
233
+ capturedRequest,
234
+ credential,
235
+ input,
236
+ charge: bootstrapCharge,
237
+ decimals,
238
+ defaultRecipient: recipient,
239
+ expires,
240
+ getClient,
241
+ parameterChainId: parameters.chainId,
242
+ parameterEscrowContract: parameters.escrowContract,
243
+ paymentRequest: options,
244
+ realm,
245
+ resolveChannelId: parameters.resolveChannelId,
246
+ secretKey,
247
+ store,
248
+ });
249
+ }
250
+ : undefined,
251
+ async request({ capturedRequest, credential, request }) {
252
+ const resolvedRequest = await resolveSessionPaymentRequest({
253
+ capturedRequest,
254
+ credential,
255
+ decimals,
256
+ defaultFeePayer: feePayer,
257
+ getClient,
258
+ parameterChainId: parameters.chainId,
259
+ parameterEscrowContract: parameters.escrowContract,
260
+ parameterFeePayer: parameters.feePayer,
261
+ request,
262
+ resolveChannelId: parameters.resolveChannelId,
263
+ store,
264
+ });
265
+ return {
266
+ ...resolvedRequest,
267
+ sessionProtocol: Constants.SessionProtocols.v2,
268
+ };
269
+ },
270
+ async verify({ credential, envelope, request }) {
271
+ const { challenge } = credential;
272
+ const payload = requireSessionCredentialPayload(credential.payload);
273
+ const context = await resolveCredentialVerificationContext({
274
+ decimals,
275
+ feePayer,
276
+ getClient,
277
+ minVoucherDelta: parameters.minVoucherDelta,
278
+ request,
279
+ });
280
+ const sessionReceipt = await verifyCredentialPayload({
281
+ account,
282
+ challenge,
283
+ channelStateTtl,
284
+ chainId: context.chainId,
285
+ client: context.client,
286
+ escrow: context.escrow,
287
+ expectedOperator: context.methodDetails.operator,
288
+ feePayer: context.feePayer,
289
+ feePayerPolicy: parameters.feePayerPolicy,
290
+ feeToken: parameters.feeToken,
291
+ lastOnChainVerified,
292
+ minVoucherDelta: context.minVoucherDelta,
293
+ payload,
294
+ store,
295
+ });
296
+ return applyVerifiedHttpAccounting({
297
+ capturedRequest: envelope?.capturedRequest,
298
+ payloadAction: payload.action,
299
+ receipt: sessionReceipt,
300
+ getRequestAmount: () => BigInt(context.request.amount ?? challenge.request.amount),
301
+ sseEnabled: Boolean(parameters.sse),
302
+ markPrepaidReceipt: Transport.markPrepaidSessionTick,
303
+ charge: (channelId, requestAmount) => chargeSessionChannel({ store, channelId, amount: requestAmount }),
304
+ settleCharged: (channel) => maybeSettleScheduled({
305
+ account,
306
+ client: context.client,
307
+ feePayer: context.feePayer,
308
+ feePayerPolicy: parameters.feePayerPolicy,
309
+ feeToken: parameters.feeToken,
310
+ schedule: settlementSchedule,
311
+ store,
312
+ channel,
313
+ }),
314
+ });
315
+ },
316
+ // This hook acts as a gate: when it returns a Response, `withReceipt()`
317
+ // in Mppx.ts short-circuits and returns that response directly without
318
+ // invoking the user's route handler. When it returns undefined, the
319
+ // user's handler runs normally and serves content.
320
+ //
321
+ // close and topUp are always gated (204) — they are pure management.
322
+ //
323
+ // open and voucher share the same captured-request classifier used
324
+ // during verification. Non-billable requests are treated as management
325
+ // updates; billable requests fall through to the application handler.
326
+ respond({ credential, envelope, input }) {
327
+ return respondToSessionCredential({
328
+ capturedRequest: envelope?.capturedRequest,
329
+ input,
330
+ payload: credential.payload,
331
+ });
332
+ },
333
+ });
334
+ }
335
+ (function (session) {
336
+ session.serializeSnapshot = serializeSessionSnapshot;
337
+ session.deserializeSnapshot = deserializeSessionSnapshot;
338
+ })(session || (session = {}));
339
+ /**
340
+ * Charge against a precompile-backed channel's balance.
341
+ *
342
+ * Exported so consumers can deduct from a channel outside the `session()`
343
+ * handler.
344
+ *
345
+ * Delegates to the shared `deductFromChannel` atomic helper and translates
346
+ * failure modes into typed errors (`InsufficientBalanceError`, `ChannelClosedError`).
347
+ */
348
+ export async function charge(store, channelId, amount) {
349
+ return chargeSessionChannel({ store, channelId, amount });
350
+ }
351
+ //# sourceMappingURL=Session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../../../src/tempo/session/server/Session.ts"],"names":[],"mappings":"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"}