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,404 @@
1
+ import { AmountExceedsDepositError, ChannelClosedError, ChannelNotFoundError, DeltaTooSmallError, InvalidSignatureError, VerificationFailedError, } from '../../../Errors.js';
2
+ import { createSessionReceipt } from '../precompile/Protocol.js';
3
+ import { uint96 } from '../precompile/Protocol.js';
4
+ import * as Voucher from '../precompile/Voucher.js';
5
+ import { assertSameDescriptor, validateChannelDescriptor, validateChannelState, } from './CredentialVerification.js';
6
+ /** Returns whether a channel is backed by the TIP20EscrowChannel precompile. */
7
+ export function isPrecompileState(state) {
8
+ return state.backend === 'precompile';
9
+ }
10
+ /** Returns the greater bigint value without decreasing persisted monotonic state. */
11
+ export function keepGreater(current, next) {
12
+ return current > next ? current : next;
13
+ }
14
+ /** Returns the greater close-request timestamp as a bigint. */
15
+ export function keepGreaterTimestamp(current, next) {
16
+ return keepGreater(current, BigInt(next));
17
+ }
18
+ /** Keeps local active-channel state in sync with authoritative on-chain reads. */
19
+ export function mergeActiveOnChainState(current, state) {
20
+ return {
21
+ closeRequestedAt: keepGreaterTimestamp(current?.closeRequestedAt ?? 0n, state.closeRequestedAt),
22
+ deposit: keepGreater(current?.deposit ?? 0n, state.deposit),
23
+ settledOnChain: keepGreater(current?.settledOnChain ?? 0n, state.settled),
24
+ };
25
+ }
26
+ /** Keeps the existing higher voucher, otherwise stores the supplied candidate voucher. */
27
+ export function resolveHighestVoucher(parameters) {
28
+ const { channelId, current, cumulativeAmount, signature } = parameters;
29
+ if (current?.highestVoucherAmount && current.highestVoucherAmount > cumulativeAmount) {
30
+ return {
31
+ highestVoucherAmount: current.highestVoucherAmount,
32
+ highestVoucher: current.highestVoucher,
33
+ };
34
+ }
35
+ return {
36
+ highestVoucherAmount: cumulativeAmount,
37
+ highestVoucher: { channelId, cumulativeAmount, signature },
38
+ };
39
+ }
40
+ /** Derives persisted identity fields from a verified precompile channel descriptor. */
41
+ export function resolvePrecompileChannelIdentity(parameters) {
42
+ const { authorizedSigner, chainId, channelId, descriptor, escrow, expiringNonceHash } = parameters;
43
+ return {
44
+ authorizedSigner,
45
+ backend: 'precompile',
46
+ chainId,
47
+ channelId,
48
+ descriptor,
49
+ escrowContract: escrow,
50
+ expiringNonceHash,
51
+ operator: descriptor.operator,
52
+ payee: descriptor.payee,
53
+ payer: descriptor.payer,
54
+ salt: descriptor.salt,
55
+ token: descriptor.token,
56
+ };
57
+ }
58
+ /** Builds the persisted state for a verified precompile channel open. */
59
+ export function openChannelState(parameters) {
60
+ const { authorizedSigner, chainId, channelId, current, descriptor, escrow, expiringNonceHash } = parameters;
61
+ const { state } = parameters;
62
+ const { cumulativeAmount, signature } = parameters;
63
+ const highestVoucher = resolveHighestVoucher({
64
+ channelId,
65
+ current,
66
+ cumulativeAmount,
67
+ signature,
68
+ });
69
+ const onChain = mergeActiveOnChainState(current, state);
70
+ return {
71
+ ...(current ?? {}),
72
+ ...resolvePrecompileChannelIdentity({
73
+ authorizedSigner,
74
+ chainId,
75
+ channelId,
76
+ descriptor,
77
+ escrow,
78
+ expiringNonceHash,
79
+ }),
80
+ closeRequestedAt: onChain.closeRequestedAt,
81
+ deposit: onChain.deposit,
82
+ settledOnChain: onChain.settledOnChain,
83
+ highestVoucherAmount: highestVoucher.highestVoucherAmount,
84
+ highestVoucher: highestVoucher.highestVoucher,
85
+ spent: keepGreater(current?.spent ?? 0n, state.settled),
86
+ units: current?.units ?? 0,
87
+ finalized: current?.finalized ?? false,
88
+ createdAt: current?.createdAt ?? new Date().toISOString(),
89
+ };
90
+ }
91
+ /** Merges top-up on-chain state into persisted channel state without decreasing monotonic fields. */
92
+ export function topUpChannelState(parameters) {
93
+ const { current, state } = parameters;
94
+ if (!current)
95
+ return current;
96
+ return {
97
+ ...current,
98
+ ...mergeActiveOnChainState(current, state),
99
+ };
100
+ }
101
+ /** Merges an accepted voucher into persisted channel state after signature and on-chain checks pass. */
102
+ export function acceptVoucherStateUpdate(parameters) {
103
+ const { channelState, current, voucher } = parameters;
104
+ if (!current)
105
+ throw new ChannelNotFoundError({ reason: 'channel not found' });
106
+ if (current.finalized)
107
+ throw new ChannelClosedError({ reason: 'channel is finalized' });
108
+ if (current.closeRequestedAt !== 0n)
109
+ throw new ChannelClosedError({ reason: 'channel has a pending close request' });
110
+ const onChain = mergeActiveOnChainState(current, channelState);
111
+ if (voucher.cumulativeAmount <= current.highestVoucherAmount) {
112
+ return { ...current, ...onChain };
113
+ }
114
+ return {
115
+ ...current,
116
+ ...onChain,
117
+ highestVoucherAmount: voucher.cumulativeAmount,
118
+ highestVoucher: voucher,
119
+ };
120
+ }
121
+ /**
122
+ * Resolves the close capture amount and validates it is covered by both the
123
+ * close voucher and current on-chain deposit.
124
+ */
125
+ export function resolveCloseCaptureAmount(parameters) {
126
+ const { cumulativeAmount, onChainDeposit, onChainSettled, spent } = parameters;
127
+ if (cumulativeAmount < spent) {
128
+ throw new VerificationFailedError({
129
+ reason: `close voucher amount must be >= ${spent} (spent)`,
130
+ });
131
+ }
132
+ const captureAmount = uint96(spent > onChainSettled ? spent : onChainSettled);
133
+ if (captureAmount > cumulativeAmount) {
134
+ throw new VerificationFailedError({
135
+ reason: `close voucher amount must be >= ${captureAmount} (capture amount)`,
136
+ });
137
+ }
138
+ if (captureAmount > onChainDeposit) {
139
+ throw new AmountExceedsDepositError({
140
+ reason: 'close capture amount exceeds on-chain deposit',
141
+ });
142
+ }
143
+ return captureAmount;
144
+ }
145
+ /** Marks local channel state as pending close and returns the bounded capture amount. */
146
+ export function markPendingClose(parameters) {
147
+ const { closeRequestedAt, cumulativeAmount, current, onChainSettled, onChainDeposit } = parameters;
148
+ if (!current)
149
+ return { captureAmount: 0n, state: null };
150
+ if (current.finalized)
151
+ throw new ChannelClosedError({ reason: 'channel is already finalized' });
152
+ if (current.closeRequestedAt !== 0n)
153
+ throw new ChannelClosedError({ reason: 'channel has a pending close request' });
154
+ const captureAmount = resolveCloseCaptureAmount({
155
+ cumulativeAmount,
156
+ onChainDeposit,
157
+ onChainSettled,
158
+ spent: current.spent,
159
+ });
160
+ return {
161
+ captureAmount,
162
+ state: { ...current, closeRequestedAt },
163
+ };
164
+ }
165
+ /** Finalizes local channel state after a successful close transaction. */
166
+ export function finalizeClosedChannelState(parameters) {
167
+ const { captureAmount, channelId, cumulativeAmount, current, signature } = parameters;
168
+ if (!current)
169
+ return current;
170
+ const highestVoucher = resolveHighestVoucher({
171
+ channelId,
172
+ current,
173
+ cumulativeAmount,
174
+ signature,
175
+ });
176
+ return {
177
+ ...current,
178
+ finalized: true,
179
+ closeRequestedAt: 0n,
180
+ deposit: 0n,
181
+ settledOnChain: keepGreater(current.settledOnChain, captureAmount),
182
+ highestVoucherAmount: highestVoucher.highestVoucherAmount,
183
+ highestVoucher: highestVoucher.highestVoucher,
184
+ };
185
+ }
186
+ /** Loads a precompile-backed channel or throws a verification error. */
187
+ export async function loadPrecompileChannel(parameters) {
188
+ const { channelId, chainId, descriptor, escrow, store } = parameters;
189
+ const channel = await store.getChannel(channelId);
190
+ if (!channel)
191
+ throw new ChannelNotFoundError({ reason: 'channel not found' });
192
+ if (!isPrecompileState(channel))
193
+ throw new VerificationFailedError({ reason: 'channel is not precompile-backed' });
194
+ assertSameDescriptor(descriptor, channel.descriptor);
195
+ if (parameters.validateDescriptor)
196
+ validateChannelDescriptor(descriptor, channelId, chainId, escrow, channel.payee, channel.token);
197
+ return channel;
198
+ }
199
+ /** Verifies a cumulative voucher and returns a session receipt after store reconciliation. */
200
+ export async function verifyAndAcceptVoucher(parameters) {
201
+ const { store, minVoucherDelta, challenge, channel, voucher, channelState, methodDetails } = parameters;
202
+ validateChannelState(channelState);
203
+ if (voucher.cumulativeAmount > channelState.deposit)
204
+ throw new AmountExceedsDepositError({ reason: 'voucher amount exceeds on-chain deposit' });
205
+ if (voucher.cumulativeAmount < channel.highestVoucherAmount)
206
+ throw new VerificationFailedError({
207
+ reason: 'voucher cumulativeAmount must be strictly greater than highest accepted voucher',
208
+ });
209
+ const valid = await Voucher.verifyVoucher(methodDetails.escrowContract, methodDetails.chainId, voucher, channel.authorizedSigner);
210
+ if (!valid)
211
+ throw new InvalidSignatureError({ reason: 'invalid voucher signature' });
212
+ if (voucher.cumulativeAmount === channel.highestVoucherAmount)
213
+ return createSessionReceipt({
214
+ challengeId: challenge.id,
215
+ channelId: voucher.channelId,
216
+ acceptedCumulative: channel.highestVoucherAmount,
217
+ spent: channel.spent,
218
+ units: channel.units,
219
+ });
220
+ if (voucher.cumulativeAmount <= channelState.settled)
221
+ throw new VerificationFailedError({
222
+ reason: 'voucher cumulativeAmount is below on-chain settled amount',
223
+ });
224
+ const delta = voucher.cumulativeAmount - channel.highestVoucherAmount;
225
+ if (delta < minVoucherDelta)
226
+ throw new DeltaTooSmallError({
227
+ reason: `voucher delta ${delta} below minimum ${minVoucherDelta}`,
228
+ });
229
+ const updated = await store.updateChannel(voucher.channelId, (current) => acceptVoucherStateUpdate({ channelState, current, voucher }));
230
+ if (!updated)
231
+ throw new ChannelNotFoundError({ reason: 'channel not found' });
232
+ return createSessionReceipt({
233
+ challengeId: challenge.id,
234
+ channelId: voucher.channelId,
235
+ acceptedCumulative: updated.highestVoucherAmount,
236
+ spent: updated.spent,
237
+ units: updated.units,
238
+ });
239
+ }
240
+ /** Normalizes and validates 32-byte channel IDs before store lookup or persistence. */
241
+ export function normalizeChannelId(channelId) {
242
+ if (!/^0x[0-9a-fA-F]{64}$/.test(channelId))
243
+ throw new Error('Invalid session channel ID.');
244
+ return channelId.toLowerCase();
245
+ }
246
+ function normalizeState(channelId, state) {
247
+ return state.channelId === channelId ? state : { ...state, channelId };
248
+ }
249
+ function normalizeMaybeState(channelId, state) {
250
+ return state ? normalizeState(channelId, state) : null;
251
+ }
252
+ /** Normalizes any stored channel value inside a store change. */
253
+ function normalizeChange(channelId, change) {
254
+ if (change.op !== 'set')
255
+ return change;
256
+ return {
257
+ ...change,
258
+ value: normalizeState(channelId, change.value),
259
+ };
260
+ }
261
+ /**
262
+ * Wraps a generic {@link Store} into the internal {@link Store}
263
+ * interface used by server handlers and the SSE metering loop.
264
+ *
265
+ * Provides `waitForUpdate` notifications so the SSE `chargeOrWait` loop
266
+ * can wake up without polling.
267
+ *
268
+ * ## Atomicity
269
+ *
270
+ * Mutations use `get` → `fn` → `set` guarded by a per-key in-process
271
+ * mutex. This serializes concurrent `updateChannel` calls within a
272
+ * single JS runtime but does **not** protect against races across
273
+ * multiple processes or instances.
274
+ *
275
+ * Backends that need true atomicity (e.g., Durable Objects, D1)
276
+ * should implement {@link Store} directly.
277
+ */
278
+ const storeCache = new WeakMap();
279
+ /** Wraps a generic mppx store in the shared session channel-store interface. */
280
+ export function fromStore(store) {
281
+ const cached = storeCache.get(store);
282
+ if (cached)
283
+ return cached;
284
+ const stateStore = store;
285
+ const atomicUpdate = stateStore.update;
286
+ const runtime = {
287
+ locks: new Map(),
288
+ waiters: new Map(),
289
+ };
290
+ function notify(channelId) {
291
+ const set = runtime.waiters.get(channelId);
292
+ if (!set)
293
+ return;
294
+ for (const resolve of set)
295
+ resolve();
296
+ runtime.waiters.delete(channelId);
297
+ }
298
+ async function update(channelId, fn) {
299
+ return updateResult(channelId, (current) => {
300
+ const next = fn(current);
301
+ if (next)
302
+ return { op: 'set', value: next, result: next };
303
+ return { op: 'delete', result: null };
304
+ });
305
+ }
306
+ async function updateResult(channelId, fn) {
307
+ const normalizedChannelId = normalizeChannelId(channelId);
308
+ let change;
309
+ if (atomicUpdate) {
310
+ const result = await atomicUpdate(normalizedChannelId, (current) => {
311
+ const normalizedCurrent = normalizeMaybeState(normalizedChannelId, current);
312
+ change = normalizeChange(normalizedChannelId, fn(normalizedCurrent));
313
+ return change;
314
+ });
315
+ if (change?.op !== 'noop')
316
+ notify(normalizedChannelId);
317
+ return result;
318
+ }
319
+ while (runtime.locks.has(normalizedChannelId))
320
+ await runtime.locks.get(normalizedChannelId);
321
+ let release;
322
+ runtime.locks.set(normalizedChannelId, new Promise((r) => {
323
+ release = r;
324
+ }));
325
+ try {
326
+ const current = normalizeMaybeState(normalizedChannelId, await stateStore.get(normalizedChannelId));
327
+ change = normalizeChange(normalizedChannelId, fn(current));
328
+ if (change.op === 'set') {
329
+ await stateStore.put(normalizedChannelId, change.value);
330
+ }
331
+ if (change.op === 'delete')
332
+ await stateStore.delete(normalizedChannelId);
333
+ if (change.op !== 'noop')
334
+ notify(normalizedChannelId);
335
+ return change.result;
336
+ }
337
+ finally {
338
+ runtime.locks.delete(normalizedChannelId);
339
+ release();
340
+ }
341
+ }
342
+ const cs = {
343
+ async getChannel(channelId) {
344
+ const normalizedChannelId = normalizeChannelId(channelId);
345
+ return normalizeMaybeState(normalizedChannelId, await stateStore.get(normalizedChannelId));
346
+ },
347
+ async updateChannel(channelId, fn) {
348
+ return update(channelId, fn);
349
+ },
350
+ waitForUpdate(channelId) {
351
+ return new Promise((resolve) => {
352
+ const normalizedChannelId = normalizeChannelId(channelId);
353
+ let set = runtime.waiters.get(normalizedChannelId);
354
+ if (!set) {
355
+ set = new Set();
356
+ runtime.waiters.set(normalizedChannelId, set);
357
+ }
358
+ set.add(resolve);
359
+ });
360
+ },
361
+ };
362
+ cs.updateChannelResult = updateResult;
363
+ storeCache.set(store, cs);
364
+ return cs;
365
+ }
366
+ /**
367
+ * Atomically deducts `amount` from a channel's available voucher balance.
368
+ *
369
+ * Returns `{ ok: true, channel }` with updated spend/unit counters when the
370
+ * deduction succeeds. Returns `{ ok: false, channel }` without mutating state
371
+ * when the channel exists but cannot currently be charged.
372
+ */
373
+ export async function deductFromChannel(store, channelId, amount) {
374
+ if (store.updateChannelResult) {
375
+ const result = await store.updateChannelResult(channelId, (current) => planDeduction(current, amount));
376
+ if (!result)
377
+ throw new Error('channel not found');
378
+ return result;
379
+ }
380
+ let result = null;
381
+ const channel = await store.updateChannel(channelId, (current) => {
382
+ const change = planDeduction(current, amount);
383
+ result = change.result;
384
+ if (change.op === 'set')
385
+ return change.value;
386
+ return current;
387
+ });
388
+ if (!channel)
389
+ throw new Error('channel not found');
390
+ return result ?? { ok: false, channel };
391
+ }
392
+ function planDeduction(current, amount) {
393
+ if (!current)
394
+ return { op: 'noop', result: null };
395
+ if (current.finalized)
396
+ return { op: 'noop', result: { ok: false, channel: current } };
397
+ if (current.closeRequestedAt !== 0n)
398
+ return { op: 'noop', result: { ok: false, channel: current } };
399
+ if (current.highestVoucherAmount - current.spent < amount)
400
+ return { op: 'noop', result: { ok: false, channel: current } };
401
+ const next = { ...current, spent: current.spent + amount, units: current.units + 1 };
402
+ return { op: 'set', value: next, result: { ok: true, channel: next } };
403
+ }
404
+ //# sourceMappingURL=ChannelStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../../src/tempo/session/server/ChannelStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { type Account as viem_Account, type Address, type Hex } from 'viem';
2
+ import type * as Challenge from '../../../Challenge.js';
3
+ import type * as FeePayer from '../../internal/fee-payer.js';
4
+ import * as Chain from '../precompile/Chain.js';
5
+ import * as Channel from '../precompile/Channel.js';
6
+ import { type SessionCredentialPayload, type SessionReceipt } from '../precompile/Protocol.js';
7
+ import * as ChannelStore from './ChannelStore.js';
8
+ /** Returns the effective voucher signer for a TIP-1034 descriptor. */
9
+ export declare function authorizedSigner(descriptor: Channel.ChannelDescriptor): Address;
10
+ /** Asserts that a credential payload includes a TIP-1034 descriptor. */
11
+ export declare function assertDescriptor(payload: {
12
+ descriptor?: Channel.ChannelDescriptor | undefined;
13
+ }): asserts payload is {
14
+ descriptor: Channel.ChannelDescriptor;
15
+ };
16
+ /** Asserts that two TIP-1034 descriptors identify the same channel. */
17
+ export declare function assertSameDescriptor(a: Channel.ChannelDescriptor, b: Channel.ChannelDescriptor): void;
18
+ /**
19
+ * Validates a TIP-1034 descriptor against channel ID, server destination, and token.
20
+ */
21
+ export declare function validateChannelDescriptor(descriptor: Channel.ChannelDescriptor, channelId: Address | `0x${string}`, chainId: number, escrow: Address, recipient: Address, currency: Address, expectedOperator?: Address | undefined): void;
22
+ /** Validates on-chain channel state before accepting or charging a credential. */
23
+ export declare function validateChannelState(state: Chain.ChannelState, amount?: bigint): void;
24
+ /** Shared action and channel fields required on every session credential payload. */
25
+ export type SessionCredentialPayloadHeader = {
26
+ /** Credential action discriminator. */
27
+ action: SessionCredentialPayload['action'];
28
+ /** Channel ID the credential acts on. */
29
+ channelId: Hex;
30
+ };
31
+ /** Validates the action discriminator for a TIP-1034 session credential payload. */
32
+ export declare function requireSessionCredentialAction(payload: unknown): SessionCredentialPayload['action'];
33
+ /** Validates the shared action and channel fields for a TIP-1034 session credential payload. */
34
+ export declare function requireSessionCredentialPayloadHeader(payload: unknown): SessionCredentialPayloadHeader;
35
+ /** Validates action-specific fields for a TIP-1034 session credential payload. */
36
+ export declare function requireSessionCredentialPayload(payload: unknown): SessionCredentialPayload;
37
+ /** Shared inputs required to verify a single precompile session credential payload. */
38
+ export type VerifyCredentialPayloadParameters = {
39
+ /** Optional account override used for payee-side close settlement. */
40
+ account?: viem_Account | undefined;
41
+ /** Challenge echoed by the credential. */
42
+ challenge: Challenge.Challenge;
43
+ /** Milliseconds before voucher verification refreshes on-chain channel state. */
44
+ channelStateTtl: number;
45
+ /** Chain ID used for channel ID derivation and voucher domain separation. */
46
+ chainId: number;
47
+ /** viem client used for precompile reads and transaction broadcasts. */
48
+ client: Chain.TransactionClient;
49
+ /** TIP20EscrowChannel precompile address for this session method. */
50
+ escrow: Address;
51
+ /** Operator address advertised in the HMAC-bound challenge details. */
52
+ expectedOperator?: Address | undefined;
53
+ /** Optional fee-payer account for fee-sponsored management transactions. */
54
+ feePayer?: viem_Account | undefined;
55
+ /** Optional policy for fee-sponsored close/open/top-up transactions. */
56
+ feePayerPolicy?: Partial<FeePayer.Policy> | undefined;
57
+ /** Optional fee token override for close transactions. */
58
+ feeToken?: Address | undefined;
59
+ /** Last successful on-chain refresh timestamp per channel ID. */
60
+ lastOnChainVerified: Map<Hex, number>;
61
+ /** Minimum allowed voucher delta in raw units. */
62
+ minVoucherDelta: bigint;
63
+ /** Discriminated session credential payload to verify. */
64
+ payload: SessionCredentialPayload;
65
+ /** Server-side channel store. */
66
+ store: ChannelStore.ChannelStore;
67
+ };
68
+ /** Narrows shared credential verification inputs to one payload action. */
69
+ export type VerifyCredentialActionParameters<action extends SessionCredentialPayload['action']> = Omit<VerifyCredentialPayloadParameters, 'payload'> & {
70
+ /** Credential payload for the selected action. */
71
+ payload: Extract<SessionCredentialPayload, {
72
+ action: action;
73
+ }>;
74
+ };
75
+ /** Inputs for verifying an open transaction credential and initial voucher. */
76
+ export type OpenCredentialActionParameters = VerifyCredentialActionParameters<'open'>;
77
+ /** Inputs for verifying a top-up transaction credential. */
78
+ export type TopUpCredentialActionParameters = VerifyCredentialActionParameters<'topUp'>;
79
+ /** Inputs for verifying and accepting an incremental voucher credential. */
80
+ export type VoucherCredentialActionParameters = VerifyCredentialActionParameters<'voucher'>;
81
+ /** Inputs for verifying and settling a cooperative close credential. */
82
+ export type CloseCredentialActionParameters = VerifyCredentialActionParameters<'close'>;
83
+ /** Verifies a session credential payload and applies the action-specific state transition. */
84
+ export declare function verifyCredentialPayload(context: VerifyCredentialPayloadParameters): Promise<SessionReceipt>;
85
+ //# sourceMappingURL=CredentialVerification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialVerification.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/server/CredentialVerification.ts"],"names":[],"mappings":"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"}