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,315 @@
1
+ import { Receipt } from 'mppx'
2
+ import { tempo } from 'mppx/client'
3
+ import { Mppx as Mppx_server, tempo as tempo_server } from 'mppx/server'
4
+ import { createClient } from 'viem'
5
+ import { describe, expect, test, vi } from 'vitest'
6
+ import * as Http from '~test/Http.js'
7
+ import { accounts, asset, chain, client, http } from '~test/tempo/viem.js'
8
+ import * as Fetch from './Fetch.js'
9
+
10
+ const realm = 'api.example.com'
11
+ const secretKey = 'test-secret-key'
12
+
13
+ const server = Mppx_server.create({
14
+ methods: [
15
+ tempo_server({
16
+ getClient: () => client,
17
+ }),
18
+ ],
19
+ realm,
20
+ secretKey,
21
+ })
22
+
23
+ describe('Fetch.from', () => {
24
+ test('default: account at creation', async () => {
25
+ const fetch = Fetch.from({
26
+ methods: [
27
+ tempo.charge({
28
+ account: accounts[1],
29
+ getClient: () => client,
30
+ }),
31
+ ],
32
+ })
33
+
34
+ const httpServer = await Http.createServer(async (req, res) => {
35
+ const result = await Mppx_server.toNodeListener(
36
+ server.charge({
37
+ amount: '1',
38
+ currency: asset,
39
+ expires: new Date(Date.now() + 60_000).toISOString(),
40
+ recipient: accounts[0].address,
41
+ }),
42
+ )(req, res)
43
+ if (result.status === 402) return
44
+ res.end('OK')
45
+ })
46
+
47
+ const response = await fetch(httpServer.url)
48
+ expect(response.status).toBe(200)
49
+
50
+ const receipt = Receipt.fromResponse(response)
51
+ expect({
52
+ ...receipt,
53
+ reference: '[reference]',
54
+ timestamp: '[timestamp]',
55
+ }).toMatchInlineSnapshot(`
56
+ {
57
+ "method": "tempo",
58
+ "reference": "[reference]",
59
+ "status": "success",
60
+ "timestamp": "[timestamp]",
61
+ }
62
+ `)
63
+
64
+ httpServer.close()
65
+ })
66
+
67
+ test('default: account via context', async () => {
68
+ const fetch = Fetch.from({
69
+ methods: [
70
+ tempo.charge({
71
+ getClient: () => client,
72
+ }),
73
+ ],
74
+ })
75
+
76
+ const httpServer = await Http.createServer(async (req, res) => {
77
+ const result = await Mppx_server.toNodeListener(
78
+ server.charge({
79
+ amount: '1',
80
+ currency: asset,
81
+ expires: new Date(Date.now() + 60_000).toISOString(),
82
+ recipient: accounts[0].address,
83
+ }),
84
+ )(req, res)
85
+ if (result.status === 402) return
86
+ res.end('OK')
87
+ })
88
+
89
+ const response = await fetch(httpServer.url, {
90
+ context: { account: accounts[1] },
91
+ })
92
+ expect(response.status).toBe(200)
93
+
94
+ const receipt = Receipt.fromResponse(response)
95
+ expect(receipt.status).toBe('success')
96
+
97
+ httpServer.close()
98
+ })
99
+
100
+ test('behavior: context overrides account at creation', async () => {
101
+ const fetch = Fetch.from({
102
+ methods: [
103
+ tempo.charge({
104
+ account: accounts[0],
105
+ getClient: () => client,
106
+ }),
107
+ ],
108
+ })
109
+
110
+ const httpServer = await Http.createServer(async (req, res) => {
111
+ const result = await Mppx_server.toNodeListener(
112
+ server.charge({
113
+ amount: '1',
114
+ currency: asset,
115
+ expires: new Date(Date.now() + 60_000).toISOString(),
116
+ recipient: accounts[0].address,
117
+ }),
118
+ )(req, res)
119
+ if (result.status === 402) return
120
+ res.end('OK')
121
+ })
122
+
123
+ const response = await fetch(httpServer.url, {
124
+ context: { account: accounts[1] },
125
+ })
126
+ expect(response.status).toBe(200)
127
+
128
+ httpServer.close()
129
+ })
130
+
131
+ test('behavior: throws when no account provided', async () => {
132
+ const fetch = Fetch.from({
133
+ methods: [
134
+ tempo.charge({
135
+ getClient: () => createClient({ chain, transport: http() }),
136
+ }),
137
+ ],
138
+ })
139
+
140
+ const httpServer = await Http.createServer(async (req, res) => {
141
+ const result = await Mppx_server.toNodeListener(
142
+ server.charge({
143
+ amount: '1',
144
+ currency: asset,
145
+ expires: new Date(Date.now() + 60_000).toISOString(),
146
+ recipient: accounts[0].address,
147
+ }),
148
+ )(req, res)
149
+ if (result.status === 402) return
150
+ res.end('OK')
151
+ })
152
+
153
+ await expect(fetch(httpServer.url)).rejects.toThrow(
154
+ 'No `account` provided. Pass `account` to parameters or context.',
155
+ )
156
+
157
+ httpServer.close()
158
+ })
159
+
160
+ test('behavior: passes through non-402 responses', async () => {
161
+ const fetch = Fetch.from({
162
+ methods: [
163
+ tempo.charge({
164
+ account: accounts[1],
165
+ getClient: () => client,
166
+ }),
167
+ ],
168
+ })
169
+
170
+ const httpServer = await Http.createServer(async (_req, res) => {
171
+ res.writeHead(200)
172
+ res.end('OK')
173
+ })
174
+
175
+ const response = await fetch(httpServer.url)
176
+ expect(response.status).toBe(200)
177
+ expect(await response.text()).toBe('OK')
178
+
179
+ httpServer.close()
180
+ })
181
+
182
+ test('behavior: fee payer', async () => {
183
+ const serverWithFeePayer = Mppx_server.create({
184
+ methods: [
185
+ tempo_server.charge({
186
+ feePayer: accounts[0],
187
+ getClient: () => client,
188
+ }),
189
+ ],
190
+ realm,
191
+ secretKey,
192
+ })
193
+
194
+ const fetch = Fetch.from({
195
+ methods: [
196
+ tempo.charge({
197
+ account: accounts[1],
198
+ getClient: () => client,
199
+ }),
200
+ ],
201
+ })
202
+
203
+ const httpServer = await Http.createServer(async (req, res) => {
204
+ const result = await Mppx_server.toNodeListener(
205
+ serverWithFeePayer.charge({
206
+ amount: '1',
207
+ currency: asset,
208
+ expires: new Date(Date.now() + 60_000).toISOString(),
209
+ recipient: accounts[0].address,
210
+ }),
211
+ )(req, res)
212
+ if (result.status === 402) return
213
+ res.end('OK')
214
+ })
215
+
216
+ const response = await fetch(httpServer.url)
217
+ expect(response.status).toBe(200)
218
+
219
+ const receipt = Receipt.fromResponse(response)
220
+ expect({
221
+ ...receipt,
222
+ reference: '[reference]',
223
+ timestamp: '[timestamp]',
224
+ }).toMatchInlineSnapshot(`
225
+ {
226
+ "method": "tempo",
227
+ "reference": "[reference]",
228
+ "status": "success",
229
+ "timestamp": "[timestamp]",
230
+ }
231
+ `)
232
+
233
+ httpServer.close()
234
+ })
235
+
236
+ test('behavior: onChallenge can create credential', async () => {
237
+ const onChallenge = vi.fn(async (_challenge, { createCredential }) =>
238
+ createCredential({ account: accounts[1] }),
239
+ )
240
+
241
+ const fetch = Fetch.from({
242
+ methods: [
243
+ tempo.charge({
244
+ getClient: () => client,
245
+ }),
246
+ ],
247
+ onChallenge,
248
+ })
249
+
250
+ const httpServer = await Http.createServer(async (req, res) => {
251
+ const result = await Mppx_server.toNodeListener(
252
+ server.charge({
253
+ amount: '1',
254
+ currency: asset,
255
+ expires: new Date(Date.now() + 60_000).toISOString(),
256
+ recipient: accounts[0].address,
257
+ }),
258
+ )(req, res)
259
+ if (result.status === 402) return
260
+ res.end('OK')
261
+ })
262
+
263
+ const response = await fetch(httpServer.url)
264
+ expect(response.status).toBe(200)
265
+ expect(onChallenge).toHaveBeenCalledTimes(1)
266
+
267
+ httpServer.close()
268
+ })
269
+ })
270
+
271
+ describe('Fetch.polyfill', () => {
272
+ test('default', async () => {
273
+ Fetch.polyfill({
274
+ methods: [
275
+ tempo.charge({
276
+ account: accounts[1],
277
+ getClient: () => client,
278
+ }),
279
+ ],
280
+ })
281
+
282
+ const httpServer = await Http.createServer(async (req, res) => {
283
+ const result = await Mppx_server.toNodeListener(
284
+ server.charge({
285
+ amount: '1',
286
+ currency: asset,
287
+ expires: new Date(Date.now() + 60_000).toISOString(),
288
+ recipient: accounts[0].address,
289
+ }),
290
+ )(req, res)
291
+ if (result.status === 402) return
292
+ res.end('OK')
293
+ })
294
+
295
+ const response = await fetch(httpServer.url)
296
+ expect(response.status).toBe(200)
297
+
298
+ const receipt = Receipt.fromResponse(response)
299
+ expect({
300
+ ...receipt,
301
+ reference: '[reference]',
302
+ timestamp: '[timestamp]',
303
+ }).toMatchInlineSnapshot(`
304
+ {
305
+ "method": "tempo",
306
+ "reference": "[reference]",
307
+ "status": "success",
308
+ "timestamp": "[timestamp]",
309
+ }
310
+ `)
311
+
312
+ httpServer.close()
313
+ Fetch.restore()
314
+ })
315
+ })
@@ -0,0 +1,169 @@
1
+ import * as Challenge from '../../Challenge.js'
2
+ import type * as MethodIntent from '../../MethodIntent.js'
3
+ import type * as z from '../../zod.js'
4
+
5
+ let originalFetch: typeof globalThis.fetch | undefined
6
+
7
+ /**
8
+ * Creates a fetch wrapper that automatically handles 402 Payment Required responses.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { Fetch, tempo } from 'mppx/client'
13
+ * import { privateKeyToAccount } from 'viem/accounts'
14
+ *
15
+ * const fetch = Fetch.from({
16
+ * methods: [
17
+ * tempo({
18
+ * account: privateKeyToAccount('0x...'),
19
+ * }),
20
+ * ],
21
+ * })
22
+ *
23
+ * // Use the wrapped fetch — handles 402 automatically
24
+ * const res = await fetch('https://api.example.com/resource')
25
+ * ```
26
+ *
27
+ */
28
+ export function from<const methods extends readonly MethodIntent.AnyClient[]>(
29
+ config: from.Config<methods>,
30
+ ): from.Fetch<methods> {
31
+ const { fetch = globalThis.fetch, methods, onChallenge } = config
32
+
33
+ return async (input, init) => {
34
+ const { context, ...fetchInit } = init ?? {}
35
+ const response = await fetch(input, fetchInit)
36
+
37
+ if (response.status !== 402) return response
38
+
39
+ const challenge = Challenge.fromResponse(response)
40
+
41
+ const mi = methods.find((m) => m.method === challenge.method && m.name === challenge.intent)
42
+ if (!mi)
43
+ throw new Error(
44
+ `No method intent found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.method}.${m.name}`).join(', ')}`,
45
+ )
46
+
47
+ const onChallengeCredential = onChallenge
48
+ ? await onChallenge(challenge, {
49
+ createCredential: async (overrideContext?: AnyContextFor<methods>) =>
50
+ resolveCredential(challenge, mi, overrideContext ?? context),
51
+ })
52
+ : undefined
53
+ const credential = onChallengeCredential ?? (await resolveCredential(challenge, mi, context))
54
+
55
+ return fetch(input, {
56
+ ...fetchInit,
57
+ headers: {
58
+ ...fetchInit.headers,
59
+ Authorization: credential,
60
+ },
61
+ })
62
+ }
63
+ }
64
+
65
+ /** Union of all context types from all methods that have context schemas. */
66
+ type AnyContextFor<methods extends readonly MethodIntent.AnyClient[]> = {
67
+ [K in keyof methods]: methods[K] extends MethodIntent.Client<any, infer contextSchema>
68
+ ? contextSchema extends z.ZodMiniType
69
+ ? z.input<contextSchema>
70
+ : undefined
71
+ : undefined
72
+ }[number]
73
+
74
+ export declare namespace from {
75
+ type Config<
76
+ methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[],
77
+ > = {
78
+ /** Custom fetch function to wrap. Defaults to `globalThis.fetch`. */
79
+ fetch?: typeof globalThis.fetch
80
+ /** Array of method intents to use. */
81
+ methods: methods
82
+ /** Called when a 402 challenge is received, before credential creation. */
83
+ onChallenge?:
84
+ | ((
85
+ challenge: Challenge.Challenge,
86
+ helpers: {
87
+ createCredential: (context?: AnyContextFor<methods>) => Promise<string>
88
+ },
89
+ ) => Promise<string | undefined>)
90
+ | undefined
91
+ }
92
+
93
+ type Fetch<
94
+ methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[],
95
+ > = (input: RequestInfo | URL, init?: RequestInit<methods>) => Promise<Response>
96
+
97
+ type RequestInit<
98
+ methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[],
99
+ > = globalThis.RequestInit & {
100
+ /** Context to pass to the method intent's createCredential. */
101
+ context?: AnyContextFor<methods>
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Replaces the global `fetch` with a payment-aware wrapper.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * import { Fetch, tempo } from 'mppx/client'
111
+ * import { privateKeyToAccount } from 'viem/accounts'
112
+ *
113
+ * Fetch.polyfill({
114
+ * methods: [
115
+ * tempo({
116
+ * account: privateKeyToAccount('0x...'),
117
+ * }),
118
+ * ],
119
+ * })
120
+ *
121
+ * // Global fetch now handles 402 automatically
122
+ * const res = await fetch('https://api.example.com/resource')
123
+ * ```
124
+ */
125
+ export function polyfill<const methods extends readonly MethodIntent.AnyClient[]>(
126
+ config: polyfill.Config<methods>,
127
+ ): void {
128
+ originalFetch = globalThis.fetch
129
+ globalThis.fetch = from(config) as typeof globalThis.fetch
130
+ }
131
+
132
+ export declare namespace polyfill {
133
+ type Config<
134
+ methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[],
135
+ > = from.Config<methods>
136
+ }
137
+
138
+ /**
139
+ * Restores the original `fetch` after calling `polyfill`.
140
+ *
141
+ * @example
142
+ * ```ts
143
+ * import { Fetch } from 'mppx/client'
144
+ *
145
+ * Fetch.polyfill({ methods: [...] })
146
+ *
147
+ * // ... use payment-aware fetch ...
148
+ *
149
+ * Fetch.restore()
150
+ * ```
151
+ */
152
+ export function restore(): void {
153
+ if (originalFetch) {
154
+ globalThis.fetch = originalFetch
155
+ originalFetch = undefined
156
+ }
157
+ }
158
+
159
+ /** @internal */
160
+ async function resolveCredential(
161
+ challenge: Challenge.Challenge,
162
+ mi: MethodIntent.AnyClient,
163
+ context: unknown,
164
+ ): Promise<string> {
165
+ const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined
166
+ return mi.createCredential(
167
+ parsedContext !== undefined ? { challenge, context: parsedContext } : ({ challenge } as never),
168
+ )
169
+ }
package/src/env.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ interface ImportMetaEnv {
4
+ readonly VITE_NODE_ENV: 'localnet' | 'testnet' | 'mainnet'
5
+ readonly VITE_HTTP_LOG: 'true' | 'false'
6
+ readonly VITE_RPC_CREDENTIALS: string
7
+ }
8
+
9
+ interface ImportMeta {
10
+ readonly env: ImportMetaEnv
11
+ }
package/src/index.ts ADDED
@@ -0,0 +1,12 @@
1
+ export * as BodyDigest from './BodyDigest.js'
2
+ export * as Challenge from './Challenge.js'
3
+ export * as Credential from './Credential.js'
4
+ export * as Errors from './Errors.js'
5
+ export * as Expires from './Expires.js'
6
+ export * as Intent from './Intent.js'
7
+ export * as Mcp from './Mcp.js'
8
+ export * as MethodIntent from './MethodIntent.js'
9
+ export * as PaymentRequest from './PaymentRequest.js'
10
+ export * as Receipt from './Receipt.js'
11
+ export * as Store from './Store.js'
12
+ export * as z from './zod.js'