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,543 @@
1
+ /**
2
+ * Server-side TIP-1034 precompile session payment method for request/response flows.
3
+ *
4
+ * Handles the full TIP20EscrowChannel lifecycle (open, voucher, top-up, close)
5
+ * and one-shot settlement. Each incoming request carries a session credential
6
+ * with a cumulative voucher that the server validates and records.
7
+ */
8
+ import { isAddress, type Address, type Hex } from 'viem'
9
+ import { tempo as tempo_chain } from 'viem/chains'
10
+
11
+ import * as Challenge from '../../../Challenge.js'
12
+ import * as Constants from '../../../Constants.js'
13
+ import * as Credential from '../../../Credential.js'
14
+ import * as Errors from '../../../Errors.js'
15
+ import * as Expires from '../../../Expires.js'
16
+ import type { MaybePromise } from '../../../internal/types.js'
17
+ import type { LooseOmit, NoExtraKeys } from '../../../internal/types.js'
18
+ import * as Method from '../../../Method.js'
19
+ import * as Store from '../../../Store.js'
20
+ import * as Client from '../../../viem/Client.js'
21
+ import * as Account from '../../internal/account.js'
22
+ import * as defaults from '../../internal/defaults.js'
23
+ import * as FeePayer from '../../internal/fee-payer.js'
24
+ import type * as types from '../../internal/types.js'
25
+ import * as Methods from '../../Methods.js'
26
+ import * as ChargeServer from '../../server/Charge.js'
27
+ import * as Transport from '../../server/internal/transport.js'
28
+ import { tip20ChannelEscrow } from '../precompile/Protocol.js'
29
+ import {
30
+ deserializeSnapshot as deserializeSessionSnapshot,
31
+ serializeSnapshot as serializeSessionSnapshot,
32
+ } from '../Snapshot.js'
33
+ import * as ChannelStore from './ChannelStore.js'
34
+ import { verifyCredentialPayload } from './CredentialVerification.js'
35
+ import { requireSessionCredentialPayload } from './CredentialVerification.js'
36
+ import {
37
+ type ResolveSessionChannelId,
38
+ resolveCredentialVerificationContext,
39
+ resolveSessionChannelId,
40
+ resolveSessionSnapshot,
41
+ resolveSessionPaymentRequest,
42
+ type SessionPaymentRequestInput,
43
+ } from './RequestState.js'
44
+ import { respondToSessionCredential } from './RequestState.js'
45
+ import { applyVerifiedHttpAccounting, chargeSessionChannel } from './Settlement.js'
46
+ import { maybeSettleScheduled } from './Settlement.js'
47
+ import { resolveSettlementSchedule, type SettlementSchedule } from './Settlement.js'
48
+
49
+ /** Server-side automatic settlement schedule. */
50
+ export type { SettlementSchedule } from './Settlement.js'
51
+ /** Server-side hook types for request-identity channel bootstrap. */
52
+ export type {
53
+ ResolveSessionChannelId,
54
+ ResolveSessionChannelIdParameters,
55
+ SessionChannelIdRequest,
56
+ } from './RequestState.js'
57
+ export { settle, settleBatch } from './Settlement.js'
58
+
59
+ type SessionDefaultValues = {
60
+ amount: session.Parameters['amount']
61
+ currency: session.Parameters['currency']
62
+ decimals: number
63
+ operator: session.Parameters['operator']
64
+ recipient: Address | undefined
65
+ suggestedDeposit: session.Parameters['suggestedDeposit']
66
+ unitType: session.Parameters['unitType']
67
+ }
68
+
69
+ function deriveServerDefaults<const parameters extends session.Parameters>(
70
+ values: SessionDefaultValues,
71
+ ): session.DeriveDefaults<parameters> {
72
+ // `Method.toServer()` models defaults from request input fields. Tempo session
73
+ // defaults are assembled after account/currency resolution, so keep the
74
+ // unavoidable generic bridge in one place instead of the control-flow body.
75
+ return values as unknown as session.DeriveDefaults<parameters>
76
+ }
77
+
78
+ function deriveTransport<const parameters extends session.Parameters>(
79
+ transport: Transport.Sse | undefined,
80
+ ): parameters['sse'] extends false | undefined ? undefined : Transport.Sse {
81
+ return transport as parameters['sse'] extends false | undefined ? undefined : Transport.Sse
82
+ }
83
+
84
+ type BootstrapCharge = ReturnType<typeof ChargeServer.charge>
85
+
86
+ type BootstrapPreflightParameters = {
87
+ capturedRequest?: Method.CapturedRequest | undefined
88
+ charge: BootstrapCharge
89
+ credential: Credential.Credential | null
90
+ decimals: number
91
+ defaultRecipient?: Address | undefined
92
+ expires?: string | undefined
93
+ getClient(parameters: {
94
+ chainId?: number | undefined
95
+ }): MaybePromise<{ chain?: { id?: number | undefined } | undefined }>
96
+ input: Request
97
+ parameterChainId?: number | undefined
98
+ parameterEscrowContract?: Address | undefined
99
+ paymentRequest: SessionPaymentRequestInput
100
+ realm: string
101
+ resolveChannelId?: ResolveSessionChannelId | undefined
102
+ secretKey: string
103
+ store: ChannelStore.ChannelStore
104
+ }
105
+
106
+ type BootstrapChargeRequest = {
107
+ amount: '0'
108
+ chainId?: number | undefined
109
+ currency: string
110
+ decimals: number
111
+ recipient?: string | undefined
112
+ }
113
+
114
+ async function resolveBootstrapChargeRequest(
115
+ parameters: Pick<
116
+ BootstrapPreflightParameters,
117
+ 'decimals' | 'defaultRecipient' | 'getClient' | 'parameterChainId' | 'paymentRequest'
118
+ >,
119
+ ): Promise<BootstrapChargeRequest> {
120
+ const { decimals, defaultRecipient, getClient, parameterChainId, paymentRequest } = parameters
121
+ const chainId = paymentRequest.chainId ?? parameterChainId ?? (await getClient({})).chain?.id
122
+ return {
123
+ amount: '0',
124
+ ...(chainId !== undefined ? { chainId } : {}),
125
+ currency: paymentRequest.currency,
126
+ decimals,
127
+ recipient: paymentRequest.recipient ?? defaultRecipient,
128
+ }
129
+ }
130
+
131
+ function isBootstrapChargeCredential(credential: Credential.Credential | null) {
132
+ return (
133
+ credential?.challenge.method === Constants.Methods.tempo &&
134
+ credential.challenge.intent === Constants.Intents.charge
135
+ )
136
+ }
137
+
138
+ function createBootstrapChallenge(parameters: {
139
+ expires?: string | undefined
140
+ realm: string
141
+ request: BootstrapChargeRequest
142
+ secretKey: string
143
+ }) {
144
+ return Challenge.fromMethod(Methods.charge, {
145
+ expires: parameters.expires,
146
+ realm: parameters.realm,
147
+ request: parameters.request,
148
+ secretKey: parameters.secretKey,
149
+ })
150
+ }
151
+
152
+ function respondBootstrapChallenge(challenge: Challenge.Challenge, error?: Errors.PaymentError) {
153
+ const headers = new Headers({
154
+ [Constants.Headers.wwwAuthenticate]: Challenge.serialize(challenge),
155
+ 'Cache-Control': 'no-store',
156
+ })
157
+ if (!error) return new Response(null, { status: 402, headers })
158
+ headers.set('Content-Type', 'application/problem+json')
159
+ return new Response(JSON.stringify(error.toProblemDetails(challenge.id)), {
160
+ status: error.status,
161
+ headers,
162
+ })
163
+ }
164
+
165
+ function assertBootstrapChallengeMatches(
166
+ expected: Challenge.Challenge,
167
+ actual: Challenge.Challenge,
168
+ ) {
169
+ if (actual.method !== Constants.Methods.tempo || actual.intent !== Constants.Intents.charge)
170
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'not a bootstrap challenge' })
171
+ if (!sameRequestValue(expected.request.amount, actual.request.amount))
172
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap amount mismatch' })
173
+ if (!sameRequestValue(expected.request.currency, actual.request.currency))
174
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap currency mismatch' })
175
+ if (!sameRequestValue(expected.request.recipient, actual.request.recipient))
176
+ throw new Errors.InvalidChallengeError({
177
+ id: actual.id,
178
+ reason: 'bootstrap recipient mismatch',
179
+ })
180
+ const expectedChainId = readMethodDetail(expected.request, 'chainId')
181
+ const actualChainId = readMethodDetail(actual.request, 'chainId')
182
+ if (!sameRequestValue(expectedChainId, actualChainId))
183
+ throw new Errors.InvalidChallengeError({ id: actual.id, reason: 'bootstrap chain mismatch' })
184
+ }
185
+
186
+ function readMethodDetail(request: unknown, key: string) {
187
+ if (!request || typeof request !== 'object') return undefined
188
+ const methodDetails = (request as { methodDetails?: unknown }).methodDetails
189
+ if (!methodDetails || typeof methodDetails !== 'object') return undefined
190
+ return (methodDetails as Record<string, unknown>)[key]
191
+ }
192
+
193
+ function sameRequestValue(a: unknown, b: unknown) {
194
+ return a === b || (a === undefined && b === undefined)
195
+ }
196
+
197
+ function readBootstrapAddress(value: unknown, label: string): Address {
198
+ if (typeof value === 'string' && isAddress(value, { strict: false })) return value
199
+ throw new Errors.VerificationFailedError({ reason: `missing bootstrap ${label}` })
200
+ }
201
+
202
+ function resolveBootstrapEscrowContract(
203
+ paymentRequest: SessionPaymentRequestInput,
204
+ parameterEscrowContract?: Address | undefined,
205
+ ): Address {
206
+ const requestEscrow = (paymentRequest as { escrowContract?: unknown }).escrowContract
207
+ if (requestEscrow === undefined) return parameterEscrowContract ?? tip20ChannelEscrow
208
+ return readBootstrapAddress(requestEscrow, 'escrowContract')
209
+ }
210
+
211
+ function readBootstrapChainId(value: unknown): number {
212
+ if (typeof value === 'number') return value
213
+ throw new Errors.VerificationFailedError({ reason: 'missing bootstrap chainId' })
214
+ }
215
+
216
+ async function verifyBootstrapCredential(parameters: {
217
+ challenge: Challenge.Challenge
218
+ charge: BootstrapCharge
219
+ credential: Credential.Credential
220
+ rawRequest: BootstrapChargeRequest
221
+ secretKey: string
222
+ }) {
223
+ const { challenge, charge, credential, rawRequest, secretKey } = parameters
224
+ if (!Challenge.verify(credential.challenge, { secretKey }))
225
+ throw new Errors.InvalidChallengeError({
226
+ id: credential.challenge.id,
227
+ reason: 'challenge was not issued by this server',
228
+ })
229
+ Expires.assert(credential.challenge.expires, credential.challenge.id)
230
+ assertBootstrapChallengeMatches(challenge, credential.challenge)
231
+ return charge.verify({
232
+ credential: {
233
+ ...credential,
234
+ payload: Methods.charge.schema.credential.payload.parse(credential.payload),
235
+ } as never,
236
+ request: rawRequest,
237
+ })
238
+ }
239
+
240
+ async function handleBootstrapPreflight(
241
+ parameters: BootstrapPreflightParameters,
242
+ ): Promise<Response | undefined> {
243
+ const request = await resolveBootstrapChargeRequest(parameters)
244
+ const challenge = createBootstrapChallenge({
245
+ expires: parameters.expires,
246
+ realm: parameters.realm,
247
+ request,
248
+ secretKey: parameters.secretKey,
249
+ })
250
+
251
+ if (!parameters.credential) return respondBootstrapChallenge(challenge)
252
+ if (!isBootstrapChargeCredential(parameters.credential)) return undefined
253
+
254
+ try {
255
+ await verifyBootstrapCredential({
256
+ challenge,
257
+ charge: parameters.charge,
258
+ credential: parameters.credential,
259
+ rawRequest: request,
260
+ secretKey: parameters.secretKey,
261
+ })
262
+ } catch (error) {
263
+ return respondBootstrapChallenge(
264
+ challenge,
265
+ error instanceof Errors.PaymentError ? error : new Errors.VerificationFailedError(),
266
+ )
267
+ }
268
+
269
+ const channelId = await resolveSessionChannelId({
270
+ capturedRequest: parameters.capturedRequest,
271
+ credential: parameters.credential,
272
+ request: parameters.paymentRequest,
273
+ resolveChannelId: parameters.resolveChannelId,
274
+ source: parameters.credential.source,
275
+ store: parameters.store,
276
+ })
277
+ const snapshot = await resolveSessionSnapshot({
278
+ amount: 0n,
279
+ channelId,
280
+ expected: {
281
+ chainId: readBootstrapChainId(request.chainId),
282
+ currency: readBootstrapAddress(request.currency, 'currency'),
283
+ escrowContract: resolveBootstrapEscrowContract(
284
+ parameters.paymentRequest,
285
+ parameters.parameterEscrowContract,
286
+ ),
287
+ recipient: readBootstrapAddress(request.recipient, 'recipient'),
288
+ },
289
+ store: parameters.store,
290
+ })
291
+ const headers = new Headers({ 'Cache-Control': 'no-store' })
292
+ if (snapshot) {
293
+ headers.set(Constants.Headers.paymentSession, snapshot.channelId)
294
+ headers.set(Constants.Headers.paymentSessionSnapshot, serializeSessionSnapshot(snapshot))
295
+ }
296
+ return new Response(null, { status: 204, headers })
297
+ }
298
+
299
+ /** Creates a server-side TIP20EscrowChannel precompile session payment method. */
300
+ export function session<const parameters extends session.Parameters>(
301
+ p?: NoExtraKeys<parameters, session.Parameters>,
302
+ ) {
303
+ const parameters = p as parameters
304
+ const {
305
+ amount,
306
+ channelStateTtl = 5_000,
307
+ currency = defaults.resolveCurrency(parameters),
308
+ decimals = defaults.decimals,
309
+ operator,
310
+ store: rawStore = Store.memory(),
311
+ suggestedDeposit,
312
+ unitType,
313
+ } = parameters
314
+ const settlementSchedule = resolveSettlementSchedule(parameters.settlementSchedule, decimals)
315
+
316
+ const store = ChannelStore.fromStore(rawStore)
317
+ const lastOnChainVerified = new Map<Hex, number>()
318
+ const { account, feePayer, recipient } = Account.resolve(parameters)
319
+ const getClient = Client.getResolver({
320
+ chain: tempo_chain,
321
+ getClient: parameters.getClient,
322
+ rpcUrl: defaults.rpcUrl,
323
+ })
324
+ const bootstrapCharge = ChargeServer.charge({
325
+ account,
326
+ chainId: parameters.chainId,
327
+ currency,
328
+ decimals,
329
+ getClient: parameters.getClient,
330
+ recipient,
331
+ store: rawStore,
332
+ })
333
+
334
+ type Transport = parameters['sse'] extends false | undefined ? undefined : Transport.Sse
335
+ const transport = parameters.sse
336
+ ? Transport.sse({
337
+ store,
338
+ ...(typeof parameters.sse === 'object' ? parameters.sse : undefined),
339
+ })
340
+ : undefined
341
+
342
+ type Defaults = session.DeriveDefaults<parameters>
343
+ return Method.toServer<typeof Methods.session, Defaults, Transport>(Methods.session, {
344
+ defaults: deriveServerDefaults<parameters>({
345
+ amount,
346
+ currency,
347
+ decimals,
348
+ operator,
349
+ recipient,
350
+ suggestedDeposit,
351
+ unitType,
352
+ }),
353
+
354
+ transport: deriveTransport<parameters>(transport),
355
+
356
+ preflight: parameters.bootstrap
357
+ ? async ({ capturedRequest, credential, expires, input, options, realm, secretKey }) => {
358
+ if (input.method !== 'HEAD') return undefined
359
+ return handleBootstrapPreflight({
360
+ capturedRequest,
361
+ credential,
362
+ input,
363
+ charge: bootstrapCharge,
364
+ decimals,
365
+ defaultRecipient: recipient,
366
+ expires,
367
+ getClient,
368
+ parameterChainId: parameters.chainId,
369
+ parameterEscrowContract: parameters.escrowContract,
370
+ paymentRequest: options,
371
+ realm,
372
+ resolveChannelId: parameters.resolveChannelId,
373
+ secretKey,
374
+ store,
375
+ })
376
+ }
377
+ : undefined,
378
+
379
+ async request({ capturedRequest, credential, request }) {
380
+ const resolvedRequest = await resolveSessionPaymentRequest({
381
+ capturedRequest,
382
+ credential,
383
+ decimals,
384
+ defaultFeePayer: feePayer,
385
+ getClient,
386
+ parameterChainId: parameters.chainId,
387
+ parameterEscrowContract: parameters.escrowContract,
388
+ parameterFeePayer: parameters.feePayer,
389
+ request,
390
+ resolveChannelId: parameters.resolveChannelId,
391
+ store,
392
+ })
393
+ return {
394
+ ...resolvedRequest,
395
+ sessionProtocol: Constants.SessionProtocols.v2,
396
+ }
397
+ },
398
+
399
+ async verify({ credential, envelope, request }) {
400
+ const { challenge } = credential
401
+ const payload = requireSessionCredentialPayload(credential.payload)
402
+ const context = await resolveCredentialVerificationContext({
403
+ decimals,
404
+ feePayer,
405
+ getClient,
406
+ minVoucherDelta: parameters.minVoucherDelta,
407
+ request,
408
+ })
409
+
410
+ const sessionReceipt = await verifyCredentialPayload({
411
+ account,
412
+ challenge,
413
+ channelStateTtl,
414
+ chainId: context.chainId,
415
+ client: context.client,
416
+ escrow: context.escrow,
417
+ expectedOperator: context.methodDetails.operator,
418
+ feePayer: context.feePayer,
419
+ feePayerPolicy: parameters.feePayerPolicy,
420
+ feeToken: parameters.feeToken,
421
+ lastOnChainVerified,
422
+ minVoucherDelta: context.minVoucherDelta,
423
+ payload,
424
+ store,
425
+ })
426
+
427
+ return applyVerifiedHttpAccounting({
428
+ capturedRequest: envelope?.capturedRequest,
429
+ payloadAction: payload.action,
430
+ receipt: sessionReceipt,
431
+ getRequestAmount: () => BigInt(context.request.amount ?? challenge.request.amount),
432
+ sseEnabled: Boolean(parameters.sse),
433
+ markPrepaidReceipt: Transport.markPrepaidSessionTick,
434
+ charge: (channelId, requestAmount) =>
435
+ chargeSessionChannel({ store, channelId, amount: requestAmount }),
436
+ settleCharged: (channel) =>
437
+ maybeSettleScheduled({
438
+ account,
439
+ client: context.client,
440
+ feePayer: context.feePayer,
441
+ feePayerPolicy: parameters.feePayerPolicy,
442
+ feeToken: parameters.feeToken,
443
+ schedule: settlementSchedule,
444
+ store,
445
+ channel,
446
+ }),
447
+ })
448
+ },
449
+
450
+ // This hook acts as a gate: when it returns a Response, `withReceipt()`
451
+ // in Mppx.ts short-circuits and returns that response directly without
452
+ // invoking the user's route handler. When it returns undefined, the
453
+ // user's handler runs normally and serves content.
454
+ //
455
+ // close and topUp are always gated (204) — they are pure management.
456
+ //
457
+ // open and voucher share the same captured-request classifier used
458
+ // during verification. Non-billable requests are treated as management
459
+ // updates; billable requests fall through to the application handler.
460
+ respond({ credential, envelope, input }) {
461
+ return respondToSessionCredential({
462
+ capturedRequest: envelope?.capturedRequest,
463
+ input,
464
+ payload: credential.payload,
465
+ })
466
+ },
467
+ })
468
+ }
469
+
470
+ export namespace session {
471
+ export const serializeSnapshot = serializeSessionSnapshot
472
+ export const deserializeSnapshot = deserializeSessionSnapshot
473
+
474
+ /** Request defaults inferred from the Tempo session method schema. */
475
+ export type Defaults = LooseOmit<
476
+ Method.RequestDefaults<typeof Methods.session>,
477
+ 'escrowContract' | 'feePayer' | 'recipient'
478
+ >
479
+
480
+ /** Partial fee-sponsor policy used for server-submitted session transactions. */
481
+ export type FeePayerPolicy = Partial<FeePayer.Policy>
482
+
483
+ /** Parameters accepted by the TIP-1034 server session payment method. */
484
+ export type Parameters = {
485
+ /** TTL in milliseconds for cached on-chain channel state. After this duration, the server re-queries on-chain state during voucher handling to detect forced close requests. @default 5_000 */
486
+ channelStateTtl?: number | undefined
487
+ /** Override the fee-sponsor policy used for sponsored open/topUp transactions and server-driven close transactions. */
488
+ feePayerPolicy?: FeePayerPolicy | undefined
489
+ /** Minimum voucher delta to accept (numeric string, default: "0"). */
490
+ minVoucherDelta?: string | undefined
491
+ /** Resolve a reusable channel ID from request identity when no credential/request channel ID is present. */
492
+ resolveChannelId?: ResolveSessionChannelId | undefined
493
+ /** Enables same-route HEAD bootstrap using a zero-amount identity proof. */
494
+ bootstrap?: boolean | undefined
495
+ /**
496
+ * Atomic store backend for channel state.
497
+ *
498
+ * Session mutations must be linearizable across instances so spent,
499
+ * highest-voucher, top-up, and close/finalization updates cannot race.
500
+ * Use `Store.memory()` for tests or local single-process usage.
501
+ */
502
+ store?: Store.AtomicStore | undefined
503
+ /** Enable SSE streaming. Pass `true` for defaults or an options object to configure SSE. */
504
+ sse?: boolean | Transport.sse.Options | undefined
505
+ /** Tempo chain ID used for TIP-1034 channel escrow challenges. Defaults to the resolved client chain ID. Pass the Tempo testnet chain ID here instead of using legacy session's `testnet` boolean. */
506
+ chainId?: number | undefined
507
+ /** TIP20EscrowChannel precompile address override. */
508
+ escrowContract?: Address | undefined
509
+ /** Server-owned automatic settlement cadence. Clients do not receive or control this schedule. */
510
+ settlementSchedule?: SettlementSchedule | undefined
511
+
512
+ /** Optional fee token used for server-driven close transactions. */
513
+ feeToken?: Address | undefined
514
+ } & Account.resolve.Parameters &
515
+ Client.getResolver.Parameters &
516
+ Defaults
517
+
518
+ /** Defaults derived from `session()` parameters for handler type inference. */
519
+ export type DeriveDefaults<parameters extends Parameters> = types.DeriveDefaults<
520
+ parameters,
521
+ Defaults
522
+ > & {
523
+ decimals: number
524
+ escrowContract: Address
525
+ }
526
+ }
527
+
528
+ /**
529
+ * Charge against a precompile-backed channel's balance.
530
+ *
531
+ * Exported so consumers can deduct from a channel outside the `session()`
532
+ * handler.
533
+ *
534
+ * Delegates to the shared `deductFromChannel` atomic helper and translates
535
+ * failure modes into typed errors (`InsufficientBalanceError`, `ChannelClosedError`).
536
+ */
537
+ export async function charge(
538
+ store: ChannelStore.ChannelStore,
539
+ channelId: Hex,
540
+ amount: bigint,
541
+ ): Promise<ChannelStore.State> {
542
+ return chargeSessionChannel({ store, channelId, amount })
543
+ }