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
package/dist/Intent.js ADDED
@@ -0,0 +1,83 @@
1
+ import { parseUnits } from 'viem';
2
+ import * as Expires from './Expires.js';
3
+ import * as z from './zod.js';
4
+ /**
5
+ * Creates an intent.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { z } from 'mppx'
10
+ *
11
+ * const charge = Intent.from({
12
+ * name: 'charge',
13
+ * schema: {
14
+ * request: z.object({
15
+ * amount: z.string(),
16
+ * currency: z.string(),
17
+ * recipient: z.optional(z.string()),
18
+ * }),
19
+ * },
20
+ * })
21
+ * ```
22
+ */
23
+ export function from(intent) {
24
+ return intent;
25
+ }
26
+ /**
27
+ * Charge intent for one-time immediate payments.
28
+ *
29
+ * @see https://github.com/tempoxyz/payment-auth-spec/blob/main/specs/intents/draft-payment-intent-charge-00.md
30
+ */
31
+ export const charge = from({
32
+ name: 'charge',
33
+ schema: {
34
+ request: z.pipe(z.object({
35
+ amount: z.amount(),
36
+ currency: z.string(),
37
+ decimals: z.number(),
38
+ description: z.optional(z.string()),
39
+ expires: z._default(z.datetime(), () => Expires.minutes(5)),
40
+ externalId: z.optional(z.string()),
41
+ recipient: z.optional(z.string()),
42
+ }),
43
+ // Note: Since the spec states we must have `amount` as a base unit, we
44
+ // will transform the amount to decimal units based on `decimals`.
45
+ z.transform(({ amount, decimals, ...rest }) => ({
46
+ ...rest,
47
+ amount: parseUnits(amount, decimals).toString(),
48
+ }))),
49
+ },
50
+ });
51
+ /**
52
+ * Session intent for pay-as-you-go streaming payments.
53
+ *
54
+ * Uses cumulative vouchers over a payment channel for
55
+ * incremental micropayments without per-request transactions.
56
+ */
57
+ export const session = from({
58
+ name: 'session',
59
+ schema: {
60
+ request: z.pipe(z.object({
61
+ amount: z.amount(),
62
+ unitType: z.string(),
63
+ currency: z.string(),
64
+ decimals: z.number(),
65
+ recipient: z.optional(z.string()),
66
+ suggestedDeposit: z.optional(z.amount()),
67
+ }), z.transform(({ amount, decimals, suggestedDeposit, ...rest }) => ({
68
+ ...rest,
69
+ amount: parseUnits(amount, decimals).toString(),
70
+ ...(suggestedDeposit
71
+ ? { suggestedDeposit: parseUnits(suggestedDeposit, decimals).toString() }
72
+ : {}),
73
+ }))),
74
+ },
75
+ });
76
+ /** @internal Extracts the inner object from a pipe or returns the schema directly. */
77
+ export function shapeOf(intent) {
78
+ const { request } = intent.schema;
79
+ if ('shape' in request)
80
+ return request.shape;
81
+ return request._zod.def.in.shape;
82
+ }
83
+ //# sourceMappingURL=Intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Intent.js","sourceRoot":"","sources":["../src/Intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAY7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,IAAI,CAA8B,MAAc;IAC9D,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,CAAC,IAAI,CACb,CAAC,CAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3D,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClC,CAAC;QACF,uEAAuE;QACvE,kEAAkE;QAClE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9C,GAAG,IAAI;YACP,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE;SAChD,CAAC,CAAC,CACJ;KACF;CACF,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,SAAS;IACf,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,CAAC,IAAI,CACb,CAAC,CAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzC,CAAC,EACF,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAChE,GAAG,IAAI;YACP,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE;YAC/C,GAAG,CAAC,gBAAgB;gBAClB,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC,CACJ;KACF;CACF,CAAC,CAAA;AAWF,sFAAsF;AACtF,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;IACjC,IAAI,OAAO,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,KAAwC,CAAA;IAC/E,OAAQ,OAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAA;AAC3C,CAAC"}
package/dist/Mcp.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ import type * as Challenge from './Challenge.js';
2
+ import type * as Credential from './Credential.js';
3
+ import type * as Errors from './Errors.js';
4
+ import type { OneOf } from './internal/types.js';
5
+ import type * as core_Receipt from './Receipt.js';
6
+ /** MCP JSON-RPC error code for payment required. */
7
+ export declare const paymentRequiredCode = -32042;
8
+ /** MCP JSON-RPC error code for payment verification failed. */
9
+ export declare const paymentVerificationFailedCode = -32043;
10
+ /** MCP metadata key for credentials. */
11
+ export declare const credentialMetaKey = "org.paymentauth/credential";
12
+ /** MCP metadata key for receipts. */
13
+ export declare const receiptMetaKey = "org.paymentauth/receipt";
14
+ /**
15
+ * MCP request with payment metadata support.
16
+ */
17
+ export type Request = {
18
+ method: string;
19
+ params?: {
20
+ _meta?: {
21
+ [credentialMetaKey]?: Credential.Credential;
22
+ [key: string]: unknown;
23
+ } | undefined;
24
+ [key: string]: unknown;
25
+ };
26
+ };
27
+ /**
28
+ * Full JSON-RPC request (used internally by transports).
29
+ */
30
+ export type JsonRpcRequest = Request & {
31
+ jsonrpc?: '2.0' | undefined;
32
+ id?: number | string | undefined;
33
+ };
34
+ /**
35
+ * MCP result with optional receipt metadata.
36
+ */
37
+ export type Result = {
38
+ _meta?: {
39
+ [receiptMetaKey]?: Receipt;
40
+ [key: string]: unknown;
41
+ };
42
+ [key: string]: unknown;
43
+ };
44
+ /**
45
+ * MCP error object for payment required responses.
46
+ */
47
+ export type ErrorObject = {
48
+ code: number;
49
+ message: string;
50
+ data?: {
51
+ httpStatus: number;
52
+ challenges: Challenge.Challenge[];
53
+ /** RFC 9457 Problem Details for rich error context. */
54
+ problem?: Errors.PaymentError.ProblemDetails;
55
+ };
56
+ };
57
+ /**
58
+ * Full JSON-RPC response (used internally by transports).
59
+ */
60
+ export type Response = {
61
+ jsonrpc?: '2.0' | undefined;
62
+ id?: number | string | undefined;
63
+ } & OneOf<{
64
+ result: Result;
65
+ } | {
66
+ error: ErrorObject;
67
+ }>;
68
+ /**
69
+ * MCP receipt structure (extends Receipt with MCP-specific fields).
70
+ */
71
+ export type Receipt = core_Receipt.Receipt & {
72
+ challengeId: string;
73
+ };
74
+ //# sourceMappingURL=Mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mcp.d.ts","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,KAAK,YAAY,MAAM,cAAc,CAAA;AAEjD,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAEzC,+DAA+D;AAC/D,eAAO,MAAM,6BAA6B,SAAS,CAAA;AAEnD,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,+BAA+B,CAAA;AAE7D,qCAAqC;AACrC,eAAO,MAAM,cAAc,4BAA4B,CAAA;AAEvD;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EACF;YACE,CAAC,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAA;YAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SACvB,GACD,SAAS,CAAA;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG;IACrC,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACjC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,CAAC,EAAE;QACN,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAA;QAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAA;QACjC,uDAAuD;QACvD,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,cAAc,CAAA;KAC7C,CAAA;CACF,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACjC,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA"}
package/dist/Mcp.js ADDED
@@ -0,0 +1,9 @@
1
+ /** MCP JSON-RPC error code for payment required. */
2
+ export const paymentRequiredCode = -32042;
3
+ /** MCP JSON-RPC error code for payment verification failed. */
4
+ export const paymentVerificationFailedCode = -32043;
5
+ /** MCP metadata key for credentials. */
6
+ export const credentialMetaKey = 'org.paymentauth/credential';
7
+ /** MCP metadata key for receipts. */
8
+ export const receiptMetaKey = 'org.paymentauth/receipt';
9
+ //# sourceMappingURL=Mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mcp.js","sourceRoot":"","sources":["../src/Mcp.ts"],"names":[],"mappings":"AAMA,oDAAoD;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,CAAA;AAEzC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAAK,CAAA;AAEnD,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAA;AAE7D,qCAAqC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,yBAAyB,CAAA"}
@@ -0,0 +1,225 @@
1
+ import type * as Challenge from './Challenge.js';
2
+ import type * as Credential from './Credential.js';
3
+ import * as Intent from './Intent.js';
4
+ import type { ExactPartial, LooseOmit, MaybePromise } from './internal/types.js';
5
+ import type * as Receipt from './Receipt.js';
6
+ import type * as Transport from './server/Transport.js';
7
+ import * as z from './zod.js';
8
+ /**
9
+ * A payment method-specific intent.
10
+ */
11
+ export type MethodIntent<intent extends Intent.Intent = Intent.Intent, options extends fromIntent.Options<intent> = fromIntent.Options<intent>> = {
12
+ method: options['method'];
13
+ name: intent['name'];
14
+ schema: {
15
+ credential: {
16
+ payload: options['schema']['credential']['payload'];
17
+ };
18
+ request: MergedRequestSchema<intent, options>;
19
+ };
20
+ };
21
+ export type AnyMethodIntent = MethodIntent<any, any>;
22
+ /**
23
+ * Creates a method-specific intent.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { z } from 'zod/mini'
28
+ * import { MethodIntent } from 'mppx'
29
+ *
30
+ * const tempoCharge = MethodIntent.from({
31
+ * method: 'tempo',
32
+ * name: 'charge',
33
+ * schema: {
34
+ * credential: {
35
+ * payload: z.object({
36
+ * signature: z.string(),
37
+ * type: z.literal('transaction'),
38
+ * }),
39
+ * },
40
+ * request: z.object({
41
+ * amount: z.string(),
42
+ * currency: z.string(),
43
+ * recipient: z.string(),
44
+ * }),
45
+ * },
46
+ * })
47
+ * ```
48
+ */
49
+ export declare function from<const intent extends MethodIntent>(intent: intent): intent;
50
+ /**
51
+ * Creates a method-specific intent from a base intent.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { z } from 'zod/mini'
56
+ * import { Intent, MethodIntent } from 'mppx'
57
+ *
58
+ * const tempoCharge = MethodIntent.fromIntent(Intent.charge, {
59
+ * method: 'tempo',
60
+ * schema: {
61
+ * credential: {
62
+ * payload: z.object({
63
+ * signature: z.string(),
64
+ * type: z.literal('transaction'),
65
+ * }),
66
+ * },
67
+ * request: {
68
+ * methodDetails: z.object({
69
+ * chainId: z.number(),
70
+ * }),
71
+ * requires: ['recipient'],
72
+ * },
73
+ * },
74
+ * })
75
+ * ```
76
+ */
77
+ export declare function fromIntent<const intent extends Intent.Intent, const options extends fromIntent.Options<intent>>(intent: intent, options: options): MethodIntent<intent, options>;
78
+ export declare namespace fromIntent {
79
+ type Options<intent extends Intent.Intent> = {
80
+ method: string;
81
+ schema: {
82
+ credential: {
83
+ payload: z.ZodMiniType;
84
+ };
85
+ request?: {
86
+ methodDetails?: z.ZodMiniObject | undefined;
87
+ requires?: readonly (keyof Intent.ShapeOf<intent>)[] | undefined;
88
+ } | undefined;
89
+ };
90
+ };
91
+ }
92
+ /** @internal */
93
+ type RequiresKeys<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = options['schema']['request'] extends {
94
+ requires: readonly (infer key)[];
95
+ } ? key : never;
96
+ /** @internal */
97
+ type UnwrapOptional<schema> = schema extends z.ZodMiniOptional<infer inner> ? inner : schema;
98
+ /** @internal */
99
+ type MethodDetailsShape<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = options['schema']['request'] extends {
100
+ methodDetails: infer details extends z.ZodMiniObject;
101
+ } ? details['shape'] : Record<never, never>;
102
+ /** @internal */
103
+ type InputRequestShape<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = {
104
+ [K in keyof Intent.ShapeOf<intent>]: K extends RequiresKeys<intent, options> ? UnwrapOptional<Intent.ShapeOf<intent>[K]> : Intent.ShapeOf<intent>[K];
105
+ } & MethodDetailsShape<intent, options>;
106
+ /** @internal */
107
+ type MethodDetailsOutput<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = options['schema']['request'] extends {
108
+ methodDetails: infer details extends z.ZodMiniObject;
109
+ } ? {
110
+ methodDetails?: z.output<details>;
111
+ } : Record<never, never>;
112
+ /** @internal */
113
+ type OutputRequestType<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = {
114
+ [K in keyof Intent.ShapeOf<intent>]: K extends RequiresKeys<intent, options> ? z.output<UnwrapOptional<Intent.ShapeOf<intent>[K]>> : z.output<Intent.ShapeOf<intent>[K]>;
115
+ } & MethodDetailsOutput<intent, options>;
116
+ /** @internal */
117
+ type MergedRequestSchema<intent extends Intent.Intent, options extends fromIntent.Options<intent>> = z.ZodMiniType<OutputRequestType<intent, options>, z.input<z.ZodMiniObject<InputRequestShape<intent, options>>>>;
118
+ /**
119
+ * A client-side configured method intent with credential creation logic.
120
+ */
121
+ export type Client<intent extends AnyMethodIntent = MethodIntent, context extends z.ZodMiniType | undefined = z.ZodMiniType | undefined> = intent & {
122
+ context?: context;
123
+ createCredential: CreateCredentialFn<intent, context extends z.ZodMiniType ? z.output<context> : Record<never, never>>;
124
+ };
125
+ export type AnyClient = Client<any, any>;
126
+ /**
127
+ * A server-side configured method intent with verification logic.
128
+ */
129
+ export type Server<intent extends AnyMethodIntent = MethodIntent, defaults extends ExactPartial<z.input<intent['schema']['request']>> = {}, transportOverride = undefined> = intent & {
130
+ defaults?: defaults | undefined;
131
+ request?: RequestFn<intent> | undefined;
132
+ respond?: RespondFn<intent> | undefined;
133
+ transport?: transportOverride | undefined;
134
+ verify: VerifyFn<intent>;
135
+ };
136
+ export type AnyServer = Server<any, any, any>;
137
+ /** Credential creation function for a single intent. */
138
+ export type CreateCredentialFn<intent extends AnyMethodIntent, context = unknown> = (parameters: {
139
+ challenge: Challenge.Challenge<z.output<intent['schema']['request']>, intent['name'], intent['method']>;
140
+ } & ([keyof context] extends [never] ? unknown : {
141
+ context: context;
142
+ })) => Promise<string>;
143
+ /** Request transform function for a single intent. */
144
+ export type RequestFn<intent extends AnyMethodIntent> = (options: {
145
+ credential?: Credential.Credential | null | undefined;
146
+ request: z.input<intent['schema']['request']>;
147
+ }) => MaybePromise<z.input<intent['schema']['request']>>;
148
+ /** Verification function for a single intent. */
149
+ export type VerifyFn<intent extends AnyMethodIntent> = (parameters: {
150
+ credential: Credential.Credential<z.output<intent['schema']['credential']['payload']>, Challenge.Challenge<z.output<intent['schema']['request']>, intent['name'], intent['method']>>;
151
+ request: z.input<intent['schema']['request']>;
152
+ }) => Promise<Receipt.Receipt>;
153
+ /**
154
+ * Optional respond function for a server-side method intent.
155
+ *
156
+ * Called after `verify` succeeds. If it returns a `Response`, the library
157
+ * treats the request as fully handled (e.g. channel open/close) and
158
+ * `withReceipt()` will short-circuit — returning the management response
159
+ * with the receipt header attached without invoking any user-supplied
160
+ * response or generator. If it returns `undefined`, the server handler
161
+ * is expected to serve content via `withReceipt(response)`.
162
+ *
163
+ * **HTTP-only.** The `input` parameter is a `Request` object; MCP transports
164
+ * do not invoke this hook.
165
+ */
166
+ export type RespondFn<intent extends AnyMethodIntent> = (parameters: {
167
+ credential: Credential.Credential<z.output<intent['schema']['credential']['payload']>, Challenge.Challenge<z.output<intent['schema']['request']>, intent['name'], intent['method']>>;
168
+ input: globalThis.Request;
169
+ receipt: Receipt.Receipt;
170
+ request: z.input<intent['schema']['request']>;
171
+ }) => MaybePromise<globalThis.Response | undefined>;
172
+ /** Partial request type for defaults. */
173
+ export type RequestDefaults<intent extends AnyMethodIntent> = ExactPartial<z.input<intent['schema']['request']>>;
174
+ /** Makes fields optional if they exist in defaults. */
175
+ export type WithDefaults<request, defaults> = [keyof defaults] extends [never] ? request : LooseOmit<request, keyof defaults & string> & ExactPartial<Pick<request, keyof defaults & keyof request>>;
176
+ /**
177
+ * Extends a method intent with client-side credential creation logic.
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * import { MethodIntent } from 'mppx'
182
+ * import { Intents } from 'mppx/tempo'
183
+ *
184
+ * const tempoCharge = MethodIntent.toClient(Intents.charge, {
185
+ * async createCredential({ challenge }) {
186
+ * return Credential.serialize({ challenge, payload: { ... } })
187
+ * },
188
+ * })
189
+ * ```
190
+ */
191
+ export declare function toClient<const intent extends AnyMethodIntent, const context extends z.ZodMiniType | undefined = undefined>(intent: intent, options: toClient.Options<intent, context>): Client<intent, context>;
192
+ export declare namespace toClient {
193
+ type Options<intent extends AnyMethodIntent, context extends z.ZodMiniType | undefined = undefined> = {
194
+ context?: context;
195
+ createCredential: CreateCredentialFn<intent, context extends z.ZodMiniType ? z.output<context> : Record<never, never>>;
196
+ };
197
+ }
198
+ /**
199
+ * Extends a method intent with server-side verification logic.
200
+ *
201
+ * @example
202
+ * ```ts
203
+ * import { MethodIntent } from 'mppx'
204
+ * import { Intents } from 'mppx/tempo'
205
+ *
206
+ * const tempoCharge = MethodIntent.toServer(Intents.charge, {
207
+ * async verify({ credential }) {
208
+ * // verification logic
209
+ * return { status: 'success', ... }
210
+ * },
211
+ * })
212
+ * ```
213
+ */
214
+ export declare function toServer<const intent extends AnyMethodIntent, const defaults extends RequestDefaults<intent> = {}, const transportOverride extends Transport.AnyTransport | undefined = undefined>(intent: intent, options: toServer.Options<intent, defaults, transportOverride>): Server<intent, defaults, transportOverride>;
215
+ export declare namespace toServer {
216
+ type Options<intent extends AnyMethodIntent, defaults extends RequestDefaults<intent> = {}, transportOverride extends Transport.AnyTransport | undefined = undefined> = {
217
+ defaults?: defaults | undefined;
218
+ request?: RequestFn<intent> | undefined;
219
+ respond?: RespondFn<intent> | undefined;
220
+ transport?: transportOverride | undefined;
221
+ verify: VerifyFn<intent>;
222
+ };
223
+ }
224
+ export {};
225
+ //# sourceMappingURL=MethodIntent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodIntent.d.ts","sourceRoot":"","sources":["../src/MethodIntent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import * as Intent from './Intent.js';
2
+ import * as z from './zod.js';
3
+ /**
4
+ * Creates a method-specific intent.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { z } from 'zod/mini'
9
+ * import { MethodIntent } from 'mppx'
10
+ *
11
+ * const tempoCharge = MethodIntent.from({
12
+ * method: 'tempo',
13
+ * name: 'charge',
14
+ * schema: {
15
+ * credential: {
16
+ * payload: z.object({
17
+ * signature: z.string(),
18
+ * type: z.literal('transaction'),
19
+ * }),
20
+ * },
21
+ * request: z.object({
22
+ * amount: z.string(),
23
+ * currency: z.string(),
24
+ * recipient: z.string(),
25
+ * }),
26
+ * },
27
+ * })
28
+ * ```
29
+ */
30
+ export function from(intent) {
31
+ return intent;
32
+ }
33
+ /**
34
+ * Creates a method-specific intent from a base intent.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { z } from 'zod/mini'
39
+ * import { Intent, MethodIntent } from 'mppx'
40
+ *
41
+ * const tempoCharge = MethodIntent.fromIntent(Intent.charge, {
42
+ * method: 'tempo',
43
+ * schema: {
44
+ * credential: {
45
+ * payload: z.object({
46
+ * signature: z.string(),
47
+ * type: z.literal('transaction'),
48
+ * }),
49
+ * },
50
+ * request: {
51
+ * methodDetails: z.object({
52
+ * chainId: z.number(),
53
+ * }),
54
+ * requires: ['recipient'],
55
+ * },
56
+ * },
57
+ * })
58
+ * ```
59
+ */
60
+ export function fromIntent(intent, options) {
61
+ const { name } = intent;
62
+ const { method, schema } = options;
63
+ const requestShape = Intent.shapeOf(intent);
64
+ const methodDetails = schema.request?.methodDetails;
65
+ const requires = schema.request?.requires ?? [];
66
+ const requestInputShape = {};
67
+ for (const [key, field] of Object.entries(requestShape)) {
68
+ if (requires.includes(key))
69
+ requestInputShape[key] = z.unwrapOptional(field);
70
+ else
71
+ requestInputShape[key] = field;
72
+ }
73
+ const methodDetailsKeys = [];
74
+ if (methodDetails)
75
+ for (const [key, field] of Object.entries(methodDetails.shape)) {
76
+ requestInputShape[key] = field;
77
+ methodDetailsKeys.push(key);
78
+ }
79
+ const intentRequest = intent.schema.request;
80
+ const hasPipe = !('shape' in intentRequest);
81
+ const request = z.pipe(z.object(requestInputShape), z.transform((input) => {
82
+ const transformed = hasPipe ? intentRequest.parse(input) : input;
83
+ const result = {};
84
+ const details = {};
85
+ for (const [key, value] of Object.entries(transformed)) {
86
+ result[key] = value;
87
+ }
88
+ for (const key of methodDetailsKeys) {
89
+ const value = input[key];
90
+ if (value !== undefined)
91
+ details[key] = value;
92
+ }
93
+ if (Object.keys(details).length > 0)
94
+ result.methodDetails = details;
95
+ return result;
96
+ }));
97
+ return {
98
+ method,
99
+ name,
100
+ schema: {
101
+ credential: { payload: schema.credential.payload },
102
+ request,
103
+ },
104
+ };
105
+ }
106
+ /**
107
+ * Extends a method intent with client-side credential creation logic.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * import { MethodIntent } from 'mppx'
112
+ * import { Intents } from 'mppx/tempo'
113
+ *
114
+ * const tempoCharge = MethodIntent.toClient(Intents.charge, {
115
+ * async createCredential({ challenge }) {
116
+ * return Credential.serialize({ challenge, payload: { ... } })
117
+ * },
118
+ * })
119
+ * ```
120
+ */
121
+ export function toClient(intent, options) {
122
+ const { context, createCredential } = options;
123
+ return {
124
+ ...intent,
125
+ context,
126
+ createCredential,
127
+ };
128
+ }
129
+ /**
130
+ * Extends a method intent with server-side verification logic.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * import { MethodIntent } from 'mppx'
135
+ * import { Intents } from 'mppx/tempo'
136
+ *
137
+ * const tempoCharge = MethodIntent.toServer(Intents.charge, {
138
+ * async verify({ credential }) {
139
+ * // verification logic
140
+ * return { status: 'success', ... }
141
+ * },
142
+ * })
143
+ * ```
144
+ */
145
+ export function toServer(intent, options) {
146
+ const { defaults, request, respond, transport, verify } = options;
147
+ return {
148
+ ...intent,
149
+ defaults,
150
+ request,
151
+ respond,
152
+ transport,
153
+ verify,
154
+ };
155
+ }
156
+ //# sourceMappingURL=MethodIntent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodIntent.js","sourceRoot":"","sources":["../src/MethodIntent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { Compute } from './internal/types.js';
2
+ import type * as MethodIntent from './MethodIntent.js';
3
+ import type * as z from './zod.js';
4
+ /**
5
+ * Intent-specific payment parameters.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { Request } from 'mppx'
10
+ *
11
+ * const request: Request.Request = {
12
+ * amount: '1000000',
13
+ * currency: '0x20c0000000000000000000000000000000000001',
14
+ * recipient: '0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00',
15
+ * }
16
+ * ```
17
+ */
18
+ export type Request<request extends Record<string, unknown> = Record<string, unknown>> = Compute<request>;
19
+ /**
20
+ * Deserializes a base64url string to a request.
21
+ *
22
+ * @param encoded - The base64url-encoded string.
23
+ * @returns The deserialized request.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Request } from 'mppx'
28
+ *
29
+ * const request = Request.deserialize(serialized)
30
+ * ```
31
+ */
32
+ export declare function deserialize(encoded: string): Request;
33
+ /**
34
+ * Creates a request from the given parameters.
35
+ *
36
+ * @param request - Request parameters.
37
+ * @returns A request.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import { Request } from 'mppx'
42
+ *
43
+ * const request = Request.from({
44
+ * amount: '1000000',
45
+ * currency: '0x20c0000000000000000000000000000000000001',
46
+ * recipient: '0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00',
47
+ * })
48
+ * ```
49
+ */
50
+ export declare function from<const request extends Request>(request: request): request;
51
+ /**
52
+ * Creates a validated request from a method intent.
53
+ *
54
+ * @param intent - The method intent to validate against.
55
+ * @param request - Request parameters.
56
+ * @returns A validated request.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { Request } from 'mppx'
61
+ * import { Intents } from 'mppx/tempo'
62
+ *
63
+ * const request = Request.fromIntent(Intents.charge, {
64
+ * amount: '1000000',
65
+ * currency: '0x20c0000000000000000000000000000000000001',
66
+ * recipient: '0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00',
67
+ * expires: '2025-01-06T12:00:00Z',
68
+ * chainId: 42431,
69
+ * })
70
+ * ```
71
+ */
72
+ export declare function fromIntent<const intent extends MethodIntent.MethodIntent>(intent: intent, request: z.input<intent['schema']['request']>): Request<z.output<intent['schema']['request']>>;
73
+ /**
74
+ * Serializes a request to a base64url string.
75
+ *
76
+ * @param request - The request to serialize.
77
+ * @returns A base64url-encoded string (no padding).
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * import { Request } from 'mppx'
82
+ *
83
+ * const serialized = Request.serialize(request)
84
+ * // => "eyJhbW91bnQiOiIxMDAwMDAwIiwiY3VycmVuY3kiOiIweC4uLiJ9"
85
+ * ```
86
+ */
87
+ export declare function serialize(request: Request): string;
88
+ //# sourceMappingURL=PaymentRequest.d.ts.map