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
@@ -0,0 +1,799 @@
1
+ import {
2
+ isAddress,
3
+ parseUnits,
4
+ type Account as ViemAccount,
5
+ type Address,
6
+ type Client,
7
+ type Hex,
8
+ } from 'viem'
9
+
10
+ import type * as Challenge from '../../../Challenge.js'
11
+ import * as Constants from '../../../Constants.js'
12
+ import * as Account from '../../../viem/Account.js'
13
+ import * as z from '../../../zod.js'
14
+ import * as Chain from '../precompile/Chain.js'
15
+ import * as Channel from '../precompile/Channel.js'
16
+ import type { SessionCredentialPayload } from '../precompile/Protocol.js'
17
+ import type { SessionSnapshot } from '../Snapshot.js'
18
+ import {
19
+ createClosePayload,
20
+ createOpenPayload,
21
+ createTopUpPayload,
22
+ createVoucherPayload,
23
+ isSameAddress,
24
+ resolveAuthorizedSigner,
25
+ resolveEscrow,
26
+ type ChannelEntry,
27
+ } from './ChannelOps.js'
28
+ import { channelKey, entryKey, type ChannelSink } from './ChannelStore.js'
29
+ import { assertWithinMaxDeposit, resolveOpeningDeposit } from './Runtime.js'
30
+
31
+ /** Credential payload variants that carry cumulative voucher authorization. */
32
+ export type CumulativeCredentialPayload = Extract<
33
+ SessionCredentialPayload,
34
+ { cumulativeAmount: string }
35
+ >
36
+
37
+ /** Returns whether a credential payload carries cumulative voucher authorization. */
38
+ export function hasCredentialCumulativeAmount(
39
+ payload: SessionCredentialPayload,
40
+ ): payload is CumulativeCredentialPayload {
41
+ return 'cumulativeAmount' in payload
42
+ }
43
+
44
+ /** Reads cumulative authorization from a credential payload when the action carries one. */
45
+ export function readCredentialCumulativeAmount(
46
+ payload: SessionCredentialPayload,
47
+ ): bigint | undefined {
48
+ if (!hasCredentialCumulativeAmount(payload)) return undefined
49
+ return BigInt(payload.cumulativeAmount)
50
+ }
51
+
52
+ /**
53
+ * Persists a channel entry through the sink and notifies observers. Closed
54
+ * channels are removed from the store but still reported to observers so callers
55
+ * can react to the close.
56
+ */
57
+ async function storeChannelEntry(sink: ChannelSink, entry: ChannelEntry): Promise<void> {
58
+ if (entry.opened) await sink.store.set(entry)
59
+ else await sink.store.delete(entryKey(entry))
60
+ sink.notifyUpdate(entry)
61
+ }
62
+
63
+ /** Applies a credential payload's cumulative amount to the stored channel at `key`. */
64
+ async function applyCumulative(
65
+ sink: ChannelSink,
66
+ key: string,
67
+ payload: SessionCredentialPayload,
68
+ ): Promise<void> {
69
+ const cumulativeAmount = readCredentialCumulativeAmount(payload)
70
+ if (cumulativeAmount === undefined) return
71
+ const entry = await sink.store.get(key)
72
+ if (!entry) return
73
+ if (entry.channelId.toLowerCase() !== payload.channelId.toLowerCase()) return
74
+ entry.cumulativeAmount =
75
+ entry.cumulativeAmount > cumulativeAmount ? entry.cumulativeAmount : cumulativeAmount
76
+ if (payload.action === 'close') entry.opened = false
77
+ await storeChannelEntry(sink, entry)
78
+ }
79
+
80
+ const hexSchema = z.custom<Hex>(
81
+ (value) => typeof value === 'string' && /^0x[0-9a-fA-F]*$/.test(value),
82
+ )
83
+ const hashSchema = z.custom<Hex>(
84
+ (value) => typeof value === 'string' && /^0x[0-9a-fA-F]{64}$/.test(value),
85
+ )
86
+
87
+ /** Runtime schema for low-level TIP-1034 session credential context. */
88
+ export const sessionContextSchema = z.object({
89
+ account: z.optional(z.custom<Account.getResolver.Parameters['account']>()),
90
+ action: z.optional(z.enum(['open', 'topUp', 'voucher', 'close'])),
91
+ channelId: z.optional(hashSchema),
92
+ cumulativeAmount: z.optional(z.amount()),
93
+ cumulativeAmountRaw: z.optional(z.string()),
94
+ transaction: z.optional(hexSchema),
95
+ descriptor: z.optional(z.custom<Channel.ChannelDescriptor>()),
96
+ additionalDeposit: z.optional(z.amount()),
97
+ additionalDepositRaw: z.optional(z.string()),
98
+ depositRaw: z.optional(z.string()),
99
+ })
100
+
101
+ /** Low-level context accepted by `tempo.session()` for manual credentials. */
102
+ export type SessionContext = {
103
+ /** Optional account override used for this credential only. */
104
+ account?: Account.getResolver.Parameters['account'] | undefined
105
+ /** Manual credential action. Omit for automatic open/recover/voucher management. */
106
+ action?: 'open' | 'topUp' | 'voucher' | 'close' | undefined
107
+ /** Channel ID being reused or manually operated on. */
108
+ channelId?: Hex | undefined
109
+ /** Human-readable cumulative voucher authorization, parsed with configured decimals. */
110
+ cumulativeAmount?: string | undefined
111
+ /** Raw cumulative voucher authorization. Takes precedence over `cumulativeAmount`. */
112
+ cumulativeAmountRaw?: string | undefined
113
+ /** Signed Tempo transaction for manual open/top-up credentials. */
114
+ transaction?: Hex | undefined
115
+ /** TIP-1034 descriptor required for recovery and manual credentials. */
116
+ descriptor?: Channel.ChannelDescriptor | undefined
117
+ /** Human-readable additional top-up deposit, parsed with configured decimals. */
118
+ additionalDeposit?: string | undefined
119
+ /** Raw additional top-up deposit. Takes precedence over `additionalDeposit`. */
120
+ additionalDepositRaw?: string | undefined
121
+ /** Raw opening deposit override for automatic open credentials. */
122
+ depositRaw?: string | undefined
123
+ }
124
+
125
+ /** Manual low-level TIP-1034 session action name. */
126
+ export type SessionAction = NonNullable<SessionContext['action']>
127
+
128
+ /** Context amount fields that may be supplied as human-readable or raw token units. */
129
+ export type SessionAmountField = 'additionalDeposit' | 'cumulativeAmount'
130
+
131
+ /** Session context narrowed to an explicit manual action. */
132
+ export type ManualSessionContext = SessionContext & { action: SessionAction }
133
+
134
+ /** Manual session action context after the required channel descriptor is present. */
135
+ export type ManualSessionDescriptorContext = ManualSessionContext & {
136
+ /** TIP-1034 channel descriptor used by manual open/top-up/voucher/close actions. */
137
+ descriptor: Channel.ChannelDescriptor
138
+ }
139
+
140
+ /** Session context narrowed to a recoverable TIP-1034 channel descriptor. */
141
+ export type DescriptorSessionContext = SessionContext & { descriptor: Channel.ChannelDescriptor }
142
+
143
+ /** Returns whether a session context contains an explicit manual action. */
144
+ export function hasSessionAction(
145
+ context: SessionContext | undefined,
146
+ ): context is ManualSessionContext {
147
+ return context?.action !== undefined
148
+ }
149
+
150
+ /** Returns whether a context is a manual action with the descriptor required to execute it. */
151
+ export function hasManualSessionDescriptor(
152
+ context: SessionContext | undefined,
153
+ ): context is ManualSessionDescriptorContext {
154
+ return hasSessionAction(context) && context.descriptor !== undefined
155
+ }
156
+
157
+ /** Returns whether a session context contains a recoverable channel descriptor. */
158
+ export function hasSessionDescriptor(
159
+ context: SessionContext | undefined,
160
+ ): context is DescriptorSessionContext {
161
+ return context?.descriptor !== undefined
162
+ }
163
+
164
+ /** Parses an optional session context amount, preferring the raw-unit field when present. */
165
+ export function parseOptionalContextAmount(
166
+ context: SessionContext,
167
+ decimals: number,
168
+ field: SessionAmountField,
169
+ ): bigint | undefined {
170
+ const raw =
171
+ field === 'additionalDeposit' ? context.additionalDepositRaw : context.cumulativeAmountRaw
172
+ const amount =
173
+ field === 'additionalDeposit' ? context.additionalDeposit : context.cumulativeAmount
174
+ if (raw) return BigInt(raw)
175
+ if (amount) return parseUnits(amount, decimals)
176
+ return undefined
177
+ }
178
+
179
+ /** Parses a required session context amount and throws with action-specific context when absent. */
180
+ export function requireContextAmount(
181
+ context: SessionContext,
182
+ decimals: number,
183
+ field: SessionAmountField,
184
+ action: string,
185
+ ): bigint {
186
+ const amount = parseOptionalContextAmount(context, decimals, field)
187
+ if (amount === undefined) throw new Error(`${field} required for ${action} action`)
188
+ return amount
189
+ }
190
+
191
+ /** Tempo-specific details embedded in a `tempo/session` challenge request. */
192
+ export type ClientSessionMethodDetails = {
193
+ /** Chain ID used for voucher domain and channel ID derivation. */
194
+ chainId?: number | undefined
195
+ /** Escrow contract address advertised by the server. */
196
+ escrowContract?: Address | undefined
197
+ /** Legacy escrow hint accepted during migration. */
198
+ escrow?: Address | undefined
199
+ /** Whether the challenge allows fee-sponsored open/top-up transactions. */
200
+ feePayer?: boolean | undefined
201
+ /** Channel operator address advertised by the server. */
202
+ operator?: Address | undefined
203
+ /** Server bootstrap snapshot for a reusable session channel. */
204
+ sessionSnapshot?: SessionSnapshot | undefined
205
+ }
206
+
207
+ /** Dependencies used to resolve a challenge into typed credential-planning data. */
208
+ export type ResolveChallengeContextParameters = {
209
+ /** Challenge received from the 402 response. */
210
+ challenge: Challenge.Challenge
211
+ /** Optional local escrow override. */
212
+ escrowOverride?: Address | undefined
213
+ /** Resolves the viem client for the challenge chain. */
214
+ getClient(parameters: { chainId?: number | undefined }): Client | Promise<Client>
215
+ }
216
+
217
+ /** Reads TIP-1034 channel state for a recovery candidate. */
218
+ export type ReadReusableChannelState = (
219
+ client: Client,
220
+ channelId: Hex,
221
+ escrow: Address,
222
+ ) => Promise<Chain.ChannelState>
223
+
224
+ /** Expected request fields used to prove a descriptor belongs to the current challenge. */
225
+ export type ReusableChannelExpectation = {
226
+ /** Chain ID used in the TIP-1034 channel ID derivation. */
227
+ chainId: number
228
+ /** Escrow precompile address used in the TIP-1034 channel ID derivation. */
229
+ escrow: Address
230
+ /** Payee expected by the current challenge. */
231
+ payee: Address
232
+ /** Payer address controlled by the local account. */
233
+ payer: Address
234
+ /** Voucher authority resolved from the local account. */
235
+ authorizedSigner: Address
236
+ /** Token expected by the current challenge. */
237
+ token: Address
238
+ }
239
+
240
+ /** Inputs for validating and loading an existing precompile session channel. */
241
+ export type ResolveReusableChannelParameters = {
242
+ /** Optional caller/server supplied channel ID. Must match the descriptor-derived ID. */
243
+ channelId?: string | undefined
244
+ /** Viem client used to read on-chain channel state. */
245
+ client: Client
246
+ /** Descriptor required by TIP-1034 vouchers and management transactions. */
247
+ descriptor: Channel.ChannelDescriptor
248
+ /** Expected challenge fields the descriptor must match. */
249
+ expected: ReusableChannelExpectation
250
+ /** Optional state reader for tests or custom clients. Defaults to `Chain.getChannelState`. */
251
+ readChannelState?: ReadReusableChannelState | undefined
252
+ }
253
+
254
+ /** Validated reusable channel data. */
255
+ export type ReusableChannel = {
256
+ /** Descriptor-derived TIP-1034 channel ID. */
257
+ channelId: Hex
258
+ /** On-chain channel state proving the channel is open and reusable. */
259
+ state: Chain.ChannelState
260
+ }
261
+
262
+ /** Resolved payment challenge fields used to plan a client-side session credential. */
263
+ export type ChallengeContext = {
264
+ amount: bigint
265
+ challenge: Challenge.Challenge
266
+ chainId: number
267
+ client: Client
268
+ escrow: Address
269
+ feePayer?: boolean | undefined
270
+ key: string
271
+ operator?: Address | undefined
272
+ payee: Address
273
+ snapshot?: SessionSnapshot | undefined
274
+ /** Server-provided raw deposit hint for opening a channel, before local maxDeposit capping. */
275
+ suggestedDepositRaw?: string | undefined
276
+ token: Address
277
+ }
278
+
279
+ /** Inputs used to choose the next client-side session credential operation. */
280
+ export type PlanCredentialParameters = {
281
+ account: ViemAccount
282
+ /** Channel previously stored for this challenge scope, fetched by the caller. */
283
+ entry: ChannelEntry | undefined
284
+ context?: SessionContext | undefined
285
+ decimals: number
286
+ maxDeposit?: bigint | undefined
287
+ resolved: ChallengeContext
288
+ }
289
+
290
+ /** Inputs used to derive reusable-channel recovery context from caller context and server hints. */
291
+ export type ResolveRecoverContextParameters = {
292
+ /** Caller-provided low-level session context, when present. */
293
+ context?: SessionContext | undefined
294
+ /** Server-provided session snapshot, when present. */
295
+ snapshot?: SessionSnapshot | undefined
296
+ }
297
+
298
+ /** Inputs used to choose the next cumulative authorization for a recovered channel. */
299
+ export type ResolveRecoveredCumulativeParameters = {
300
+ /** Caller or stored-channel recovery context. */
301
+ context: DescriptorSessionContext
302
+ /** Token decimals used to parse human-readable context amounts. */
303
+ decimals: number
304
+ /** Current request amount from the active challenge. */
305
+ requestAmount: bigint
306
+ /** Server snapshot for the recovered channel, when present. */
307
+ snapshot?: SessionSnapshot | undefined
308
+ /** On-chain settled amount used when no local/server accounting is available. */
309
+ settled: bigint
310
+ }
311
+
312
+ /** Data-first description of the next credential operation the client should execute. */
313
+ export type CredentialPlan =
314
+ /** No reusable channel is available, so create an open transaction and initial voucher. */
315
+ | {
316
+ type: 'open'
317
+ account: ViemAccount
318
+ context?: SessionContext | undefined
319
+ maxDeposit?: bigint | undefined
320
+ resolved: ChallengeContext
321
+ }
322
+ /** Rehydrate a known channel from server snapshot or caller descriptor before signing. */
323
+ | {
324
+ type: 'recover'
325
+ account: ViemAccount
326
+ context: DescriptorSessionContext
327
+ decimals: number
328
+ maxDeposit?: bigint | undefined
329
+ resolved: ChallengeContext
330
+ }
331
+ /** Reuse an active cached channel by increasing the cumulative voucher amount. */
332
+ | {
333
+ type: 'voucher'
334
+ account: ViemAccount
335
+ entry: ChannelEntry
336
+ maxDeposit?: bigint | undefined
337
+ resolved: ChallengeContext
338
+ }
339
+ /** Caller supplied an explicit low-level action such as top-up, voucher, or close. */
340
+ | {
341
+ type: 'manual'
342
+ account: ViemAccount
343
+ context: ManualSessionDescriptorContext
344
+ decimals: number
345
+ resolved: ChallengeContext
346
+ }
347
+
348
+ type ManualCredentialParameters = Pick<
349
+ Extract<CredentialPlan, { type: 'manual' }>,
350
+ 'account' | 'context' | 'decimals' | 'resolved'
351
+ > & {
352
+ channelId: Hex
353
+ descriptor: Channel.ChannelDescriptor
354
+ }
355
+
356
+ function isObject(value: unknown): value is Record<string, unknown> {
357
+ return typeof value === 'object' && value !== null
358
+ }
359
+
360
+ function readOptionalAddress(value: unknown): Address | undefined {
361
+ return typeof value === 'string' && isAddress(value, { strict: false }) ? value : undefined
362
+ }
363
+
364
+ function readMethodDetails(challenge: Challenge.Challenge): ClientSessionMethodDetails {
365
+ const methodDetails = challenge.request.methodDetails
366
+ if (!isObject(methodDetails)) return {}
367
+ return {
368
+ chainId: typeof methodDetails.chainId === 'number' ? methodDetails.chainId : undefined,
369
+ escrowContract: readOptionalAddress(methodDetails.escrowContract),
370
+ escrow: readOptionalAddress(methodDetails.escrow),
371
+ feePayer: typeof methodDetails.feePayer === 'boolean' ? methodDetails.feePayer : undefined,
372
+ operator: readOptionalAddress(methodDetails.operator),
373
+ sessionSnapshot: Constants.getMethodDetail<SessionSnapshot>(
374
+ methodDetails,
375
+ Constants.MethodDetailKeys.sessionSnapshot,
376
+ ),
377
+ }
378
+ }
379
+
380
+ function readAddress(value: unknown, label: string): Address {
381
+ if (typeof value === 'string' && isAddress(value, { strict: false })) return value
382
+ throw new Error(`tempo session challenge missing ${label}`)
383
+ }
384
+
385
+ function readAmount(value: unknown): bigint {
386
+ if (typeof value === 'string') return BigInt(value)
387
+ throw new Error('tempo session challenge missing amount')
388
+ }
389
+
390
+ function readSuggestedDeposit(value: unknown): string | undefined {
391
+ return typeof value === 'string' ? value : undefined
392
+ }
393
+
394
+ /** Resolves raw challenge fields into the typed data required by client credential planning. */
395
+ export async function resolveChallengeContext(
396
+ parameters: ResolveChallengeContextParameters,
397
+ ): Promise<ChallengeContext> {
398
+ const { challenge, escrowOverride, getClient } = parameters
399
+ const methodDetails = readMethodDetails(challenge)
400
+ const client = await getClient({ chainId: methodDetails.chainId })
401
+ const chainId = methodDetails.chainId ?? client.chain?.id
402
+ if (!chainId) throw new Error('No chainId configured for TIP-1034 session challenge.')
403
+
404
+ const escrow = resolveEscrow(challenge, escrowOverride)
405
+ const payee = readAddress(challenge.request.recipient, 'recipient')
406
+ const token = readAddress(challenge.request.currency, 'currency')
407
+
408
+ return {
409
+ amount: readAmount(challenge.request.amount),
410
+ challenge,
411
+ chainId,
412
+ client,
413
+ escrow,
414
+ feePayer: methodDetails.feePayer,
415
+ key: channelKey({ payee, token, escrow, chainId }),
416
+ operator: methodDetails.operator,
417
+ payee,
418
+ snapshot: methodDetails.sessionSnapshot,
419
+ suggestedDepositRaw: readSuggestedDeposit(challenge.request.suggestedDeposit),
420
+ token,
421
+ }
422
+ }
423
+
424
+ /** Validates descriptor identity and reads open channel state for client-side recovery. */
425
+ export async function resolveReusableChannel(
426
+ parameters: ResolveReusableChannelParameters,
427
+ ): Promise<ReusableChannel> {
428
+ const {
429
+ channelId,
430
+ client,
431
+ descriptor,
432
+ expected,
433
+ readChannelState = Chain.getChannelState,
434
+ } = parameters
435
+ const expectedChannelId = Channel.computeId({
436
+ ...descriptor,
437
+ chainId: expected.chainId,
438
+ escrow: expected.escrow,
439
+ })
440
+
441
+ assertReusableChannelDescriptor({
442
+ channelId,
443
+ descriptor,
444
+ expectedChannelId,
445
+ payee: expected.payee,
446
+ payer: expected.payer,
447
+ authorizedSigner: expected.authorizedSigner,
448
+ token: expected.token,
449
+ })
450
+
451
+ const state = await readChannelState(client, expectedChannelId, expected.escrow)
452
+ if (state.deposit === 0n)
453
+ throw new Error(`Channel ${expectedChannelId} cannot be reused (closed or not found on-chain).`)
454
+ if (state.closeRequestedAt !== 0)
455
+ throw new Error(`Channel ${expectedChannelId} cannot be reused (pending close request).`)
456
+
457
+ return { channelId: expectedChannelId, state }
458
+ }
459
+
460
+ function assertReusableChannelDescriptor(parameters: {
461
+ channelId?: string | undefined
462
+ descriptor: Channel.ChannelDescriptor
463
+ expectedChannelId: string
464
+ payee: Address
465
+ payer: Address
466
+ authorizedSigner: Address
467
+ token: Address
468
+ }) {
469
+ const { authorizedSigner, channelId, descriptor, expectedChannelId, payee, payer, token } =
470
+ parameters
471
+ if (channelId && channelId.toLowerCase() !== expectedChannelId.toLowerCase())
472
+ throw new Error('context channelId does not match descriptor')
473
+ if (!isSameAddress(descriptor.payee, payee))
474
+ throw new Error('context descriptor payee does not match challenge')
475
+ if (!isSameAddress(descriptor.token, token))
476
+ throw new Error('context descriptor token does not match challenge')
477
+ if (!isSameAddress(descriptor.payer, payer))
478
+ throw new Error('context descriptor payer does not match account')
479
+ if (!isSameAddress(descriptor.authorizedSigner, authorizedSigner))
480
+ throw new Error('context descriptor authorizedSigner does not match account')
481
+ }
482
+
483
+ /** Resolves descriptor-based recovery data, preferring caller context over server hints. */
484
+ export function resolveRecoverContext(
485
+ parameters: ResolveRecoverContextParameters,
486
+ ): DescriptorSessionContext | undefined {
487
+ const { context, snapshot } = parameters
488
+ const descriptor = context?.descriptor ?? snapshot?.descriptor
489
+ if (!descriptor) return undefined
490
+ return {
491
+ ...context,
492
+ channelId: context?.channelId ?? snapshot?.channelId,
493
+ descriptor,
494
+ }
495
+ }
496
+
497
+ /** Resolves a voucher boundary that can satisfy the resumed request. */
498
+ export function resolveRecoveredCumulative(
499
+ parameters: ResolveRecoveredCumulativeParameters,
500
+ ): bigint {
501
+ const { context, decimals, requestAmount, snapshot, settled } = parameters
502
+
503
+ if (snapshot) {
504
+ return BigInt(snapshot.spent) + requestAmount
505
+ }
506
+
507
+ const contextCumulative = parseOptionalContextAmount(context, decimals, 'cumulativeAmount')
508
+ if (contextCumulative !== undefined) return contextCumulative + requestAmount
509
+ return settled + requestAmount
510
+ }
511
+
512
+ /** Returns whether `account` can satisfy the descriptor's voucher authority. */
513
+ export function canSignDescriptor(
514
+ account: ViemAccount,
515
+ descriptor: Channel.ChannelDescriptor,
516
+ ): boolean {
517
+ // Only the payer can deposit into and voucher against its own channel.
518
+ if (!isSameAddress(account.address, descriptor.payer)) return false
519
+ const authority = descriptor.authorizedSigner
520
+ if (BigInt(authority) === 0n || isSameAddress(authority, descriptor.payer)) return true
521
+ return isSameAddress(resolveAuthorizedSigner(account), authority)
522
+ }
523
+
524
+ /** Chooses the next credential plan from local channel cache and optional caller context. */
525
+ export function planCredential(parameters: PlanCredentialParameters): CredentialPlan {
526
+ const { account, entry, context, decimals, maxDeposit, resolved } = parameters
527
+
528
+ if (hasSessionAction(context)) {
529
+ if (!hasManualSessionDescriptor(context))
530
+ throw new Error('descriptor required for TIP-1034 session action')
531
+ return {
532
+ type: 'manual',
533
+ account,
534
+ context,
535
+ decimals,
536
+ resolved,
537
+ }
538
+ }
539
+
540
+ if (!entry && context?.channelId && !context.descriptor)
541
+ throw new Error('descriptor required to reuse TIP-1034 channel')
542
+ const recoverContext = resolveRecoverContext({ context, snapshot: resolved.snapshot })
543
+ if (!entry && recoverContext && canSignDescriptor(account, recoverContext.descriptor)) {
544
+ return {
545
+ type: 'recover',
546
+ account,
547
+ context: recoverContext,
548
+ decimals,
549
+ maxDeposit,
550
+ resolved,
551
+ }
552
+ }
553
+ if (entry?.opened && canSignDescriptor(account, entry.descriptor))
554
+ return { type: 'voucher', account, entry, maxDeposit, resolved }
555
+ return { type: 'open', account, context, maxDeposit, resolved }
556
+ }
557
+
558
+ /** Executes a credential plan and returns the concrete session credential payload. */
559
+ export async function executeCredentialPlan(
560
+ plan: CredentialPlan,
561
+ sink: ChannelSink,
562
+ ): Promise<SessionCredentialPayload> {
563
+ switch (plan.type) {
564
+ case 'open':
565
+ return open(plan, sink)
566
+ case 'recover':
567
+ return recover(plan, sink)
568
+ case 'voucher':
569
+ return voucher(plan, sink)
570
+ case 'manual':
571
+ return manual(plan, sink)
572
+ }
573
+ }
574
+
575
+ async function open(
576
+ plan: Extract<CredentialPlan, { type: 'open' }>,
577
+ sink: ChannelSink,
578
+ ): Promise<SessionCredentialPayload> {
579
+ const { account, resolved } = plan
580
+ const deposit = resolveOpeningDeposit({
581
+ contextDepositRaw: plan.context?.depositRaw,
582
+ maxDeposit: plan.maxDeposit,
583
+ requestAmount: resolved.amount,
584
+ suggestedDepositRaw: resolved.suggestedDepositRaw,
585
+ })
586
+ const payload = await createOpenPayload(resolved.client, account, {
587
+ chainId: resolved.chainId,
588
+ deposit,
589
+ escrow: resolved.escrow,
590
+ feePayer: resolved.feePayer,
591
+ initialAmount: resolved.amount,
592
+ operator: resolved.operator,
593
+ payee: resolved.payee,
594
+ token: resolved.token,
595
+ })
596
+ await storeChannelEntry(sink, {
597
+ channelId: payload.channelId,
598
+ cumulativeAmount: resolved.amount,
599
+ deposit,
600
+ descriptor: payload.descriptor,
601
+ escrow: resolved.escrow,
602
+ chainId: resolved.chainId,
603
+ opened: true,
604
+ })
605
+ return payload
606
+ }
607
+
608
+ async function recover(
609
+ plan: Extract<CredentialPlan, { type: 'recover' }>,
610
+ sink: ChannelSink,
611
+ ): Promise<SessionCredentialPayload> {
612
+ const { account, context, decimals, maxDeposit, resolved } = plan
613
+ const { descriptor } = context
614
+ const reusable = await resolveReusableChannel({
615
+ channelId: context.channelId,
616
+ client: resolved.client,
617
+ descriptor,
618
+ expected: {
619
+ chainId: resolved.chainId,
620
+ escrow: resolved.escrow,
621
+ payee: resolved.payee,
622
+ payer: account.address,
623
+ authorizedSigner: resolveAuthorizedSigner(account),
624
+ token: resolved.token,
625
+ },
626
+ })
627
+ const cumulativeAmount = resolveRecoveredCumulative({
628
+ context,
629
+ decimals,
630
+ requestAmount: resolved.amount,
631
+ settled: reusable.state.settled,
632
+ snapshot: resolved.snapshot,
633
+ })
634
+ if (cumulativeAmount > reusable.state.deposit)
635
+ throw new Error('recovered voucher amount exceeds on-chain channel deposit')
636
+ assertWithinMaxDeposit(cumulativeAmount, maxDeposit)
637
+ const payload = await createVoucherPayload(
638
+ resolved.client,
639
+ account,
640
+ descriptor,
641
+ cumulativeAmount,
642
+ resolved.chainId,
643
+ resolved.escrow,
644
+ )
645
+ await storeChannelEntry(sink, {
646
+ channelId: reusable.channelId,
647
+ cumulativeAmount,
648
+ deposit: reusable.state.deposit,
649
+ descriptor,
650
+ escrow: resolved.escrow,
651
+ chainId: resolved.chainId,
652
+ opened: true,
653
+ })
654
+ return payload
655
+ }
656
+
657
+ async function voucher(
658
+ plan: Extract<CredentialPlan, { type: 'voucher' }>,
659
+ sink: ChannelSink,
660
+ ): Promise<SessionCredentialPayload> {
661
+ const { account, entry, resolved } = plan
662
+ const cumulativeAmount = entry.cumulativeAmount + resolved.amount
663
+ assertWithinMaxDeposit(cumulativeAmount, plan.maxDeposit)
664
+ const payload = await createVoucherPayload(
665
+ resolved.client,
666
+ account,
667
+ entry.descriptor,
668
+ cumulativeAmount,
669
+ resolved.chainId,
670
+ resolved.escrow,
671
+ )
672
+ entry.cumulativeAmount = cumulativeAmount
673
+ await storeChannelEntry(sink, entry)
674
+ return payload
675
+ }
676
+
677
+ async function manual(
678
+ plan: Extract<CredentialPlan, { type: 'manual' }>,
679
+ sink: ChannelSink,
680
+ ): Promise<SessionCredentialPayload> {
681
+ const { account, context, decimals, resolved } = plan
682
+ const { descriptor } = context
683
+ const channelId = Channel.computeId({
684
+ ...descriptor,
685
+ chainId: resolved.chainId,
686
+ escrow: resolved.escrow,
687
+ })
688
+ assertReusableChannelDescriptor({
689
+ channelId: context.channelId,
690
+ descriptor,
691
+ expectedChannelId: channelId,
692
+ payee: resolved.payee,
693
+ payer: account.address,
694
+ authorizedSigner: resolveAuthorizedSigner(account),
695
+ token: resolved.token,
696
+ })
697
+
698
+ const payload = await executeManualCredential({
699
+ account,
700
+ channelId,
701
+ context,
702
+ decimals,
703
+ descriptor,
704
+ resolved,
705
+ })
706
+ await applyCumulative(sink, resolved.key, payload)
707
+ return payload
708
+ }
709
+
710
+ async function executeManualCredential(
711
+ parameters: ManualCredentialParameters,
712
+ ): Promise<SessionCredentialPayload> {
713
+ switch (parameters.context.action) {
714
+ case 'open':
715
+ return manualOpen(parameters)
716
+ case 'topUp':
717
+ return manualTopUp(parameters)
718
+ case 'voucher':
719
+ return manualVoucher(parameters)
720
+ case 'close':
721
+ return manualClose(parameters)
722
+ }
723
+ }
724
+
725
+ async function manualOpen(
726
+ parameters: ManualCredentialParameters,
727
+ ): Promise<SessionCredentialPayload> {
728
+ const { account, channelId, context, decimals, descriptor, resolved } = parameters
729
+ if (!context.transaction) throw new Error('transaction required for open action')
730
+ const cumulativeAmount = requireContextAmount(context, decimals, 'cumulativeAmount', 'open')
731
+ const voucher = await createVoucherPayload(
732
+ resolved.client,
733
+ account,
734
+ descriptor,
735
+ cumulativeAmount,
736
+ resolved.chainId,
737
+ resolved.escrow,
738
+ )
739
+ return {
740
+ action: 'open',
741
+ type: 'transaction',
742
+ channelId,
743
+ transaction: context.transaction,
744
+ signature: voucher.signature,
745
+ descriptor,
746
+ cumulativeAmount: cumulativeAmount.toString(),
747
+ authorizedSigner: descriptor.authorizedSigner,
748
+ }
749
+ }
750
+
751
+ async function manualTopUp(
752
+ parameters: ManualCredentialParameters,
753
+ ): Promise<SessionCredentialPayload> {
754
+ const { account, channelId, context, decimals, descriptor, resolved } = parameters
755
+ const additionalDeposit = requireContextAmount(context, decimals, 'additionalDeposit', 'topUp')
756
+ if (context.transaction) {
757
+ return {
758
+ action: 'topUp',
759
+ type: 'transaction',
760
+ channelId,
761
+ transaction: context.transaction,
762
+ descriptor,
763
+ additionalDeposit: additionalDeposit.toString(),
764
+ }
765
+ }
766
+ return createTopUpPayload(
767
+ resolved.client,
768
+ account,
769
+ descriptor,
770
+ additionalDeposit,
771
+ resolved.chainId,
772
+ resolved.feePayer,
773
+ resolved.escrow,
774
+ )
775
+ }
776
+
777
+ function manualVoucher(parameters: ManualCredentialParameters): Promise<SessionCredentialPayload> {
778
+ const { account, context, decimals, descriptor, resolved } = parameters
779
+ return createVoucherPayload(
780
+ resolved.client,
781
+ account,
782
+ descriptor,
783
+ requireContextAmount(context, decimals, 'cumulativeAmount', 'voucher'),
784
+ resolved.chainId,
785
+ resolved.escrow,
786
+ )
787
+ }
788
+
789
+ function manualClose(parameters: ManualCredentialParameters): Promise<SessionCredentialPayload> {
790
+ const { account, context, decimals, descriptor, resolved } = parameters
791
+ return createClosePayload(
792
+ resolved.client,
793
+ account,
794
+ descriptor,
795
+ requireContextAmount(context, decimals, 'cumulativeAmount', 'close'),
796
+ resolved.chainId,
797
+ resolved.escrow,
798
+ )
799
+ }