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,184 @@
1
+ import * as Constants from '../../../Constants.js';
2
+ import * as Credential from '../../../Credential.js';
3
+ import { createSessionReceipt, extractData, formatMessageEvent, formatNeedVoucherEvent, formatReceiptEvent, readSessionChallengeAmount, requireSessionCredentialContext, } from '../precompile/Protocol.js';
4
+ import { meterIterable } from './MeteredStream.js';
5
+ /**
6
+ * SSE (Server-Sent Events) utilities for metered streaming payments.
7
+ *
8
+ * Provides event formatting/parsing, balance polling, the core
9
+ * `serve()` loop that meters an async iterable into a ReadableStream
10
+ * of SSE events, and helpers (`toResponse`, `fromRequest`) for
11
+ * building HTTP responses from the stream.
12
+ */
13
+ export { extractData, formatMessageEvent, formatNeedVoucherEvent, formatReceiptEvent, parseEvent, readSessionChallengeAmount, requireSessionCredentialContext, } from '../precompile/Protocol.js';
14
+ /**
15
+ * Wrap an async iterable with payment metering, producing an SSE stream.
16
+ *
17
+ * `generate` may be either:
18
+ * - An `AsyncIterable<string>` — each yielded value is automatically charged
19
+ * (one `tickCost` per value).
20
+ * - A callback `(stream: SessionController) => AsyncIterable<string>` — the
21
+ * generator controls when charges happen by calling `stream.charge()`.
22
+ *
23
+ * For each emitted value the stream:
24
+ * 1. Reserves `tickCost` from the channel's available voucher headroom
25
+ * (auto or manual).
26
+ * 2. If balance is sufficient, emits `event: message` with the value.
27
+ * 3. If balance is exhausted, emits `event: payment-need-voucher`
28
+ * and polls store until the client tops up the channel.
29
+ * 4. Commits the reserved charge immediately before the chunk is emitted.
30
+ * 5. On generator completion, emits a final `event: payment-receipt`.
31
+ *
32
+ * Returns a `ReadableStream<Uint8Array>` suitable for use as an HTTP response body.
33
+ */
34
+ export function serve(options) {
35
+ const { store, channelId, challengeId, tickCost, generate, pollIntervalMs = 100, signal, } = options;
36
+ const encoder = new TextEncoder();
37
+ return new ReadableStream({
38
+ async start(controller) {
39
+ const aborted = () => signal?.aborted ?? false;
40
+ const emit = (event) => controller.enqueue(encoder.encode(event));
41
+ try {
42
+ for await (const value of meterIterable({
43
+ store,
44
+ channelId,
45
+ tickCost,
46
+ generate,
47
+ pollIntervalMs,
48
+ prepaidUnits: options.prepaidUnits,
49
+ signal,
50
+ emitNeedVoucher: emit,
51
+ formatNeedVoucher: formatNeedVoucherEvent,
52
+ })) {
53
+ if (aborted())
54
+ break;
55
+ controller.enqueue(encoder.encode(formatMessageEvent(value)));
56
+ }
57
+ if (!aborted()) {
58
+ const channel = await store.getChannel(channelId);
59
+ if (channel) {
60
+ const receipt = createSessionReceipt({
61
+ challengeId,
62
+ channelId,
63
+ acceptedCumulative: channel.highestVoucherAmount,
64
+ spent: channel.spent,
65
+ units: channel.units,
66
+ });
67
+ controller.enqueue(encoder.encode(formatReceiptEvent(receipt)));
68
+ }
69
+ }
70
+ }
71
+ catch (e) {
72
+ if (!aborted())
73
+ controller.error(e);
74
+ }
75
+ finally {
76
+ controller.close();
77
+ }
78
+ },
79
+ });
80
+ }
81
+ /**
82
+ * Wrap a `ReadableStream<Uint8Array>` (from {@link serve}) in an HTTP
83
+ * `Response` with the correct SSE headers.
84
+ */
85
+ export function toResponse(body) {
86
+ return new Response(body, {
87
+ headers: {
88
+ 'Cache-Control': 'no-cache, no-transform',
89
+ Connection: 'keep-alive',
90
+ 'Content-Type': 'text/event-stream; charset=utf-8',
91
+ },
92
+ });
93
+ }
94
+ /**
95
+ * Extract `channelId`, `challengeId`, and `tickCost` from a `Request`'s
96
+ * `Authorization: Payment …` header.
97
+ *
98
+ * This is a convenience for callers that receive a raw `Request` and need
99
+ * the parameters required by {@link serve}.
100
+ */
101
+ export function fromRequest(request) {
102
+ const header = request.headers.get(Constants.Headers.authorization);
103
+ if (!header)
104
+ throw new Error('Missing Authorization header.');
105
+ const payment = Credential.extractPaymentScheme(header);
106
+ if (!payment)
107
+ throw new Error('Missing Payment credential in Authorization header.');
108
+ const credential = Credential.deserialize(payment);
109
+ const payload = requireSessionCredentialContext(credential.payload);
110
+ return {
111
+ challengeId: credential.challenge.id,
112
+ channelId: payload.channelId,
113
+ tickCost: readSessionChallengeAmount(credential.challenge),
114
+ };
115
+ }
116
+ /**
117
+ * Check whether a `Response` carries an SSE event stream.
118
+ *
119
+ * Returns `true` when the `Content-Type` header starts with
120
+ * `text/event-stream` (case-insensitive, ignoring charset params).
121
+ */
122
+ export function isEventStream(response) {
123
+ const ct = response.headers.get('content-type');
124
+ return ct?.toLowerCase().startsWith('text/event-stream') ?? false;
125
+ }
126
+ /**
127
+ * Parse an SSE `Response` body into an async iterable of `data:` payloads.
128
+ *
129
+ * Yields the raw `data:` field content for each SSE event in the stream.
130
+ * Events whose data matches the `skip` predicate are silently dropped
131
+ * (e.g. `[DONE]` sentinels used by OpenAI-compatible APIs).
132
+ *
133
+ * Each yielded value typically becomes one charge tick when fed to
134
+ * {@link serve} via the SSE transport's auto-charge mode.
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * const upstream = await fetch('https://api.example.com/stream')
139
+ * for await (const data of Sse.iterateData(upstream)) {
140
+ * console.log(data)
141
+ * }
142
+ * ```
143
+ */
144
+ export async function* iterateData(response, options) {
145
+ const skip = options?.skip;
146
+ const body = response.body;
147
+ if (!body)
148
+ return;
149
+ const reader = body.getReader();
150
+ const decoder = new TextDecoder();
151
+ let buffer = '';
152
+ try {
153
+ while (true) {
154
+ const { value, done } = await reader.read();
155
+ if (done)
156
+ break;
157
+ buffer += decoder.decode(value, { stream: true });
158
+ // Split on double-newline SSE event boundaries.
159
+ const events = buffer.split('\n\n');
160
+ // Last element may be incomplete — keep in buffer.
161
+ buffer = events.pop() ?? '';
162
+ for (const event of events) {
163
+ if (!event.trim())
164
+ continue;
165
+ const data = extractData(event);
166
+ if (data === null)
167
+ continue;
168
+ if (skip?.(data))
169
+ continue;
170
+ yield data;
171
+ }
172
+ }
173
+ // Flush remaining buffer.
174
+ if (buffer.trim()) {
175
+ const data = extractData(buffer);
176
+ if (data !== null && !skip?.(data))
177
+ yield data;
178
+ }
179
+ }
180
+ finally {
181
+ reader.releaseLock();
182
+ }
183
+ }
184
+ //# sourceMappingURL=Sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sse.js","sourceRoot":"","sources":["../../../../src/tempo/session/server/Sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { Hex } from 'viem';
2
+ import type { NeedVoucherEvent } from '../precompile/Protocol.js';
3
+ import * as ChannelStore from './ChannelStore.js';
4
+ /** Parameters for reserving voucher headroom before emitting a stream item. */
5
+ export type ReserveChargeParameters = {
6
+ /** Amount required for the next stream item. */
7
+ amount: bigint;
8
+ /** Channel being metered. */
9
+ channelId: Hex;
10
+ /** Emits the transport-specific need-voucher frame. */
11
+ emit: (message: string) => void | Promise<void>;
12
+ /** Formats a transport-specific need-voucher frame. */
13
+ formatNeedVoucher(parameters: NeedVoucherEvent): string;
14
+ /** Store polling interval when `waitForUpdate` is unavailable. */
15
+ pollIntervalMs: number;
16
+ /** Amount already reserved but not yet committed by this stream loop. */
17
+ reservedAmount: bigint;
18
+ /** Optional abort signal for long waits. */
19
+ signal?: AbortSignal | undefined;
20
+ /** Channel store used for state reads and waits. */
21
+ store: ChannelStore.ChannelStore;
22
+ };
23
+ /** Parameters for committing previously reserved stream charges. */
24
+ export type CommitReservedChargesParameters = {
25
+ /** Reserved amount to commit. */
26
+ amount: bigint;
27
+ /** Channel being metered. */
28
+ channelId: Hex;
29
+ /** Channel store used for atomic updates. */
30
+ store: ChannelStore.ChannelStore;
31
+ /** Number of charge units to add. */
32
+ units: number;
33
+ };
34
+ /**
35
+ * Reserves voucher headroom for a future stream emission.
36
+ *
37
+ * If the channel lacks headroom, emits one need-voucher frame, then waits for
38
+ * a store update or polling interval until the accepted voucher covers both
39
+ * already-reserved charges and the next requested amount.
40
+ */
41
+ export declare function reserveChargeOrWait(options: ReserveChargeParameters): Promise<void>;
42
+ /** Atomically commits previously reserved stream charges to channel spend and unit counters. */
43
+ export declare function commitReservedCharges(options: CommitReservedChargesParameters): Promise<void>;
44
+ /** Throws when a channel can no longer be used for streaming charges. */
45
+ export declare function throwIfChannelClosed(channel: ChannelStore.State): void;
46
+ /** Minimal socket event map supported by browser and Node-style WebSocket runtimes. */
47
+ export type SocketEventMap = {
48
+ close: Event | {
49
+ code?: number | undefined;
50
+ reason?: string | undefined;
51
+ type?: string;
52
+ };
53
+ error: Event | {
54
+ type?: string;
55
+ };
56
+ message: Event | {
57
+ data: unknown;
58
+ type?: string;
59
+ };
60
+ };
61
+ /** Socket event listener accepted by browser and Node-style runtimes. */
62
+ export type SocketEventListener<type extends keyof SocketEventMap> = ((event: SocketEventMap[type]) => void) | {
63
+ handleEvent(event: SocketEventMap[type]): void;
64
+ };
65
+ /** Minimal socket shape required by the session WebSocket adapter. */
66
+ export type Socket = {
67
+ close(code?: number, reason?: string): unknown;
68
+ send(data: string): unknown;
69
+ addEventListener?: <type extends keyof SocketEventMap>(type: type, listener: SocketEventListener<type>) => unknown;
70
+ removeEventListener?: <type extends keyof SocketEventMap>(type: type, listener: SocketEventListener<type>) => unknown;
71
+ on?: <type extends keyof SocketEventMap>(type: type, listener: (event: SocketEventMap[type]) => void) => unknown;
72
+ off?: <type extends keyof SocketEventMap>(type: type, listener: (event: SocketEventMap[type]) => void) => unknown;
73
+ };
74
+ /** Handlers for socket lifecycle and message events. */
75
+ export type SocketHandlers = {
76
+ /** Called when the socket closes. */
77
+ close(): void;
78
+ /** Called when the socket reports an error. */
79
+ error(): void;
80
+ /** Called with raw message payloads. */
81
+ message(payload: unknown): void;
82
+ };
83
+ /** Subscribes to browser or Node-style socket events and returns an unsubscribe callback. */
84
+ export declare function subscribe(socket: Socket, handlers: SocketHandlers): () => void;
85
+ /** Sends a text frame through sync or async socket implementations. */
86
+ export declare function send(socket: Socket, data: string): Promise<void>;
87
+ /** Converts socket message payloads into text frames when possible. */
88
+ export declare function toText(value: unknown): string | null;
89
+ //# sourceMappingURL=Transports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transports.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/server/Transports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import { ChannelClosedError } from '../../../Errors.js';
2
+ /**
3
+ * Reserves voucher headroom for a future stream emission.
4
+ *
5
+ * If the channel lacks headroom, emits one need-voucher frame, then waits for
6
+ * a store update or polling interval until the accepted voucher covers both
7
+ * already-reserved charges and the next requested amount.
8
+ */
9
+ export async function reserveChargeOrWait(options) {
10
+ const { amount, channelId, emit, formatNeedVoucher, pollIntervalMs, reservedAmount, signal, store, } = options;
11
+ let channel = await store.getChannel(channelId);
12
+ if (!channel)
13
+ throw new Error('channel not found');
14
+ throwIfChannelClosed(channel);
15
+ const hasHeadroom = (state) => state.highestVoucherAmount - state.spent - reservedAmount >= amount;
16
+ if (hasHeadroom(channel))
17
+ return;
18
+ await Promise.resolve(emit(formatNeedVoucher({
19
+ channelId,
20
+ requiredCumulative: (channel.spent + reservedAmount + amount).toString(),
21
+ acceptedCumulative: channel.highestVoucherAmount.toString(),
22
+ deposit: channel.deposit.toString(),
23
+ })));
24
+ while (!hasHeadroom(channel)) {
25
+ await waitForUpdate(store, channelId, pollIntervalMs, signal);
26
+ channel = await store.getChannel(channelId);
27
+ if (!channel)
28
+ throw new Error('channel not found');
29
+ throwIfChannelClosed(channel);
30
+ }
31
+ }
32
+ /** Atomically commits previously reserved stream charges to channel spend and unit counters. */
33
+ export async function commitReservedCharges(options) {
34
+ const { amount, channelId, store, units } = options;
35
+ if (amount === 0n || units === 0)
36
+ return;
37
+ let committed = false;
38
+ const channel = await store.updateChannel(channelId, (current) => {
39
+ if (!current)
40
+ return null;
41
+ if (current.finalized)
42
+ return current;
43
+ if (current.closeRequestedAt !== 0n)
44
+ return current;
45
+ if (current.highestVoucherAmount - current.spent < amount)
46
+ return current;
47
+ committed = true;
48
+ return {
49
+ ...current,
50
+ spent: current.spent + amount,
51
+ units: current.units + units,
52
+ };
53
+ });
54
+ if (!channel)
55
+ throw new Error('channel not found');
56
+ throwIfChannelClosed(channel);
57
+ if (!committed)
58
+ throw new Error('reserved voucher coverage is no longer available');
59
+ }
60
+ /** Throws when a channel can no longer be used for streaming charges. */
61
+ export function throwIfChannelClosed(channel) {
62
+ if (channel.finalized)
63
+ throw new ChannelClosedError({ reason: 'channel is finalized' });
64
+ if (channel.closeRequestedAt !== 0n)
65
+ throw new ChannelClosedError({ reason: 'channel has a pending close request' });
66
+ }
67
+ async function waitForUpdate(store, channelId, pollIntervalMs, signal) {
68
+ throwIfAborted(signal);
69
+ if (store.waitForUpdate) {
70
+ await Promise.race([
71
+ store.waitForUpdate(channelId),
72
+ sleep(pollIntervalMs, signal),
73
+ ...(signal ? [onceAborted(signal)] : []),
74
+ ]);
75
+ }
76
+ else {
77
+ await sleep(pollIntervalMs, signal);
78
+ }
79
+ throwIfAborted(signal);
80
+ }
81
+ function sleep(ms, signal) {
82
+ return new Promise((resolve, reject) => {
83
+ const timeout = setTimeout(() => {
84
+ signal?.removeEventListener('abort', onAbort);
85
+ resolve();
86
+ }, ms);
87
+ const onAbort = () => {
88
+ clearTimeout(timeout);
89
+ reject(signal?.reason ?? new Error('aborted'));
90
+ };
91
+ signal?.addEventListener('abort', onAbort, { once: true });
92
+ });
93
+ }
94
+ function onceAborted(signal) {
95
+ return new Promise((_, reject) => {
96
+ if (signal.aborted) {
97
+ reject(signal.reason ?? new Error('aborted'));
98
+ return;
99
+ }
100
+ signal.addEventListener('abort', () => reject(signal.reason ?? new Error('aborted')), {
101
+ once: true,
102
+ });
103
+ });
104
+ }
105
+ function throwIfAborted(signal) {
106
+ if (signal?.aborted)
107
+ throw signal.reason ?? new Error('aborted');
108
+ }
109
+ /** Subscribes to browser or Node-style socket events and returns an unsubscribe callback. */
110
+ export function subscribe(socket, handlers) {
111
+ if (socket.addEventListener && socket.removeEventListener) {
112
+ const onMessage = (event) => handlers.message('data' in event ? event.data : undefined);
113
+ socket.addEventListener('message', onMessage);
114
+ socket.addEventListener('close', handlers.close);
115
+ socket.addEventListener('error', handlers.error);
116
+ return () => {
117
+ socket.removeEventListener?.('message', onMessage);
118
+ socket.removeEventListener?.('close', handlers.close);
119
+ socket.removeEventListener?.('error', handlers.error);
120
+ };
121
+ }
122
+ if (socket.on && socket.off) {
123
+ const onMessage = (data) => handlers.message(data);
124
+ socket.on('message', onMessage);
125
+ socket.on('close', handlers.close);
126
+ socket.on('error', handlers.error);
127
+ return () => {
128
+ socket.off?.('message', onMessage);
129
+ socket.off?.('close', handlers.close);
130
+ socket.off?.('error', handlers.error);
131
+ };
132
+ }
133
+ throw new Error('unsupported websocket implementation');
134
+ }
135
+ /** Sends a text frame through sync or async socket implementations. */
136
+ export async function send(socket, data) {
137
+ await Promise.resolve(socket.send(data));
138
+ }
139
+ /** Converts socket message payloads into text frames when possible. */
140
+ export function toText(value) {
141
+ if (typeof value === 'string')
142
+ return value;
143
+ if (value instanceof ArrayBuffer)
144
+ return new TextDecoder().decode(value);
145
+ if (ArrayBuffer.isView(value))
146
+ return new TextDecoder().decode(value);
147
+ return null;
148
+ }
149
+ //# sourceMappingURL=Transports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transports.js","sourceRoot":"","sources":["../../../../src/tempo/session/server/Transports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import * as ChannelStore from './ChannelStore.js';
2
+ import type { SessionController } from './MeteredStream.js';
3
+ export type { SessionController } from './MeteredStream.js';
4
+ export type { Socket } from './Transports.js';
5
+ import { type Socket } from './Transports.js';
6
+ /** Public WebSocket payment frame helpers. */
7
+ export { formatApplicationMessage, formatAuthorizationMessage, formatCloseReadyMessage, formatCloseRequestMessage, formatErrorMessage, formatNeedVoucherMessage, formatReceiptMessage, parseMessage, type ErrorMessageParameters, type Message, } from '../precompile/Protocol.js';
8
+ /** Result returned by an HTTP route before upgrading or authorizing a WebSocket session. */
9
+ export type SessionRouteResult = {
10
+ status: 402;
11
+ challenge: Response;
12
+ } | {
13
+ status: 200;
14
+ withReceipt(response?: Response): Response;
15
+ };
16
+ /** HTTP route used to perform a WebSocket payment probe. */
17
+ export type SessionRoute = (request: Request) => Promise<SessionRouteResult>;
18
+ /**
19
+ * Bridge a WebSocket connection to a Tempo session payment flow.
20
+ *
21
+ * Credential verification is performed by routing each in-band authorization
22
+ * frame through `route` as a **synthetic `POST` request** that carries only
23
+ * the `Authorization` header. The synthetic request does not include cookies,
24
+ * bodies, query parameters, or other headers from the original WebSocket
25
+ * upgrade request. Do not wrap `route` with middleware that depends on
26
+ * HTTP-specific context beyond the `Authorization` header.
27
+ */
28
+ export declare function serve(options: serve.Options): Promise<void>;
29
+ /** Type helpers for {@link serve}. */
30
+ export declare namespace serve {
31
+ type Options = {
32
+ /** Expected per-tick amount in raw units. When set, credentials whose
33
+ * challenge `request.amount` does not match are rejected. Use this to
34
+ * pin the price when the route is backed by `Mppx.compose()` with
35
+ * multiple offers — otherwise a client can select the cheapest offer
36
+ * and still receive the same stream. */
37
+ amount?: string | undefined;
38
+ generate: AsyncIterable<string> | ((stream: SessionController) => AsyncIterable<string>);
39
+ pollIntervalMs?: number | undefined;
40
+ /** Payment route handler. Receives synthetic `POST` requests with only
41
+ * the `Authorization` header — no cookies, bodies, or upgrade headers. */
42
+ route: SessionRoute;
43
+ socket: Socket;
44
+ store: ChannelStore.ChannelStore | import('../../../Store.js').Store;
45
+ url: string | URL;
46
+ };
47
+ }
48
+ //# sourceMappingURL=Ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ws.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/server/Ws.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAEtE,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,OAAO,GACb,MAAM,2BAA2B,CAAA;AAElC,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,CAAA;AAE/D,4DAA4D;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;AA0C5E;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0NjE;AAED,sCAAsC;AACtC,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAK,OAAO,GAAG;QACb;;;;iDAIyC;QACzC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,iBAAiB,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;QACxF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACnC;mFAC2E;QAC3E,KAAK,EAAE,YAAY,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,YAAY,CAAC,YAAY,GAAG,OAAO,mBAAmB,EAAE,KAAK,CAAA;QACpE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAClB,CAAA;CACF"}