mppx 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/BodyDigest.d.ts +42 -0
  4. package/dist/BodyDigest.d.ts.map +1 -0
  5. package/dist/BodyDigest.js +40 -0
  6. package/dist/BodyDigest.js.map +1 -0
  7. package/dist/Challenge.d.ts +271 -0
  8. package/dist/Challenge.d.ts.map +1 -0
  9. package/dist/Challenge.js +291 -0
  10. package/dist/Challenge.js.map +1 -0
  11. package/dist/Credential.d.ts +91 -0
  12. package/dist/Credential.d.ts.map +1 -0
  13. package/dist/Credential.js +122 -0
  14. package/dist/Credential.js.map +1 -0
  15. package/dist/Errors.d.ts +243 -0
  16. package/dist/Errors.d.ts.map +1 -0
  17. package/dist/Errors.js +201 -0
  18. package/dist/Errors.js.map +1 -0
  19. package/dist/Expires.d.ts +15 -0
  20. package/dist/Expires.d.ts.map +1 -0
  21. package/dist/Expires.js +29 -0
  22. package/dist/Expires.js.map +1 -0
  23. package/dist/Intent.d.ts +101 -0
  24. package/dist/Intent.d.ts.map +1 -0
  25. package/dist/Intent.js +83 -0
  26. package/dist/Intent.js.map +1 -0
  27. package/dist/Mcp.d.ts +74 -0
  28. package/dist/Mcp.d.ts.map +1 -0
  29. package/dist/Mcp.js +9 -0
  30. package/dist/Mcp.js.map +1 -0
  31. package/dist/MethodIntent.d.ts +225 -0
  32. package/dist/MethodIntent.d.ts.map +1 -0
  33. package/dist/MethodIntent.js +156 -0
  34. package/dist/MethodIntent.js.map +1 -0
  35. package/dist/PaymentRequest.d.ts +88 -0
  36. package/dist/PaymentRequest.d.ts.map +1 -0
  37. package/dist/PaymentRequest.js +81 -0
  38. package/dist/PaymentRequest.js.map +1 -0
  39. package/dist/Receipt.d.ts +110 -0
  40. package/dist/Receipt.d.ts.map +1 -0
  41. package/dist/Receipt.js +105 -0
  42. package/dist/Receipt.js.map +1 -0
  43. package/dist/Store.d.ts +28 -0
  44. package/dist/Store.d.ts.map +1 -0
  45. package/dist/Store.js +61 -0
  46. package/dist/Store.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +1219 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/client/Methods.d.ts +4 -0
  52. package/dist/client/Methods.d.ts.map +1 -0
  53. package/dist/client/Methods.js +4 -0
  54. package/dist/client/Methods.js.map +1 -0
  55. package/dist/client/Mppx.d.ts +84 -0
  56. package/dist/client/Mppx.d.ts.map +1 -0
  57. package/dist/client/Mppx.js +64 -0
  58. package/dist/client/Mppx.js.map +1 -0
  59. package/dist/client/Transport.d.ts +56 -0
  60. package/dist/client/Transport.d.ts.map +1 -0
  61. package/dist/client/Transport.js +81 -0
  62. package/dist/client/Transport.js.map +1 -0
  63. package/dist/client/index.d.ts +5 -0
  64. package/dist/client/index.d.ts.map +1 -0
  65. package/dist/client/index.js +5 -0
  66. package/dist/client/index.js.map +1 -0
  67. package/dist/client/internal/Fetch.d.ts +85 -0
  68. package/dist/client/internal/Fetch.d.ts.map +1 -0
  69. package/dist/client/internal/Fetch.js +95 -0
  70. package/dist/client/internal/Fetch.js.map +1 -0
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +13 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/internal/types.d.ts +302 -0
  76. package/dist/internal/types.d.ts.map +1 -0
  77. package/dist/internal/types.js +2 -0
  78. package/dist/internal/types.js.map +1 -0
  79. package/dist/mcp-sdk/client/McpClient.d.ts +78 -0
  80. package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -0
  81. package/dist/mcp-sdk/client/McpClient.js +98 -0
  82. package/dist/mcp-sdk/client/McpClient.js.map +1 -0
  83. package/dist/mcp-sdk/client/index.d.ts +3 -0
  84. package/dist/mcp-sdk/client/index.d.ts.map +1 -0
  85. package/dist/mcp-sdk/client/index.js +3 -0
  86. package/dist/mcp-sdk/client/index.js.map +1 -0
  87. package/dist/mcp-sdk/server/Transport.d.ts +43 -0
  88. package/dist/mcp-sdk/server/Transport.d.ts.map +1 -0
  89. package/dist/mcp-sdk/server/Transport.js +71 -0
  90. package/dist/mcp-sdk/server/Transport.js.map +1 -0
  91. package/dist/mcp-sdk/server/index.d.ts +2 -0
  92. package/dist/mcp-sdk/server/index.d.ts.map +1 -0
  93. package/dist/mcp-sdk/server/index.js +2 -0
  94. package/dist/mcp-sdk/server/index.js.map +1 -0
  95. package/dist/middlewares/elysia.d.ts +51 -0
  96. package/dist/middlewares/elysia.d.ts.map +1 -0
  97. package/dist/middlewares/elysia.js +59 -0
  98. package/dist/middlewares/elysia.js.map +1 -0
  99. package/dist/middlewares/express.d.ts +46 -0
  100. package/dist/middlewares/express.d.ts.map +1 -0
  101. package/dist/middlewares/express.js +69 -0
  102. package/dist/middlewares/express.js.map +1 -0
  103. package/dist/middlewares/hono.d.ts +46 -0
  104. package/dist/middlewares/hono.d.ts.map +1 -0
  105. package/dist/middlewares/hono.js +57 -0
  106. package/dist/middlewares/hono.js.map +1 -0
  107. package/dist/middlewares/internal/mppx.d.ts +16 -0
  108. package/dist/middlewares/internal/mppx.d.ts.map +1 -0
  109. package/dist/middlewares/internal/mppx.js +16 -0
  110. package/dist/middlewares/internal/mppx.js.map +1 -0
  111. package/dist/middlewares/nextjs.d.ts +45 -0
  112. package/dist/middlewares/nextjs.d.ts.map +1 -0
  113. package/dist/middlewares/nextjs.js +57 -0
  114. package/dist/middlewares/nextjs.js.map +1 -0
  115. package/dist/proxy/Proxy.d.ts +47 -0
  116. package/dist/proxy/Proxy.d.ts.map +1 -0
  117. package/dist/proxy/Proxy.js +126 -0
  118. package/dist/proxy/Proxy.js.map +1 -0
  119. package/dist/proxy/Service.d.ts +100 -0
  120. package/dist/proxy/Service.d.ts.map +1 -0
  121. package/dist/proxy/Service.js +147 -0
  122. package/dist/proxy/Service.js.map +1 -0
  123. package/dist/proxy/index.d.ts +7 -0
  124. package/dist/proxy/index.d.ts.map +1 -0
  125. package/dist/proxy/index.js +7 -0
  126. package/dist/proxy/index.js.map +1 -0
  127. package/dist/proxy/internal/Headers.d.ts +3 -0
  128. package/dist/proxy/internal/Headers.d.ts.map +1 -0
  129. package/dist/proxy/internal/Headers.js +41 -0
  130. package/dist/proxy/internal/Headers.js.map +1 -0
  131. package/dist/proxy/internal/Route.d.ts +14 -0
  132. package/dist/proxy/internal/Route.d.ts.map +1 -0
  133. package/dist/proxy/internal/Route.js +47 -0
  134. package/dist/proxy/internal/Route.js.map +1 -0
  135. package/dist/proxy/services/anthropic.d.ts +29 -0
  136. package/dist/proxy/services/anthropic.d.ts.map +1 -0
  137. package/dist/proxy/services/anthropic.js +30 -0
  138. package/dist/proxy/services/anthropic.js.map +1 -0
  139. package/dist/proxy/services/openai.d.ts +29 -0
  140. package/dist/proxy/services/openai.d.ts.map +1 -0
  141. package/dist/proxy/services/openai.js +30 -0
  142. package/dist/proxy/services/openai.js.map +1 -0
  143. package/dist/proxy/services/stripe.d.ts +29 -0
  144. package/dist/proxy/services/stripe.d.ts.map +1 -0
  145. package/dist/proxy/services/stripe.js +30 -0
  146. package/dist/proxy/services/stripe.js.map +1 -0
  147. package/dist/server/Methods.d.ts +3 -0
  148. package/dist/server/Methods.d.ts.map +1 -0
  149. package/dist/server/Methods.js +3 -0
  150. package/dist/server/Methods.js.map +1 -0
  151. package/dist/server/Mppx.d.ts +116 -0
  152. package/dist/server/Mppx.d.ts.map +1 -0
  153. package/dist/server/Mppx.js +207 -0
  154. package/dist/server/Mppx.js.map +1 -0
  155. package/dist/server/NodeListener.d.ts +3 -0
  156. package/dist/server/NodeListener.d.ts.map +1 -0
  157. package/dist/server/NodeListener.js +3 -0
  158. package/dist/server/NodeListener.js.map +1 -0
  159. package/dist/server/Request.d.ts +24 -0
  160. package/dist/server/Request.d.ts.map +1 -0
  161. package/dist/server/Request.js +26 -0
  162. package/dist/server/Request.js.map +1 -0
  163. package/dist/server/Response.d.ts +10 -0
  164. package/dist/server/Response.d.ts.map +1 -0
  165. package/dist/server/Response.js +15 -0
  166. package/dist/server/Response.js.map +1 -0
  167. package/dist/server/Transport.d.ts +93 -0
  168. package/dist/server/Transport.d.ts.map +1 -0
  169. package/dist/server/Transport.js +132 -0
  170. package/dist/server/Transport.js.map +1 -0
  171. package/dist/server/index.d.ts +9 -0
  172. package/dist/server/index.d.ts.map +1 -0
  173. package/dist/server/index.js +9 -0
  174. package/dist/server/index.js.map +1 -0
  175. package/dist/stripe/Intents.d.ts +54 -0
  176. package/dist/stripe/Intents.d.ts.map +1 -0
  177. package/dist/stripe/Intents.js +27 -0
  178. package/dist/stripe/Intents.js.map +1 -0
  179. package/dist/stripe/client/Charge.d.ts +114 -0
  180. package/dist/stripe/client/Charge.d.ts.map +1 -0
  181. package/dist/stripe/client/Charge.js +77 -0
  182. package/dist/stripe/client/Charge.js.map +1 -0
  183. package/dist/stripe/client/MethodIntents.d.ts +80 -0
  184. package/dist/stripe/client/MethodIntents.d.ts.map +1 -0
  185. package/dist/stripe/client/MethodIntents.js +34 -0
  186. package/dist/stripe/client/MethodIntents.js.map +1 -0
  187. package/dist/stripe/client/index.d.ts +3 -0
  188. package/dist/stripe/client/index.d.ts.map +1 -0
  189. package/dist/stripe/client/index.js +3 -0
  190. package/dist/stripe/client/index.js.map +1 -0
  191. package/dist/stripe/index.d.ts +2 -0
  192. package/dist/stripe/index.d.ts.map +1 -0
  193. package/dist/stripe/index.js +2 -0
  194. package/dist/stripe/index.js.map +1 -0
  195. package/dist/stripe/server/Charge.d.ts +74 -0
  196. package/dist/stripe/server/Charge.d.ts.map +1 -0
  197. package/dist/stripe/server/Charge.js +79 -0
  198. package/dist/stripe/server/Charge.js.map +1 -0
  199. package/dist/stripe/server/MethodIntents.d.ts +65 -0
  200. package/dist/stripe/server/MethodIntents.d.ts.map +1 -0
  201. package/dist/stripe/server/MethodIntents.js +21 -0
  202. package/dist/stripe/server/MethodIntents.js.map +1 -0
  203. package/dist/stripe/server/index.d.ts +3 -0
  204. package/dist/stripe/server/index.d.ts.map +1 -0
  205. package/dist/stripe/server/index.js +3 -0
  206. package/dist/stripe/server/index.js.map +1 -0
  207. package/dist/tempo/Attribution.d.ts +101 -0
  208. package/dist/tempo/Attribution.d.ts.map +1 -0
  209. package/dist/tempo/Attribution.js +124 -0
  210. package/dist/tempo/Attribution.js.map +1 -0
  211. package/dist/tempo/Intents.d.ts +132 -0
  212. package/dist/tempo/Intents.d.ts.map +1 -0
  213. package/dist/tempo/Intents.js +81 -0
  214. package/dist/tempo/Intents.js.map +1 -0
  215. package/dist/tempo/client/ChannelOps.d.ts +54 -0
  216. package/dist/tempo/client/ChannelOps.d.ts.map +1 -0
  217. package/dist/tempo/client/ChannelOps.js +138 -0
  218. package/dist/tempo/client/ChannelOps.js.map +1 -0
  219. package/dist/tempo/client/Charge.d.ts +76 -0
  220. package/dist/tempo/client/Charge.d.ts.map +1 -0
  221. package/dist/tempo/client/Charge.js +69 -0
  222. package/dist/tempo/client/Charge.js.map +1 -0
  223. package/dist/tempo/client/MethodIntents.d.ts +157 -0
  224. package/dist/tempo/client/MethodIntents.d.ts.map +1 -0
  225. package/dist/tempo/client/MethodIntents.js +25 -0
  226. package/dist/tempo/client/MethodIntents.js.map +1 -0
  227. package/dist/tempo/client/Session.d.ts +159 -0
  228. package/dist/tempo/client/Session.d.ts.map +1 -0
  229. package/dist/tempo/client/Session.js +263 -0
  230. package/dist/tempo/client/Session.js.map +1 -0
  231. package/dist/tempo/client/SessionManager.d.ts +62 -0
  232. package/dist/tempo/client/SessionManager.d.ts.map +1 -0
  233. package/dist/tempo/client/SessionManager.js +196 -0
  234. package/dist/tempo/client/SessionManager.js.map +1 -0
  235. package/dist/tempo/client/index.d.ts +6 -0
  236. package/dist/tempo/client/index.d.ts.map +1 -0
  237. package/dist/tempo/client/index.js +5 -0
  238. package/dist/tempo/client/index.js.map +1 -0
  239. package/dist/tempo/index.d.ts +3 -0
  240. package/dist/tempo/index.d.ts.map +1 -0
  241. package/dist/tempo/index.js +3 -0
  242. package/dist/tempo/index.js.map +1 -0
  243. package/dist/tempo/internal/account.d.ts +32 -0
  244. package/dist/tempo/internal/account.d.ts.map +1 -0
  245. package/dist/tempo/internal/account.js +33 -0
  246. package/dist/tempo/internal/account.js.map +1 -0
  247. package/dist/tempo/internal/defaults.d.ts +18 -0
  248. package/dist/tempo/internal/defaults.d.ts.map +1 -0
  249. package/dist/tempo/internal/defaults.js +18 -0
  250. package/dist/tempo/internal/defaults.js.map +1 -0
  251. package/dist/tempo/internal/types.d.ts +11 -0
  252. package/dist/tempo/internal/types.d.ts.map +1 -0
  253. package/dist/tempo/internal/types.js +2 -0
  254. package/dist/tempo/internal/types.js.map +1 -0
  255. package/dist/tempo/server/Charge.d.ts +77 -0
  256. package/dist/tempo/server/Charge.d.ts.map +1 -0
  257. package/dist/tempo/server/Charge.js +228 -0
  258. package/dist/tempo/server/Charge.js.map +1 -0
  259. package/dist/tempo/server/MethodIntents.d.ts +140 -0
  260. package/dist/tempo/server/MethodIntents.d.ts.map +1 -0
  261. package/dist/tempo/server/MethodIntents.js +26 -0
  262. package/dist/tempo/server/MethodIntents.js.map +1 -0
  263. package/dist/tempo/server/Session.d.ts +148 -0
  264. package/dist/tempo/server/Session.d.ts.map +1 -0
  265. package/dist/tempo/server/Session.js +529 -0
  266. package/dist/tempo/server/Session.js.map +1 -0
  267. package/dist/tempo/server/internal/transport.d.ts +47 -0
  268. package/dist/tempo/server/internal/transport.d.ts.map +1 -0
  269. package/dist/tempo/server/internal/transport.js +118 -0
  270. package/dist/tempo/server/internal/transport.js.map +1 -0
  271. package/dist/tempo/stream/Chain.d.ts +52 -0
  272. package/dist/tempo/stream/Chain.d.ts.map +1 -0
  273. package/dist/tempo/stream/Chain.js +215 -0
  274. package/dist/tempo/stream/Chain.js.map +1 -0
  275. package/dist/tempo/stream/Channel.d.ts +26 -0
  276. package/dist/tempo/stream/Channel.d.ts.map +1 -0
  277. package/dist/tempo/stream/Channel.js +27 -0
  278. package/dist/tempo/stream/Channel.js.map +1 -0
  279. package/dist/tempo/stream/ChannelStore.d.ts +103 -0
  280. package/dist/tempo/stream/ChannelStore.d.ts.map +1 -0
  281. package/dist/tempo/stream/ChannelStore.js +100 -0
  282. package/dist/tempo/stream/ChannelStore.js.map +1 -0
  283. package/dist/tempo/stream/Receipt.d.ts +22 -0
  284. package/dist/tempo/stream/Receipt.d.ts.map +1 -0
  285. package/dist/tempo/stream/Receipt.js +34 -0
  286. package/dist/tempo/stream/Receipt.js.map +1 -0
  287. package/dist/tempo/stream/Sse.d.ts +134 -0
  288. package/dist/tempo/stream/Sse.d.ts.map +1 -0
  289. package/dist/tempo/stream/Sse.js +288 -0
  290. package/dist/tempo/stream/Sse.js.map +1 -0
  291. package/dist/tempo/stream/Types.d.ts +78 -0
  292. package/dist/tempo/stream/Types.d.ts.map +1 -0
  293. package/dist/tempo/stream/Types.js +2 -0
  294. package/dist/tempo/stream/Types.js.map +1 -0
  295. package/dist/tempo/stream/Voucher.d.ts +20 -0
  296. package/dist/tempo/stream/Voucher.d.ts.map +1 -0
  297. package/dist/tempo/stream/Voucher.js +98 -0
  298. package/dist/tempo/stream/Voucher.js.map +1 -0
  299. package/dist/tempo/stream/escrow.abi.d.ts +598 -0
  300. package/dist/tempo/stream/escrow.abi.d.ts.map +1 -0
  301. package/dist/tempo/stream/escrow.abi.js +760 -0
  302. package/dist/tempo/stream/escrow.abi.js.map +1 -0
  303. package/dist/tempo/stream/index.d.ts +8 -0
  304. package/dist/tempo/stream/index.d.ts.map +1 -0
  305. package/dist/tempo/stream/index.js +8 -0
  306. package/dist/tempo/stream/index.js.map +1 -0
  307. package/dist/viem/Account.d.ts +12 -0
  308. package/dist/viem/Account.d.ts.map +1 -0
  309. package/dist/viem/Account.js +14 -0
  310. package/dist/viem/Account.js.map +1 -0
  311. package/dist/viem/Client.d.ts +21 -0
  312. package/dist/viem/Client.d.ts.map +1 -0
  313. package/dist/viem/Client.js +19 -0
  314. package/dist/viem/Client.js.map +1 -0
  315. package/dist/zod.d.ts +17 -0
  316. package/dist/zod.d.ts.map +1 -0
  317. package/dist/zod.js +35 -0
  318. package/dist/zod.js.map +1 -0
  319. package/package.json +117 -4
  320. package/src/BodyDigest.test.ts +43 -0
  321. package/src/BodyDigest.ts +53 -0
  322. package/src/Challenge.test-d.ts +81 -0
  323. package/src/Challenge.test.ts +414 -0
  324. package/src/Challenge.ts +429 -0
  325. package/src/Credential.test.ts +227 -0
  326. package/src/Credential.ts +154 -0
  327. package/src/Errors.test.ts +402 -0
  328. package/src/Errors.ts +348 -0
  329. package/src/Expires.ts +34 -0
  330. package/src/Intent.test.ts +180 -0
  331. package/src/Intent.ts +109 -0
  332. package/src/Mcp.ts +81 -0
  333. package/src/MethodIntent.test.ts +303 -0
  334. package/src/MethodIntent.ts +388 -0
  335. package/src/PaymentRequest.test.ts +152 -0
  336. package/src/PaymentRequest.ts +107 -0
  337. package/src/Receipt.test.ts +98 -0
  338. package/src/Receipt.ts +129 -0
  339. package/src/Store.ts +84 -0
  340. package/src/cli.test.ts +542 -0
  341. package/src/cli.ts +1319 -0
  342. package/src/client/Methods.ts +3 -0
  343. package/src/client/Mppx.test-d.ts +90 -0
  344. package/src/client/Mppx.test.ts +468 -0
  345. package/src/client/Mppx.ts +149 -0
  346. package/src/client/Transport.test.ts +283 -0
  347. package/src/client/Transport.ts +115 -0
  348. package/src/client/index.ts +4 -0
  349. package/src/client/internal/Fetch.test-d.ts +57 -0
  350. package/src/client/internal/Fetch.test.ts +281 -0
  351. package/src/client/internal/Fetch.ts +157 -0
  352. package/src/env.d.ts +11 -0
  353. package/src/index.ts +12 -0
  354. package/src/internal/types.ts +403 -0
  355. package/src/mcp-sdk/client/McpClient.test-d.ts +109 -0
  356. package/src/mcp-sdk/client/McpClient.test.ts +219 -0
  357. package/src/mcp-sdk/client/McpClient.ts +187 -0
  358. package/src/mcp-sdk/client/index.ts +2 -0
  359. package/src/mcp-sdk/server/Transport.ts +94 -0
  360. package/src/mcp-sdk/server/index.ts +1 -0
  361. package/src/middlewares/elysia.ts +66 -0
  362. package/src/middlewares/express.test.ts +155 -0
  363. package/src/middlewares/express.ts +82 -0
  364. package/src/middlewares/hono.test.ts +148 -0
  365. package/src/middlewares/hono.ts +62 -0
  366. package/src/middlewares/internal/mppx.ts +30 -0
  367. package/src/middlewares/nextjs.test.ts +164 -0
  368. package/src/middlewares/nextjs.ts +66 -0
  369. package/src/proxy/Proxy.test.ts +472 -0
  370. package/src/proxy/Proxy.ts +175 -0
  371. package/src/proxy/Service.test.ts +125 -0
  372. package/src/proxy/Service.ts +227 -0
  373. package/src/proxy/index.ts +6 -0
  374. package/src/proxy/internal/Headers.test.ts +100 -0
  375. package/src/proxy/internal/Headers.ts +40 -0
  376. package/src/proxy/internal/Route.test.ts +143 -0
  377. package/src/proxy/internal/Route.ts +54 -0
  378. package/src/proxy/services/anthropic.ts +45 -0
  379. package/src/proxy/services/openai.test.ts +97 -0
  380. package/src/proxy/services/openai.ts +48 -0
  381. package/src/proxy/services/stripe.ts +49 -0
  382. package/src/server/Methods.ts +2 -0
  383. package/src/server/Mppx.test-d.ts +343 -0
  384. package/src/server/Mppx.test.ts +342 -0
  385. package/src/server/Mppx.ts +378 -0
  386. package/src/server/NodeListener.test.ts +188 -0
  387. package/src/server/NodeListener.ts +3 -0
  388. package/src/server/Request.test.ts +102 -0
  389. package/src/server/Request.ts +33 -0
  390. package/src/server/Response.test.ts +31 -0
  391. package/src/server/Response.ts +27 -0
  392. package/src/server/Transport.test.ts +294 -0
  393. package/src/server/Transport.ts +222 -0
  394. package/src/server/index.ts +8 -0
  395. package/src/stripe/Charge.integration.test.ts +326 -0
  396. package/src/stripe/Intents.test.ts +52 -0
  397. package/src/stripe/Intents.ts +27 -0
  398. package/src/stripe/client/Charge.ts +119 -0
  399. package/src/stripe/client/MethodIntents.ts +37 -0
  400. package/src/stripe/client/index.ts +2 -0
  401. package/src/stripe/index.ts +1 -0
  402. package/src/stripe/server/Charge.ts +121 -0
  403. package/src/stripe/server/MethodIntents.ts +24 -0
  404. package/src/stripe/server/index.ts +2 -0
  405. package/src/tempo/Attribution.test.ts +187 -0
  406. package/src/tempo/Attribution.ts +156 -0
  407. package/src/tempo/Intents.test.ts +84 -0
  408. package/src/tempo/Intents.ts +93 -0
  409. package/src/tempo/client/ChannelOps.ts +233 -0
  410. package/src/tempo/client/Charge.ts +84 -0
  411. package/src/tempo/client/MethodIntents.ts +28 -0
  412. package/src/tempo/client/Session.ts +369 -0
  413. package/src/tempo/client/SessionManager.test.ts +223 -0
  414. package/src/tempo/client/SessionManager.ts +270 -0
  415. package/src/tempo/client/index.ts +5 -0
  416. package/src/tempo/index.ts +2 -0
  417. package/src/tempo/internal/account.ts +47 -0
  418. package/src/tempo/internal/defaults.ts +20 -0
  419. package/src/tempo/internal/types.ts +8 -0
  420. package/src/tempo/server/Charge.test.ts +847 -0
  421. package/src/tempo/server/Charge.ts +309 -0
  422. package/src/tempo/server/MethodIntents.ts +29 -0
  423. package/src/tempo/server/Session.test.ts +1349 -0
  424. package/src/tempo/server/Session.ts +773 -0
  425. package/src/tempo/server/Sse.test.ts +289 -0
  426. package/src/tempo/server/index.ts +5 -0
  427. package/src/tempo/server/internal/transport.ts +153 -0
  428. package/src/tempo/stream/Chain.ts +333 -0
  429. package/src/tempo/stream/Channel.ts +50 -0
  430. package/src/tempo/stream/ChannelStore.test.ts +473 -0
  431. package/src/tempo/stream/ChannelStore.ts +202 -0
  432. package/src/tempo/stream/Receipt.test.ts +84 -0
  433. package/src/tempo/stream/Receipt.ts +45 -0
  434. package/src/tempo/stream/Sse.test.ts +401 -0
  435. package/src/tempo/stream/Sse.ts +375 -0
  436. package/src/tempo/stream/Types.ts +86 -0
  437. package/src/tempo/stream/Voucher.test.ts +134 -0
  438. package/src/tempo/stream/Voucher.ts +123 -0
  439. package/src/tempo/stream/escrow.abi.ts +759 -0
  440. package/src/tempo/stream/index.ts +7 -0
  441. package/src/tsconfig.json +10 -0
  442. package/src/viem/Account.test.ts +71 -0
  443. package/src/viem/Account.ts +30 -0
  444. package/src/viem/Client.test.ts +58 -0
  445. package/src/viem/Client.ts +33 -0
  446. package/src/zod.ts +47 -0
@@ -0,0 +1,95 @@
1
+ import * as Challenge from '../../Challenge.js';
2
+ let originalFetch;
3
+ /**
4
+ * Creates a fetch wrapper that automatically handles 402 Payment Required responses.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { Fetch, tempo } from 'mppx/client'
9
+ * import { privateKeyToAccount } from 'viem/accounts'
10
+ *
11
+ * const fetch = Fetch.from({
12
+ * methods: [
13
+ * tempo({
14
+ * account: privateKeyToAccount('0x...'),
15
+ * }),
16
+ * ],
17
+ * })
18
+ *
19
+ * // Use the wrapped fetch — handles 402 automatically
20
+ * const res = await fetch('https://api.example.com/resource')
21
+ * ```
22
+ *
23
+ */
24
+ export function from(config) {
25
+ const { fetch = globalThis.fetch, methods, onChallenge } = config;
26
+ return async (input, init) => {
27
+ const { context, ...fetchInit } = init ?? {};
28
+ const response = await fetch(input, fetchInit);
29
+ if (response.status !== 402)
30
+ return response;
31
+ const challenge = Challenge.fromResponse(response);
32
+ onChallenge?.(challenge);
33
+ const mi = methods.find((m) => m.method === challenge.method && m.name === challenge.intent);
34
+ if (!mi)
35
+ throw new Error(`No method intent found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.method}.${m.name}`).join(', ')}`);
36
+ const credential = await resolveCredential(challenge, mi, context);
37
+ return fetch(input, {
38
+ ...fetchInit,
39
+ headers: {
40
+ ...fetchInit.headers,
41
+ Authorization: credential,
42
+ },
43
+ });
44
+ };
45
+ }
46
+ /**
47
+ * Replaces the global `fetch` with a payment-aware wrapper.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * import { Fetch, tempo } from 'mppx/client'
52
+ * import { privateKeyToAccount } from 'viem/accounts'
53
+ *
54
+ * Fetch.polyfill({
55
+ * methods: [
56
+ * tempo({
57
+ * account: privateKeyToAccount('0x...'),
58
+ * }),
59
+ * ],
60
+ * })
61
+ *
62
+ * // Global fetch now handles 402 automatically
63
+ * const res = await fetch('https://api.example.com/resource')
64
+ * ```
65
+ */
66
+ export function polyfill(config) {
67
+ originalFetch = globalThis.fetch;
68
+ globalThis.fetch = from(config);
69
+ }
70
+ /**
71
+ * Restores the original `fetch` after calling `polyfill`.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { Fetch } from 'mppx/client'
76
+ *
77
+ * Fetch.polyfill({ methods: [...] })
78
+ *
79
+ * // ... use payment-aware fetch ...
80
+ *
81
+ * Fetch.restore()
82
+ * ```
83
+ */
84
+ export function restore() {
85
+ if (originalFetch) {
86
+ globalThis.fetch = originalFetch;
87
+ originalFetch = undefined;
88
+ }
89
+ }
90
+ /** @internal */
91
+ async function resolveCredential(challenge, mi, context) {
92
+ const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined;
93
+ return mi.createCredential(parsedContext !== undefined ? { challenge, context: parsedContext } : { challenge });
94
+ }
95
+ //# sourceMappingURL=Fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAI/C,IAAI,aAAkD,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,IAAI,CAClB,MAA4B;IAE5B,MAAM,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAEjE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAA;QAE5C,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAClD,WAAW,EAAE,CAAC,SAAS,CAAC,CAAA;QAExB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;QAC5F,IAAI,CAAC,EAAE;YACL,MAAM,IAAI,KAAK,CACb,+BAA+B,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7I,CAAA;QAEH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAElE,OAAO,KAAK,CAAC,KAAK,EAAE;YAClB,GAAG,SAAS;YACZ,OAAO,EAAE;gBACP,GAAG,SAAS,CAAC,OAAO;gBACpB,aAAa,EAAE,UAAU;aAC1B;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAgC;IAEhC,aAAa,GAAG,UAAU,CAAC,KAAK,CAAA;IAChC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAA4B,CAAA;AAC5D,CAAC;AAQD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO;IACrB,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAA;QAChC,aAAa,GAAG,SAAS,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,KAAK,UAAU,iBAAiB,CAC9B,SAA8B,EAC9B,EAA0B,EAC1B,OAAgB;IAEhB,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,OAAO,EAAE,CAAC,gBAAgB,CACxB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAE,EAAE,SAAS,EAAY,CAC/F,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
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';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
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';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA"}
@@ -0,0 +1,302 @@
1
+ /** Combines members of an intersection into a readable type. */
2
+ export type Compute<type> = {
3
+ [key in keyof type]: type[key];
4
+ } & unknown;
5
+ declare const symbol: unique symbol;
6
+ /**
7
+ * Creates a branded type of `T` with the brand `U`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * type Result = Branded<string, 'foo'>
12
+ * // ^? type Result = string & { [symbol]: 'foo' }
13
+ * ```
14
+ */
15
+ export type Branded<T, U> = T & {
16
+ [symbol]: U;
17
+ };
18
+ /**
19
+ * Filters out all members of `T` that are not `P`
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * type Result = Filter<['a', 'b', 'c'], 'b'>
24
+ * // ^? type Result = ['a', 'c']
25
+ * ```
26
+ *
27
+ * @internal
28
+ */
29
+ export type Filter<T extends readonly unknown[], P, Acc extends readonly unknown[] = []> = T extends readonly [infer F, ...infer Rest extends readonly unknown[]] ? [F] extends [P] ? Filter<Rest, P, [...Acc, F]> : Filter<Rest, P, Acc> : readonly [...Acc];
30
+ /**
31
+ * Checks if `T` can be narrowed further than `U`
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * type Result = IsNarrowable<'foo', string>
36
+ * // ^? true
37
+ * ```
38
+ */
39
+ export type IsNarrowable<T, U> = IsNever<(T extends U ? true : false) & (U extends T ? false : true)> extends true ? false : true;
40
+ /**
41
+ * Checks if `T` is `never`
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * type Result = IsNever<never>
46
+ * // ^? type Result = true
47
+ * ```
48
+ */
49
+ export type IsNever<T> = [T] extends [never] ? true : false;
50
+ /**
51
+ * Removes `readonly` from all properties of an object.
52
+ *
53
+ * @internal
54
+ */
55
+ export type Mutable<type extends object> = {
56
+ -readonly [key in keyof type]: type[key];
57
+ };
58
+ /**
59
+ * Evaluates boolean "or" condition for `T` properties.
60
+ *
61
+ * * @example
62
+ * ```ts
63
+ * type Result = Or<[false, true, false]>
64
+ * // ^? type Result = true
65
+ * ```
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * type Result = Or<[false, false, false]>
70
+ * // ^? type Result = false
71
+ * ```
72
+ *
73
+ * @internal
74
+ */
75
+ export type Or<T extends readonly unknown[]> = T extends readonly [infer Head, ...infer Tail] ? Head extends true ? true : Or<Tail> : false;
76
+ /**
77
+ * Checks if `T` is `undefined`
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * type Result = IsUndefined<undefined>
82
+ * // ^? type Result = true
83
+ * ```
84
+ *
85
+ * @internal
86
+ */
87
+ export type IsUndefined<T> = [undefined] extends [T] ? true : false;
88
+ /**
89
+ * Checks if type `T` is the `unknown` type.
90
+ *
91
+ * @internal
92
+ */
93
+ export type IsUnknown<T> = unknown extends T ? ([T] extends [null] ? false : true) : false;
94
+ /** @internal */
95
+ export type MaybePromise<T> = T | Promise<T>;
96
+ /**
97
+ * Makes attributes on the type T required if required is true.
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * MaybeRequired<{ a: string, b?: number }, true>
102
+ * // { a: string, b: number }
103
+ *
104
+ * MaybeRequired<{ a: string, b?: number }, false>
105
+ * // { a: string, b?: number }
106
+ * ```
107
+ *
108
+ * @internal
109
+ */
110
+ export type MaybeRequired<T, required extends boolean> = required extends true ? ExactRequired<T> : T;
111
+ /**
112
+ * Assigns the properties of U onto T.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * Assign<{ a: string, b: number }, { a: undefined, c: boolean }>
117
+ * // { a: undefined, b: number, c: boolean }
118
+ * ```
119
+ *
120
+ * @internal
121
+ */
122
+ export type Assign<T, U> = Assign_inner<T, U> & U;
123
+ /** @internal */
124
+ export type Assign_inner<T, U> = {
125
+ [K in keyof T as K extends keyof U ? (U[K] extends void ? never : K) : K]: K extends keyof U ? U[K] : T[K];
126
+ };
127
+ /**
128
+ * Constructs a type by excluding `undefined` from `T`.
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * NoUndefined<string | undefined>
133
+ * // string
134
+ * ```
135
+ *
136
+ * @internal
137
+ */
138
+ export type NoUndefined<T> = T extends undefined ? never : T;
139
+ /**
140
+ * Strict version of built-in Omit type
141
+ *
142
+ * @internal
143
+ */
144
+ export type Omit<type, keys extends keyof type> = Pick<type, Exclude<keyof type, keys>>;
145
+ /**
146
+ * Creates a type that is a partial of T, but with the required keys K.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * PartialBy<{ a: string, b: number }, 'a'>
151
+ * // { a?: string, b: number }
152
+ * ```
153
+ *
154
+ * @internal
155
+ */
156
+ export type PartialBy<T, K extends keyof T> = Omit<T, K> & ExactPartial<Pick<T, K>>;
157
+ export type RecursiveArray<T> = T | readonly RecursiveArray<T>[];
158
+ /**
159
+ * Creates a type that is T with the required keys K.
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * RequiredBy<{ a?: string, b: number }, 'a'>
164
+ * // { a: string, b: number }
165
+ * ```
166
+ *
167
+ * @internal
168
+ */
169
+ export type RequiredBy<T, K extends keyof T> = Omit<T, K> & ExactRequired<Pick<T, K>>;
170
+ /**
171
+ * Returns truthy if `array` contains `value`.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * Some<[1, 2, 3], 2>
176
+ * // true
177
+ * ```
178
+ *
179
+ * @internal
180
+ */
181
+ export type Some<array extends readonly unknown[], value> = array extends readonly [
182
+ value,
183
+ ...unknown[]
184
+ ] ? true : array extends readonly [unknown, ...infer rest] ? Some<rest, value> : false;
185
+ /**
186
+ * Prints custom error message
187
+ *
188
+ * @param messages - Error message
189
+ * @returns Custom error message
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * type Result = TypeErrorMessage<'Custom error message'>
194
+ * // ^? type Result = ['Error: Custom error message']
195
+ * ```
196
+ */
197
+ export type TypeErrorMessage<messages extends string | string[]> = messages extends string ? [
198
+ `Error: ${messages}`
199
+ ] : {
200
+ [key in keyof messages]: messages[key] extends infer message extends string ? `Error: ${message}` : never;
201
+ };
202
+ /** @internal */
203
+ export type UnionToTuple<union, last = LastInUnion<union>> = [union] extends [never] ? [] : [...UnionToTuple<Exclude<union, last>>, last];
204
+ /** @internal */
205
+ export type LastInUnion<U> = UnionToIntersection<U extends unknown ? (x: U) => 0 : never> extends (x: infer l) => 0 ? l : never;
206
+ /** @internal */
207
+ export type UnionToIntersection<union> = (union extends unknown ? (arg: union) => 0 : never) extends (arg: infer i) => 0 ? i : never;
208
+ /** @internal */
209
+ export type IsUnion<union, union2 = union> = union extends union2 ? ([union2] extends [union] ? false : true) : never;
210
+ /** @internal */
211
+ export type MaybePartial<type, enabled extends boolean | undefined> = enabled extends true ? Compute<ExactPartial<type>> : type;
212
+ export type ExactPartial<type> = {
213
+ [key in keyof type]?: type[key] | undefined;
214
+ };
215
+ /** @internal */
216
+ export type ExactRequired<type> = {
217
+ [key in keyof type]-?: Exclude<type[key], undefined>;
218
+ };
219
+ export type OneOf<union extends object, fallback extends object | undefined = undefined, keys extends KeyofUnion<union> = KeyofUnion<union>> = union extends infer item ? Compute<item & {
220
+ [key in Exclude<keys, keyof item>]?: fallback extends object ? key extends keyof fallback ? fallback[key] : undefined : undefined;
221
+ }> : never;
222
+ /** @internal */
223
+ export type KeyofUnion<type> = type extends type ? keyof type : never;
224
+ /** @internal */
225
+ export type Undefined<type> = {
226
+ [key in keyof type]?: undefined;
227
+ };
228
+ /**
229
+ * Loose version of {@link Omit}
230
+ * @internal
231
+ */
232
+ export type LooseOmit<type, keys extends string> = Pick<type, Exclude<keyof type, keys>>;
233
+ /** @internal */
234
+ export type UnionCompute<type> = type extends object ? Compute<type> : type;
235
+ /** @internal */
236
+ export type UnionLooseOmit<type, keys extends string> = type extends any ? LooseOmit<type, keys> : never;
237
+ /**
238
+ * Construct a type with the properties of union type T except for those in type K.
239
+ * @example
240
+ * ```ts
241
+ * type Result = UnionOmit<{ a: string, b: number } | { a: string, b: undefined, c: number }, 'a'>
242
+ * // { b: number } | { b: undefined, c: number }
243
+ * ```
244
+ *
245
+ * @internal
246
+ */
247
+ export type UnionOmit<type, keys extends keyof type> = type extends any ? Omit<type, keys> : never;
248
+ /**
249
+ * Construct a type with the properties of union type T except for those in type K.
250
+ * @example
251
+ * ```ts
252
+ * type Result = UnionOmit<{ a: string, b: number } | { a: string, b: undefined, c: number }, 'a'>
253
+ * // { b: number } | { b: undefined, c: number }
254
+ * ```
255
+ *
256
+ * @internal
257
+ */
258
+ export type UnionPick<type, keys extends keyof type> = type extends any ? Pick<type, keys> : never;
259
+ /**
260
+ * Creates a type that is a partial of T, but with the required keys K.
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * PartialBy<{ a: string, b: number } | { a: string, b: undefined, c: number }, 'a'>
265
+ * // { a?: string, b: number } | { a?: string, b: undefined, c: number }
266
+ * ```
267
+ *
268
+ * @internal
269
+ */
270
+ export type UnionPartialBy<T, K extends keyof T> = T extends any ? PartialBy<T, K> : never;
271
+ /**
272
+ * Creates a type that is T with the required keys K.
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * RequiredBy<{ a?: string, b: number } | { a?: string, c?: number }, 'a'>
277
+ * // { a: string, b: number } | { a: string, c?: number }
278
+ * ```
279
+ *
280
+ * @internal
281
+ */
282
+ export type UnionRequiredBy<T, K extends keyof T> = T extends any ? RequiredBy<T, K> : never;
283
+ /**
284
+ * Merges two object types, creating a union for overlapping properties.
285
+ *
286
+ * @example
287
+ * ```ts
288
+ * type Result = UnionMerge<{ a: string, b: number }, { b: boolean, c: string }>
289
+ * // { a: string, b: number | boolean, c: string }
290
+ * ```
291
+ *
292
+ * @internal
293
+ */
294
+ export type UnionMerge<A, B> = [keyof B] extends [never] ? A : LooseOmit<A, keyof B & string> & {
295
+ [K in keyof B]: K extends keyof A ? A[K] | B[K] : B[K];
296
+ };
297
+ /** @internal Distributes union `U` into per-member function overloads returning `R`. */
298
+ export type Distribute<U, R> = U extends infer member ? (response: member) => R : never;
299
+ /** @internal */
300
+ export type Flatten<element> = element extends readonly (infer item)[] ? item : element;
301
+ export {};
302
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import type { McpError } from '@modelcontextprotocol/sdk/types.js';
3
+ import type * as Challenge from '../../Challenge.js';
4
+ import * as core_Mcp from '../../Mcp.js';
5
+ import type * as MethodIntent from '../../MethodIntent.js';
6
+ import type * as z from '../../zod.js';
7
+ type AnyClient = MethodIntent.Client<any, any>;
8
+ /**
9
+ * Result of a tool call with payment handling.
10
+ * Extends the SDK's callTool return type with an optional payment receipt.
11
+ */
12
+ export type CallToolResult = Awaited<ReturnType<Client['callTool']>> & {
13
+ /** Payment receipt if payment was made. */
14
+ receipt: core_Mcp.Receipt | undefined;
15
+ };
16
+ /**
17
+ * Creates a payment-aware wrapper around an MCP SDK client.
18
+ *
19
+ * Similar to `Fetch.from()` for HTTP, this wraps an MCP client's `callTool`
20
+ * method to automatically handle payment challenges.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Client } from '@modelcontextprotocol/sdk/client'
25
+ * import { McpClient, tempo } from 'mppx/mcp-sdk/client'
26
+ * import { privateKeyToAccount } from 'viem/accounts'
27
+ *
28
+ * const client = new Client({ name: 'my-client', version: '1.0.0' })
29
+ * await client.connect(transport)
30
+ *
31
+ * const mcp = McpClient.wrap(client, {
32
+ * methods: [
33
+ * tempo({
34
+ * account: privateKeyToAccount('0x...'),
35
+ * }),
36
+ * ],
37
+ * })
38
+ *
39
+ * // Automatically handles payment challenges
40
+ * const result = await mcp.callTool({ name: 'premium_tool', arguments: {} })
41
+ * console.log(result.content, result.receipt)
42
+ * ```
43
+ */
44
+ export declare function wrap<const client extends Pick<Client, 'callTool'>, const methods extends readonly MethodIntent.AnyClient[]>(client: client, config: wrap.Config<methods>): wrap.McpClient<client, methods>;
45
+ /** Union of all context types from all methods that have context schemas. */
46
+ type AnyContextFor<methods extends readonly AnyClient[]> = {
47
+ [key in keyof methods]: methods[key] extends MethodIntent.Client<any, infer context> ? context extends z.ZodMiniType ? z.input<context> : undefined : undefined;
48
+ }[number];
49
+ export declare namespace wrap {
50
+ type Config<methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[]> = {
51
+ /** Array of method intents to use. */
52
+ methods: methods;
53
+ };
54
+ type McpClient<client extends Pick<Client, 'callTool'> = Pick<Client, 'callTool'>, methods extends readonly AnyClient[] = readonly AnyClient[]> = Omit<client, 'callTool'> & {
55
+ /** Call a tool with automatic payment handling. */
56
+ callTool: (params: {
57
+ name: string;
58
+ arguments?: Record<string, unknown>;
59
+ _meta?: Record<string, unknown>;
60
+ }, options?: CallToolOptions<methods>) => Promise<CallToolResult>;
61
+ };
62
+ type CallToolOptions<methods extends readonly AnyClient[] = readonly AnyClient[]> = {
63
+ /** Context to pass to the method intent's createCredential. */
64
+ context?: AnyContextFor<methods>;
65
+ /** Request timeout in milliseconds. */
66
+ timeout?: number;
67
+ };
68
+ }
69
+ /**
70
+ * Checks if an error is a payment required error.
71
+ */
72
+ export declare function isPaymentRequiredError(error: unknown): error is McpError & {
73
+ data: {
74
+ challenges: Challenge.Challenge[];
75
+ };
76
+ };
77
+ export {};
78
+ //# sourceMappingURL=McpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClient.d.ts","sourceRoot":"","sources":["../../../src/mcp-sdk/client/McpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import * as Credential from '../../Credential.js';
2
+ import * as core_Mcp from '../../Mcp.js';
3
+ /**
4
+ * Creates a payment-aware wrapper around an MCP SDK client.
5
+ *
6
+ * Similar to `Fetch.from()` for HTTP, this wraps an MCP client's `callTool`
7
+ * method to automatically handle payment challenges.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { Client } from '@modelcontextprotocol/sdk/client'
12
+ * import { McpClient, tempo } from 'mppx/mcp-sdk/client'
13
+ * import { privateKeyToAccount } from 'viem/accounts'
14
+ *
15
+ * const client = new Client({ name: 'my-client', version: '1.0.0' })
16
+ * await client.connect(transport)
17
+ *
18
+ * const mcp = McpClient.wrap(client, {
19
+ * methods: [
20
+ * tempo({
21
+ * account: privateKeyToAccount('0x...'),
22
+ * }),
23
+ * ],
24
+ * })
25
+ *
26
+ * // Automatically handles payment challenges
27
+ * const result = await mcp.callTool({ name: 'premium_tool', arguments: {} })
28
+ * console.log(result.content, result.receipt)
29
+ * ```
30
+ */
31
+ export function wrap(client, config) {
32
+ const { methods } = config;
33
+ return {
34
+ ...client,
35
+ async callTool(params, options) {
36
+ const context = options?.context;
37
+ const timeout = options?.timeout;
38
+ try {
39
+ const result = await client.callTool(params, undefined, timeout !== undefined ? { timeout } : undefined);
40
+ return {
41
+ ...result,
42
+ receipt: result._meta?.[core_Mcp.receiptMetaKey],
43
+ };
44
+ }
45
+ catch (error) {
46
+ // Check if this is a payment required error
47
+ if (!isPaymentRequiredError(error))
48
+ throw error;
49
+ const challenges = error.data?.challenges;
50
+ if (!challenges?.length)
51
+ throw error;
52
+ // Select first challenge that matches an installed method intent
53
+ const challenge = challenges.find((c) => methods.some((m) => m.method === c.method && m.name === c.intent));
54
+ if (!challenge) {
55
+ const available = challenges.map((c) => `${c.method}.${c.intent}`).join(', ');
56
+ const installed = methods.map((m) => `${m.method}.${m.name}`).join(', ');
57
+ throw new Error(`No compatible payment method. Server offers: ${available}. Client has: ${installed}`);
58
+ }
59
+ const credential = await createCredential(challenge, { context, methods });
60
+ const parsed = Credential.deserialize(credential);
61
+ const retryResult = await client.callTool({
62
+ ...params,
63
+ _meta: {
64
+ ...params._meta,
65
+ [core_Mcp.credentialMetaKey]: parsed,
66
+ },
67
+ }, undefined, timeout !== undefined ? { timeout } : undefined);
68
+ return {
69
+ ...retryResult,
70
+ receipt: retryResult._meta?.[core_Mcp.receiptMetaKey],
71
+ };
72
+ }
73
+ },
74
+ };
75
+ }
76
+ /**
77
+ * Checks if an error is a payment required error.
78
+ */
79
+ export function isPaymentRequiredError(error) {
80
+ if (typeof error !== 'object' || error === null)
81
+ return false;
82
+ if (!('code' in error) || !('message' in error))
83
+ return false;
84
+ if (error.code !== core_Mcp.paymentRequiredCode)
85
+ return false;
86
+ const data = error.data;
87
+ return Array.isArray(data?.challenges) && data.challenges.length > 0;
88
+ }
89
+ /** @internal */
90
+ async function createCredential(challenge, config) {
91
+ const { context, methods } = config;
92
+ const mi = methods.find((m) => m.method === challenge.method && m.name === challenge.intent);
93
+ if (!mi)
94
+ throw new Error(`No method intent found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.method}.${m.name}`).join(', ')}`);
95
+ const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined;
96
+ return mi.createCredential(parsedContext !== undefined ? { challenge, context: parsedContext } : { challenge });
97
+ }
98
+ //# sourceMappingURL=McpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClient.js","sourceRoot":"","sources":["../../../src/mcp-sdk/client/McpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * as tempo from '../../tempo/client/index.js';
2
+ export * as McpClient from './McpClient.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-sdk/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,6BAA6B,CAAA;AACpD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * as tempo from '../../tempo/client/index.js';
2
+ export * as McpClient from './McpClient.js';
3
+ //# sourceMappingURL=index.js.map