mppx 0.0.1 → 0.1.1

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 +89 -0
  56. package/dist/client/Mppx.d.ts.map +1 -0
  57. package/dist/client/Mppx.js +69 -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 +87 -0
  68. package/dist/client/internal/Fetch.d.ts.map +1 -0
  69. package/dist/client/internal/Fetch.js +99 -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 +105 -0
  180. package/dist/stripe/client/Charge.d.ts.map +1 -0
  181. package/dist/stripe/client/Charge.js +74 -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 +201 -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 +119 -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 +165 -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 +315 -0
  351. package/src/client/internal/Fetch.ts +169 -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 +329 -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 +115 -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 +276 -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 +154 -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,276 @@
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: async (challenge, _helpers) => {
79
+ lastChallenge = challenge
80
+ return undefined
81
+ },
82
+ })
83
+
84
+ function toPaymentResponse(response: Response): PaymentResponse {
85
+ const receiptHeader = response.headers.get('Payment-Receipt')
86
+ const receipt = receiptHeader ? deserializeStreamReceipt(receiptHeader) : null
87
+ return Object.assign(response, {
88
+ receipt,
89
+ challenge: lastChallenge,
90
+ channelId: channel?.channelId ?? null,
91
+ cumulative: channel?.cumulativeAmount ?? 0n,
92
+ })
93
+ }
94
+
95
+ async function doFetch(input: RequestInfo | URL, init?: RequestInit): Promise<PaymentResponse> {
96
+ lastUrl = input
97
+ const response = await wrappedFetch(input, init)
98
+ return toPaymentResponse(response)
99
+ }
100
+
101
+ const self: SessionManager = {
102
+ get channelId() {
103
+ return channel?.channelId
104
+ },
105
+ get cumulative() {
106
+ return channel?.cumulativeAmount ?? 0n
107
+ },
108
+ get opened() {
109
+ return channel?.opened ?? false
110
+ },
111
+
112
+ async open(options) {
113
+ if (channel?.opened) return
114
+
115
+ if (!lastChallenge) {
116
+ throw new Error(
117
+ 'No challenge available. Make a request first to receive a 402 challenge, or pass a challenge via .fetch()/.sse().',
118
+ )
119
+ }
120
+
121
+ const deposit = options?.deposit
122
+ const credential = await method.createCredential({
123
+ challenge: lastChallenge as never,
124
+ context: {
125
+ ...(deposit !== undefined && { depositRaw: deposit.toString() }),
126
+ },
127
+ })
128
+
129
+ if (!lastUrl) throw new Error('No URL available — call fetch() or sse() before open().')
130
+ const response = await fetchFn(lastUrl, {
131
+ method: 'POST',
132
+ headers: { Authorization: credential },
133
+ })
134
+ if (!response.ok) {
135
+ const body = await response.text().catch(() => '')
136
+ const wwwAuth = response.headers.get('WWW-Authenticate') ?? ''
137
+ throw new Error(
138
+ `Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [WWW-Authenticate: ${wwwAuth}]` : ''}`,
139
+ )
140
+ }
141
+ },
142
+
143
+ fetch: doFetch,
144
+
145
+ async sse(input, init) {
146
+ const { onReceipt, signal, ...fetchInit } = init ?? {}
147
+
148
+ const sseInit = {
149
+ ...fetchInit,
150
+ headers: {
151
+ ...fetchInit.headers,
152
+ Accept: 'text/event-stream',
153
+ },
154
+ ...(signal ? { signal } : {}),
155
+ }
156
+
157
+ const response = await doFetch(input, sseInit)
158
+
159
+ // Snapshot the challenge at SSE open time so concurrent
160
+ // calls don't overwrite it.
161
+ const sseChallenge = lastChallenge
162
+
163
+ if (!response.body) throw new Error('Response has no body.')
164
+
165
+ const reader = response.body.getReader()
166
+ const decoder = new TextDecoder()
167
+
168
+ async function* iterate(): AsyncGenerator<string> {
169
+ let buffer = ''
170
+
171
+ try {
172
+ while (true) {
173
+ if (signal?.aborted) break
174
+
175
+ const { done, value } = await reader.read()
176
+ if (done) break
177
+
178
+ buffer += decoder.decode(value, { stream: true })
179
+
180
+ const parts = buffer.split('\n\n')
181
+ buffer = parts.pop()!
182
+
183
+ for (const part of parts) {
184
+ if (!part.trim()) continue
185
+
186
+ const event = parseEvent(part)
187
+ if (!event) continue
188
+
189
+ switch (event.type) {
190
+ case 'message':
191
+ yield event.data
192
+ break
193
+
194
+ case 'payment-need-voucher': {
195
+ if (!channel || !sseChallenge) break
196
+ const required = BigInt(event.data.requiredCumulative)
197
+ channel.cumulativeAmount =
198
+ channel.cumulativeAmount > required ? channel.cumulativeAmount : required
199
+
200
+ const credential = await method.createCredential({
201
+ challenge: sseChallenge as never,
202
+ context: {
203
+ action: 'voucher',
204
+ channelId: channel.channelId,
205
+ cumulativeAmountRaw: channel.cumulativeAmount.toString(),
206
+ },
207
+ })
208
+ const voucherResponse = await fetchFn(input, {
209
+ method: 'POST',
210
+ headers: { Authorization: credential },
211
+ })
212
+ if (!voucherResponse.ok) {
213
+ throw new Error(`Voucher POST failed with status ${voucherResponse.status}`)
214
+ }
215
+ break
216
+ }
217
+
218
+ case 'payment-receipt':
219
+ onReceipt?.(event.data)
220
+ break
221
+ }
222
+ }
223
+ }
224
+ } finally {
225
+ reader.releaseLock()
226
+ }
227
+ }
228
+
229
+ return iterate()
230
+ },
231
+
232
+ async close() {
233
+ if (!channel?.opened || !lastChallenge) return undefined
234
+
235
+ const credential = await method.createCredential({
236
+ challenge: lastChallenge as never,
237
+ context: {
238
+ action: 'close',
239
+ channelId: channel.channelId,
240
+ cumulativeAmountRaw: channel.cumulativeAmount.toString(),
241
+ },
242
+ })
243
+
244
+ let receipt: StreamReceipt | undefined
245
+ if (lastUrl) {
246
+ const response = await fetchFn(lastUrl, {
247
+ method: 'POST',
248
+ headers: { Authorization: credential },
249
+ })
250
+ const receiptHeader = response.headers.get('Payment-Receipt')
251
+ if (receiptHeader) receipt = deserializeStreamReceipt(receiptHeader)
252
+ }
253
+
254
+ return receipt
255
+ },
256
+ }
257
+
258
+ return self
259
+ }
260
+
261
+ export declare namespace sessionManager {
262
+ type Parameters = Account.getResolver.Parameters &
263
+ Client.getResolver.Parameters & {
264
+ /** Address authorized to sign vouchers. Defaults to the account address. */
265
+ authorizedSigner?: Address | undefined
266
+ /** Viem client instance. Shorthand for `getClient: () => client`. */
267
+ client?: import('viem').Client | undefined
268
+ /** Token decimals used to convert `maxDeposit` to raw units. Defaults to `6`. */
269
+ decimals?: number | undefined
270
+ /** Escrow contract address. */
271
+ escrowContract?: Address | undefined
272
+ fetch?: typeof globalThis.fetch | undefined
273
+ /** Maximum deposit in human-readable units (e.g. `'10'` for 10 tokens). Converted to raw units via `decimals`. */
274
+ maxDeposit?: string | undefined
275
+ }
276
+ }
@@ -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. pathUSD).
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 } : {})