mppx 0.0.1 → 0.1.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 (446) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/BodyDigest.d.ts +42 -0
  4. package/dist/BodyDigest.d.ts.map +1 -0
  5. package/dist/BodyDigest.js +40 -0
  6. package/dist/BodyDigest.js.map +1 -0
  7. package/dist/Challenge.d.ts +271 -0
  8. package/dist/Challenge.d.ts.map +1 -0
  9. package/dist/Challenge.js +291 -0
  10. package/dist/Challenge.js.map +1 -0
  11. package/dist/Credential.d.ts +91 -0
  12. package/dist/Credential.d.ts.map +1 -0
  13. package/dist/Credential.js +122 -0
  14. package/dist/Credential.js.map +1 -0
  15. package/dist/Errors.d.ts +243 -0
  16. package/dist/Errors.d.ts.map +1 -0
  17. package/dist/Errors.js +201 -0
  18. package/dist/Errors.js.map +1 -0
  19. package/dist/Expires.d.ts +15 -0
  20. package/dist/Expires.d.ts.map +1 -0
  21. package/dist/Expires.js +29 -0
  22. package/dist/Expires.js.map +1 -0
  23. package/dist/Intent.d.ts +101 -0
  24. package/dist/Intent.d.ts.map +1 -0
  25. package/dist/Intent.js +83 -0
  26. package/dist/Intent.js.map +1 -0
  27. package/dist/Mcp.d.ts +74 -0
  28. package/dist/Mcp.d.ts.map +1 -0
  29. package/dist/Mcp.js +9 -0
  30. package/dist/Mcp.js.map +1 -0
  31. package/dist/MethodIntent.d.ts +225 -0
  32. package/dist/MethodIntent.d.ts.map +1 -0
  33. package/dist/MethodIntent.js +156 -0
  34. package/dist/MethodIntent.js.map +1 -0
  35. package/dist/PaymentRequest.d.ts +88 -0
  36. package/dist/PaymentRequest.d.ts.map +1 -0
  37. package/dist/PaymentRequest.js +81 -0
  38. package/dist/PaymentRequest.js.map +1 -0
  39. package/dist/Receipt.d.ts +110 -0
  40. package/dist/Receipt.d.ts.map +1 -0
  41. package/dist/Receipt.js +105 -0
  42. package/dist/Receipt.js.map +1 -0
  43. package/dist/Store.d.ts +28 -0
  44. package/dist/Store.d.ts.map +1 -0
  45. package/dist/Store.js +61 -0
  46. package/dist/Store.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +1219 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/client/Methods.d.ts +4 -0
  52. package/dist/client/Methods.d.ts.map +1 -0
  53. package/dist/client/Methods.js +4 -0
  54. package/dist/client/Methods.js.map +1 -0
  55. package/dist/client/Mppx.d.ts +84 -0
  56. package/dist/client/Mppx.d.ts.map +1 -0
  57. package/dist/client/Mppx.js +64 -0
  58. package/dist/client/Mppx.js.map +1 -0
  59. package/dist/client/Transport.d.ts +56 -0
  60. package/dist/client/Transport.d.ts.map +1 -0
  61. package/dist/client/Transport.js +81 -0
  62. package/dist/client/Transport.js.map +1 -0
  63. package/dist/client/index.d.ts +5 -0
  64. package/dist/client/index.d.ts.map +1 -0
  65. package/dist/client/index.js +5 -0
  66. package/dist/client/index.js.map +1 -0
  67. package/dist/client/internal/Fetch.d.ts +85 -0
  68. package/dist/client/internal/Fetch.d.ts.map +1 -0
  69. package/dist/client/internal/Fetch.js +95 -0
  70. package/dist/client/internal/Fetch.js.map +1 -0
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +13 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/internal/types.d.ts +302 -0
  76. package/dist/internal/types.d.ts.map +1 -0
  77. package/dist/internal/types.js +2 -0
  78. package/dist/internal/types.js.map +1 -0
  79. package/dist/mcp-sdk/client/McpClient.d.ts +78 -0
  80. package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -0
  81. package/dist/mcp-sdk/client/McpClient.js +98 -0
  82. package/dist/mcp-sdk/client/McpClient.js.map +1 -0
  83. package/dist/mcp-sdk/client/index.d.ts +3 -0
  84. package/dist/mcp-sdk/client/index.d.ts.map +1 -0
  85. package/dist/mcp-sdk/client/index.js +3 -0
  86. package/dist/mcp-sdk/client/index.js.map +1 -0
  87. package/dist/mcp-sdk/server/Transport.d.ts +43 -0
  88. package/dist/mcp-sdk/server/Transport.d.ts.map +1 -0
  89. package/dist/mcp-sdk/server/Transport.js +71 -0
  90. package/dist/mcp-sdk/server/Transport.js.map +1 -0
  91. package/dist/mcp-sdk/server/index.d.ts +2 -0
  92. package/dist/mcp-sdk/server/index.d.ts.map +1 -0
  93. package/dist/mcp-sdk/server/index.js +2 -0
  94. package/dist/mcp-sdk/server/index.js.map +1 -0
  95. package/dist/middlewares/elysia.d.ts +51 -0
  96. package/dist/middlewares/elysia.d.ts.map +1 -0
  97. package/dist/middlewares/elysia.js +59 -0
  98. package/dist/middlewares/elysia.js.map +1 -0
  99. package/dist/middlewares/express.d.ts +46 -0
  100. package/dist/middlewares/express.d.ts.map +1 -0
  101. package/dist/middlewares/express.js +69 -0
  102. package/dist/middlewares/express.js.map +1 -0
  103. package/dist/middlewares/hono.d.ts +46 -0
  104. package/dist/middlewares/hono.d.ts.map +1 -0
  105. package/dist/middlewares/hono.js +57 -0
  106. package/dist/middlewares/hono.js.map +1 -0
  107. package/dist/middlewares/internal/mppx.d.ts +16 -0
  108. package/dist/middlewares/internal/mppx.d.ts.map +1 -0
  109. package/dist/middlewares/internal/mppx.js +16 -0
  110. package/dist/middlewares/internal/mppx.js.map +1 -0
  111. package/dist/middlewares/nextjs.d.ts +45 -0
  112. package/dist/middlewares/nextjs.d.ts.map +1 -0
  113. package/dist/middlewares/nextjs.js +57 -0
  114. package/dist/middlewares/nextjs.js.map +1 -0
  115. package/dist/proxy/Proxy.d.ts +47 -0
  116. package/dist/proxy/Proxy.d.ts.map +1 -0
  117. package/dist/proxy/Proxy.js +126 -0
  118. package/dist/proxy/Proxy.js.map +1 -0
  119. package/dist/proxy/Service.d.ts +100 -0
  120. package/dist/proxy/Service.d.ts.map +1 -0
  121. package/dist/proxy/Service.js +147 -0
  122. package/dist/proxy/Service.js.map +1 -0
  123. package/dist/proxy/index.d.ts +7 -0
  124. package/dist/proxy/index.d.ts.map +1 -0
  125. package/dist/proxy/index.js +7 -0
  126. package/dist/proxy/index.js.map +1 -0
  127. package/dist/proxy/internal/Headers.d.ts +3 -0
  128. package/dist/proxy/internal/Headers.d.ts.map +1 -0
  129. package/dist/proxy/internal/Headers.js +41 -0
  130. package/dist/proxy/internal/Headers.js.map +1 -0
  131. package/dist/proxy/internal/Route.d.ts +14 -0
  132. package/dist/proxy/internal/Route.d.ts.map +1 -0
  133. package/dist/proxy/internal/Route.js +47 -0
  134. package/dist/proxy/internal/Route.js.map +1 -0
  135. package/dist/proxy/services/anthropic.d.ts +29 -0
  136. package/dist/proxy/services/anthropic.d.ts.map +1 -0
  137. package/dist/proxy/services/anthropic.js +30 -0
  138. package/dist/proxy/services/anthropic.js.map +1 -0
  139. package/dist/proxy/services/openai.d.ts +29 -0
  140. package/dist/proxy/services/openai.d.ts.map +1 -0
  141. package/dist/proxy/services/openai.js +30 -0
  142. package/dist/proxy/services/openai.js.map +1 -0
  143. package/dist/proxy/services/stripe.d.ts +29 -0
  144. package/dist/proxy/services/stripe.d.ts.map +1 -0
  145. package/dist/proxy/services/stripe.js +30 -0
  146. package/dist/proxy/services/stripe.js.map +1 -0
  147. package/dist/server/Methods.d.ts +3 -0
  148. package/dist/server/Methods.d.ts.map +1 -0
  149. package/dist/server/Methods.js +3 -0
  150. package/dist/server/Methods.js.map +1 -0
  151. package/dist/server/Mppx.d.ts +116 -0
  152. package/dist/server/Mppx.d.ts.map +1 -0
  153. package/dist/server/Mppx.js +207 -0
  154. package/dist/server/Mppx.js.map +1 -0
  155. package/dist/server/NodeListener.d.ts +3 -0
  156. package/dist/server/NodeListener.d.ts.map +1 -0
  157. package/dist/server/NodeListener.js +3 -0
  158. package/dist/server/NodeListener.js.map +1 -0
  159. package/dist/server/Request.d.ts +24 -0
  160. package/dist/server/Request.d.ts.map +1 -0
  161. package/dist/server/Request.js +26 -0
  162. package/dist/server/Request.js.map +1 -0
  163. package/dist/server/Response.d.ts +10 -0
  164. package/dist/server/Response.d.ts.map +1 -0
  165. package/dist/server/Response.js +15 -0
  166. package/dist/server/Response.js.map +1 -0
  167. package/dist/server/Transport.d.ts +93 -0
  168. package/dist/server/Transport.d.ts.map +1 -0
  169. package/dist/server/Transport.js +132 -0
  170. package/dist/server/Transport.js.map +1 -0
  171. package/dist/server/index.d.ts +9 -0
  172. package/dist/server/index.d.ts.map +1 -0
  173. package/dist/server/index.js +9 -0
  174. package/dist/server/index.js.map +1 -0
  175. package/dist/stripe/Intents.d.ts +54 -0
  176. package/dist/stripe/Intents.d.ts.map +1 -0
  177. package/dist/stripe/Intents.js +27 -0
  178. package/dist/stripe/Intents.js.map +1 -0
  179. package/dist/stripe/client/Charge.d.ts +114 -0
  180. package/dist/stripe/client/Charge.d.ts.map +1 -0
  181. package/dist/stripe/client/Charge.js +77 -0
  182. package/dist/stripe/client/Charge.js.map +1 -0
  183. package/dist/stripe/client/MethodIntents.d.ts +80 -0
  184. package/dist/stripe/client/MethodIntents.d.ts.map +1 -0
  185. package/dist/stripe/client/MethodIntents.js +34 -0
  186. package/dist/stripe/client/MethodIntents.js.map +1 -0
  187. package/dist/stripe/client/index.d.ts +3 -0
  188. package/dist/stripe/client/index.d.ts.map +1 -0
  189. package/dist/stripe/client/index.js +3 -0
  190. package/dist/stripe/client/index.js.map +1 -0
  191. package/dist/stripe/index.d.ts +2 -0
  192. package/dist/stripe/index.d.ts.map +1 -0
  193. package/dist/stripe/index.js +2 -0
  194. package/dist/stripe/index.js.map +1 -0
  195. package/dist/stripe/server/Charge.d.ts +74 -0
  196. package/dist/stripe/server/Charge.d.ts.map +1 -0
  197. package/dist/stripe/server/Charge.js +79 -0
  198. package/dist/stripe/server/Charge.js.map +1 -0
  199. package/dist/stripe/server/MethodIntents.d.ts +65 -0
  200. package/dist/stripe/server/MethodIntents.d.ts.map +1 -0
  201. package/dist/stripe/server/MethodIntents.js +21 -0
  202. package/dist/stripe/server/MethodIntents.js.map +1 -0
  203. package/dist/stripe/server/index.d.ts +3 -0
  204. package/dist/stripe/server/index.d.ts.map +1 -0
  205. package/dist/stripe/server/index.js +3 -0
  206. package/dist/stripe/server/index.js.map +1 -0
  207. package/dist/tempo/Attribution.d.ts +101 -0
  208. package/dist/tempo/Attribution.d.ts.map +1 -0
  209. package/dist/tempo/Attribution.js +124 -0
  210. package/dist/tempo/Attribution.js.map +1 -0
  211. package/dist/tempo/Intents.d.ts +132 -0
  212. package/dist/tempo/Intents.d.ts.map +1 -0
  213. package/dist/tempo/Intents.js +81 -0
  214. package/dist/tempo/Intents.js.map +1 -0
  215. package/dist/tempo/client/ChannelOps.d.ts +54 -0
  216. package/dist/tempo/client/ChannelOps.d.ts.map +1 -0
  217. package/dist/tempo/client/ChannelOps.js +138 -0
  218. package/dist/tempo/client/ChannelOps.js.map +1 -0
  219. package/dist/tempo/client/Charge.d.ts +76 -0
  220. package/dist/tempo/client/Charge.d.ts.map +1 -0
  221. package/dist/tempo/client/Charge.js +69 -0
  222. package/dist/tempo/client/Charge.js.map +1 -0
  223. package/dist/tempo/client/MethodIntents.d.ts +157 -0
  224. package/dist/tempo/client/MethodIntents.d.ts.map +1 -0
  225. package/dist/tempo/client/MethodIntents.js +25 -0
  226. package/dist/tempo/client/MethodIntents.js.map +1 -0
  227. package/dist/tempo/client/Session.d.ts +159 -0
  228. package/dist/tempo/client/Session.d.ts.map +1 -0
  229. package/dist/tempo/client/Session.js +263 -0
  230. package/dist/tempo/client/Session.js.map +1 -0
  231. package/dist/tempo/client/SessionManager.d.ts +62 -0
  232. package/dist/tempo/client/SessionManager.d.ts.map +1 -0
  233. package/dist/tempo/client/SessionManager.js +196 -0
  234. package/dist/tempo/client/SessionManager.js.map +1 -0
  235. package/dist/tempo/client/index.d.ts +6 -0
  236. package/dist/tempo/client/index.d.ts.map +1 -0
  237. package/dist/tempo/client/index.js +5 -0
  238. package/dist/tempo/client/index.js.map +1 -0
  239. package/dist/tempo/index.d.ts +3 -0
  240. package/dist/tempo/index.d.ts.map +1 -0
  241. package/dist/tempo/index.js +3 -0
  242. package/dist/tempo/index.js.map +1 -0
  243. package/dist/tempo/internal/account.d.ts +32 -0
  244. package/dist/tempo/internal/account.d.ts.map +1 -0
  245. package/dist/tempo/internal/account.js +33 -0
  246. package/dist/tempo/internal/account.js.map +1 -0
  247. package/dist/tempo/internal/defaults.d.ts +18 -0
  248. package/dist/tempo/internal/defaults.d.ts.map +1 -0
  249. package/dist/tempo/internal/defaults.js +18 -0
  250. package/dist/tempo/internal/defaults.js.map +1 -0
  251. package/dist/tempo/internal/types.d.ts +11 -0
  252. package/dist/tempo/internal/types.d.ts.map +1 -0
  253. package/dist/tempo/internal/types.js +2 -0
  254. package/dist/tempo/internal/types.js.map +1 -0
  255. package/dist/tempo/server/Charge.d.ts +77 -0
  256. package/dist/tempo/server/Charge.d.ts.map +1 -0
  257. package/dist/tempo/server/Charge.js +228 -0
  258. package/dist/tempo/server/Charge.js.map +1 -0
  259. package/dist/tempo/server/MethodIntents.d.ts +140 -0
  260. package/dist/tempo/server/MethodIntents.d.ts.map +1 -0
  261. package/dist/tempo/server/MethodIntents.js +26 -0
  262. package/dist/tempo/server/MethodIntents.js.map +1 -0
  263. package/dist/tempo/server/Session.d.ts +148 -0
  264. package/dist/tempo/server/Session.d.ts.map +1 -0
  265. package/dist/tempo/server/Session.js +529 -0
  266. package/dist/tempo/server/Session.js.map +1 -0
  267. package/dist/tempo/server/internal/transport.d.ts +47 -0
  268. package/dist/tempo/server/internal/transport.d.ts.map +1 -0
  269. package/dist/tempo/server/internal/transport.js +118 -0
  270. package/dist/tempo/server/internal/transport.js.map +1 -0
  271. package/dist/tempo/stream/Chain.d.ts +52 -0
  272. package/dist/tempo/stream/Chain.d.ts.map +1 -0
  273. package/dist/tempo/stream/Chain.js +215 -0
  274. package/dist/tempo/stream/Chain.js.map +1 -0
  275. package/dist/tempo/stream/Channel.d.ts +26 -0
  276. package/dist/tempo/stream/Channel.d.ts.map +1 -0
  277. package/dist/tempo/stream/Channel.js +27 -0
  278. package/dist/tempo/stream/Channel.js.map +1 -0
  279. package/dist/tempo/stream/ChannelStore.d.ts +103 -0
  280. package/dist/tempo/stream/ChannelStore.d.ts.map +1 -0
  281. package/dist/tempo/stream/ChannelStore.js +100 -0
  282. package/dist/tempo/stream/ChannelStore.js.map +1 -0
  283. package/dist/tempo/stream/Receipt.d.ts +22 -0
  284. package/dist/tempo/stream/Receipt.d.ts.map +1 -0
  285. package/dist/tempo/stream/Receipt.js +34 -0
  286. package/dist/tempo/stream/Receipt.js.map +1 -0
  287. package/dist/tempo/stream/Sse.d.ts +134 -0
  288. package/dist/tempo/stream/Sse.d.ts.map +1 -0
  289. package/dist/tempo/stream/Sse.js +288 -0
  290. package/dist/tempo/stream/Sse.js.map +1 -0
  291. package/dist/tempo/stream/Types.d.ts +78 -0
  292. package/dist/tempo/stream/Types.d.ts.map +1 -0
  293. package/dist/tempo/stream/Types.js +2 -0
  294. package/dist/tempo/stream/Types.js.map +1 -0
  295. package/dist/tempo/stream/Voucher.d.ts +20 -0
  296. package/dist/tempo/stream/Voucher.d.ts.map +1 -0
  297. package/dist/tempo/stream/Voucher.js +98 -0
  298. package/dist/tempo/stream/Voucher.js.map +1 -0
  299. package/dist/tempo/stream/escrow.abi.d.ts +598 -0
  300. package/dist/tempo/stream/escrow.abi.d.ts.map +1 -0
  301. package/dist/tempo/stream/escrow.abi.js +760 -0
  302. package/dist/tempo/stream/escrow.abi.js.map +1 -0
  303. package/dist/tempo/stream/index.d.ts +8 -0
  304. package/dist/tempo/stream/index.d.ts.map +1 -0
  305. package/dist/tempo/stream/index.js +8 -0
  306. package/dist/tempo/stream/index.js.map +1 -0
  307. package/dist/viem/Account.d.ts +12 -0
  308. package/dist/viem/Account.d.ts.map +1 -0
  309. package/dist/viem/Account.js +14 -0
  310. package/dist/viem/Account.js.map +1 -0
  311. package/dist/viem/Client.d.ts +21 -0
  312. package/dist/viem/Client.d.ts.map +1 -0
  313. package/dist/viem/Client.js +19 -0
  314. package/dist/viem/Client.js.map +1 -0
  315. package/dist/zod.d.ts +17 -0
  316. package/dist/zod.d.ts.map +1 -0
  317. package/dist/zod.js +35 -0
  318. package/dist/zod.js.map +1 -0
  319. package/package.json +117 -4
  320. package/src/BodyDigest.test.ts +43 -0
  321. package/src/BodyDigest.ts +53 -0
  322. package/src/Challenge.test-d.ts +81 -0
  323. package/src/Challenge.test.ts +414 -0
  324. package/src/Challenge.ts +429 -0
  325. package/src/Credential.test.ts +227 -0
  326. package/src/Credential.ts +154 -0
  327. package/src/Errors.test.ts +402 -0
  328. package/src/Errors.ts +348 -0
  329. package/src/Expires.ts +34 -0
  330. package/src/Intent.test.ts +180 -0
  331. package/src/Intent.ts +109 -0
  332. package/src/Mcp.ts +81 -0
  333. package/src/MethodIntent.test.ts +303 -0
  334. package/src/MethodIntent.ts +388 -0
  335. package/src/PaymentRequest.test.ts +152 -0
  336. package/src/PaymentRequest.ts +107 -0
  337. package/src/Receipt.test.ts +98 -0
  338. package/src/Receipt.ts +129 -0
  339. package/src/Store.ts +84 -0
  340. package/src/cli.test.ts +542 -0
  341. package/src/cli.ts +1319 -0
  342. package/src/client/Methods.ts +3 -0
  343. package/src/client/Mppx.test-d.ts +90 -0
  344. package/src/client/Mppx.test.ts +468 -0
  345. package/src/client/Mppx.ts +149 -0
  346. package/src/client/Transport.test.ts +283 -0
  347. package/src/client/Transport.ts +115 -0
  348. package/src/client/index.ts +4 -0
  349. package/src/client/internal/Fetch.test-d.ts +57 -0
  350. package/src/client/internal/Fetch.test.ts +281 -0
  351. package/src/client/internal/Fetch.ts +157 -0
  352. package/src/env.d.ts +11 -0
  353. package/src/index.ts +12 -0
  354. package/src/internal/types.ts +403 -0
  355. package/src/mcp-sdk/client/McpClient.test-d.ts +109 -0
  356. package/src/mcp-sdk/client/McpClient.test.ts +219 -0
  357. package/src/mcp-sdk/client/McpClient.ts +187 -0
  358. package/src/mcp-sdk/client/index.ts +2 -0
  359. package/src/mcp-sdk/server/Transport.ts +94 -0
  360. package/src/mcp-sdk/server/index.ts +1 -0
  361. package/src/middlewares/elysia.ts +66 -0
  362. package/src/middlewares/express.test.ts +155 -0
  363. package/src/middlewares/express.ts +82 -0
  364. package/src/middlewares/hono.test.ts +148 -0
  365. package/src/middlewares/hono.ts +62 -0
  366. package/src/middlewares/internal/mppx.ts +30 -0
  367. package/src/middlewares/nextjs.test.ts +164 -0
  368. package/src/middlewares/nextjs.ts +66 -0
  369. package/src/proxy/Proxy.test.ts +472 -0
  370. package/src/proxy/Proxy.ts +175 -0
  371. package/src/proxy/Service.test.ts +125 -0
  372. package/src/proxy/Service.ts +227 -0
  373. package/src/proxy/index.ts +6 -0
  374. package/src/proxy/internal/Headers.test.ts +100 -0
  375. package/src/proxy/internal/Headers.ts +40 -0
  376. package/src/proxy/internal/Route.test.ts +143 -0
  377. package/src/proxy/internal/Route.ts +54 -0
  378. package/src/proxy/services/anthropic.ts +45 -0
  379. package/src/proxy/services/openai.test.ts +97 -0
  380. package/src/proxy/services/openai.ts +48 -0
  381. package/src/proxy/services/stripe.ts +49 -0
  382. package/src/server/Methods.ts +2 -0
  383. package/src/server/Mppx.test-d.ts +343 -0
  384. package/src/server/Mppx.test.ts +342 -0
  385. package/src/server/Mppx.ts +378 -0
  386. package/src/server/NodeListener.test.ts +188 -0
  387. package/src/server/NodeListener.ts +3 -0
  388. package/src/server/Request.test.ts +102 -0
  389. package/src/server/Request.ts +33 -0
  390. package/src/server/Response.test.ts +31 -0
  391. package/src/server/Response.ts +27 -0
  392. package/src/server/Transport.test.ts +294 -0
  393. package/src/server/Transport.ts +222 -0
  394. package/src/server/index.ts +8 -0
  395. package/src/stripe/Charge.integration.test.ts +326 -0
  396. package/src/stripe/Intents.test.ts +52 -0
  397. package/src/stripe/Intents.ts +27 -0
  398. package/src/stripe/client/Charge.ts +119 -0
  399. package/src/stripe/client/MethodIntents.ts +37 -0
  400. package/src/stripe/client/index.ts +2 -0
  401. package/src/stripe/index.ts +1 -0
  402. package/src/stripe/server/Charge.ts +121 -0
  403. package/src/stripe/server/MethodIntents.ts +24 -0
  404. package/src/stripe/server/index.ts +2 -0
  405. package/src/tempo/Attribution.test.ts +187 -0
  406. package/src/tempo/Attribution.ts +156 -0
  407. package/src/tempo/Intents.test.ts +84 -0
  408. package/src/tempo/Intents.ts +93 -0
  409. package/src/tempo/client/ChannelOps.ts +233 -0
  410. package/src/tempo/client/Charge.ts +84 -0
  411. package/src/tempo/client/MethodIntents.ts +28 -0
  412. package/src/tempo/client/Session.ts +369 -0
  413. package/src/tempo/client/SessionManager.test.ts +223 -0
  414. package/src/tempo/client/SessionManager.ts +270 -0
  415. package/src/tempo/client/index.ts +5 -0
  416. package/src/tempo/index.ts +2 -0
  417. package/src/tempo/internal/account.ts +47 -0
  418. package/src/tempo/internal/defaults.ts +20 -0
  419. package/src/tempo/internal/types.ts +8 -0
  420. package/src/tempo/server/Charge.test.ts +847 -0
  421. package/src/tempo/server/Charge.ts +309 -0
  422. package/src/tempo/server/MethodIntents.ts +29 -0
  423. package/src/tempo/server/Session.test.ts +1349 -0
  424. package/src/tempo/server/Session.ts +773 -0
  425. package/src/tempo/server/Sse.test.ts +289 -0
  426. package/src/tempo/server/index.ts +5 -0
  427. package/src/tempo/server/internal/transport.ts +153 -0
  428. package/src/tempo/stream/Chain.ts +333 -0
  429. package/src/tempo/stream/Channel.ts +50 -0
  430. package/src/tempo/stream/ChannelStore.test.ts +473 -0
  431. package/src/tempo/stream/ChannelStore.ts +202 -0
  432. package/src/tempo/stream/Receipt.test.ts +84 -0
  433. package/src/tempo/stream/Receipt.ts +45 -0
  434. package/src/tempo/stream/Sse.test.ts +401 -0
  435. package/src/tempo/stream/Sse.ts +375 -0
  436. package/src/tempo/stream/Types.ts +86 -0
  437. package/src/tempo/stream/Voucher.test.ts +134 -0
  438. package/src/tempo/stream/Voucher.ts +123 -0
  439. package/src/tempo/stream/escrow.abi.ts +759 -0
  440. package/src/tempo/stream/index.ts +7 -0
  441. package/src/tsconfig.json +10 -0
  442. package/src/viem/Account.test.ts +71 -0
  443. package/src/viem/Account.ts +30 -0
  444. package/src/viem/Client.test.ts +58 -0
  445. package/src/viem/Client.ts +33 -0
  446. package/src/zod.ts +47 -0
@@ -0,0 +1,270 @@
1
+ import type { Hex } from 'ox'
2
+ import type { Address } from 'viem'
3
+ import type * as Challenge from '../../Challenge.js'
4
+ import * as Fetch from '../../client/internal/Fetch.js'
5
+ import type * as Account from '../../viem/Account.js'
6
+ import type * as Client from '../../viem/Client.js'
7
+ import { deserializeStreamReceipt } from '../stream/Receipt.js'
8
+ import { parseEvent } from '../stream/Sse.js'
9
+ import type { StreamReceipt } from '../stream/Types.js'
10
+ import type { ChannelEntry } from './ChannelOps.js'
11
+ import { session as sessionPlugin } from './Session.js'
12
+
13
+ export type SessionManager = {
14
+ readonly channelId: Hex.Hex | undefined
15
+ readonly cumulative: bigint
16
+ readonly opened: boolean
17
+
18
+ open(options?: { deposit?: bigint }): Promise<void>
19
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<PaymentResponse>
20
+ sse(
21
+ input: RequestInfo | URL,
22
+ init?: RequestInit & {
23
+ onReceipt?: ((receipt: StreamReceipt) => void) | undefined
24
+ signal?: AbortSignal | undefined
25
+ },
26
+ ): Promise<AsyncIterable<string>>
27
+ close(): Promise<StreamReceipt | undefined>
28
+ }
29
+
30
+ export type PaymentResponse = Response & {
31
+ receipt: StreamReceipt | null
32
+ challenge: Challenge.Challenge | null
33
+ channelId: Hex.Hex | null
34
+ cumulative: bigint
35
+ }
36
+
37
+ /**
38
+ * Creates a session manager that handles the full client payment lifecycle:
39
+ * channel open, incremental vouchers, SSE streaming, and channel close.
40
+ *
41
+ * Internally delegates to the `session()` MethodIntent plugin for all
42
+ * channel state management and credential creation, and to `Fetch.from`
43
+ * for the 402 challenge/retry flow.
44
+ *
45
+ * ## Session resumption
46
+ *
47
+ * All channel state is held **in memory**. If the client process restarts,
48
+ * the session is lost and a new on-chain channel will be opened on the next
49
+ * request — the previous channel's deposit is orphaned until manually closed.
50
+ *
51
+ * When the server includes a `channelId` in the 402 challenge `methodDetails`,
52
+ * the client will attempt to recover the channel by reading its on-chain state
53
+ * via `getOnChainChannel()`. If the channel has a positive deposit and is not
54
+ * finalized, it resumes from the on-chain settled amount.
55
+ */
56
+ export function sessionManager(parameters: sessionManager.Parameters): SessionManager {
57
+ const fetchFn = parameters.fetch ?? globalThis.fetch
58
+
59
+ let channel: ChannelEntry | null = null
60
+ let lastChallenge: Challenge.Challenge | null = null
61
+ let lastUrl: RequestInfo | URL | null = null
62
+
63
+ const method = sessionPlugin({
64
+ account: parameters.account,
65
+ authorizedSigner: parameters.authorizedSigner,
66
+ getClient: parameters.client ? () => parameters.client! : parameters.getClient,
67
+ escrowContract: parameters.escrowContract,
68
+ decimals: parameters.decimals,
69
+ maxDeposit: parameters.maxDeposit,
70
+ onChannelUpdate(entry) {
71
+ channel = entry
72
+ },
73
+ })
74
+
75
+ const wrappedFetch = Fetch.from({
76
+ fetch: fetchFn,
77
+ methods: [method],
78
+ onChallenge(c) {
79
+ lastChallenge = c
80
+ },
81
+ })
82
+
83
+ function toPaymentResponse(response: Response): PaymentResponse {
84
+ const receiptHeader = response.headers.get('Payment-Receipt')
85
+ const receipt = receiptHeader ? deserializeStreamReceipt(receiptHeader) : null
86
+ return Object.assign(response, {
87
+ receipt,
88
+ challenge: lastChallenge,
89
+ channelId: channel?.channelId ?? null,
90
+ cumulative: channel?.cumulativeAmount ?? 0n,
91
+ })
92
+ }
93
+
94
+ async function doFetch(input: RequestInfo | URL, init?: RequestInit): Promise<PaymentResponse> {
95
+ lastUrl = input
96
+ const response = await wrappedFetch(input, init)
97
+ return toPaymentResponse(response)
98
+ }
99
+
100
+ const self: SessionManager = {
101
+ get channelId() {
102
+ return channel?.channelId
103
+ },
104
+ get cumulative() {
105
+ return channel?.cumulativeAmount ?? 0n
106
+ },
107
+ get opened() {
108
+ return channel?.opened ?? false
109
+ },
110
+
111
+ async open(options) {
112
+ if (channel?.opened) return
113
+
114
+ if (!lastChallenge) {
115
+ throw new Error(
116
+ 'No challenge available. Make a request first to receive a 402 challenge, or pass a challenge via .fetch()/.sse().',
117
+ )
118
+ }
119
+
120
+ const deposit = options?.deposit
121
+ const credential = await method.createCredential({
122
+ challenge: lastChallenge as never,
123
+ context: {
124
+ ...(deposit !== undefined && { depositRaw: deposit.toString() }),
125
+ },
126
+ })
127
+
128
+ if (!lastUrl) throw new Error('No URL available — call fetch() or sse() before open().')
129
+ const response = await fetchFn(lastUrl, {
130
+ method: 'POST',
131
+ headers: { Authorization: credential },
132
+ })
133
+ if (!response.ok) {
134
+ const body = await response.text().catch(() => '')
135
+ const wwwAuth = response.headers.get('WWW-Authenticate') ?? ''
136
+ throw new Error(
137
+ `Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [WWW-Authenticate: ${wwwAuth}]` : ''}`,
138
+ )
139
+ }
140
+ },
141
+
142
+ fetch: doFetch,
143
+
144
+ async sse(input, init) {
145
+ const { onReceipt, signal, ...fetchInit } = init ?? {}
146
+
147
+ const sseInit = {
148
+ ...fetchInit,
149
+ headers: {
150
+ ...fetchInit.headers,
151
+ Accept: 'text/event-stream',
152
+ },
153
+ }
154
+
155
+ const response = await doFetch(input, sseInit)
156
+
157
+ if (!response.body) throw new Error('Response has no body.')
158
+
159
+ const reader = response.body.getReader()
160
+ const decoder = new TextDecoder()
161
+
162
+ async function* iterate(): AsyncGenerator<string> {
163
+ let buffer = ''
164
+
165
+ try {
166
+ while (true) {
167
+ if (signal?.aborted) break
168
+
169
+ const { done, value } = await reader.read()
170
+ if (done) break
171
+
172
+ buffer += decoder.decode(value, { stream: true })
173
+
174
+ const parts = buffer.split('\n\n')
175
+ buffer = parts.pop()!
176
+
177
+ for (const part of parts) {
178
+ if (!part.trim()) continue
179
+
180
+ const event = parseEvent(part)
181
+ if (!event) continue
182
+
183
+ switch (event.type) {
184
+ case 'message':
185
+ yield event.data
186
+ break
187
+
188
+ case 'payment-need-voucher': {
189
+ if (!channel || !lastChallenge) break
190
+ const required = BigInt(event.data.requiredCumulative)
191
+ channel.cumulativeAmount =
192
+ channel.cumulativeAmount > required ? channel.cumulativeAmount : required
193
+
194
+ const credential = await method.createCredential({
195
+ challenge: lastChallenge as never,
196
+ context: {
197
+ action: 'voucher',
198
+ channelId: channel.channelId,
199
+ cumulativeAmountRaw: channel.cumulativeAmount.toString(),
200
+ },
201
+ })
202
+ const voucherResponse = await fetchFn(input, {
203
+ method: 'POST',
204
+ headers: { Authorization: credential },
205
+ })
206
+ if (!voucherResponse.ok) {
207
+ throw new Error(`Voucher POST failed with status ${voucherResponse.status}`)
208
+ }
209
+ break
210
+ }
211
+
212
+ case 'payment-receipt':
213
+ onReceipt?.(event.data)
214
+ break
215
+ }
216
+ }
217
+ }
218
+ } finally {
219
+ reader.releaseLock()
220
+ }
221
+ }
222
+
223
+ return iterate()
224
+ },
225
+
226
+ async close() {
227
+ if (!channel?.opened || !lastChallenge) return undefined
228
+
229
+ const credential = await method.createCredential({
230
+ challenge: lastChallenge as never,
231
+ context: {
232
+ action: 'close',
233
+ channelId: channel.channelId,
234
+ cumulativeAmountRaw: channel.cumulativeAmount.toString(),
235
+ },
236
+ })
237
+
238
+ let receipt: StreamReceipt | undefined
239
+ if (lastUrl) {
240
+ const response = await fetchFn(lastUrl, {
241
+ method: 'POST',
242
+ headers: { Authorization: credential },
243
+ })
244
+ const receiptHeader = response.headers.get('Payment-Receipt')
245
+ if (receiptHeader) receipt = deserializeStreamReceipt(receiptHeader)
246
+ }
247
+
248
+ return receipt
249
+ },
250
+ }
251
+
252
+ return self
253
+ }
254
+
255
+ export declare namespace sessionManager {
256
+ type Parameters = Account.getResolver.Parameters &
257
+ Client.getResolver.Parameters & {
258
+ /** Address authorized to sign vouchers. Defaults to the account address. */
259
+ authorizedSigner?: Address | undefined
260
+ /** Viem client instance. Shorthand for `getClient: () => client`. */
261
+ client?: import('viem').Client | undefined
262
+ /** Token decimals used to convert `maxDeposit` to raw units. Defaults to `6`. */
263
+ decimals?: number | undefined
264
+ /** Escrow contract address. */
265
+ escrowContract?: Address | undefined
266
+ fetch?: typeof globalThis.fetch | undefined
267
+ /** Maximum deposit in human-readable units (e.g. `'10'` for 10 tokens). Converted to raw units via `decimals`. */
268
+ maxDeposit?: string | undefined
269
+ }
270
+ }
@@ -0,0 +1,5 @@
1
+ export { charge } from './Charge.js'
2
+ export { tempo } from './MethodIntents.js'
3
+ export { session } from './Session.js'
4
+ export type { PaymentResponse, SessionManager } from './SessionManager.js'
5
+ export { sessionManager } from './SessionManager.js'
@@ -0,0 +1,2 @@
1
+ export * as MethodIntents from './Intents.js'
2
+ export * as Stream from './stream/index.js'
@@ -0,0 +1,47 @@
1
+ import type { Account, Address } from 'viem'
2
+
3
+ /**
4
+ * Resolves a recipient address and optional fee payer from flexible input parameters.
5
+ *
6
+ * Accepts either `account` or `recipient` as the parameter name. When the value
7
+ * is an `Account`, its address is extracted. If `feePayer` is `true`, the
8
+ * account also acts as the fee payer. Alternatively, a separate `Account`
9
+ * can be provided as the fee payer.
10
+ *
11
+ * @returns An object with `account`, `feePayer`, and `recipient`.
12
+ */
13
+ export function resolve(parameters: resolve.Parameters) {
14
+ const account = (() => {
15
+ if (typeof parameters.account === 'object') return parameters.account
16
+ return undefined
17
+ })()
18
+ const recipient = (() => {
19
+ if (parameters.recipient) return parameters.recipient
20
+ if (typeof parameters.account === 'object') return parameters.account.address
21
+ return parameters.account
22
+ })()
23
+ const feePayer = (() => {
24
+ if (typeof parameters.account === 'object' && parameters.feePayer === true)
25
+ return parameters.account
26
+ if (typeof parameters.feePayer === 'object') return parameters.feePayer
27
+ return undefined
28
+ })()
29
+ return { account, feePayer, recipient: recipient as Address | undefined }
30
+ }
31
+
32
+ export declare namespace resolve {
33
+ type Parameters = { recipient?: Address | undefined } & (
34
+ | {
35
+ /** Account that performs payment operations. */
36
+ account?: Account | undefined
37
+ /** When true, the account also sponsors (pays) transaction fees. */
38
+ feePayer?: true | undefined
39
+ }
40
+ | {
41
+ /** Address that receives payment. */
42
+ account?: Address | undefined
43
+ /** Optional fee payer account for covering transaction fees. */
44
+ feePayer?: Account | undefined
45
+ }
46
+ )
47
+ }
@@ -0,0 +1,20 @@
1
+ export const rpcUrl = {
2
+ 4217: 'https://rpc.tempo.xyz',
3
+ 42431: 'https://rpc.moderato.tempo.xyz',
4
+ } as const
5
+
6
+ export const escrowContract = {
7
+ 4217: '0x0901aED692C755b870F9605E56BAA66C35BEfF69',
8
+ 42431: '0x542831e3E4Ace07559b7C8787395f4Fb99F70787',
9
+ } as const
10
+
11
+ export const testnetChainId = 42431
12
+
13
+ /**
14
+ * Default token decimals for TIP-20 stablecoins (e.g. alphaUSD).
15
+ *
16
+ * All TIP-20 tokens on Tempo use 6 decimals, so there is no risk of
17
+ * client/server mismatch within the Tempo ecosystem. Other chains and
18
+ * runtimes should set `decimals` explicitly to match their token.
19
+ */
20
+ export const decimals = 6
@@ -0,0 +1,8 @@
1
+ import type { Account } from 'viem'
2
+
3
+ export type DeriveDefaults<parameters, defaults> = Pick<
4
+ parameters,
5
+ Extract<keyof parameters, keyof defaults>
6
+ > &
7
+ (parameters extends { account: Account | string } ? { recipient: string } : {}) &
8
+ (parameters extends { recipient: string } ? { recipient: string } : {})