mppx 0.8.14 → 0.8.17

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 (507) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/Challenge.d.ts.map +1 -1
  3. package/dist/Challenge.js +40 -35
  4. package/dist/Challenge.js.map +1 -1
  5. package/dist/Constants.d.ts +17 -17
  6. package/dist/Constants.d.ts.map +1 -1
  7. package/dist/Credential.d.ts.map +1 -1
  8. package/dist/Errors.d.ts +3 -3
  9. package/dist/Errors.d.ts.map +1 -1
  10. package/dist/Errors.js.map +1 -1
  11. package/dist/Method.d.ts +35 -5
  12. package/dist/Method.d.ts.map +1 -1
  13. package/dist/Method.js +7 -22
  14. package/dist/Method.js.map +1 -1
  15. package/dist/Store.d.ts +19 -0
  16. package/dist/Store.d.ts.map +1 -1
  17. package/dist/Store.js +43 -0
  18. package/dist/Store.js.map +1 -1
  19. package/dist/attestation/Client.d.ts +17 -0
  20. package/dist/attestation/Client.d.ts.map +1 -0
  21. package/dist/attestation/Client.js +28 -0
  22. package/dist/attestation/Client.js.map +1 -0
  23. package/dist/attestation/Constants.d.ts +15 -0
  24. package/dist/attestation/Constants.d.ts.map +1 -0
  25. package/dist/attestation/Constants.js +15 -0
  26. package/dist/attestation/Constants.js.map +1 -0
  27. package/dist/attestation/Server.d.ts +4 -0
  28. package/dist/attestation/Server.d.ts.map +1 -0
  29. package/dist/attestation/Server.js +8 -0
  30. package/dist/attestation/Server.js.map +1 -0
  31. package/dist/attestation/Types.d.ts +76 -0
  32. package/dist/attestation/Types.d.ts.map +1 -0
  33. package/dist/attestation/Types.js +2 -0
  34. package/dist/attestation/Types.js.map +1 -0
  35. package/dist/attestation/index.d.ts +6 -0
  36. package/dist/attestation/index.d.ts.map +1 -0
  37. package/dist/attestation/index.js +6 -0
  38. package/dist/attestation/index.js.map +1 -0
  39. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  40. package/dist/attestation/internal/HttpMessageSignature.d.ts.map +1 -0
  41. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  42. package/dist/attestation/internal/HttpMessageSignature.js.map +1 -0
  43. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  44. package/dist/attestation/internal/SigningContext.d.ts.map +1 -0
  45. package/dist/attestation/internal/SigningContext.js +11 -0
  46. package/dist/attestation/internal/SigningContext.js.map +1 -0
  47. package/dist/cli/account.d.ts +14 -14
  48. package/dist/cli/account.d.ts.map +1 -1
  49. package/dist/cli/cli.d.ts +6 -6
  50. package/dist/cli/cli.d.ts.map +1 -1
  51. package/dist/cli/cli.js +1 -0
  52. package/dist/cli/cli.js.map +1 -1
  53. package/dist/cli/plugins/tempo.js.map +1 -1
  54. package/dist/cli/sessions/commands.d.ts +4 -4
  55. package/dist/cli/sessions/commands.d.ts.map +1 -1
  56. package/dist/cli/sessions/commands.js.map +1 -1
  57. package/dist/cli/sessions/store.d.ts.map +1 -1
  58. package/dist/cli/sessions/store.js.map +1 -1
  59. package/dist/cli/utils.d.ts +1 -1
  60. package/dist/cli/utils.d.ts.map +1 -1
  61. package/dist/cli/utils.js.map +1 -1
  62. package/dist/cli/validate/discovery.js.map +1 -1
  63. package/dist/cli/validate/index.d.ts +3 -3
  64. package/dist/cli/validate/index.d.ts.map +1 -1
  65. package/dist/cli/validate/payment.d.ts.map +1 -1
  66. package/dist/cli/validate/payment.js +18 -4
  67. package/dist/cli/validate/payment.js.map +1 -1
  68. package/dist/client/Mppx.d.ts +3 -0
  69. package/dist/client/Mppx.d.ts.map +1 -1
  70. package/dist/client/Mppx.js +13 -5
  71. package/dist/client/Mppx.js.map +1 -1
  72. package/dist/client/Transport.d.ts +3 -5
  73. package/dist/client/Transport.d.ts.map +1 -1
  74. package/dist/client/Transport.js +1 -17
  75. package/dist/client/Transport.js.map +1 -1
  76. package/dist/client/internal/Fetch.d.ts.map +1 -1
  77. package/dist/client/internal/Fetch.js +92 -13
  78. package/dist/client/internal/Fetch.js.map +1 -1
  79. package/dist/client/internal/MethodChallenge.d.ts +2 -0
  80. package/dist/client/internal/MethodChallenge.d.ts.map +1 -1
  81. package/dist/client/internal/MethodChallenge.js +4 -0
  82. package/dist/client/internal/MethodChallenge.js.map +1 -1
  83. package/dist/client/internal/MethodResponse.d.ts +15 -0
  84. package/dist/client/internal/MethodResponse.d.ts.map +1 -1
  85. package/dist/client/internal/MethodResponse.js +10 -0
  86. package/dist/client/internal/MethodResponse.js.map +1 -1
  87. package/dist/client/node.js.map +1 -1
  88. package/dist/discovery/OpenApi.d.ts +3 -5
  89. package/dist/discovery/OpenApi.d.ts.map +1 -1
  90. package/dist/discovery/OpenApi.js +13 -34
  91. package/dist/discovery/OpenApi.js.map +1 -1
  92. package/dist/discovery/internal/Metadata.d.ts +20 -0
  93. package/dist/discovery/internal/Metadata.d.ts.map +1 -0
  94. package/dist/discovery/internal/Metadata.js +36 -0
  95. package/dist/discovery/internal/Metadata.js.map +1 -0
  96. package/dist/evm/Methods.d.ts +11 -11
  97. package/dist/evm/Methods.d.ts.map +1 -1
  98. package/dist/evm/Types.d.ts +17 -17
  99. package/dist/evm/Types.d.ts.map +1 -1
  100. package/dist/evm/client/Charge.d.ts +11 -11
  101. package/dist/evm/client/Methods.d.ts +11 -11
  102. package/dist/evm/server/Charge.d.ts +1 -1
  103. package/dist/evm/server/Charge.d.ts.map +1 -1
  104. package/dist/evm/server/Charge.js +2 -0
  105. package/dist/evm/server/Charge.js.map +1 -1
  106. package/dist/evm/server/Methods.d.ts +11 -11
  107. package/dist/internal/HeaderCodec.d.ts +2 -2
  108. package/dist/internal/HeaderCodec.d.ts.map +1 -1
  109. package/dist/internal/types.d.ts +6 -0
  110. package/dist/internal/types.d.ts.map +1 -1
  111. package/dist/middlewares/elysia.js.map +1 -1
  112. package/dist/middlewares/express.js.map +1 -1
  113. package/dist/middlewares/hono.js.map +1 -1
  114. package/dist/middlewares/nextjs.js.map +1 -1
  115. package/dist/proxy/Proxy.d.ts +2 -0
  116. package/dist/proxy/Proxy.d.ts.map +1 -1
  117. package/dist/proxy/Proxy.js +117 -9
  118. package/dist/proxy/Proxy.js.map +1 -1
  119. package/dist/proxy/Service.d.ts +36 -1
  120. package/dist/proxy/Service.d.ts.map +1 -1
  121. package/dist/proxy/Service.js +9 -8
  122. package/dist/proxy/Service.js.map +1 -1
  123. package/dist/proxy/services/anthropic.d.ts.map +1 -1
  124. package/dist/proxy/services/anthropic.js +1 -0
  125. package/dist/proxy/services/anthropic.js.map +1 -1
  126. package/dist/proxy/services/openai.d.ts.map +1 -1
  127. package/dist/proxy/services/openai.js +1 -0
  128. package/dist/proxy/services/openai.js.map +1 -1
  129. package/dist/proxy/services/stripe.d.ts.map +1 -1
  130. package/dist/proxy/services/stripe.js +1 -0
  131. package/dist/proxy/services/stripe.js.map +1 -1
  132. package/dist/server/Mppx.d.ts +75 -13
  133. package/dist/server/Mppx.d.ts.map +1 -1
  134. package/dist/server/Mppx.js +201 -23
  135. package/dist/server/Mppx.js.map +1 -1
  136. package/dist/server/internal/html/config.d.ts +9 -9
  137. package/dist/server/internal/html/config.d.ts.map +1 -1
  138. package/dist/server/internal/html/constants.d.ts +17 -17
  139. package/dist/server/internal/html/constants.d.ts.map +1 -1
  140. package/dist/stripe/Methods.d.ts +10 -10
  141. package/dist/stripe/Methods.d.ts.map +1 -1
  142. package/dist/stripe/client/Charge.d.ts +10 -10
  143. package/dist/stripe/client/Methods.d.ts +10 -10
  144. package/dist/stripe/internal/constants.d.ts +1 -1
  145. package/dist/stripe/internal/constants.js +1 -1
  146. package/dist/stripe/internal/types.d.ts +1 -0
  147. package/dist/stripe/internal/types.d.ts.map +1 -1
  148. package/dist/stripe/server/Charge.d.ts +11 -11
  149. package/dist/stripe/server/Charge.d.ts.map +1 -1
  150. package/dist/stripe/server/Charge.js +49 -1
  151. package/dist/stripe/server/Charge.js.map +1 -1
  152. package/dist/stripe/server/Methods.d.ts +137 -48
  153. package/dist/stripe/server/Methods.d.ts.map +1 -1
  154. package/dist/stripe/server/Methods.js +259 -4
  155. package/dist/stripe/server/Methods.js.map +1 -1
  156. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  157. package/dist/stripe/server/internal/deposit-address.d.ts.map +1 -0
  158. package/dist/stripe/server/internal/deposit-address.js +28 -0
  159. package/dist/stripe/server/internal/deposit-address.js.map +1 -0
  160. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  161. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  162. package/dist/stripe/server/internal/html.gen.js +1 -1
  163. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  164. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  165. package/dist/stripe/server/internal/record-payment.d.ts.map +1 -0
  166. package/dist/stripe/server/internal/record-payment.js +42 -0
  167. package/dist/stripe/server/internal/record-payment.js.map +1 -0
  168. package/dist/stripe/server/internal/request.d.ts +25 -0
  169. package/dist/stripe/server/internal/request.d.ts.map +1 -0
  170. package/dist/stripe/server/internal/request.js +29 -0
  171. package/dist/stripe/server/internal/request.js.map +1 -0
  172. package/dist/tap/Constants.d.ts +28 -0
  173. package/dist/tap/Constants.d.ts.map +1 -0
  174. package/dist/tap/Constants.js +32 -0
  175. package/dist/tap/Constants.js.map +1 -0
  176. package/dist/tap/Types.d.ts +11 -0
  177. package/dist/tap/Types.d.ts.map +1 -0
  178. package/dist/tap/Types.js +2 -0
  179. package/dist/tap/Types.js.map +1 -0
  180. package/dist/tap/client/index.d.ts +26 -0
  181. package/dist/tap/client/index.d.ts.map +1 -0
  182. package/dist/tap/client/index.js +33 -0
  183. package/dist/tap/client/index.js.map +1 -0
  184. package/dist/tap/index.d.ts +5 -0
  185. package/dist/tap/index.d.ts.map +1 -0
  186. package/dist/tap/index.js +5 -0
  187. package/dist/tap/index.js.map +1 -0
  188. package/dist/tap/server/index.d.ts +20 -0
  189. package/dist/tap/server/index.d.ts.map +1 -0
  190. package/dist/tap/server/index.js +36 -0
  191. package/dist/tap/server/index.js.map +1 -0
  192. package/dist/tempo/Attribution.d.ts +1 -1
  193. package/dist/tempo/Methods.d.ts +60 -60
  194. package/dist/tempo/Methods.d.ts.map +1 -1
  195. package/dist/tempo/Proof.d.ts +16 -16
  196. package/dist/tempo/client/Charge.d.ts +19 -19
  197. package/dist/tempo/client/Charge.d.ts.map +1 -1
  198. package/dist/tempo/client/Charge.js +1 -7
  199. package/dist/tempo/client/Charge.js.map +1 -1
  200. package/dist/tempo/client/Methods.d.ts +38 -38
  201. package/dist/tempo/client/Methods.js.map +1 -1
  202. package/dist/tempo/client/Subscription.d.ts +23 -23
  203. package/dist/tempo/client/Subscription.js.map +1 -1
  204. package/dist/tempo/internal/address.d.ts +2 -1
  205. package/dist/tempo/internal/address.d.ts.map +1 -1
  206. package/dist/tempo/internal/address.js +3 -1
  207. package/dist/tempo/internal/address.js.map +1 -1
  208. package/dist/tempo/internal/auto-swap.d.ts.map +1 -1
  209. package/dist/tempo/internal/auto-swap.js +4 -19
  210. package/dist/tempo/internal/auto-swap.js.map +1 -1
  211. package/dist/tempo/internal/defaults.d.ts +6 -6
  212. package/dist/tempo/internal/defaults.d.ts.map +1 -1
  213. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  214. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  215. package/dist/tempo/internal/fee-payer.js.map +1 -1
  216. package/dist/tempo/internal/proof.d.ts +17 -17
  217. package/dist/tempo/internal/proof.d.ts.map +1 -1
  218. package/dist/tempo/legacy/client/Session.d.ts +20 -20
  219. package/dist/tempo/legacy/client/Session.js.map +1 -1
  220. package/dist/tempo/legacy/client/SessionManager.js.map +1 -1
  221. package/dist/tempo/legacy/index.d.ts +1 -3
  222. package/dist/tempo/legacy/index.d.ts.map +1 -1
  223. package/dist/tempo/legacy/index.js +1 -3
  224. package/dist/tempo/legacy/index.js.map +1 -1
  225. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  226. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +1 -1
  227. package/dist/tempo/server/Charge.d.ts +34 -12
  228. package/dist/tempo/server/Charge.d.ts.map +1 -1
  229. package/dist/tempo/server/Charge.js +44 -39
  230. package/dist/tempo/server/Charge.js.map +1 -1
  231. package/dist/tempo/server/Methods.d.ts +37 -52
  232. package/dist/tempo/server/Methods.d.ts.map +1 -1
  233. package/dist/tempo/server/Methods.js +0 -14
  234. package/dist/tempo/server/Methods.js.map +1 -1
  235. package/dist/tempo/server/Relay.d.ts +14 -5
  236. package/dist/tempo/server/Relay.d.ts.map +1 -1
  237. package/dist/tempo/server/Relay.js +6 -4
  238. package/dist/tempo/server/Relay.js.map +1 -1
  239. package/dist/tempo/server/SponsorBudget.d.ts.map +1 -1
  240. package/dist/tempo/server/SponsorBudget.js +7 -1
  241. package/dist/tempo/server/SponsorBudget.js.map +1 -1
  242. package/dist/tempo/server/Subscription.d.ts +25 -25
  243. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  244. package/dist/tempo/server/Subscription.js +2 -0
  245. package/dist/tempo/server/Subscription.js.map +1 -1
  246. package/dist/tempo/server/index.d.ts +1 -1
  247. package/dist/tempo/server/index.d.ts.map +1 -1
  248. package/dist/tempo/server/index.js +1 -1
  249. package/dist/tempo/server/index.js.map +1 -1
  250. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  251. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  252. package/dist/tempo/server/internal/html.gen.js +1 -1
  253. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  254. package/dist/tempo/server/internal/transport.d.ts +2 -0
  255. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  256. package/dist/tempo/server/internal/transport.js +9 -2
  257. package/dist/tempo/server/internal/transport.js.map +1 -1
  258. package/dist/tempo/session/client/ChannelOps.js.map +1 -1
  259. package/dist/tempo/session/client/CredentialState.d.ts +1 -1
  260. package/dist/tempo/session/client/CredentialState.js.map +1 -1
  261. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -1
  262. package/dist/tempo/session/client/Runtime.js.map +1 -1
  263. package/dist/tempo/session/client/Session.d.ts +19 -19
  264. package/dist/tempo/session/client/Session.d.ts.map +1 -1
  265. package/dist/tempo/session/client/Session.js +128 -14
  266. package/dist/tempo/session/client/Session.js.map +1 -1
  267. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
  268. package/dist/tempo/session/client/SessionManager.js +62 -20
  269. package/dist/tempo/session/client/SessionManager.js.map +1 -1
  270. package/dist/tempo/session/client/Transports.d.ts +9 -1
  271. package/dist/tempo/session/client/Transports.d.ts.map +1 -1
  272. package/dist/tempo/session/client/Transports.js +36 -13
  273. package/dist/tempo/session/client/Transports.js.map +1 -1
  274. package/dist/tempo/session/precompile/Chain.d.ts +27 -0
  275. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -1
  276. package/dist/tempo/session/precompile/Chain.js +68 -7
  277. package/dist/tempo/session/precompile/Chain.js.map +1 -1
  278. package/dist/tempo/session/precompile/Protocol.js.map +1 -1
  279. package/dist/tempo/session/precompile/Voucher.d.ts +4 -4
  280. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -1
  281. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  282. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -1
  283. package/dist/tempo/session/server/ChannelStore.d.ts +9 -0
  284. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -1
  285. package/dist/tempo/session/server/ChannelStore.js +16 -8
  286. package/dist/tempo/session/server/ChannelStore.js.map +1 -1
  287. package/dist/tempo/session/server/CredentialVerification.d.ts +30 -13
  288. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
  289. package/dist/tempo/session/server/CredentialVerification.js +207 -13
  290. package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
  291. package/dist/tempo/session/server/MeteredStream.d.ts +3 -0
  292. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -1
  293. package/dist/tempo/session/server/MeteredStream.js +3 -1
  294. package/dist/tempo/session/server/MeteredStream.js.map +1 -1
  295. package/dist/tempo/session/server/Session.d.ts +32 -21
  296. package/dist/tempo/session/server/Session.d.ts.map +1 -1
  297. package/dist/tempo/session/server/Session.js +116 -53
  298. package/dist/tempo/session/server/Session.js.map +1 -1
  299. package/dist/tempo/session/server/Sse.d.ts +3 -1
  300. package/dist/tempo/session/server/Sse.d.ts.map +1 -1
  301. package/dist/tempo/session/server/Sse.js +2 -1
  302. package/dist/tempo/session/server/Sse.js.map +1 -1
  303. package/dist/tempo/session/server/Transports.d.ts +1 -1
  304. package/dist/tempo/session/server/Transports.d.ts.map +1 -1
  305. package/dist/tempo/session/server/Transports.js +1 -0
  306. package/dist/tempo/session/server/Transports.js.map +1 -1
  307. package/dist/tempo/session/server/Ws.d.ts +6 -1
  308. package/dist/tempo/session/server/Ws.d.ts.map +1 -1
  309. package/dist/tempo/session/server/Ws.js +4 -0
  310. package/dist/tempo/session/server/Ws.js.map +1 -1
  311. package/dist/tempo/subscription/KeyAuthorization.d.ts +38 -866
  312. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
  313. package/dist/tempo/subscription/KeyAuthorization.js +14 -3
  314. package/dist/tempo/subscription/KeyAuthorization.js.map +1 -1
  315. package/dist/viem/Account.d.ts.map +1 -1
  316. package/dist/viem/Account.js.map +1 -1
  317. package/dist/viem/Client.d.ts.map +1 -1
  318. package/dist/viem/Client.js +6 -1
  319. package/dist/viem/Client.js.map +1 -1
  320. package/dist/web-bot-auth/Constants.d.ts +20 -0
  321. package/dist/web-bot-auth/Constants.d.ts.map +1 -0
  322. package/dist/web-bot-auth/Constants.js +24 -0
  323. package/dist/web-bot-auth/Constants.js.map +1 -0
  324. package/dist/web-bot-auth/Types.d.ts +10 -0
  325. package/dist/web-bot-auth/Types.d.ts.map +1 -0
  326. package/dist/web-bot-auth/Types.js +2 -0
  327. package/dist/web-bot-auth/Types.js.map +1 -0
  328. package/dist/web-bot-auth/client/index.d.ts +29 -0
  329. package/dist/web-bot-auth/client/index.d.ts.map +1 -0
  330. package/dist/web-bot-auth/client/index.js +64 -0
  331. package/dist/web-bot-auth/client/index.js.map +1 -0
  332. package/dist/web-bot-auth/index.d.ts +7 -0
  333. package/dist/web-bot-auth/index.d.ts.map +1 -0
  334. package/dist/web-bot-auth/index.js +7 -0
  335. package/dist/web-bot-auth/index.js.map +1 -0
  336. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  337. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +1 -0
  338. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  339. package/dist/web-bot-auth/internal/JwkThumbprint.js.map +1 -0
  340. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  341. package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +1 -0
  342. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  343. package/dist/web-bot-auth/internal/SignatureAgent.js.map +1 -0
  344. package/dist/web-bot-auth/server/index.d.ts +35 -0
  345. package/dist/web-bot-auth/server/index.d.ts.map +1 -0
  346. package/dist/web-bot-auth/server/index.js +88 -0
  347. package/dist/web-bot-auth/server/index.js.map +1 -0
  348. package/dist/x402/Assets.d.ts.map +1 -1
  349. package/dist/x402/Types.d.ts +6 -6
  350. package/dist/x402/Types.d.ts.map +1 -1
  351. package/dist/x402/server/EvmCharge.d.ts.map +1 -1
  352. package/dist/x402/server/EvmCharge.js +32 -20
  353. package/dist/x402/server/EvmCharge.js.map +1 -1
  354. package/package.json +20 -4
  355. package/src/Challenge.fuzz.test.ts +80 -47
  356. package/src/Challenge.test.ts +65 -0
  357. package/src/Challenge.ts +39 -35
  358. package/src/Method.ts +82 -68
  359. package/src/Store.test-d.ts +16 -0
  360. package/src/Store.test.ts +50 -0
  361. package/src/Store.ts +68 -0
  362. package/src/attestation/Attestation.integration.test.ts +208 -0
  363. package/src/attestation/Client.test.ts +83 -0
  364. package/src/attestation/Client.ts +34 -0
  365. package/src/attestation/Constants.ts +15 -0
  366. package/src/attestation/Server.test.ts +60 -0
  367. package/src/attestation/Server.ts +12 -0
  368. package/src/attestation/Types.test-d.ts +54 -0
  369. package/src/attestation/Types.ts +77 -0
  370. package/src/attestation/index.ts +5 -0
  371. package/src/attestation/internal/HttpMessageSignature.test.ts +101 -0
  372. package/src/attestation/internal/HttpMessageSignature.ts +429 -0
  373. package/src/attestation/internal/SigningContext.ts +13 -0
  374. package/src/bin.js +2 -0
  375. package/src/cli/cli.ts +1 -0
  376. package/src/cli/validate/payment.ts +18 -4
  377. package/src/cli/validate.test.ts +16 -0
  378. package/src/client/Mppx.test-d.ts +17 -0
  379. package/src/client/Mppx.test.ts +14 -14
  380. package/src/client/Mppx.ts +25 -4
  381. package/src/client/Transport.test.ts +12 -45
  382. package/src/client/Transport.ts +3 -24
  383. package/src/client/internal/Fetch.test.ts +77 -0
  384. package/src/client/internal/Fetch.ts +112 -14
  385. package/src/client/internal/MethodChallenge.ts +5 -0
  386. package/src/client/internal/MethodResponse.ts +28 -0
  387. package/src/discovery/OpenApi.test.ts +170 -0
  388. package/src/discovery/OpenApi.ts +16 -48
  389. package/src/discovery/internal/Metadata.ts +51 -0
  390. package/src/evm/server/Charge.ts +6 -1
  391. package/src/internal/AcceptPayment.test.ts +12 -8
  392. package/src/internal/types.ts +9 -0
  393. package/src/mcp/client/McpClient.integration.test.ts +19 -32
  394. package/src/middlewares/elysia.test.ts +2 -12
  395. package/src/middlewares/express.test.ts +2 -12
  396. package/src/middlewares/hono.test.ts +6 -9
  397. package/src/middlewares/nextjs.test.ts +2 -12
  398. package/src/proxy/Proxy.test.ts +26 -19
  399. package/src/proxy/Proxy.ts +147 -9
  400. package/src/proxy/Proxy.upstreamError.test.ts +364 -0
  401. package/src/proxy/Service.test.ts +73 -3
  402. package/src/proxy/Service.ts +50 -23
  403. package/src/proxy/services/anthropic.ts +1 -0
  404. package/src/proxy/services/hooks.test-d.ts +14 -0
  405. package/src/proxy/services/hooks.test.ts +44 -0
  406. package/src/proxy/services/openai.ts +1 -0
  407. package/src/proxy/services/stripe.ts +1 -0
  408. package/src/server/Methods.test-d.ts +88 -0
  409. package/src/server/Methods.test.ts +69 -0
  410. package/src/server/Mppx.test-d.ts +141 -7
  411. package/src/server/Mppx.test.ts +1017 -119
  412. package/src/server/Mppx.ts +350 -54
  413. package/src/stripe/internal/constants.ts +1 -1
  414. package/src/stripe/internal/types.ts +1 -0
  415. package/src/stripe/server/Charge.test-d.ts +16 -1
  416. package/src/stripe/server/Charge.test.ts +79 -0
  417. package/src/stripe/server/Charge.ts +54 -1
  418. package/src/stripe/server/Methods.test-d.ts +157 -0
  419. package/src/stripe/server/Methods.test.ts +403 -0
  420. package/src/stripe/server/Methods.ts +423 -6
  421. package/src/stripe/server/internal/deposit-address.ts +57 -0
  422. package/src/stripe/server/internal/html/node_modules/.bin/mppx +3 -3
  423. package/src/stripe/server/internal/html/package.json +1 -1
  424. package/src/stripe/server/internal/html.gen.ts +1 -1
  425. package/src/stripe/server/internal/record-payment.ts +66 -0
  426. package/src/stripe/server/internal/request.ts +49 -0
  427. package/src/tap/Constants.ts +32 -0
  428. package/src/tap/Tap.test.ts +125 -0
  429. package/src/tap/Types.ts +11 -0
  430. package/src/tap/client/index.ts +54 -0
  431. package/src/tap/index.ts +4 -0
  432. package/src/tap/server/index.ts +48 -0
  433. package/src/tempo/PublicExports.test-d.ts +3 -3
  434. package/src/tempo/client/Charge.ts +1 -19
  435. package/src/tempo/internal/address.test.ts +42 -0
  436. package/src/tempo/internal/address.ts +3 -3
  437. package/src/tempo/internal/auto-swap.test.ts +4 -4
  438. package/src/tempo/internal/auto-swap.ts +7 -50
  439. package/src/tempo/legacy/README.md +5 -5
  440. package/src/tempo/legacy/index.ts +1 -3
  441. package/src/tempo/server/AtomicStore.test-d.ts +13 -0
  442. package/src/tempo/server/Charge.test.ts +19 -84
  443. package/src/tempo/server/Charge.ts +92 -56
  444. package/src/tempo/server/Methods.ts +0 -20
  445. package/src/tempo/server/Relay.test.ts +161 -7
  446. package/src/tempo/server/Relay.ts +15 -6
  447. package/src/tempo/server/SponsorBudget.test.ts +29 -0
  448. package/src/tempo/server/SponsorBudget.ts +7 -1
  449. package/src/tempo/server/Subscription.ts +4 -1
  450. package/src/tempo/server/index.ts +1 -1
  451. package/src/tempo/server/internal/html/node_modules/.bin/mppx +3 -3
  452. package/src/tempo/server/internal/html/package.json +1 -1
  453. package/src/tempo/server/internal/html.gen.ts +1 -1
  454. package/src/tempo/server/internal/transport.test.ts +22 -3
  455. package/src/tempo/server/internal/transport.ts +15 -3
  456. package/src/tempo/session/README.md +119 -0
  457. package/src/tempo/session/client/Session.test.ts +299 -33
  458. package/src/tempo/session/client/Session.ts +152 -16
  459. package/src/tempo/session/client/SessionManager.test.ts +216 -9
  460. package/src/tempo/session/client/SessionManager.ts +63 -17
  461. package/src/tempo/session/client/Transports.test.ts +22 -0
  462. package/src/tempo/session/client/Transports.ts +58 -22
  463. package/src/tempo/session/precompile/Chain.ts +131 -11
  464. package/src/tempo/session/server/ChannelStore.ts +33 -12
  465. package/src/tempo/session/server/CredentialVerification.test.ts +4 -4
  466. package/src/tempo/session/server/CredentialVerification.ts +340 -28
  467. package/src/tempo/session/server/MeteredStream.ts +5 -1
  468. package/src/tempo/session/server/Session.test.ts +483 -36
  469. package/src/tempo/session/server/Session.ts +159 -60
  470. package/src/tempo/session/server/Sse.test.ts +77 -0
  471. package/src/tempo/session/server/Sse.ts +8 -1
  472. package/src/tempo/session/server/Transports.ts +2 -1
  473. package/src/tempo/session/server/Ws.test.ts +171 -0
  474. package/src/tempo/session/server/Ws.ts +10 -1
  475. package/src/tempo/subscription/KeyAuthorization.test.ts +70 -1
  476. package/src/tempo/subscription/KeyAuthorization.ts +14 -3
  477. package/src/viem/Client.test.ts +18 -1
  478. package/src/viem/Client.ts +7 -1
  479. package/src/web-bot-auth/Constants.ts +24 -0
  480. package/src/web-bot-auth/Types.ts +9 -0
  481. package/src/web-bot-auth/WebBotAuth.test.ts +182 -0
  482. package/src/web-bot-auth/client/index.ts +84 -0
  483. package/src/web-bot-auth/index.ts +6 -0
  484. package/src/web-bot-auth/internal/JwkThumbprint.ts +21 -0
  485. package/src/web-bot-auth/internal/SignatureAgent.ts +18 -0
  486. package/src/web-bot-auth/server/index.ts +113 -0
  487. package/src/x402/Exact.e2e.test.ts +121 -81
  488. package/src/x402/Exact.localnet.test.ts +1 -1
  489. package/src/x402/server/EvmCharge.ts +35 -19
  490. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  491. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  492. package/dist/tempo/legacy/server/Session.js +0 -698
  493. package/dist/tempo/legacy/server/Session.js.map +0 -1
  494. package/dist/tempo/legacy/server/index.d.ts +0 -5
  495. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  496. package/dist/tempo/legacy/server/index.js +0 -5
  497. package/dist/tempo/legacy/server/index.js.map +0 -1
  498. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  499. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  500. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  501. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  502. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  503. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  504. package/src/tempo/legacy/server/Session.ts +0 -1024
  505. package/src/tempo/legacy/server/index.ts +0 -4
  506. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  507. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
@@ -1,24 +1,441 @@
1
+ import * as EvmAssets from '../../evm/Assets.js'
2
+ import { charge as evmCharge } from '../../evm/server/Charge.js'
3
+ import type * as Method from '../../Method.js'
4
+ import * as tempoDefaults from '../../tempo/internal/defaults.js'
5
+ import { charge as tempoCharge } from '../../tempo/server/Charge.js'
6
+ import { session as tempoSession } from '../../tempo/session/server/Session.js'
7
+ import type { StripeClient } from '../internal/types.js'
1
8
  import { charge as charge_ } from './Charge.js'
9
+ import { findOrCreateDepositAddress as _findOrCreateDepositAddress } from './internal/deposit-address.js'
10
+ import { recordCryptoPayment } from './internal/record-payment.js'
11
+ import { type ConnectConfig } from './internal/request.js'
12
+
13
+ // --- Public types ---
14
+
15
+ export declare namespace stripe {
16
+ type Network = 'tempo' | 'base' | 'solana'
17
+
18
+ type DepositAddress<N extends Network = Network> = string & {
19
+ readonly __brand: 'StripeDepositAddress'
20
+ readonly __network: N
21
+ }
22
+
23
+ // TODO: make networkId and livemode also accept dynamic resolvers (fetched from
24
+ // GET /v2/network/business_profiles/me which returns { id, livemode, ... }).
25
+ // This would allow `stripe.create({ secretKey })` with no other params.
26
+ type Parameters = {
27
+ client: StripeClient
28
+ networkId: string
29
+ livemode: boolean
30
+ connect?: ConnectConfig
31
+ depositAddresses?: Partial<Record<Network, string>> | ((network: Network) => Promise<string>)
32
+ metadata?: Record<string, string> | undefined
33
+ }
34
+ }
35
+
36
+ // --- Internal types ---
37
+
38
+ type CustomRailFactory = (address: string) => Method.AnyServer | readonly Method.AnyServer[]
39
+
40
+ type ServerOf<N extends string, I extends string> = Omit<Method.AnyServer, 'name' | 'intent'> & {
41
+ name: N
42
+ intent: I
43
+ }
44
+
45
+ type TempoServer = ServerOf<'tempo', 'charge'>
46
+ type TempoSessionServer = ServerOf<'tempo', 'session'>
47
+ type SptServer = ServerOf<'stripe', 'charge'>
48
+ type EvmServer = ServerOf<'evm', 'charge'>
49
+
50
+ type BaseConfig = {
51
+ x402: NonNullable<Parameters<typeof evmCharge>[0]['x402']>
52
+ } & Partial<Omit<Parameters<typeof evmCharge>[0], 'currency' | 'recipient' | 'x402'>>
53
+
54
+ type CustomRailNetwork = Exclude<stripe.Network, 'tempo' | 'base'>
55
+
56
+ type AdditionalConfig = {
57
+ base?: BaseConfig
58
+ tempo?: { session: Omit<tempoSession.Parameters, 'currency' | 'recipient'> }
59
+ } & { [K in CustomRailNetwork]?: CustomRailFactory }
60
+
61
+ type DefaultMethods = readonly [TempoServer, SptServer]
62
+
63
+ type DefaultMethodsWithAdditional<C extends AdditionalConfig> = readonly [
64
+ TempoServer,
65
+ SptServer,
66
+ ...(C extends { base: object } ? [EvmServer] : []),
67
+ ...(C extends { tempo: { session: any } } ? [TempoSessionServer] : []),
68
+ ]
69
+
70
+ type DefaultMethodName = 'tempo' | 'spt'
71
+ const defaultMethodNames: readonly DefaultMethodName[] = ['tempo', 'spt']
72
+
73
+ type AdditionalBuiltinKey = 'base' | 'tempo'
74
+ const additionalBuiltinKeys: readonly AdditionalBuiltinKey[] = ['base', 'tempo']
75
+
76
+ type DefaultMethodsConfig = {
77
+ exclude?: DefaultMethodName[]
78
+ }
79
+
80
+ type SyncMethodsResult = DefaultMethods & {
81
+ additional<C extends AdditionalConfig>(config: C): DefaultMethodsWithAdditional<C>
82
+ }
83
+
84
+ interface StripeMachinePayments<P extends stripe.Parameters = stripe.Parameters> {
85
+ spt: {
86
+ charge: (params?: { paymentMethodTypes?: string[] }) => SptServer
87
+ }
88
+ tempo: {
89
+ charge: (
90
+ params: {
91
+ recipient: stripe.DepositAddress<'tempo'>
92
+ metadata?: Record<string, string>
93
+ } & Partial<Omit<Parameters<typeof tempoCharge>[0], 'currency' | 'recipient'>>,
94
+ ) => TempoServer
95
+ session: (
96
+ params: { recipient: stripe.DepositAddress<'tempo'> } & Omit<
97
+ tempoSession.Parameters,
98
+ 'currency' | 'recipient'
99
+ >,
100
+ ) => TempoSessionServer
101
+ }
102
+ base: {
103
+ charge: (
104
+ params: {
105
+ recipient: stripe.DepositAddress<'base'>
106
+ metadata?: Record<string, string>
107
+ } & BaseConfig,
108
+ ) => EvmServer
109
+ }
110
+ findOrCreateDepositAddress: <N extends stripe.Network>(
111
+ network: N,
112
+ ) => Promise<stripe.DepositAddress<N>>
113
+ defaultMethods: (
114
+ config?: DefaultMethodsConfig,
115
+ ) => P['depositAddresses'] extends Partial<Record<stripe.Network, string>>
116
+ ? SyncMethodsResult
117
+ : DefaultMethodsBuilder
118
+ }
119
+
120
+ class DefaultMethodsBuilder implements PromiseLike<DefaultMethods> {
121
+ readonly #resolve: (additional?: AdditionalConfig) => Promise<any>
122
+ #additional: AdditionalConfig | undefined
123
+
124
+ constructor(resolve: (additional?: AdditionalConfig) => Promise<any>) {
125
+ this.#resolve = resolve
126
+ }
127
+
128
+ additional<C extends AdditionalConfig>(config: C): PromiseLike<DefaultMethodsWithAdditional<C>> {
129
+ this.#additional = config
130
+ return this as unknown as PromiseLike<DefaultMethodsWithAdditional<C>>
131
+ }
132
+
133
+ then<T = DefaultMethods, U = never>(
134
+ onfulfilled?: ((value: DefaultMethods) => T | PromiseLike<T>) | null,
135
+ onrejected?: ((reason: unknown) => U | PromiseLike<U>) | null,
136
+ ): Promise<T | U> {
137
+ return this.#resolve(this.#additional).then(onfulfilled, onrejected)
138
+ }
139
+ }
2
140
 
3
141
  /**
4
- * Creates a Stripe `charge` method for usage on the server.
142
+ * Creates a configured Stripe machine payments instance.
5
143
  *
6
144
  * @example
7
145
  * ```ts
8
146
  * import { Mppx, stripe } from 'mppx/server'
9
147
  *
148
+ * const machinePayments = stripe.create({
149
+ * client: stripeClient,
150
+ * networkId: process.env.STRIPE_PROFILE_ID!,
151
+ * livemode: !process.env.STRIPE_SECRET_KEY!.includes('_test_'),
152
+ * })
153
+ *
154
+ * // Async: deposit addresses resolved from Stripe API
155
+ * const mppx = Mppx.create({
156
+ * methods: await machinePayments.defaultMethods(),
157
+ * secretKey: mppSecretKey,
158
+ * })
159
+ * ```
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * // Sync: deposit addresses provided statically
164
+ * const machinePayments = stripe.create({
165
+ * client: stripeClient,
166
+ * networkId: process.env.STRIPE_PROFILE_ID!,
167
+ * livemode: !process.env.STRIPE_SECRET_KEY!.includes('_test_'),
168
+ * depositAddresses: { tempo: process.env.TEMPO_DEPOSIT_ADDRESS! },
169
+ * })
170
+ *
10
171
  * const mppx = Mppx.create({
11
- * methods: [stripe({ secretKey: 'sk_...' })],
172
+ * methods: machinePayments.defaultMethods(),
173
+ * secretKey: mppSecretKey,
174
+ * })
175
+ * ```
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * // With additional custom rails
180
+ * const mppx = Mppx.create({
181
+ * methods: await machinePayments.defaultMethods().additional({
182
+ * base: { x402: { facilitator } },
183
+ * solana: (address) => solana.charge({ recipient: address, currency: USDC, decimals: 6 }),
184
+ * }),
185
+ * secretKey: mppSecretKey,
12
186
  * })
13
187
  * ```
14
188
  */
15
- export function stripe<const parameters extends stripe.Parameters>(parameters: parameters) {
16
- return [stripe.charge(parameters)] as const
189
+ export function stripe<const P extends stripe.Parameters>(parameters: P): StripeMachinePayments<P> {
190
+ const { client, networkId, livemode, connect, depositAddresses, metadata } = parameters
191
+ if (!client.rawRequest)
192
+ throw new Error('stripe.create() requires a Stripe SDK client with rawRequest() (v15+)')
193
+ const tempoCurrency = (
194
+ livemode ? tempoDefaults.tokens.usdc : tempoDefaults.tokens.pathUsd
195
+ ) as `0x${string}`
196
+ const tempoPaymentHandler = createPaymentSuccessHandler(client, 'tempo', connect, metadata)
197
+ const basePaymentHandler = createPaymentSuccessHandler(client, 'base', connect, metadata)
198
+
199
+ // All stripe-managed crypto rails use 6-decimal stablecoins. Reject amounts
200
+ // below 1 cent since Stripe cannot record them.
201
+ const cryptoCanOffer = ({ request }: { request: { amount: string } }) =>
202
+ Number(request.amount) >= 10_000
203
+
204
+ function makeSptCharge(params?: { paymentMethodTypes?: string[] }): Method.AnyServer {
205
+ return charge_({
206
+ client,
207
+ networkId,
208
+ currency: 'usd',
209
+ decimals: 2,
210
+ paymentMethodTypes: params?.paymentMethodTypes ?? ['card', 'link'],
211
+ ...(connect && { connect }),
212
+ ...(metadata && { metadata }),
213
+ } as Parameters<typeof charge_>[0]) as Method.AnyServer
214
+ }
215
+
216
+ function makeTempoCharge(
217
+ params: { recipient: `0x${string}`; metadata?: Record<string, string> } & Partial<
218
+ Omit<Parameters<typeof tempoCharge>[0], 'currency' | 'recipient'>
219
+ >,
220
+ ): Method.AnyServer {
221
+ const { recipient, metadata: callMetadata, ...rest } = params
222
+ const handler = callMetadata
223
+ ? createPaymentSuccessHandler(client, 'tempo', connect, { ...metadata, ...callMetadata })
224
+ : tempoPaymentHandler
225
+ return tempoCharge({
226
+ currency: tempoCurrency,
227
+ recipient,
228
+ ...(!livemode && { testnet: true }),
229
+ canOffer: cryptoCanOffer,
230
+ onPaymentSuccess: handler,
231
+ ...rest,
232
+ }) as Method.AnyServer
233
+ }
234
+
235
+ function makeTempoSession(
236
+ params: { recipient: `0x${string}` } & Omit<tempoSession.Parameters, 'currency' | 'recipient'>,
237
+ ): Method.AnyServer {
238
+ const { recipient, ...rest } = params
239
+ return tempoSession({
240
+ currency: tempoCurrency,
241
+ recipient,
242
+ ...(!livemode && { testnet: true }),
243
+ ...rest,
244
+ } as tempoSession.Parameters) as Method.AnyServer
245
+ }
246
+
247
+ function makeBaseCharge(
248
+ params: { recipient: `0x${string}`; metadata?: Record<string, string> } & BaseConfig,
249
+ ): Method.AnyServer {
250
+ const { recipient, x402, metadata: callMetadata, ...rest } = params
251
+ const handler = callMetadata
252
+ ? createPaymentSuccessHandler(client, 'base', connect, { ...metadata, ...callMetadata })
253
+ : basePaymentHandler
254
+ return evmCharge({
255
+ currency: livemode ? EvmAssets.base.USDC : EvmAssets.baseSepolia.USDC,
256
+ recipient,
257
+ x402,
258
+ canOffer: cryptoCanOffer,
259
+ onPaymentSuccess: handler,
260
+ ...rest,
261
+ }) as Method.AnyServer
262
+ }
263
+
264
+ const defaultMethodBuilders: Record<
265
+ DefaultMethodName,
266
+ (addresses: Map<string, string>) => Method.AnyServer | null
267
+ > = {
268
+ tempo: (addresses) => {
269
+ const address = addresses.get('tempo')
270
+ if (!address) return null
271
+ return makeTempoCharge({ recipient: address as `0x${string}` })
272
+ },
273
+ spt: () => makeSptCharge(),
274
+ }
275
+
276
+ const additionalBuilders: Record<
277
+ AdditionalBuiltinKey,
278
+ (addresses: Map<string, string>, config: AdditionalConfig) => Method.AnyServer | null
279
+ > = {
280
+ base: (addresses, config) => {
281
+ if (!config.base) return null
282
+ const address = addresses.get('base')
283
+ if (!address) return null
284
+ return makeBaseCharge({ recipient: address as `0x${string}`, ...config.base })
285
+ },
286
+ tempo: (addresses, config) => {
287
+ if (!config.tempo?.session) return null
288
+ const address = addresses.get('tempo')
289
+ if (!address) return null
290
+ return makeTempoSession({ recipient: address as `0x${string}`, ...config.tempo.session })
291
+ },
292
+ }
293
+
294
+ function createMethodsFromAddresses(
295
+ addresses: Map<string, string>,
296
+ excluded: Set<string>,
297
+ additional?: AdditionalConfig,
298
+ ): DefaultMethods {
299
+ const result: Method.AnyServer[] = []
300
+
301
+ for (const name of defaultMethodNames) {
302
+ if (excluded.has(name)) continue
303
+ const method = defaultMethodBuilders[name](addresses)
304
+ if (method) result.push(method)
305
+ }
306
+
307
+ if (additional) {
308
+ for (const key of Object.keys(additionalBuilders) as AdditionalBuiltinKey[]) {
309
+ const method = additionalBuilders[key](addresses, additional)
310
+ if (method) result.push(method)
311
+ }
312
+
313
+ for (const [network, factory] of customRails(additional)) {
314
+ const address = requireAddress(addresses, network)
315
+ const recorder = createPaymentSuccessHandler(
316
+ client,
317
+ network as stripe.Network,
318
+ connect,
319
+ metadata,
320
+ )
321
+ for (const m of toArray(factory(address))) {
322
+ const onPaymentSuccess = m.onPaymentSuccess
323
+ ? (params: any) =>
324
+ Promise.all([m.onPaymentSuccess!(params), recorder(params)]).then(() => {})
325
+ : recorder
326
+ const canOffer = m.canOffer
327
+ ? (params: any) => cryptoCanOffer(params) && m.canOffer!(params)
328
+ : cryptoCanOffer
329
+ result.push({ ...m, canOffer, onPaymentSuccess } as Method.AnyServer)
330
+ }
331
+ }
332
+ }
333
+
334
+ return result as unknown as DefaultMethods
335
+ }
336
+
337
+ function resolveAddress(network: string): Promise<string> {
338
+ if (typeof depositAddresses === 'function') return depositAddresses(network as stripe.Network)
339
+ return _findOrCreateDepositAddress(client, network, connect ? { connect } : undefined)
340
+ }
341
+
342
+ function defaultMethods(
343
+ config?: DefaultMethodsConfig,
344
+ ): SyncMethodsResult | DefaultMethodsBuilder {
345
+ const excluded = new Set(config?.exclude)
346
+
347
+ if (depositAddresses && typeof depositAddresses !== 'function') {
348
+ // Sync: static deposit addresses provided at stripe.create() time
349
+ const addresses = new Map(Object.entries(depositAddresses)) as Map<string, string>
350
+ return Object.assign(createMethodsFromAddresses(addresses, excluded), {
351
+ additional: (additional: AdditionalConfig) =>
352
+ createMethodsFromAddresses(addresses, excluded, additional),
353
+ }) as SyncMethodsResult
354
+ } else {
355
+ // Async: resolve addresses dynamically
356
+ return new DefaultMethodsBuilder(async (additional) => {
357
+ const networks = neededNetworks(excluded, additional)
358
+ const results = await Promise.all(
359
+ networks.map(async (network) => ({
360
+ network,
361
+ address: await resolveAddress(network),
362
+ })),
363
+ )
364
+ const addresses = new Map(results.map(({ network, address }) => [network, address]))
365
+ return createMethodsFromAddresses(addresses, excluded, additional)
366
+ })
367
+ }
368
+ }
369
+
370
+ return {
371
+ spt: { charge: makeSptCharge },
372
+ tempo: { charge: makeTempoCharge, session: makeTempoSession },
373
+ base: { charge: makeBaseCharge },
374
+ findOrCreateDepositAddress: async <N extends stripe.Network>(network: N) => {
375
+ const address = await resolveAddress(network)
376
+ return address as stripe.DepositAddress<N>
377
+ },
378
+ defaultMethods,
379
+ } as StripeMachinePayments
17
380
  }
18
381
 
19
382
  export namespace stripe {
20
- export type Parameters = charge_.Parameters
383
+ export const spt = charge_
21
384
 
22
- /** Creates a Stripe `charge` method for SPT-based payments. */
385
+ /** @deprecated Use `stripe.spt()` instead. */
23
386
  export const charge = charge_
387
+
388
+ export const create = stripe
389
+
390
+ export const findOrCreateDepositAddress = _findOrCreateDepositAddress
391
+ }
392
+
393
+ function neededNetworks(excluded: Set<string>, additional?: AdditionalConfig): stripe.Network[] {
394
+ const networks: stripe.Network[] = []
395
+ if (!excluded.has('tempo') || additional?.tempo?.session) networks.push('tempo')
396
+ if (additional?.base) networks.push('base')
397
+ for (const [network] of customRails(additional)) {
398
+ networks.push(network as stripe.Network)
399
+ }
400
+ return networks
401
+ }
402
+
403
+ function requireAddress(addresses: Map<string, string>, network: string): string {
404
+ const address = addresses.get(network)
405
+ if (!address) throw new Error(`stripe: missing deposit address for ${network}`)
406
+ return address
407
+ }
408
+
409
+ function toArray(
410
+ value: Method.AnyServer | readonly Method.AnyServer[],
411
+ ): readonly Method.AnyServer[] {
412
+ return Array.isArray(value) ? value : [value]
413
+ }
414
+
415
+ function customRails(additional?: AdditionalConfig): [string, CustomRailFactory][] {
416
+ if (!additional) return []
417
+ return Object.entries(additional).filter((entry): entry is [string, CustomRailFactory] => {
418
+ const [k, v] = entry
419
+ return !(additionalBuiltinKeys as readonly string[]).includes(k) && typeof v === 'function'
420
+ })
421
+ }
422
+
423
+ function createPaymentSuccessHandler(
424
+ client: StripeClient,
425
+ network: stripe.Network,
426
+ connect?: ConnectConfig,
427
+ metadata?: Record<string, string>,
428
+ ) {
429
+ return (params: { receipt: any; request: any }) => {
430
+ const { receipt, request } = params
431
+ if (receipt?.reference && request?.amount) {
432
+ return recordCryptoPayment(client, {
433
+ network,
434
+ reference: receipt.reference,
435
+ amount: String(request.amount),
436
+ ...(connect && { connect }),
437
+ ...(metadata && { metadata }),
438
+ })
439
+ }
440
+ }
24
441
  }
@@ -0,0 +1,57 @@
1
+ import type { StripeClient } from '../../internal/types.js'
2
+ import { stripeRequest, type ConnectConfig } from './request.js'
3
+
4
+ export type DepositAddressResolver = (
5
+ client: StripeClient,
6
+ network: string,
7
+ options?: { connect?: ConnectConfig },
8
+ ) => Promise<string>
9
+
10
+ const cache = new WeakMap<StripeClient, Map<string, string>>()
11
+
12
+ /**
13
+ * Finds an existing deposit address or creates a new one for the given network.
14
+ * Cached per client+network+stripeAccount for the process lifetime.
15
+ */
16
+ export async function findOrCreateDepositAddress(
17
+ client: StripeClient,
18
+ network: string,
19
+ options?: { connect?: ConnectConfig },
20
+ ): Promise<string> {
21
+ let clientCache = cache.get(client)
22
+ if (!clientCache) {
23
+ clientCache = new Map()
24
+ cache.set(client, clientCache)
25
+ }
26
+ const key = options?.connect?.stripeAccount
27
+ ? `${options.connect.stripeAccount}:${network}`
28
+ : network
29
+ const cached = clientCache.get(key)
30
+ if (cached) return cached
31
+
32
+ const list = (await stripeRequest(
33
+ client,
34
+ 'GET',
35
+ `/v1/crypto/deposit_addresses?network=${network}&limit=1`,
36
+ undefined,
37
+ options,
38
+ )) as {
39
+ data?: { address: string }[]
40
+ }
41
+ if (list.data && list.data.length > 0) {
42
+ clientCache.set(key, list.data[0]!.address)
43
+ return list.data[0]!.address
44
+ }
45
+
46
+ const created = (await stripeRequest(
47
+ client,
48
+ 'POST',
49
+ '/v1/crypto/deposit_addresses',
50
+ { network },
51
+ options,
52
+ )) as {
53
+ address: string
54
+ }
55
+ clientCache.set(key, created.address)
56
+ return created.address
57
+ }
@@ -15,8 +15,8 @@ else
15
15
  export NODE_PATH="/home/runner/work/mppx/mppx/node_modules/.pnpm/node_modules:$NODE_PATH"
16
16
  fi
17
17
  if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../mppx/dist/bin.js" "$@"
18
+ exec "$basedir/node" "$basedir/../mppx/src/bin.js" "$@"
19
19
  else
20
- exec node "$basedir/../mppx/dist/bin.js" "$@"
20
+ exec node "$basedir/../mppx/src/bin.js" "$@"
21
21
  fi
22
- # cmd-shim-target=/home/runner/work/mppx/mppx/src/stripe/server/internal/html/node_modules/mppx/dist/bin.js
22
+ # cmd-shim-target=/home/runner/work/mppx/mppx/src/stripe/server/internal/html/node_modules/mppx/src/bin.js
@@ -3,7 +3,7 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "dependencies": {
6
- "@stripe/stripe-js": "9.9.0",
6
+ "@stripe/stripe-js": "9.12.1",
7
7
  "mppx": "workspace:*"
8
8
  }
9
9
  }