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 @@
1
+ {"version":3,"file":"index.js","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,43 @@
1
+ import type { CallToolResult, McpError } from '@modelcontextprotocol/sdk/types.js';
2
+ import type * as Credential from '../../Credential.js';
3
+ import * as core_Mcp from '../../Mcp.js';
4
+ import * as Transport from '../../server/Transport.js';
5
+ /**
6
+ * MCP SDK tool handler "extra" parameter.
7
+ * Compatible with `@modelcontextprotocol/sdk` RequestHandlerExtra.
8
+ */
9
+ export type Extra = {
10
+ _meta?: {
11
+ [core_Mcp.credentialMetaKey]?: Credential.Credential;
12
+ [key: string]: unknown;
13
+ } | undefined;
14
+ [key: string]: unknown;
15
+ };
16
+ export type McpSdk = Transport.Transport<Extra, McpError, CallToolResult>;
17
+ /**
18
+ * MCP SDK transport for server-side payment handling with `@modelcontextprotocol/sdk`.
19
+ *
20
+ * - Reads credentials from `_meta["org.paymentauth/credential"]`
21
+ * - Issues challenges as `McpError` with code `-32042` and challenge in `error.data`
22
+ * - Attaches receipts via `_meta["org.paymentauth/receipt"]` on tool results
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp'
27
+ * import { Mppx, Transport } from 'mppx/server'
28
+ *
29
+ * const payment = Mppx.create({
30
+ * method: tempo(),
31
+ * secretKey: process.env.SECRET_KEY,
32
+ * transport: Transport.mcpSdk(),
33
+ * })
34
+ *
35
+ * server.registerTool('premium', { description: '...' }, async (extra) => {
36
+ * const result = await payment.charge({ request: { ... } })(extra)
37
+ * if (result.status === 402) throw result.challenge
38
+ * return result.withReceipt({ content: [...] })
39
+ * })
40
+ * ```
41
+ */
42
+ export declare function mcpSdk(): McpSdk;
43
+ //# sourceMappingURL=Transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../../src/mcp-sdk/server/Transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAClF,OAAO,KAAK,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AAEtD;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,CAAC,EACF;QACE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAA;QACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,GACD,SAAS,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,IAAI,MAAM,CA+C/B"}
@@ -0,0 +1,71 @@
1
+ import * as core_Mcp from '../../Mcp.js';
2
+ import * as Transport from '../../server/Transport.js';
3
+ /**
4
+ * MCP SDK transport for server-side payment handling with `@modelcontextprotocol/sdk`.
5
+ *
6
+ * - Reads credentials from `_meta["org.paymentauth/credential"]`
7
+ * - Issues challenges as `McpError` with code `-32042` and challenge in `error.data`
8
+ * - Attaches receipts via `_meta["org.paymentauth/receipt"]` on tool results
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp'
13
+ * import { Mppx, Transport } from 'mppx/server'
14
+ *
15
+ * const payment = Mppx.create({
16
+ * method: tempo(),
17
+ * secretKey: process.env.SECRET_KEY,
18
+ * transport: Transport.mcpSdk(),
19
+ * })
20
+ *
21
+ * server.registerTool('premium', { description: '...' }, async (extra) => {
22
+ * const result = await payment.charge({ request: { ... } })(extra)
23
+ * if (result.status === 402) throw result.challenge
24
+ * return result.withReceipt({ content: [...] })
25
+ * })
26
+ * ```
27
+ */
28
+ export function mcpSdk() {
29
+ let McpErrorClass;
30
+ return Transport.from({
31
+ name: 'mcp-sdk',
32
+ getCredential(extra) {
33
+ const credential = extra._meta?.[core_Mcp.credentialMetaKey];
34
+ if (!credential)
35
+ return null;
36
+ return credential;
37
+ },
38
+ async respondChallenge({ challenge, error }) {
39
+ if (!McpErrorClass) {
40
+ try {
41
+ const mod = await import('@modelcontextprotocol/sdk/types.js');
42
+ McpErrorClass = mod.McpError;
43
+ }
44
+ catch (error) {
45
+ const err = new Error('Missing optional dependency "@modelcontextprotocol/sdk". Install it to use mppx MCP SDK transports.');
46
+ err.cause = error;
47
+ throw err;
48
+ }
49
+ }
50
+ return new McpErrorClass(core_Mcp.paymentRequiredCode, error?.message ?? 'Payment Required', {
51
+ httpStatus: 402,
52
+ challenges: [challenge],
53
+ ...(error && { problem: error.toProblemDetails(challenge.id) }),
54
+ });
55
+ },
56
+ respondReceipt({ receipt, response, challengeId }) {
57
+ const mcpReceipt = {
58
+ ...receipt,
59
+ challengeId,
60
+ };
61
+ return {
62
+ ...response,
63
+ _meta: {
64
+ ...response._meta,
65
+ [core_Mcp.receiptMetaKey]: mcpReceipt,
66
+ },
67
+ };
68
+ },
69
+ });
70
+ }
71
+ //# sourceMappingURL=Transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transport.js","sourceRoot":"","sources":["../../../src/mcp-sdk/server/Transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AAkBtD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,MAAM;IACpB,IAAI,aAA0C,CAAA;IAE9C,OAAO,SAAS,CAAC,IAAI,CAAkC;QACrD,IAAI,EAAE,SAAS;QAEf,aAAa,CAAC,KAAK;YACjB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YAC5D,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAC5B,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;YACzC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAA;oBAC9D,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAA;gBAC9B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,qGAAqG,CACtG,CACA;oBAAC,GAAmC,CAAC,KAAK,GAAG,KAAK,CAAA;oBACnD,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC;YACD,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,IAAI,kBAAkB,EAAE;gBAC3F,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,CAAC,SAAS,CAAC;gBACvB,GAAG,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;aAChE,CAAC,CAAA;QACJ,CAAC;QAED,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;YAC/C,MAAM,UAAU,GAAqB;gBACnC,GAAG,OAAO;gBACV,WAAW;aACZ,CAAA;YAED,OAAO;gBACL,GAAG,QAAQ;gBACX,KAAK,EAAE;oBACL,GAAG,QAAQ,CAAC,KAAK;oBACjB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU;iBACtC;aACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * as Transport from './Transport.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-sdk/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * as Transport from './Transport.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-sdk/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,51 @@
1
+ import type { Context } from 'elysia';
2
+ import * as Mppx_core from '../server/Mppx.js';
3
+ import * as Mppx_internal from './internal/mppx.js';
4
+ export * from '../server/Methods.js';
5
+ type ElysiaHook = (context: Context) => Promise<Response | undefined>;
6
+ export declare namespace Mppx {
7
+ /**
8
+ * Creates an Elysia-aware payment handler where each intent
9
+ * returns an Elysia `beforeHandle` hook.
10
+ *
11
+ * Use with `.guard()` to scope payment to specific routes,
12
+ * or `.onBeforeHandle()` to apply globally.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { Elysia } from 'elysia'
17
+ * import { Mppx, tempo } from 'mppx/elysia'
18
+ *
19
+ * const mppx = Mppx.create({ methods: [tempo()] })
20
+ *
21
+ * const app = new Elysia()
22
+ * .guard(
23
+ * { beforeHandle: mppx.charge({ amount: '1' }) },
24
+ * (app) => app.get('/premium', () => ({ data: 'paid content' })),
25
+ * )
26
+ * ```
27
+ */
28
+ function create<const methods extends Mppx_core.Methods>(config: Mppx_core.create.Config<methods>): Mppx_internal.Wrap<Mppx_core.Mppx<methods>, ElysiaHook>;
29
+ }
30
+ /**
31
+ * Elysia `beforeHandle` hook that gates a route behind a payment intent.
32
+ *
33
+ * Returns a 402 challenge if no valid credential is provided.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { Elysia } from 'elysia'
38
+ * import { Mppx } from 'mppx/server'
39
+ * import { payment } from 'mppx/elysia'
40
+ *
41
+ * const mppx = Mppx.create({ methods: [tempo()] })
42
+ *
43
+ * const app = new Elysia()
44
+ * .guard(
45
+ * { beforeHandle: payment(mppx.charge, { amount: '1' }) },
46
+ * (app) => app.get('/premium', () => ({ data: 'paid content' })),
47
+ * )
48
+ * ```
49
+ */
50
+ export declare function payment<const intent extends Mppx_internal.AnyIntentFn>(intent: intent, options: intent extends (options: infer options) => any ? options : never): ElysiaHook;
51
+ //# sourceMappingURL=elysia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.d.ts","sourceRoot":"","sources":["../../src/middlewares/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;AAErE,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAEzD;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,GACxE,UAAU,CAKZ"}
@@ -0,0 +1,59 @@
1
+ import * as Mppx_core from '../server/Mppx.js';
2
+ import * as Mppx_internal from './internal/mppx.js';
3
+ export * from '../server/Methods.js';
4
+ export var Mppx;
5
+ (function (Mppx) {
6
+ /**
7
+ * Creates an Elysia-aware payment handler where each intent
8
+ * returns an Elysia `beforeHandle` hook.
9
+ *
10
+ * Use with `.guard()` to scope payment to specific routes,
11
+ * or `.onBeforeHandle()` to apply globally.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { Elysia } from 'elysia'
16
+ * import { Mppx, tempo } from 'mppx/elysia'
17
+ *
18
+ * const mppx = Mppx.create({ methods: [tempo()] })
19
+ *
20
+ * const app = new Elysia()
21
+ * .guard(
22
+ * { beforeHandle: mppx.charge({ amount: '1' }) },
23
+ * (app) => app.get('/premium', () => ({ data: 'paid content' })),
24
+ * )
25
+ * ```
26
+ */
27
+ function create(config) {
28
+ return Mppx_internal.wrap(Mppx_core.create(config), payment);
29
+ }
30
+ Mppx.create = create;
31
+ })(Mppx || (Mppx = {}));
32
+ /**
33
+ * Elysia `beforeHandle` hook that gates a route behind a payment intent.
34
+ *
35
+ * Returns a 402 challenge if no valid credential is provided.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import { Elysia } from 'elysia'
40
+ * import { Mppx } from 'mppx/server'
41
+ * import { payment } from 'mppx/elysia'
42
+ *
43
+ * const mppx = Mppx.create({ methods: [tempo()] })
44
+ *
45
+ * const app = new Elysia()
46
+ * .guard(
47
+ * { beforeHandle: payment(mppx.charge, { amount: '1' }) },
48
+ * (app) => app.get('/premium', () => ({ data: 'paid content' })),
49
+ * )
50
+ * ```
51
+ */
52
+ export function payment(intent, options) {
53
+ return async ({ request }) => {
54
+ const result = await intent(options)(request);
55
+ if (result.status === 402)
56
+ return result.challenge;
57
+ };
58
+ }
59
+ //# sourceMappingURL=elysia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../src/middlewares/elysia.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAIpC,MAAM,KAAW,IAAI,CA2BpB;AA3BD,WAAiB,IAAI;IACnB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,MAAM,CACpB,MAAwC;QAExC,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAJe,WAAM,SAIrB,CAAA;AACH,CAAC,EA3BgB,IAAI,KAAJ,IAAI,QA2BpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,OAAyE;IAEzE,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,SAAS,CAAA;IACpD,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { RequestHandler } from 'express';
2
+ import * as Mppx_core from '../server/Mppx.js';
3
+ import * as Mppx_internal from './internal/mppx.js';
4
+ export * from '../server/Methods.js';
5
+ export declare namespace Mppx {
6
+ /**
7
+ * Creates an Express-aware payment handler where each intent
8
+ * returns an Express `RequestHandler`.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import express from 'express'
13
+ * import { Mppx, tempo } from 'mppx/express'
14
+ *
15
+ * const app = express()
16
+ * const mppx = Mppx.create({ methods: [tempo()] })
17
+ *
18
+ * app.get('/premium', mppx.charge({ amount: '1' }), (req, res) => {
19
+ * res.json({ data: 'paid content' })
20
+ * })
21
+ * ```
22
+ */
23
+ function create<const methods extends Mppx_core.Methods>(config: Mppx_core.create.Config<methods>): Mppx_internal.Wrap<Mppx_core.Mppx<methods>, RequestHandler>;
24
+ }
25
+ /**
26
+ * Express middleware that gates a route behind a payment intent.
27
+ *
28
+ * Returns a 402 challenge if no valid credential is provided,
29
+ * otherwise attaches a `Payment-Receipt` header to the response.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import express from 'express'
34
+ * import { Mppx } from 'mppx/server'
35
+ * import { payment } from 'mppx/express'
36
+ *
37
+ * const mppx = Mppx.create({ methods: [tempo()] })
38
+ *
39
+ * const app = express()
40
+ * app.get('/premium', payment(mppx.charge, { amount: '1' }), (req, res) => {
41
+ * res.json({ data: 'paid content' })
42
+ * })
43
+ * ```
44
+ */
45
+ export declare function payment<const intent extends Mppx_internal.AnyIntentFn>(intent: intent, options: intent extends (options: infer options) => any ? options : never): RequestHandler;
46
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/middlewares/express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,cAAc,EACf,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAE7D;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,GACxE,cAAc,CAqBhB"}
@@ -0,0 +1,69 @@
1
+ import * as Mppx_core from '../server/Mppx.js';
2
+ import * as Request from '../server/Request.js';
3
+ import * as Mppx_internal from './internal/mppx.js';
4
+ export * from '../server/Methods.js';
5
+ export var Mppx;
6
+ (function (Mppx) {
7
+ /**
8
+ * Creates an Express-aware payment handler where each intent
9
+ * returns an Express `RequestHandler`.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import express from 'express'
14
+ * import { Mppx, tempo } from 'mppx/express'
15
+ *
16
+ * const app = express()
17
+ * const mppx = Mppx.create({ methods: [tempo()] })
18
+ *
19
+ * app.get('/premium', mppx.charge({ amount: '1' }), (req, res) => {
20
+ * res.json({ data: 'paid content' })
21
+ * })
22
+ * ```
23
+ */
24
+ function create(config) {
25
+ return Mppx_internal.wrap(Mppx_core.create(config), payment);
26
+ }
27
+ Mppx.create = create;
28
+ })(Mppx || (Mppx = {}));
29
+ /**
30
+ * Express middleware that gates a route behind a payment intent.
31
+ *
32
+ * Returns a 402 challenge if no valid credential is provided,
33
+ * otherwise attaches a `Payment-Receipt` header to the response.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import express from 'express'
38
+ * import { Mppx } from 'mppx/server'
39
+ * import { payment } from 'mppx/express'
40
+ *
41
+ * const mppx = Mppx.create({ methods: [tempo()] })
42
+ *
43
+ * const app = express()
44
+ * app.get('/premium', payment(mppx.charge, { amount: '1' }), (req, res) => {
45
+ * res.json({ data: 'paid content' })
46
+ * })
47
+ * ```
48
+ */
49
+ export function payment(intent, options) {
50
+ return async (req, res, next) => {
51
+ const result = await intent(options)(Request.fromNodeListener(req, res));
52
+ if (result.status === 402) {
53
+ const challenge = result.challenge;
54
+ res.status(challenge.status);
55
+ for (const [key, value] of challenge.headers)
56
+ res.setHeader(key, value);
57
+ res.send(await challenge.text());
58
+ return;
59
+ }
60
+ const originalJson = res.json.bind(res);
61
+ res.json = (body) => {
62
+ const wrapped = result.withReceipt(Response.json(body));
63
+ res.setHeader('Payment-Receipt', wrapped.headers.get('Payment-Receipt'));
64
+ return originalJson(body);
65
+ };
66
+ next();
67
+ };
68
+ }
69
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middlewares/express.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,MAAM,KAAW,IAAI,CAuBpB;AAvBD,WAAiB,IAAI;IACnB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CACpB,MAAwC;QAExC,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAJe,WAAM,SAIrB,CAAA;AACH,CAAC,EAvBgB,IAAI,KAAJ,IAAI,QAuBpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,OAAyE;IAEzE,OAAO,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;QAC7E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAExE,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAqB,CAAA;YAC9C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO;gBAAE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACvE,GAAG,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAS,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACvD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAE,CAAC,CAAA;YACzE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import * as Mppx_core from '../server/Mppx.js';
3
+ import * as Mppx_internal from './internal/mppx.js';
4
+ export * from '../server/Methods.js';
5
+ export declare namespace Mppx {
6
+ /**
7
+ * Creates a Hono-aware payment handler where each intent
8
+ * returns a Hono `MiddlewareHandler`.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { Hono } from 'hono'
13
+ * import { Mppx, tempo } from 'mppx/hono'
14
+ *
15
+ * const app = new Hono()
16
+ * const mppx = Mppx.create({ methods: [tempo()] })
17
+ *
18
+ * app.get('/premium', mppx.charge({ amount: '1' }), (c) =>
19
+ * c.json({ data: 'paid content' }),
20
+ * )
21
+ * ```
22
+ */
23
+ function create<const methods extends Mppx_core.Methods>(config: Mppx_core.create.Config<methods>): Mppx_internal.Wrap<Mppx_core.Mppx<methods>, MiddlewareHandler>;
24
+ }
25
+ /**
26
+ * Hono middleware that gates a route behind a payment intent.
27
+ *
28
+ * Returns a 402 challenge if no valid credential is provided,
29
+ * otherwise attaches a `Payment-Receipt` header to the response.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { Hono } from 'hono'
34
+ * import { Mppx } from 'mppx/server'
35
+ * import { payment } from 'mppx/hono'
36
+ *
37
+ * const mppx = Mppx.create({ methods: [tempo()] })
38
+ *
39
+ * const app = new Hono()
40
+ * app.get('/premium', payment(mppx.charge, { amount: '1' }), (c) =>
41
+ * c.json({ data: 'paid content' }),
42
+ * )
43
+ * ```
44
+ */
45
+ export declare function payment<const intent extends Mppx_internal.AnyIntentFn>(intent: intent, options: intent extends (options: infer options) => any ? options : never): MiddlewareHandler;
46
+ //# sourceMappingURL=hono.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/middlewares/hono.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAEhE;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,GACxE,iBAAiB,CAOnB"}
@@ -0,0 +1,57 @@
1
+ import * as Mppx_core from '../server/Mppx.js';
2
+ import * as Mppx_internal from './internal/mppx.js';
3
+ export * from '../server/Methods.js';
4
+ export var Mppx;
5
+ (function (Mppx) {
6
+ /**
7
+ * Creates a Hono-aware payment handler where each intent
8
+ * returns a Hono `MiddlewareHandler`.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { Hono } from 'hono'
13
+ * import { Mppx, tempo } from 'mppx/hono'
14
+ *
15
+ * const app = new Hono()
16
+ * const mppx = Mppx.create({ methods: [tempo()] })
17
+ *
18
+ * app.get('/premium', mppx.charge({ amount: '1' }), (c) =>
19
+ * c.json({ data: 'paid content' }),
20
+ * )
21
+ * ```
22
+ */
23
+ function create(config) {
24
+ return Mppx_internal.wrap(Mppx_core.create(config), payment);
25
+ }
26
+ Mppx.create = create;
27
+ })(Mppx || (Mppx = {}));
28
+ /**
29
+ * Hono middleware that gates a route behind a payment intent.
30
+ *
31
+ * Returns a 402 challenge if no valid credential is provided,
32
+ * otherwise attaches a `Payment-Receipt` header to the response.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { Hono } from 'hono'
37
+ * import { Mppx } from 'mppx/server'
38
+ * import { payment } from 'mppx/hono'
39
+ *
40
+ * const mppx = Mppx.create({ methods: [tempo()] })
41
+ *
42
+ * const app = new Hono()
43
+ * app.get('/premium', payment(mppx.charge, { amount: '1' }), (c) =>
44
+ * c.json({ data: 'paid content' }),
45
+ * )
46
+ * ```
47
+ */
48
+ export function payment(intent, options) {
49
+ return async (c, next) => {
50
+ const result = await intent(options)(c.req.raw);
51
+ if (result.status === 402)
52
+ return result.challenge;
53
+ await next();
54
+ c.res = result.withReceipt(c.res);
55
+ };
56
+ }
57
+ //# sourceMappingURL=hono.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/middlewares/hono.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,MAAM,KAAW,IAAI,CAuBpB;AAvBD,WAAiB,IAAI;IACnB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CACpB,MAAwC;QAExC,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAJe,WAAM,SAIrB,CAAA;AACH,CAAC,EAvBgB,IAAI,KAAJ,IAAI,QAuBpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,OAAyE;IAEzE,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC,SAAS,CAAA;QAClD,MAAM,IAAI,EAAE,CAAA;QACZ,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type * as MethodIntent from '../../MethodIntent.js';
2
+ import type * as Mppx from '../../server/Mppx.js';
3
+ export type AnyIntentFn = Mppx.AnyIntentFn;
4
+ export type AnyServer = MethodIntent.AnyServer;
5
+ export type Wrap<mppx, handler> = {
6
+ [key in keyof mppx]: mppx[key] extends (options: infer options) => any ? (o: options) => handler : mppx[key];
7
+ };
8
+ /**
9
+ * Wraps a payment handler so each intent returns a framework-specific
10
+ * handler instead of the raw intent response.
11
+ *
12
+ * @param mppx - The payment handler created by `Mppx.create`.
13
+ * @param wrapper - A function that adapts an intent function into a framework handler.
14
+ */
15
+ export declare function wrap<mppx extends Mppx.Mppx<any, any>, handler>(mppx: mppx, wrapper: (intent: AnyIntentFn, options: any) => handler): Wrap<mppx, handler>;
16
+ //# sourceMappingURL=mppx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mppx.d.ts","sourceRoot":"","sources":["../../../src/middlewares/internal/mppx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,YAAY,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,KAAK,IAAI,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;AAC1C,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;AAE9C,MAAM,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI;KAC/B,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAClE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,GACvB,IAAI,CAAC,GAAG,CAAC;CACd,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAC5D,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,GACtD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAOrB"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Wraps a payment handler so each intent returns a framework-specific
3
+ * handler instead of the raw intent response.
4
+ *
5
+ * @param mppx - The payment handler created by `Mppx.create`.
6
+ * @param wrapper - A function that adapts an intent function into a framework handler.
7
+ */
8
+ export function wrap(mppx, wrapper) {
9
+ const result = { ...mppx };
10
+ for (const mi of mppx.methods) {
11
+ const intentFn = mppx[mi.name];
12
+ result[mi.name] = (options) => wrapper(intentFn, options);
13
+ }
14
+ return result;
15
+ }
16
+ //# sourceMappingURL=mppx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mppx.js","sourceRoot":"","sources":["../../../src/middlewares/internal/mppx.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAClB,IAAU,EACV,OAAuD;IAEvD,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAA;IACnD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAA4C,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAI,IAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,MAAe,CAAA;AACxB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import * as Mppx_core from '../server/Mppx.js';
2
+ import * as Mppx_internal from './internal/mppx.js';
3
+ export * from '../server/Methods.js';
4
+ type RouteHandler = (request: Request) => Promise<Response> | Response;
5
+ type NextjsHandler = (handler: RouteHandler) => RouteHandler;
6
+ export declare namespace Mppx {
7
+ /**
8
+ * Creates a Next.js-aware payment handler where each intent
9
+ * returns a wrapper that accepts a route handler.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // app/api/premium/route.ts
14
+ * import { Mppx, tempo } from 'mppx/nextjs'
15
+ *
16
+ * const mppx = Mppx.create({ methods: [tempo()] })
17
+ *
18
+ * export const GET = mppx.charge({ amount: '1' })(() =>
19
+ * Response.json({ data: 'paid content' }),
20
+ * )
21
+ * ```
22
+ */
23
+ function create<const methods extends Mppx_core.Methods>(config: Mppx_core.create.Config<methods>): Mppx_internal.Wrap<Mppx_core.Mppx<methods>, NextjsHandler>;
24
+ }
25
+ /**
26
+ * Next.js route handler wrapper that gates a route behind a payment intent.
27
+ *
28
+ * Returns a 402 challenge if no valid credential is provided,
29
+ * otherwise attaches a `Payment-Receipt` header to the response.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * // app/api/premium/route.ts
34
+ * import { Mppx } from 'mppx/server'
35
+ * import { payment } from 'mppx/nextjs'
36
+ *
37
+ * const mppx = Mppx.create({ methods: [tempo()] })
38
+ *
39
+ * export const GET = payment(mppx.charge, { amount: '1' }, () =>
40
+ * Response.json({ data: 'paid content' }),
41
+ * )
42
+ * ```
43
+ */
44
+ export declare function payment<const intent extends Mppx_internal.AnyIntentFn>(intent: intent, options: intent extends (options: infer options) => any ? options : never, handler: RouteHandler): RouteHandler;
45
+ //# sourceMappingURL=nextjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/middlewares/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAA;AAEtE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,CAAA;AAE5D,yBAAiB,IAAI,CAAC;IACpB;;;;;;;;;;;;;;;OAeG;IACH,SAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,OAAO,EAC5D,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAI5D;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,WAAW,EACpE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,EACzE,OAAO,EAAE,YAAY,GACpB,YAAY,CAOd"}
@@ -0,0 +1,57 @@
1
+ import * as Mppx_core from '../server/Mppx.js';
2
+ import * as Mppx_internal from './internal/mppx.js';
3
+ export * from '../server/Methods.js';
4
+ export var Mppx;
5
+ (function (Mppx) {
6
+ /**
7
+ * Creates a Next.js-aware payment handler where each intent
8
+ * returns a wrapper that accepts a route handler.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // app/api/premium/route.ts
13
+ * import { Mppx, tempo } from 'mppx/nextjs'
14
+ *
15
+ * const mppx = Mppx.create({ methods: [tempo()] })
16
+ *
17
+ * export const GET = mppx.charge({ amount: '1' })(() =>
18
+ * Response.json({ data: 'paid content' }),
19
+ * )
20
+ * ```
21
+ */
22
+ function create(config) {
23
+ return Mppx_internal.wrap(Mppx_core.create(config), (intent, options) => {
24
+ return (handler) => payment(intent, options, handler);
25
+ });
26
+ }
27
+ Mppx.create = create;
28
+ })(Mppx || (Mppx = {}));
29
+ /**
30
+ * Next.js route handler wrapper that gates a route behind a payment intent.
31
+ *
32
+ * Returns a 402 challenge if no valid credential is provided,
33
+ * otherwise attaches a `Payment-Receipt` header to the response.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * // app/api/premium/route.ts
38
+ * import { Mppx } from 'mppx/server'
39
+ * import { payment } from 'mppx/nextjs'
40
+ *
41
+ * const mppx = Mppx.create({ methods: [tempo()] })
42
+ *
43
+ * export const GET = payment(mppx.charge, { amount: '1' }, () =>
44
+ * Response.json({ data: 'paid content' }),
45
+ * )
46
+ * ```
47
+ */
48
+ export function payment(intent, options, handler) {
49
+ return async (request) => {
50
+ const result = await intent(options)(request);
51
+ if (result.status === 402)
52
+ return result.challenge;
53
+ const response = await handler(request);
54
+ return result.withReceipt(response);
55
+ };
56
+ }
57
+ //# sourceMappingURL=nextjs.js.map