mppx 0.6.31 → 0.8.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 (616) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +20 -11
  3. package/dist/Challenge.d.ts.map +1 -1
  4. package/dist/Challenge.js +27 -13
  5. package/dist/Challenge.js.map +1 -1
  6. package/dist/Constants.d.ts +46 -0
  7. package/dist/Constants.d.ts.map +1 -0
  8. package/dist/Constants.js +46 -0
  9. package/dist/Constants.js.map +1 -0
  10. package/dist/Credential.d.ts.map +1 -1
  11. package/dist/Credential.js +5 -4
  12. package/dist/Credential.js.map +1 -1
  13. package/dist/Mcp.d.ts +3 -0
  14. package/dist/Mcp.d.ts.map +1 -1
  15. package/dist/Mcp.js +2 -0
  16. package/dist/Mcp.js.map +1 -1
  17. package/dist/Method.d.ts +32 -4
  18. package/dist/Method.d.ts.map +1 -1
  19. package/dist/Method.js +5 -2
  20. package/dist/Method.js.map +1 -1
  21. package/dist/PaymentRequest.d.ts +10 -10
  22. package/dist/PaymentRequest.js +8 -8
  23. package/dist/Receipt.d.ts.map +1 -1
  24. package/dist/Receipt.js +3 -2
  25. package/dist/Receipt.js.map +1 -1
  26. package/dist/cli/cli.d.ts.map +1 -1
  27. package/dist/cli/cli.js +19 -11
  28. package/dist/cli/cli.js.map +1 -1
  29. package/dist/cli/plugins/tempo.d.ts.map +1 -1
  30. package/dist/cli/plugins/tempo.js +17 -6
  31. package/dist/cli/plugins/tempo.js.map +1 -1
  32. package/dist/cli/utils.d.ts +5 -0
  33. package/dist/cli/utils.d.ts.map +1 -1
  34. package/dist/cli/utils.js +10 -0
  35. package/dist/cli/utils.js.map +1 -1
  36. package/dist/client/Methods.d.ts +5 -2
  37. package/dist/client/Methods.d.ts.map +1 -1
  38. package/dist/client/Methods.js +5 -2
  39. package/dist/client/Methods.js.map +1 -1
  40. package/dist/client/Mppx.js +2 -2
  41. package/dist/client/Mppx.js.map +1 -1
  42. package/dist/client/Transport.d.ts +11 -16
  43. package/dist/client/Transport.d.ts.map +1 -1
  44. package/dist/client/Transport.js +55 -76
  45. package/dist/client/Transport.js.map +1 -1
  46. package/dist/client/index.d.ts +5 -1
  47. package/dist/client/index.d.ts.map +1 -1
  48. package/dist/client/index.js +3 -1
  49. package/dist/client/index.js.map +1 -1
  50. package/dist/client/internal/Fetch.d.ts.map +1 -1
  51. package/dist/client/internal/Fetch.js +60 -13
  52. package/dist/client/internal/Fetch.js.map +1 -1
  53. package/dist/client/internal/protocols/Mcp.d.ts +7 -0
  54. package/dist/client/internal/protocols/Mcp.d.ts.map +1 -0
  55. package/dist/client/internal/protocols/Mcp.js +159 -0
  56. package/dist/client/internal/protocols/Mcp.js.map +1 -0
  57. package/dist/client/internal/protocols/Mpp.d.ts +4 -0
  58. package/dist/client/internal/protocols/Mpp.d.ts.map +1 -0
  59. package/dist/client/internal/protocols/Mpp.js +18 -0
  60. package/dist/client/internal/protocols/Mpp.js.map +1 -0
  61. package/dist/client/internal/protocols/Protocol.d.ts +10 -0
  62. package/dist/client/internal/protocols/Protocol.d.ts.map +1 -0
  63. package/dist/client/internal/protocols/Protocol.js +2 -0
  64. package/dist/client/internal/protocols/Protocol.js.map +1 -0
  65. package/dist/client/internal/protocols/Shared.d.ts +5 -0
  66. package/dist/client/internal/protocols/Shared.d.ts.map +1 -0
  67. package/dist/client/internal/protocols/Shared.js +20 -0
  68. package/dist/client/internal/protocols/Shared.js.map +1 -0
  69. package/dist/client/internal/protocols/X402.d.ts +8 -0
  70. package/dist/client/internal/protocols/X402.d.ts.map +1 -0
  71. package/dist/client/internal/protocols/X402.js +39 -0
  72. package/dist/client/internal/protocols/X402.js.map +1 -0
  73. package/dist/evm/client/index.d.ts +1 -0
  74. package/dist/evm/client/index.d.ts.map +1 -1
  75. package/dist/evm/client/index.js +1 -0
  76. package/dist/evm/client/index.js.map +1 -1
  77. package/dist/evm/index.d.ts +2 -0
  78. package/dist/evm/index.d.ts.map +1 -1
  79. package/dist/evm/index.js +2 -0
  80. package/dist/evm/index.js.map +1 -1
  81. package/dist/evm/server/Methods.d.ts +1 -1
  82. package/dist/evm/server/Methods.d.ts.map +1 -1
  83. package/dist/evm/server/index.d.ts +1 -0
  84. package/dist/evm/server/index.d.ts.map +1 -1
  85. package/dist/evm/server/index.js +1 -0
  86. package/dist/evm/server/index.js.map +1 -1
  87. package/dist/index.d.ts +1 -0
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/internal/AcceptPayment.d.ts +3 -0
  92. package/dist/internal/AcceptPayment.d.ts.map +1 -1
  93. package/dist/internal/AcceptPayment.js +15 -11
  94. package/dist/internal/AcceptPayment.js.map +1 -1
  95. package/dist/mcp/client/McpClient.d.ts +101 -0
  96. package/dist/mcp/client/McpClient.d.ts.map +1 -0
  97. package/dist/mcp/client/McpClient.js +162 -0
  98. package/dist/mcp/client/McpClient.js.map +1 -0
  99. package/dist/mcp/client/index.d.ts.map +1 -0
  100. package/dist/mcp/client/index.js.map +1 -0
  101. package/dist/mcp/server/Transport.d.ts.map +1 -0
  102. package/dist/mcp/server/Transport.js.map +1 -0
  103. package/dist/mcp/server/index.d.ts.map +1 -0
  104. package/dist/mcp/server/index.js.map +1 -0
  105. package/dist/server/Mppx.d.ts +12 -4
  106. package/dist/server/Mppx.d.ts.map +1 -1
  107. package/dist/server/Mppx.js +85 -27
  108. package/dist/server/Mppx.js.map +1 -1
  109. package/dist/server/Response.d.ts.map +1 -1
  110. package/dist/server/Response.js +2 -1
  111. package/dist/server/Response.js.map +1 -1
  112. package/dist/server/Transport.d.ts +1 -1
  113. package/dist/server/Transport.d.ts.map +1 -1
  114. package/dist/server/Transport.js +5 -4
  115. package/dist/server/Transport.js.map +1 -1
  116. package/dist/server/index.d.ts +1 -0
  117. package/dist/server/index.d.ts.map +1 -1
  118. package/dist/server/index.js +1 -0
  119. package/dist/server/index.js.map +1 -1
  120. package/dist/stripe/client/Charge.d.ts +1 -1
  121. package/dist/stripe/client/Charge.d.ts.map +1 -1
  122. package/dist/stripe/client/Charge.js +3 -1
  123. package/dist/stripe/client/Charge.js.map +1 -1
  124. package/dist/stripe/server/Charge.d.ts +1 -1
  125. package/dist/stripe/server/Charge.d.ts.map +1 -1
  126. package/dist/stripe/server/Charge.js +9 -2
  127. package/dist/stripe/server/Charge.js.map +1 -1
  128. package/dist/stripe/server/Methods.d.ts +1 -1
  129. package/dist/stripe/server/Methods.d.ts.map +1 -1
  130. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  131. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  132. package/dist/stripe/server/internal/html.gen.js +1 -1
  133. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  134. package/dist/tempo/Methods.d.ts +18 -0
  135. package/dist/tempo/Methods.d.ts.map +1 -1
  136. package/dist/tempo/Methods.js +16 -1
  137. package/dist/tempo/Methods.js.map +1 -1
  138. package/dist/tempo/Proof.d.ts +85 -1
  139. package/dist/tempo/Proof.d.ts.map +1 -1
  140. package/dist/tempo/Proof.js +35 -0
  141. package/dist/tempo/Proof.js.map +1 -1
  142. package/dist/tempo/client/Charge.d.ts +19 -1
  143. package/dist/tempo/client/Charge.d.ts.map +1 -1
  144. package/dist/tempo/client/Charge.js +47 -27
  145. package/dist/tempo/client/Charge.js.map +1 -1
  146. package/dist/tempo/client/Methods.d.ts +41 -10
  147. package/dist/tempo/client/Methods.d.ts.map +1 -1
  148. package/dist/tempo/client/Methods.js +16 -7
  149. package/dist/tempo/client/Methods.js.map +1 -1
  150. package/dist/tempo/client/ResolveAccount.d.ts +40 -0
  151. package/dist/tempo/client/ResolveAccount.d.ts.map +1 -0
  152. package/dist/tempo/client/ResolveAccount.js +2 -0
  153. package/dist/tempo/client/ResolveAccount.js.map +1 -0
  154. package/dist/tempo/client/index.d.ts +7 -4
  155. package/dist/tempo/client/index.d.ts.map +1 -1
  156. package/dist/tempo/client/index.js +5 -3
  157. package/dist/tempo/client/index.js.map +1 -1
  158. package/dist/tempo/index.d.ts +1 -0
  159. package/dist/tempo/index.d.ts.map +1 -1
  160. package/dist/tempo/index.js +1 -0
  161. package/dist/tempo/index.js.map +1 -1
  162. package/dist/tempo/internal/fee-payer.d.ts +29 -1
  163. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  164. package/dist/tempo/internal/fee-payer.js +138 -4
  165. package/dist/tempo/internal/fee-payer.js.map +1 -1
  166. package/dist/tempo/internal/proof.d.ts +71 -5
  167. package/dist/tempo/internal/proof.d.ts.map +1 -1
  168. package/dist/tempo/internal/proof.js +42 -6
  169. package/dist/tempo/internal/proof.js.map +1 -1
  170. package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
  171. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
  172. package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
  173. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
  174. package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
  175. package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
  176. package/dist/tempo/{client → legacy/client}/Session.js +14 -7
  177. package/dist/tempo/legacy/client/Session.js.map +1 -0
  178. package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
  179. package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
  180. package/dist/tempo/{client → legacy/client}/SessionManager.js +30 -19
  181. package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
  182. package/dist/tempo/legacy/client/index.d.ts +7 -0
  183. package/dist/tempo/legacy/client/index.d.ts.map +1 -0
  184. package/dist/tempo/legacy/client/index.js +5 -0
  185. package/dist/tempo/legacy/client/index.js.map +1 -0
  186. package/dist/tempo/legacy/index.d.ts +7 -0
  187. package/dist/tempo/legacy/index.d.ts.map +1 -0
  188. package/dist/tempo/legacy/index.js +7 -0
  189. package/dist/tempo/legacy/index.js.map +1 -0
  190. package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
  191. package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
  192. package/dist/tempo/{server → legacy/server}/Session.js +12 -10
  193. package/dist/tempo/legacy/server/Session.js.map +1 -0
  194. package/dist/tempo/legacy/server/index.d.ts +5 -0
  195. package/dist/tempo/legacy/server/index.d.ts.map +1 -0
  196. package/dist/tempo/legacy/server/index.js +5 -0
  197. package/dist/tempo/legacy/server/index.js.map +1 -0
  198. package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
  199. package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
  200. package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
  201. package/dist/tempo/legacy/session/Chain.js.map +1 -0
  202. package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
  203. package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
  204. package/dist/tempo/legacy/session/Channel.js.map +1 -0
  205. package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
  206. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
  207. package/dist/tempo/legacy/session/ChannelStore.js +6 -0
  208. package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
  209. package/dist/tempo/legacy/session/Types.d.ts +73 -0
  210. package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
  211. package/dist/tempo/legacy/session/Types.js.map +1 -0
  212. package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
  213. package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
  214. package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
  215. package/dist/tempo/legacy/session/Voucher.js.map +1 -0
  216. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
  217. package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
  218. package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
  219. package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
  220. package/dist/tempo/legacy/session/index.d.ts +9 -0
  221. package/dist/tempo/legacy/session/index.d.ts.map +1 -0
  222. package/dist/tempo/legacy/session/index.js +9 -0
  223. package/dist/tempo/legacy/session/index.js.map +1 -0
  224. package/dist/tempo/server/Charge.d.ts +1 -1
  225. package/dist/tempo/server/Charge.d.ts.map +1 -1
  226. package/dist/tempo/server/Charge.js +51 -30
  227. package/dist/tempo/server/Charge.js.map +1 -1
  228. package/dist/tempo/server/Methods.d.ts +67 -8
  229. package/dist/tempo/server/Methods.d.ts.map +1 -1
  230. package/dist/tempo/server/Methods.js +40 -10
  231. package/dist/tempo/server/Methods.js.map +1 -1
  232. package/dist/tempo/server/Subscription.d.ts +11 -1
  233. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  234. package/dist/tempo/server/Subscription.js +135 -23
  235. package/dist/tempo/server/Subscription.js.map +1 -1
  236. package/dist/tempo/server/index.d.ts +6 -5
  237. package/dist/tempo/server/index.d.ts.map +1 -1
  238. package/dist/tempo/server/index.js +5 -5
  239. package/dist/tempo/server/index.js.map +1 -1
  240. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  241. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  242. package/dist/tempo/server/internal/html.gen.js +1 -1
  243. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  244. package/dist/tempo/server/internal/request-body.d.ts +7 -2
  245. package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
  246. package/dist/tempo/server/internal/request-body.js +20 -3
  247. package/dist/tempo/server/internal/request-body.js.map +1 -1
  248. package/dist/tempo/server/internal/transport.d.ts +8 -4
  249. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  250. package/dist/tempo/server/internal/transport.js +8 -7
  251. package/dist/tempo/server/internal/transport.js.map +1 -1
  252. package/dist/tempo/session/Snapshot.d.ts +32 -0
  253. package/dist/tempo/session/Snapshot.d.ts.map +1 -0
  254. package/dist/tempo/session/Snapshot.js +37 -0
  255. package/dist/tempo/session/Snapshot.js.map +1 -0
  256. package/dist/tempo/session/client/ChannelOps.d.ts +81 -0
  257. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
  258. package/dist/tempo/session/client/ChannelOps.js +201 -0
  259. package/dist/tempo/session/client/ChannelOps.js.map +1 -0
  260. package/dist/tempo/session/client/ChannelStore.d.ts +51 -0
  261. package/dist/tempo/session/client/ChannelStore.d.ts.map +1 -0
  262. package/dist/tempo/session/client/ChannelStore.js +63 -0
  263. package/dist/tempo/session/client/ChannelStore.js.map +1 -0
  264. package/dist/tempo/session/client/CredentialState.d.ts +245 -0
  265. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
  266. package/dist/tempo/session/client/CredentialState.js +419 -0
  267. package/dist/tempo/session/client/CredentialState.js.map +1 -0
  268. package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
  269. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
  270. package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
  271. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
  272. package/dist/tempo/session/client/Runtime.d.ts +464 -0
  273. package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
  274. package/dist/tempo/session/client/Runtime.js +499 -0
  275. package/dist/tempo/session/client/Runtime.js.map +1 -0
  276. package/dist/tempo/session/client/Session.d.ts +138 -0
  277. package/dist/tempo/session/client/Session.d.ts.map +1 -0
  278. package/dist/tempo/session/client/Session.js +69 -0
  279. package/dist/tempo/session/client/Session.js.map +1 -0
  280. package/dist/tempo/session/client/SessionManager.d.ts +84 -0
  281. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
  282. package/dist/tempo/session/client/SessionManager.js +577 -0
  283. package/dist/tempo/session/client/SessionManager.js.map +1 -0
  284. package/dist/tempo/session/client/Transports.d.ts +449 -0
  285. package/dist/tempo/session/client/Transports.d.ts.map +1 -0
  286. package/dist/tempo/session/client/Transports.js +721 -0
  287. package/dist/tempo/session/client/Transports.js.map +1 -0
  288. package/dist/tempo/session/client/index.d.ts +11 -0
  289. package/dist/tempo/session/client/index.d.ts.map +1 -0
  290. package/dist/tempo/session/client/index.js +6 -0
  291. package/dist/tempo/session/client/index.js.map +1 -0
  292. package/dist/tempo/session/index.d.ts +7 -8
  293. package/dist/tempo/session/index.d.ts.map +1 -1
  294. package/dist/tempo/session/index.js +7 -8
  295. package/dist/tempo/session/index.js.map +1 -1
  296. package/dist/tempo/session/precompile/Chain.d.ts +319 -0
  297. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
  298. package/dist/tempo/session/precompile/Chain.js +492 -0
  299. package/dist/tempo/session/precompile/Chain.js.map +1 -0
  300. package/dist/tempo/session/precompile/Channel.d.ts +46 -0
  301. package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
  302. package/dist/tempo/session/precompile/Channel.js +56 -0
  303. package/dist/tempo/session/precompile/Channel.js.map +1 -0
  304. package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
  305. package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
  306. package/dist/tempo/session/precompile/Protocol.js +264 -0
  307. package/dist/tempo/session/precompile/Protocol.js.map +1 -0
  308. package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
  309. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
  310. package/dist/tempo/session/precompile/Voucher.js +125 -0
  311. package/dist/tempo/session/precompile/Voucher.js.map +1 -0
  312. package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
  313. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
  314. package/dist/tempo/session/precompile/escrow.abi.js +224 -0
  315. package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
  316. package/dist/tempo/session/precompile/index.d.ts +24 -0
  317. package/dist/tempo/session/precompile/index.d.ts.map +1 -0
  318. package/dist/tempo/session/precompile/index.js +22 -0
  319. package/dist/tempo/session/precompile/index.js.map +1 -0
  320. package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
  321. package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
  322. package/dist/tempo/session/server/ChannelOps.js +91 -0
  323. package/dist/tempo/session/server/ChannelOps.js.map +1 -0
  324. package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
  325. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
  326. package/dist/tempo/session/server/ChannelStore.js +404 -0
  327. package/dist/tempo/session/server/ChannelStore.js.map +1 -0
  328. package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
  329. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
  330. package/dist/tempo/session/server/CredentialVerification.js +494 -0
  331. package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
  332. package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
  333. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
  334. package/dist/tempo/session/server/MeteredStream.js +42 -0
  335. package/dist/tempo/session/server/MeteredStream.js.map +1 -0
  336. package/dist/tempo/session/server/RequestState.d.ts +208 -0
  337. package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
  338. package/dist/tempo/session/server/RequestState.js +252 -0
  339. package/dist/tempo/session/server/RequestState.js.map +1 -0
  340. package/dist/tempo/session/server/Session.d.ts +169 -0
  341. package/dist/tempo/session/server/Session.d.ts.map +1 -0
  342. package/dist/tempo/session/server/Session.js +351 -0
  343. package/dist/tempo/session/server/Session.js.map +1 -0
  344. package/dist/tempo/session/server/Settlement.d.ts +185 -0
  345. package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
  346. package/dist/tempo/session/server/Settlement.js +252 -0
  347. package/dist/tempo/session/server/Settlement.js.map +1 -0
  348. package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
  349. package/dist/tempo/session/server/Sse.d.ts.map +1 -0
  350. package/dist/tempo/session/server/Sse.js +184 -0
  351. package/dist/tempo/session/server/Sse.js.map +1 -0
  352. package/dist/tempo/session/server/Transports.d.ts +89 -0
  353. package/dist/tempo/session/server/Transports.d.ts.map +1 -0
  354. package/dist/tempo/session/server/Transports.js +149 -0
  355. package/dist/tempo/session/server/Transports.js.map +1 -0
  356. package/dist/tempo/session/server/Ws.d.ts +48 -0
  357. package/dist/tempo/session/server/Ws.d.ts.map +1 -0
  358. package/dist/tempo/session/server/Ws.js +244 -0
  359. package/dist/tempo/session/server/Ws.js.map +1 -0
  360. package/dist/tempo/session/server/index.d.ts +4 -0
  361. package/dist/tempo/session/server/index.d.ts.map +1 -0
  362. package/dist/tempo/session/server/index.js +2 -0
  363. package/dist/tempo/session/server/index.js.map +1 -0
  364. package/dist/tempo/subscription/KeyAuthorization.d.ts +712 -1
  365. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
  366. package/dist/tempo/subscription/Store.d.ts +2 -0
  367. package/dist/tempo/subscription/Store.d.ts.map +1 -1
  368. package/dist/tempo/subscription/Store.js +16 -1
  369. package/dist/tempo/subscription/Store.js.map +1 -1
  370. package/dist/x402/index.d.ts +1 -0
  371. package/dist/x402/index.d.ts.map +1 -1
  372. package/dist/x402/index.js +1 -0
  373. package/dist/x402/index.js.map +1 -1
  374. package/package.json +25 -9
  375. package/src/Challenge.test.ts +40 -0
  376. package/src/Challenge.ts +28 -13
  377. package/src/Constants.ts +58 -0
  378. package/src/Credential.ts +5 -4
  379. package/src/Mcp.ts +4 -0
  380. package/src/Method.ts +46 -5
  381. package/src/PaymentRequest.ts +10 -10
  382. package/src/Receipt.ts +3 -2
  383. package/src/cli/cli.test.ts +38 -43
  384. package/src/cli/cli.ts +23 -10
  385. package/src/cli/mcp.test.ts +21 -7
  386. package/src/cli/plugins/tempo.ts +21 -8
  387. package/src/cli/utils.test.ts +25 -1
  388. package/src/cli/utils.ts +10 -0
  389. package/src/client/Methods.ts +5 -2
  390. package/src/client/Mppx.test-d.ts +31 -1
  391. package/src/client/Mppx.test.ts +76 -1
  392. package/src/client/Mppx.ts +2 -2
  393. package/src/client/Transport.test.ts +225 -178
  394. package/src/client/Transport.ts +77 -84
  395. package/src/client/index.ts +25 -1
  396. package/src/client/internal/Fetch.test.ts +236 -6
  397. package/src/client/internal/Fetch.ts +69 -11
  398. package/src/client/internal/protocols/Mcp.test.ts +220 -0
  399. package/src/client/internal/protocols/Mcp.ts +162 -0
  400. package/src/client/internal/protocols/Mpp.ts +21 -0
  401. package/src/client/internal/protocols/Protocol.ts +10 -0
  402. package/src/client/internal/protocols/Shared.ts +25 -0
  403. package/src/client/internal/protocols/X402.ts +42 -0
  404. package/src/discovery/OpenApi.test.ts +1 -1
  405. package/src/env.d.ts +1 -1
  406. package/src/evm/PublicInterface.test-d.ts +1 -1
  407. package/src/evm/client/index.ts +1 -0
  408. package/src/evm/index.ts +2 -0
  409. package/src/evm/server/Charge.test.ts +1 -1
  410. package/src/evm/server/index.ts +1 -0
  411. package/src/index.ts +1 -0
  412. package/src/internal/AcceptPayment.test.ts +61 -0
  413. package/src/internal/AcceptPayment.ts +21 -14
  414. package/src/{mcp-sdk → mcp}/client/McpClient.integration.test.ts +18 -11
  415. package/src/{mcp-sdk → mcp}/client/McpClient.test-d.ts +45 -11
  416. package/src/{mcp-sdk → mcp}/client/McpClient.test.ts +211 -5
  417. package/src/mcp/client/McpClient.ts +307 -0
  418. package/src/mcp/client/McpClient.unit.test.ts +135 -0
  419. package/src/middlewares/elysia.test.ts +9 -5
  420. package/src/middlewares/express.test.ts +9 -5
  421. package/src/middlewares/hono.test.ts +5 -5
  422. package/src/middlewares/internal/mppx.test.ts +1 -1
  423. package/src/middlewares/nextjs.test.ts +9 -5
  424. package/src/proxy/Proxy.test.ts +9 -9
  425. package/src/proxy/services/anthropic.test.ts +1 -1
  426. package/src/proxy/services/openai.test.ts +1 -1
  427. package/src/proxy/services/stripe.test.ts +1 -1
  428. package/src/server/Mppx.authorize.test.ts +1 -1
  429. package/src/server/Mppx.test-d.ts +55 -1
  430. package/src/server/Mppx.test.ts +220 -9
  431. package/src/server/Mppx.ts +501 -407
  432. package/src/server/Response.ts +2 -1
  433. package/src/server/Transport.test.ts +6 -6
  434. package/src/server/Transport.ts +5 -4
  435. package/src/server/index.ts +1 -0
  436. package/src/stripe/Charge.integration.test.ts +1 -1
  437. package/src/stripe/client/Charge.test.ts +21 -6
  438. package/src/stripe/client/Charge.ts +6 -2
  439. package/src/stripe/server/Charge.test.ts +115 -2
  440. package/src/stripe/server/Charge.ts +13 -2
  441. package/src/stripe/server/internal/html/package.json +1 -1
  442. package/src/stripe/server/internal/html.gen.ts +1 -1
  443. package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
  444. package/src/tempo/Methods.test.ts +45 -17
  445. package/src/tempo/Methods.ts +22 -0
  446. package/src/tempo/Proof.conformance.test.ts +146 -0
  447. package/src/tempo/Proof.test-d.ts +15 -0
  448. package/src/tempo/Proof.ts +52 -1
  449. package/src/tempo/PublicExports.test-d.ts +105 -0
  450. package/src/tempo/Subscription.integration.test.ts +1 -1
  451. package/src/tempo/client/Charge.test.ts +258 -0
  452. package/src/tempo/client/Charge.ts +84 -38
  453. package/src/tempo/client/Methods.ts +22 -8
  454. package/src/tempo/client/ResolveAccount.ts +46 -0
  455. package/src/tempo/client/index.ts +15 -4
  456. package/src/tempo/index.ts +1 -0
  457. package/src/tempo/internal/fee-payer.test.ts +296 -17
  458. package/src/tempo/internal/fee-payer.ts +186 -4
  459. package/src/tempo/internal/fee-token.test.ts +14 -9
  460. package/src/tempo/internal/proof.test.ts +12 -4
  461. package/src/tempo/internal/proof.ts +55 -6
  462. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
  463. package/src/tempo/legacy/README.md +9 -0
  464. package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
  465. package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
  466. package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
  467. package/src/tempo/{client → legacy/client}/Session.ts +25 -11
  468. package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
  469. package/src/tempo/{client → legacy/client}/SessionManager.ts +52 -23
  470. package/src/tempo/legacy/client/index.ts +6 -0
  471. package/src/tempo/legacy/index.ts +6 -0
  472. package/src/tempo/{server → legacy/server}/Session.test.ts +136 -71
  473. package/src/tempo/{server → legacy/server}/Session.ts +32 -23
  474. package/src/tempo/legacy/server/index.ts +4 -0
  475. package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
  476. package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
  477. package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
  478. package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
  479. package/src/tempo/legacy/session/ChannelStore.ts +39 -0
  480. package/src/tempo/legacy/session/Types.ts +91 -0
  481. package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
  482. package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
  483. package/src/tempo/legacy/session/index.ts +8 -0
  484. package/src/tempo/server/AtomicStore.test-d.ts +16 -11
  485. package/src/tempo/server/Charge.test.ts +480 -31
  486. package/src/tempo/server/Charge.ts +54 -30
  487. package/src/tempo/server/Methods.ts +58 -10
  488. package/src/tempo/server/Sse.test.ts +2 -2
  489. package/src/tempo/server/Subscription.test.ts +465 -3
  490. package/src/tempo/server/Subscription.ts +174 -19
  491. package/src/tempo/server/index.ts +6 -5
  492. package/src/tempo/server/internal/html/package.json +2 -2
  493. package/src/tempo/server/internal/html.gen.ts +1 -1
  494. package/src/tempo/server/internal/request-body.test.ts +37 -4
  495. package/src/tempo/server/internal/request-body.ts +25 -6
  496. package/src/tempo/server/internal/transport.test.ts +4 -4
  497. package/src/tempo/server/internal/transport.ts +19 -10
  498. package/src/tempo/session/Snapshot.test.ts +41 -0
  499. package/src/tempo/session/Snapshot.ts +74 -0
  500. package/src/tempo/session/client/ChannelOps.test.ts +163 -0
  501. package/src/tempo/session/client/ChannelOps.ts +330 -0
  502. package/src/tempo/session/client/ChannelStore.ts +111 -0
  503. package/src/tempo/session/client/CredentialState.test.ts +789 -0
  504. package/src/tempo/session/client/CredentialState.ts +799 -0
  505. package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
  506. package/src/tempo/session/client/Runtime.test.ts +1092 -0
  507. package/src/tempo/session/client/Runtime.ts +986 -0
  508. package/src/tempo/session/client/Session.test.ts +774 -0
  509. package/src/tempo/session/client/Session.ts +123 -0
  510. package/src/tempo/session/client/SessionManager.test.ts +1397 -0
  511. package/src/tempo/session/client/SessionManager.ts +751 -0
  512. package/src/tempo/session/client/Transports.test.ts +837 -0
  513. package/src/tempo/session/client/Transports.ts +1292 -0
  514. package/src/tempo/session/client/index.ts +40 -0
  515. package/src/tempo/session/index.ts +7 -8
  516. package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
  517. package/src/tempo/session/precompile/Chain.test.ts +1258 -0
  518. package/src/tempo/session/precompile/Chain.ts +979 -0
  519. package/src/tempo/session/precompile/Channel.test.ts +138 -0
  520. package/src/tempo/session/precompile/Channel.ts +103 -0
  521. package/src/tempo/session/precompile/Protocol.test.ts +358 -0
  522. package/src/tempo/session/precompile/Protocol.ts +520 -0
  523. package/src/tempo/session/precompile/Voucher.test.ts +354 -0
  524. package/src/tempo/session/precompile/Voucher.ts +162 -0
  525. package/src/tempo/session/precompile/escrow.abi.ts +226 -0
  526. package/src/tempo/session/precompile/index.ts +33 -0
  527. package/src/tempo/session/server/ChannelOps.test.ts +129 -0
  528. package/src/tempo/session/server/ChannelOps.ts +157 -0
  529. package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
  530. package/src/tempo/session/server/ChannelStore.ts +835 -0
  531. package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
  532. package/src/tempo/session/server/CredentialVerification.ts +710 -0
  533. package/src/tempo/session/server/MeteredStream.ts +88 -0
  534. package/src/tempo/session/server/RequestState.test.ts +531 -0
  535. package/src/tempo/session/server/RequestState.ts +499 -0
  536. package/src/tempo/session/server/Session.integration.test.ts +444 -0
  537. package/src/tempo/session/server/Session.test.ts +3253 -0
  538. package/src/tempo/session/server/Session.ts +543 -0
  539. package/src/tempo/session/server/Settlement.test.ts +329 -0
  540. package/src/tempo/session/server/Settlement.ts +471 -0
  541. package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
  542. package/src/tempo/session/server/Sse.ts +254 -0
  543. package/src/tempo/session/server/Transports.test.ts +346 -0
  544. package/src/tempo/session/server/Transports.ts +255 -0
  545. package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
  546. package/src/tempo/session/server/Ws.ts +380 -0
  547. package/src/tempo/session/server/index.ts +8 -0
  548. package/src/tempo/subscription/Store.ts +27 -9
  549. package/src/x402/Exact.e2e.test.ts +1 -1
  550. package/src/x402/PublicInterface.test-d.ts +1 -1
  551. package/src/x402/index.ts +1 -0
  552. package/dist/mcp-sdk/client/McpClient.d.ts +0 -78
  553. package/dist/mcp-sdk/client/McpClient.d.ts.map +0 -1
  554. package/dist/mcp-sdk/client/McpClient.js +0 -105
  555. package/dist/mcp-sdk/client/McpClient.js.map +0 -1
  556. package/dist/mcp-sdk/client/index.d.ts.map +0 -1
  557. package/dist/mcp-sdk/client/index.js.map +0 -1
  558. package/dist/mcp-sdk/server/Transport.d.ts.map +0 -1
  559. package/dist/mcp-sdk/server/Transport.js.map +0 -1
  560. package/dist/mcp-sdk/server/index.d.ts.map +0 -1
  561. package/dist/mcp-sdk/server/index.js.map +0 -1
  562. package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
  563. package/dist/tempo/client/ChannelOps.js.map +0 -1
  564. package/dist/tempo/client/Session.d.ts.map +0 -1
  565. package/dist/tempo/client/Session.js.map +0 -1
  566. package/dist/tempo/client/SessionManager.d.ts.map +0 -1
  567. package/dist/tempo/client/SessionManager.js.map +0 -1
  568. package/dist/tempo/server/Session.d.ts.map +0 -1
  569. package/dist/tempo/server/Session.js.map +0 -1
  570. package/dist/tempo/session/Chain.d.ts.map +0 -1
  571. package/dist/tempo/session/Chain.js.map +0 -1
  572. package/dist/tempo/session/Channel.d.ts.map +0 -1
  573. package/dist/tempo/session/Channel.js.map +0 -1
  574. package/dist/tempo/session/ChannelStore.d.ts +0 -117
  575. package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
  576. package/dist/tempo/session/ChannelStore.js +0 -172
  577. package/dist/tempo/session/ChannelStore.js.map +0 -1
  578. package/dist/tempo/session/Receipt.d.ts +0 -22
  579. package/dist/tempo/session/Receipt.d.ts.map +0 -1
  580. package/dist/tempo/session/Receipt.js +0 -34
  581. package/dist/tempo/session/Receipt.js.map +0 -1
  582. package/dist/tempo/session/Sse.d.ts.map +0 -1
  583. package/dist/tempo/session/Sse.js +0 -363
  584. package/dist/tempo/session/Sse.js.map +0 -1
  585. package/dist/tempo/session/Types.d.ts +0 -78
  586. package/dist/tempo/session/Types.d.ts.map +0 -1
  587. package/dist/tempo/session/Types.js.map +0 -1
  588. package/dist/tempo/session/Voucher.d.ts.map +0 -1
  589. package/dist/tempo/session/Voucher.js.map +0 -1
  590. package/dist/tempo/session/Ws.d.ts +0 -87
  591. package/dist/tempo/session/Ws.d.ts.map +0 -1
  592. package/dist/tempo/session/Ws.js +0 -443
  593. package/dist/tempo/session/Ws.js.map +0 -1
  594. package/dist/tempo/session/escrow.abi.js.map +0 -1
  595. package/src/mcp-sdk/client/McpClient.ts +0 -196
  596. package/src/tempo/session/ChannelStore.ts +0 -308
  597. package/src/tempo/session/Receipt.test.ts +0 -89
  598. package/src/tempo/session/Receipt.ts +0 -46
  599. package/src/tempo/session/Sse.ts +0 -462
  600. package/src/tempo/session/Types.ts +0 -86
  601. package/src/tempo/session/Ws.ts +0 -576
  602. /package/dist/{mcp-sdk → mcp}/client/index.d.ts +0 -0
  603. /package/dist/{mcp-sdk → mcp}/client/index.js +0 -0
  604. /package/dist/{mcp-sdk → mcp}/server/Transport.d.ts +0 -0
  605. /package/dist/{mcp-sdk → mcp}/server/Transport.js +0 -0
  606. /package/dist/{mcp-sdk → mcp}/server/index.d.ts +0 -0
  607. /package/dist/{mcp-sdk → mcp}/server/index.js +0 -0
  608. /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
  609. /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
  610. /package/src/{mcp-sdk → mcp}/client/index.ts +0 -0
  611. /package/src/{mcp-sdk → mcp}/server/Transport.test.ts +0 -0
  612. /package/src/{mcp-sdk → mcp}/server/Transport.ts +0 -0
  613. /package/src/{mcp-sdk → mcp}/server/index.ts +0 -0
  614. /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
  615. /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
  616. /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
@@ -1,8 +1,19 @@
1
1
  import type { Address, Hex } from 'viem'
2
- import { describe, expect, test } from 'vp/test'
3
-
4
- import * as Store from '../../Store.js'
5
- import { chainId, escrowContract as escrowContractDefaults } from '../internal/defaults.js'
2
+ import { afterEach, describe, expect, test, vi } from 'vp/test'
3
+
4
+ import * as Challenge from '../../../Challenge.js'
5
+ import {
6
+ AmountExceedsDepositError,
7
+ ChannelNotFoundError,
8
+ DeltaTooSmallError,
9
+ VerificationFailedError,
10
+ } from '../../../Errors.js'
11
+ import * as Store from '../../../Store.js'
12
+ import { chainId, escrowContract as escrowContractDefaults } from '../../internal/defaults.js'
13
+ import * as PrecompileChannel from '../precompile/Channel.js'
14
+ import type { SessionSignedVoucher } from '../precompile/Protocol.js'
15
+ import type { SignedVoucher } from '../precompile/Protocol.js'
16
+ import * as Voucher from '../precompile/Voucher.js'
6
17
  import * as ChannelStore from './ChannelStore.js'
7
18
 
8
19
  const channelId = '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex
@@ -12,7 +23,22 @@ const mixedCaseAliasChannelId = lowerCaseAliasChannelId.replace(/[a-f]/g, (chara
12
23
  index % 2 === 0 ? character.toUpperCase() : character,
13
24
  ) as Hex
14
25
 
15
- function makeChannel(overrides?: Partial<ChannelStore.State>): ChannelStore.State {
26
+ const precompileDescriptor = {
27
+ payer: '0x0000000000000000000000000000000000000001' as Address,
28
+ payee: '0x0000000000000000000000000000000000000002' as Address,
29
+ operator: '0x0000000000000000000000000000000000000005' as Address,
30
+ token: '0x0000000000000000000000000000000000000003' as Address,
31
+ salt: `0x${'11'.repeat(32)}` as Hex,
32
+ authorizedSigner: '0x0000000000000000000000000000000000000004' as Address,
33
+ expiringNonceHash: `0x${'22'.repeat(32)}` as Hex,
34
+ } satisfies PrecompileChannel.ChannelDescriptor
35
+
36
+ type PrecompileChannelOverrides = Partial<ChannelStore.BaseState> &
37
+ ChannelStore.PrecompileBackendState
38
+
39
+ type ChannelOverrides = Partial<ChannelStore.State> | PrecompileChannelOverrides
40
+
41
+ function makeChannel(overrides?: ChannelOverrides): ChannelStore.State {
16
42
  return {
17
43
  channelId,
18
44
  payer: '0x0000000000000000000000000000000000000001' as Address,
@@ -30,15 +56,22 @@ function makeChannel(overrides?: Partial<ChannelStore.State>): ChannelStore.Stat
30
56
  closeRequestedAt: 0n,
31
57
  finalized: false,
32
58
  createdAt: '2025-01-01T00:00:00.000Z',
59
+ backend: 'precompile',
60
+ operator: precompileDescriptor.operator,
61
+ salt: precompileDescriptor.salt,
62
+ expiringNonceHash: precompileDescriptor.expiringNonceHash,
63
+ descriptor: precompileDescriptor,
33
64
  ...overrides,
34
- }
65
+ } as ChannelStore.State
35
66
  }
36
67
 
37
68
  function seedChannel(
38
69
  store: ChannelStore.ChannelStore,
39
- overrides?: Partial<ChannelStore.State>,
70
+ overrides?: ChannelOverrides,
40
71
  ): Promise<ChannelStore.State | null> {
41
- return store.updateChannel(channelId, () => makeChannel(overrides))
72
+ return store.updateChannel(channelId, () => {
73
+ return makeChannel(overrides)
74
+ })
42
75
  }
43
76
 
44
77
  function stripUpdateMethod(store: Store.Store | Store.AtomicStore): Store.Store {
@@ -71,6 +104,10 @@ function sleep(ms: number): Promise<void> {
71
104
  return new Promise((r) => setTimeout(r, ms))
72
105
  }
73
106
 
107
+ afterEach(() => {
108
+ vi.restoreAllMocks()
109
+ })
110
+
74
111
  // ---------- Store.memory ----------
75
112
 
76
113
  describe('Store.memory', () => {
@@ -95,6 +132,463 @@ describe('Store.memory', () => {
95
132
  })
96
133
  })
97
134
 
135
+ const stateUpdateChannelId = `0x${'01'.repeat(32)}` as Hex
136
+ const stateUpdateSignature = `0x${'aa'.repeat(65)}` as Hex
137
+ const stateUpdateToken = '0x20c0000000000000000000000000000000000001' as Address
138
+
139
+ const stateUpdateDescriptor = {
140
+ payer: '0x0000000000000000000000000000000000000001' as Address,
141
+ payee: '0x0000000000000000000000000000000000000002' as Address,
142
+ operator: '0x0000000000000000000000000000000000000000' as Address,
143
+ token: stateUpdateToken,
144
+ salt: `0x${'02'.repeat(32)}` as Hex,
145
+ authorizedSigner: '0x0000000000000000000000000000000000000001' as Address,
146
+ expiringNonceHash: `0x${'03'.repeat(32)}` as Hex,
147
+ }
148
+
149
+ function stateUpdateVoucher(cumulativeAmount: bigint): SessionSignedVoucher {
150
+ return { channelId: stateUpdateChannelId, cumulativeAmount, signature: stateUpdateSignature }
151
+ }
152
+
153
+ function stateUpdateChannel(overrides: Partial<ChannelStore.State> = {}): ChannelStore.State {
154
+ return {
155
+ backend: 'precompile',
156
+ authorizedSigner: stateUpdateDescriptor.authorizedSigner,
157
+ chainId: 4217,
158
+ escrowContract: '0x4D50500000000000000000000000000000000000',
159
+ channelId: stateUpdateChannelId,
160
+ closeRequestedAt: 0n,
161
+ createdAt: '2026-01-01T00:00:00.000Z',
162
+ deposit: 100n,
163
+ finalized: false,
164
+ highestVoucher: stateUpdateVoucher(50n),
165
+ highestVoucherAmount: 50n,
166
+ payee: stateUpdateDescriptor.payee,
167
+ payer: stateUpdateDescriptor.payer,
168
+ settledOnChain: 10n,
169
+ spent: 20n,
170
+ token: stateUpdateToken,
171
+ units: 2,
172
+ descriptor: stateUpdateDescriptor,
173
+ expiringNonceHash: stateUpdateDescriptor.expiringNonceHash,
174
+ operator: stateUpdateDescriptor.operator,
175
+ salt: stateUpdateDescriptor.salt,
176
+ ...overrides,
177
+ }
178
+ }
179
+
180
+ describe('ChannelStore state updates', () => {
181
+ test('keeps the greater bigint value', () => {
182
+ expect(ChannelStore.keepGreater(10n, 5n)).toBe(10n)
183
+ expect(ChannelStore.keepGreater(10n, 15n)).toBe(15n)
184
+ })
185
+
186
+ test('keeps the greater close timestamp', () => {
187
+ expect(ChannelStore.keepGreaterTimestamp(10n, 5)).toBe(10n)
188
+ expect(ChannelStore.keepGreaterTimestamp(10n, 15)).toBe(15n)
189
+ expect(ChannelStore.keepGreaterTimestamp(10n, 15n)).toBe(15n)
190
+ })
191
+
192
+ test('merges active on-chain state without decreasing persisted fields', () => {
193
+ expect(
194
+ ChannelStore.mergeActiveOnChainState(
195
+ {
196
+ closeRequestedAt: 7n,
197
+ deposit: 100n,
198
+ settledOnChain: 20n,
199
+ },
200
+ {
201
+ closeRequestedAt: 5,
202
+ deposit: 90n,
203
+ settled: 25n,
204
+ },
205
+ ),
206
+ ).toEqual({
207
+ closeRequestedAt: 7n,
208
+ deposit: 100n,
209
+ settledOnChain: 25n,
210
+ })
211
+ })
212
+
213
+ test('stores a new voucher when it is higher than current state', () => {
214
+ expect(
215
+ ChannelStore.resolveHighestVoucher({
216
+ channelId: stateUpdateChannelId,
217
+ current: { highestVoucherAmount: 10n, highestVoucher: null },
218
+ cumulativeAmount: 20n,
219
+ signature: stateUpdateSignature,
220
+ }),
221
+ ).toEqual({
222
+ highestVoucherAmount: 20n,
223
+ highestVoucher: {
224
+ channelId: stateUpdateChannelId,
225
+ cumulativeAmount: 20n,
226
+ signature: stateUpdateSignature,
227
+ },
228
+ })
229
+ })
230
+
231
+ test('keeps an existing higher voucher', () => {
232
+ const currentVoucher = stateUpdateVoucher(30n)
233
+
234
+ expect(
235
+ ChannelStore.resolveHighestVoucher({
236
+ channelId: stateUpdateChannelId,
237
+ current: { highestVoucherAmount: 30n, highestVoucher: currentVoucher },
238
+ cumulativeAmount: 20n,
239
+ signature: stateUpdateSignature,
240
+ }),
241
+ ).toEqual({
242
+ highestVoucherAmount: 30n,
243
+ highestVoucher: currentVoucher,
244
+ })
245
+ })
246
+
247
+ test('resolvePrecompileChannelIdentity derives immutable descriptor identity fields', () => {
248
+ expect(
249
+ ChannelStore.resolvePrecompileChannelIdentity({
250
+ authorizedSigner: stateUpdateDescriptor.authorizedSigner,
251
+ chainId: 4217,
252
+ channelId: stateUpdateChannelId,
253
+ descriptor: stateUpdateDescriptor,
254
+ escrow: '0x4D50500000000000000000000000000000000000',
255
+ expiringNonceHash: stateUpdateDescriptor.expiringNonceHash,
256
+ }),
257
+ ).toEqual({
258
+ authorizedSigner: stateUpdateDescriptor.authorizedSigner,
259
+ backend: 'precompile',
260
+ chainId: 4217,
261
+ channelId: stateUpdateChannelId,
262
+ descriptor: stateUpdateDescriptor,
263
+ escrowContract: '0x4D50500000000000000000000000000000000000',
264
+ expiringNonceHash: stateUpdateDescriptor.expiringNonceHash,
265
+ operator: stateUpdateDescriptor.operator,
266
+ payee: stateUpdateDescriptor.payee,
267
+ payer: stateUpdateDescriptor.payer,
268
+ salt: stateUpdateDescriptor.salt,
269
+ token: stateUpdateToken,
270
+ })
271
+ })
272
+
273
+ test('openChannelState creates precompile state and preserves higher accepted voucher', () => {
274
+ const current = stateUpdateChannel({
275
+ highestVoucherAmount: 80n,
276
+ highestVoucher: stateUpdateVoucher(80n),
277
+ spent: 25n,
278
+ })
279
+ const next = ChannelStore.openChannelState({
280
+ authorizedSigner: stateUpdateDescriptor.authorizedSigner,
281
+ chainId: 4217,
282
+ channelId: stateUpdateChannelId,
283
+ current,
284
+ descriptor: stateUpdateDescriptor,
285
+ escrow: current.escrowContract,
286
+ expiringNonceHash: stateUpdateDescriptor.expiringNonceHash,
287
+ cumulativeAmount: 60n,
288
+ signature: stateUpdateSignature,
289
+ state: { deposit: 120n, settled: 15n, closeRequestedAt: 0 },
290
+ })
291
+
292
+ expect(next.backend).toBe('precompile')
293
+ expect(next.highestVoucherAmount).toBe(80n)
294
+ expect(next.highestVoucher).toEqual(stateUpdateVoucher(80n))
295
+ expect(next.deposit).toBe(120n)
296
+ expect(next.spent).toBe(25n)
297
+ })
298
+
299
+ test('topUpChannelState only increases deposit, settled, and close timestamp', () => {
300
+ const current = stateUpdateChannel({
301
+ deposit: 100n,
302
+ settledOnChain: 30n,
303
+ closeRequestedAt: 4n,
304
+ })
305
+
306
+ const next = ChannelStore.topUpChannelState({
307
+ current,
308
+ state: { deposit: 90n, settled: 20n, closeRequestedAt: 3 },
309
+ })
310
+
311
+ expect(next).toMatchObject({
312
+ deposit: 100n,
313
+ settledOnChain: 30n,
314
+ closeRequestedAt: 4n,
315
+ })
316
+ })
317
+
318
+ test('acceptVoucherStateUpdate stores newer voucher and reconciles on-chain state', () => {
319
+ const next = ChannelStore.acceptVoucherStateUpdate({
320
+ current: stateUpdateChannel(),
321
+ voucher: stateUpdateVoucher(70n),
322
+ channelState: { deposit: 120n, settled: 25n, closeRequestedAt: 0 },
323
+ })
324
+
325
+ expect(next.highestVoucherAmount).toBe(70n)
326
+ expect(next.deposit).toBe(120n)
327
+ expect(next.settledOnChain).toBe(25n)
328
+ })
329
+
330
+ test('markPendingClose returns max(spent, on-chain settled) as capture amount', () => {
331
+ const next = ChannelStore.markPendingClose({
332
+ closeRequestedAt: 11n,
333
+ cumulativeAmount: 50n,
334
+ current: stateUpdateChannel({ spent: 20n }),
335
+ onChainDeposit: 100n,
336
+ onChainSettled: 30n,
337
+ })
338
+
339
+ expect(next.captureAmount).toBe(30n)
340
+ expect(next.state?.closeRequestedAt).toBe(11n)
341
+ })
342
+
343
+ test('markPendingClose rejects close voucher below capture amount', () => {
344
+ expect(() =>
345
+ ChannelStore.markPendingClose({
346
+ closeRequestedAt: 11n,
347
+ cumulativeAmount: 25n,
348
+ current: stateUpdateChannel({ spent: 20n }),
349
+ onChainDeposit: 100n,
350
+ onChainSettled: 30n,
351
+ }),
352
+ ).toThrow(VerificationFailedError)
353
+ })
354
+
355
+ test('markPendingClose rejects capture above on-chain deposit', () => {
356
+ expect(() =>
357
+ ChannelStore.markPendingClose({
358
+ closeRequestedAt: 11n,
359
+ cumulativeAmount: 50n,
360
+ current: stateUpdateChannel({ spent: 40n }),
361
+ onChainDeposit: 30n,
362
+ onChainSettled: 0n,
363
+ }),
364
+ ).toThrow(AmountExceedsDepositError)
365
+ })
366
+
367
+ test('resolveCloseCaptureAmount captures max(local spent, on-chain settled)', () => {
368
+ expect(
369
+ ChannelStore.resolveCloseCaptureAmount({
370
+ cumulativeAmount: 50n,
371
+ onChainDeposit: 100n,
372
+ onChainSettled: 30n,
373
+ spent: 20n,
374
+ }),
375
+ ).toBe(30n)
376
+
377
+ expect(
378
+ ChannelStore.resolveCloseCaptureAmount({
379
+ cumulativeAmount: 50n,
380
+ onChainDeposit: 100n,
381
+ onChainSettled: 10n,
382
+ spent: 20n,
383
+ }),
384
+ ).toBe(20n)
385
+ })
386
+
387
+ test('resolveCloseCaptureAmount rejects invalid close boundaries', () => {
388
+ expect(() =>
389
+ ChannelStore.resolveCloseCaptureAmount({
390
+ cumulativeAmount: 19n,
391
+ onChainDeposit: 100n,
392
+ onChainSettled: 10n,
393
+ spent: 20n,
394
+ }),
395
+ ).toThrow(VerificationFailedError)
396
+
397
+ expect(() =>
398
+ ChannelStore.resolveCloseCaptureAmount({
399
+ cumulativeAmount: 25n,
400
+ onChainDeposit: 100n,
401
+ onChainSettled: 30n,
402
+ spent: 20n,
403
+ }),
404
+ ).toThrow(VerificationFailedError)
405
+
406
+ expect(() =>
407
+ ChannelStore.resolveCloseCaptureAmount({
408
+ cumulativeAmount: 50n,
409
+ onChainDeposit: 30n,
410
+ onChainSettled: 0n,
411
+ spent: 40n,
412
+ }),
413
+ ).toThrow(AmountExceedsDepositError)
414
+ })
415
+
416
+ test('finalizeClosedChannelState closes channel and records newer close voucher', () => {
417
+ const next = ChannelStore.finalizeClosedChannelState({
418
+ captureAmount: 60n,
419
+ channelId: stateUpdateChannelId,
420
+ cumulativeAmount: 70n,
421
+ current: stateUpdateChannel({ highestVoucherAmount: 50n, settledOnChain: 20n }),
422
+ signature: stateUpdateSignature,
423
+ })
424
+
425
+ expect(next).toMatchObject({
426
+ finalized: true,
427
+ closeRequestedAt: 0n,
428
+ deposit: 0n,
429
+ settledOnChain: 60n,
430
+ highestVoucherAmount: 70n,
431
+ })
432
+ expect(next?.highestVoucher).toEqual(stateUpdateVoucher(70n))
433
+ })
434
+ })
435
+
436
+ const voucherAcceptanceEscrow = '0x4D50500000000000000000000000000000000000' as Address
437
+
438
+ const voucherAcceptanceChallenge = Challenge.from({
439
+ id: 'challenge-1',
440
+ realm: 'example.test',
441
+ method: 'tempo',
442
+ intent: 'session',
443
+ request: {
444
+ amount: '1',
445
+ currency: stateUpdateToken,
446
+ recipient: stateUpdateDescriptor.payee,
447
+ unitType: 'request',
448
+ },
449
+ })
450
+
451
+ function voucherAcceptanceVoucher(cumulativeAmount: bigint): SignedVoucher {
452
+ return {
453
+ channelId: stateUpdateChannelId,
454
+ cumulativeAmount,
455
+ signature: stateUpdateSignature,
456
+ }
457
+ }
458
+
459
+ function voucherAcceptanceChannel(overrides: Partial<ChannelStore.State> = {}): ChannelStore.State {
460
+ return stateUpdateChannel({
461
+ escrowContract: voucherAcceptanceEscrow,
462
+ highestVoucher: voucherAcceptanceVoucher(50n),
463
+ ...overrides,
464
+ })
465
+ }
466
+
467
+ function memoryChannelStore(initial: ChannelStore.State | null): ChannelStore.ChannelStore {
468
+ let state = initial
469
+ return {
470
+ async getChannel() {
471
+ return state
472
+ },
473
+ async updateChannel(_channelId, fn) {
474
+ state = fn(state)
475
+ return state
476
+ },
477
+ }
478
+ }
479
+
480
+ describe('ChannelStore voucher acceptance', () => {
481
+ test('loads persisted precompile channels', async () => {
482
+ const stored = voucherAcceptanceChannel()
483
+
484
+ await expect(
485
+ ChannelStore.loadPrecompileChannel({
486
+ channelId: stateUpdateChannelId,
487
+ chainId: 4217,
488
+ descriptor: stateUpdateDescriptor,
489
+ escrow: voucherAcceptanceEscrow,
490
+ store: memoryChannelStore(stored),
491
+ }),
492
+ ).resolves.toBe(stored)
493
+ })
494
+
495
+ test('rejects missing and non-precompile channels', async () => {
496
+ await expect(
497
+ ChannelStore.loadPrecompileChannel({
498
+ channelId: stateUpdateChannelId,
499
+ chainId: 4217,
500
+ descriptor: stateUpdateDescriptor,
501
+ escrow: voucherAcceptanceEscrow,
502
+ store: memoryChannelStore(null),
503
+ }),
504
+ ).rejects.toThrow(ChannelNotFoundError)
505
+
506
+ await expect(
507
+ ChannelStore.loadPrecompileChannel({
508
+ channelId: stateUpdateChannelId,
509
+ chainId: 4217,
510
+ descriptor: stateUpdateDescriptor,
511
+ escrow: voucherAcceptanceEscrow,
512
+ store: memoryChannelStore(voucherAcceptanceChannel({ backend: 'external' })),
513
+ }),
514
+ ).rejects.toThrow(VerificationFailedError)
515
+ })
516
+
517
+ test('accepts a valid voucher and reconciles store state', async () => {
518
+ vi.spyOn(Voucher, 'verifyVoucher').mockReturnValue(true)
519
+ const store = memoryChannelStore(
520
+ voucherAcceptanceChannel({ highestVoucherAmount: 50n, spent: 20n, units: 2 }),
521
+ )
522
+
523
+ const receipt = await ChannelStore.verifyAndAcceptVoucher({
524
+ challenge: voucherAcceptanceChallenge,
525
+ channel: (await store.getChannel(stateUpdateChannelId))!,
526
+ channelState: { deposit: 100n, settled: 10n, closeRequestedAt: 0 },
527
+ methodDetails: { chainId: 4217, escrowContract: voucherAcceptanceEscrow },
528
+ minVoucherDelta: 5n,
529
+ store,
530
+ voucher: voucherAcceptanceVoucher(70n),
531
+ })
532
+
533
+ expect(receipt).toMatchObject({
534
+ challengeId: voucherAcceptanceChallenge.id,
535
+ channelId: stateUpdateChannelId,
536
+ acceptedCumulative: '70',
537
+ spent: '20',
538
+ units: 2,
539
+ })
540
+ expect((await store.getChannel(stateUpdateChannelId))?.highestVoucherAmount).toBe(70n)
541
+ })
542
+
543
+ test('returns an idempotent receipt for an already accepted voucher', async () => {
544
+ vi.spyOn(Voucher, 'verifyVoucher').mockReturnValue(true)
545
+ const stored = voucherAcceptanceChannel({ highestVoucherAmount: 50n, spent: 30n, units: 4 })
546
+ const store = memoryChannelStore(stored)
547
+
548
+ const receipt = await ChannelStore.verifyAndAcceptVoucher({
549
+ challenge: voucherAcceptanceChallenge,
550
+ channel: stored,
551
+ channelState: { deposit: 100n, settled: 10n, closeRequestedAt: 0 },
552
+ methodDetails: { chainId: 4217, escrowContract: voucherAcceptanceEscrow },
553
+ minVoucherDelta: 5n,
554
+ store,
555
+ voucher: voucherAcceptanceVoucher(50n),
556
+ })
557
+
558
+ expect(receipt).toMatchObject({ acceptedCumulative: '50', spent: '30', units: 4 })
559
+ expect((await store.getChannel(stateUpdateChannelId))?.highestVoucherAmount).toBe(50n)
560
+ })
561
+
562
+ test('rejects vouchers beyond deposit or below minimum delta', async () => {
563
+ vi.spyOn(Voucher, 'verifyVoucher').mockReturnValue(true)
564
+ const stored = voucherAcceptanceChannel({ highestVoucherAmount: 50n })
565
+
566
+ await expect(
567
+ ChannelStore.verifyAndAcceptVoucher({
568
+ challenge: voucherAcceptanceChallenge,
569
+ channel: stored,
570
+ channelState: { deposit: 60n, settled: 10n, closeRequestedAt: 0 },
571
+ methodDetails: { chainId: 4217, escrowContract: voucherAcceptanceEscrow },
572
+ minVoucherDelta: 5n,
573
+ store: memoryChannelStore(stored),
574
+ voucher: voucherAcceptanceVoucher(70n),
575
+ }),
576
+ ).rejects.toThrow(AmountExceedsDepositError)
577
+
578
+ await expect(
579
+ ChannelStore.verifyAndAcceptVoucher({
580
+ challenge: voucherAcceptanceChallenge,
581
+ channel: stored,
582
+ channelState: { deposit: 100n, settled: 10n, closeRequestedAt: 0 },
583
+ methodDetails: { chainId: 4217, escrowContract: voucherAcceptanceEscrow },
584
+ minVoucherDelta: 5n,
585
+ store: memoryChannelStore(stored),
586
+ voucher: voucherAcceptanceVoucher(53n),
587
+ }),
588
+ ).rejects.toThrow(DeltaTooSmallError)
589
+ })
590
+ })
591
+
98
592
  // ---------- channelStore ----------
99
593
 
100
594
  describe('channelStore', () => {
@@ -104,6 +598,15 @@ describe('channelStore', () => {
104
598
  expect(await cs.getChannel(channelId)).toBeNull()
105
599
  })
106
600
 
601
+ test('rejects malformed channel IDs before store access', async () => {
602
+ const cs = ChannelStore.fromStore(Store.memory())
603
+ await expect(cs.getChannel('0x1234' as Hex)).rejects.toThrow('Invalid session channel ID')
604
+ await expect(cs.updateChannel('not-a-channel-id' as Hex, () => null)).rejects.toThrow(
605
+ 'Invalid session channel ID',
606
+ )
607
+ expect(() => ChannelStore.normalizeChannelId('0x1234')).toThrow('Invalid session channel ID')
608
+ })
609
+
107
610
  test('returns channel after update', async () => {
108
611
  const cs = ChannelStore.fromStore(Store.memory())
109
612
  const ch = makeChannel()
@@ -117,27 +620,6 @@ describe('channelStore', () => {
117
620
  expect(typeof loaded!.createdAt).toBe('string')
118
621
  })
119
622
 
120
- test('prefixes backing store keys when configured', async () => {
121
- const rawStore = Store.memory()
122
- const cs = ChannelStore.fromStore(Store.from(rawStore, { keyPrefix: 'tenant:' }))
123
- await cs.updateChannel(channelId, () => makeChannel())
124
-
125
- expect(await rawStore.get(`tenant:${channelId}`)).not.toBeNull()
126
- expect(await rawStore.get(channelId)).toBeNull()
127
- expect((await cs.getChannel(channelId))?.channelId).toBe(channelId)
128
- })
129
-
130
- test('isolates prefixed store wrappers', async () => {
131
- const rawStore = Store.memory()
132
- const first = ChannelStore.fromStore(Store.from(rawStore, { keyPrefix: 'tenant-a:' }))
133
- const second = ChannelStore.fromStore(Store.from(rawStore, { keyPrefix: 'tenant-b:' }))
134
- await first.updateChannel(channelId, () => makeChannel())
135
-
136
- expect(await second.getChannel(channelId)).toBeNull()
137
- expect(await rawStore.get(`tenant-a:${channelId}`)).not.toBeNull()
138
- expect(await rawStore.get(`tenant-b:${channelId}`)).toBeNull()
139
- })
140
-
141
623
  test('treats case-variant channelIds as the same record', async () => {
142
624
  const cs = ChannelStore.fromStore(Store.memory())
143
625
  await cs.updateChannel(mixedCaseAliasChannelId, () =>
@@ -205,6 +687,31 @@ describe('channelStore', () => {
205
687
  expect(loaded!.highestVoucherAmount).toBe(888_888_888n)
206
688
  expect(loaded!.spent).toBe(42n)
207
689
  })
690
+
691
+ test('persists precompile descriptor fields without affecting accounting', async () => {
692
+ const cs = ChannelStore.fromStore(Store.memory())
693
+ await seedChannel(cs, {
694
+ backend: 'precompile',
695
+ operator: precompileDescriptor.operator,
696
+ salt: precompileDescriptor.salt,
697
+ expiringNonceHash: precompileDescriptor.expiringNonceHash,
698
+ descriptor: precompileDescriptor,
699
+ })
700
+
701
+ const deducted = await ChannelStore.deductFromChannel(cs, channelId, 1_000_000n)
702
+ expect(deducted.ok).toBe(true)
703
+
704
+ const loaded = await cs.getChannel(channelId)
705
+ expect(ChannelStore.isPrecompileState(loaded!)).toBe(true)
706
+ if (!ChannelStore.isPrecompileState(loaded!)) throw new Error('expected precompile channel')
707
+ expect(loaded!.backend).toBe('precompile')
708
+ expect(loaded!.operator).toBe(precompileDescriptor.operator)
709
+ expect(loaded!.salt).toBe(precompileDescriptor.salt)
710
+ expect(loaded!.expiringNonceHash).toBe(precompileDescriptor.expiringNonceHash)
711
+ expect(loaded!.descriptor).toEqual(precompileDescriptor)
712
+ expect(loaded!.spent).toBe(1_000_000n)
713
+ expect(loaded!.units).toBe(1)
714
+ })
208
715
  })
209
716
 
210
717
  describe('waitForUpdate', () => {