mppx 0.8.15 → 0.8.18

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 (966) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +15 -0
  3. package/dist/Challenge.js +61 -39
  4. package/dist/Constants.d.ts +17 -17
  5. package/dist/Errors.d.ts +3 -3
  6. package/dist/Method.d.ts +35 -5
  7. package/dist/Method.js +7 -22
  8. package/dist/Store.d.ts +19 -0
  9. package/dist/Store.js +43 -0
  10. package/dist/attestation/Client.d.ts +17 -0
  11. package/dist/attestation/Client.js +28 -0
  12. package/dist/attestation/Constants.d.ts +15 -0
  13. package/dist/attestation/Constants.js +15 -0
  14. package/dist/attestation/Server.d.ts +4 -0
  15. package/dist/attestation/Server.js +8 -0
  16. package/dist/attestation/Types.d.ts +76 -0
  17. package/dist/attestation/Types.js +2 -0
  18. package/dist/attestation/index.d.ts +6 -0
  19. package/dist/attestation/index.js +6 -0
  20. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  21. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  22. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  23. package/dist/attestation/internal/SigningContext.js +11 -0
  24. package/dist/bin.js +3 -3
  25. package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
  26. package/dist/cli/account.d.ts +14 -14
  27. package/dist/cli/cli.d.ts +6 -6
  28. package/dist/cli/cli.js +253 -1504
  29. package/dist/cli/plugins/index.js +19 -5
  30. package/dist/cli/plugins/tempo.js +7 -3
  31. package/dist/cli/sessions/Manager.js +7 -4
  32. package/dist/cli/sessions/commands.d.ts +4 -4
  33. package/dist/cli/sessions/request.d.ts +2 -0
  34. package/dist/cli/sessions/request.js +18 -0
  35. package/dist/cli/sessions/store.js +28 -14
  36. package/dist/cli/utils.d.ts +1 -1
  37. package/dist/cli/validate/index.d.ts +3 -3
  38. package/dist/client/Mppx.d.ts +3 -0
  39. package/dist/client/Mppx.js +13 -5
  40. package/dist/client/Transport.d.ts +3 -5
  41. package/dist/client/Transport.js +1 -17
  42. package/dist/client/internal/Fetch.js +2 -6
  43. package/dist/discovery/Discovery.js +2 -1
  44. package/dist/discovery/OpenApi.d.ts +3 -5
  45. package/dist/discovery/OpenApi.js +13 -34
  46. package/dist/discovery/internal/Metadata.d.ts +20 -0
  47. package/dist/discovery/internal/Metadata.js +36 -0
  48. package/dist/evm/Methods.d.ts +11 -11
  49. package/dist/evm/Types.d.ts +17 -17
  50. package/dist/evm/client/Charge.d.ts +11 -11
  51. package/dist/evm/client/Charge.js +8 -0
  52. package/dist/evm/client/Methods.d.ts +11 -11
  53. package/dist/evm/server/Charge.d.ts +1 -1
  54. package/dist/evm/server/Charge.js +2 -0
  55. package/dist/evm/server/Methods.d.ts +11 -11
  56. package/dist/internal/HeaderCodec.d.ts +2 -2
  57. package/dist/internal/types.d.ts +6 -0
  58. package/dist/proxy/Proxy.d.ts +2 -0
  59. package/dist/proxy/Proxy.js +117 -9
  60. package/dist/proxy/Service.d.ts +36 -1
  61. package/dist/proxy/Service.js +9 -8
  62. package/dist/proxy/services/anthropic.js +1 -0
  63. package/dist/proxy/services/openai.js +1 -0
  64. package/dist/proxy/services/stripe.js +1 -0
  65. package/dist/server/Mppx.d.ts +75 -13
  66. package/dist/server/Mppx.js +201 -23
  67. package/dist/server/core.d.ts +9 -0
  68. package/dist/server/core.js +9 -0
  69. package/dist/server/internal/html/config.d.ts +9 -9
  70. package/dist/server/internal/html/constants.d.ts +17 -17
  71. package/dist/stripe/Methods.d.ts +10 -10
  72. package/dist/stripe/client/Charge.d.ts +10 -10
  73. package/dist/stripe/client/Methods.d.ts +10 -10
  74. package/dist/stripe/internal/constants.d.ts +1 -1
  75. package/dist/stripe/internal/constants.js +1 -1
  76. package/dist/stripe/internal/types.d.ts +1 -0
  77. package/dist/stripe/server/Charge.d.ts +11 -11
  78. package/dist/stripe/server/Charge.js +51 -5
  79. package/dist/stripe/server/Methods.d.ts +137 -48
  80. package/dist/stripe/server/Methods.js +265 -4
  81. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  82. package/dist/stripe/server/internal/deposit-address.js +28 -0
  83. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  84. package/dist/stripe/server/internal/html.gen.js +1 -1
  85. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  86. package/dist/stripe/server/internal/record-payment.js +42 -0
  87. package/dist/stripe/server/internal/request.d.ts +25 -0
  88. package/dist/stripe/server/internal/request.js +29 -0
  89. package/dist/stripe/server/spt.d.ts +8 -0
  90. package/dist/stripe/server/spt.js +8 -0
  91. package/dist/tap/Constants.d.ts +28 -0
  92. package/dist/tap/Constants.js +32 -0
  93. package/dist/tap/Types.d.ts +11 -0
  94. package/dist/tap/Types.js +2 -0
  95. package/dist/tap/client/index.d.ts +26 -0
  96. package/dist/tap/client/index.js +33 -0
  97. package/dist/tap/index.d.ts +5 -0
  98. package/dist/tap/index.js +5 -0
  99. package/dist/tap/server/index.d.ts +20 -0
  100. package/dist/tap/server/index.js +36 -0
  101. package/dist/tempo/Attribution.d.ts +1 -1
  102. package/dist/tempo/Methods.d.ts +73 -60
  103. package/dist/tempo/Methods.js +14 -3
  104. package/dist/tempo/Proof.d.ts +16 -16
  105. package/dist/tempo/client/Charge.d.ts +22 -19
  106. package/dist/tempo/client/Charge.js +32 -16
  107. package/dist/tempo/client/Methods.d.ts +51 -38
  108. package/dist/tempo/client/Subscription.d.ts +23 -23
  109. package/dist/tempo/internal/address.d.ts +2 -1
  110. package/dist/tempo/internal/address.js +3 -1
  111. package/dist/tempo/internal/auto-swap.js +4 -19
  112. package/dist/tempo/internal/defaults.d.ts +17 -6
  113. package/dist/tempo/internal/defaults.js +11 -0
  114. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  115. package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
  116. package/dist/tempo/internal/machine-token-charge.js +113 -0
  117. package/dist/tempo/internal/machine-token-session.d.ts +88 -0
  118. package/dist/tempo/internal/machine-token-session.js +173 -0
  119. package/dist/tempo/internal/proof.d.ts +17 -17
  120. package/dist/tempo/internal/signature-envelope.d.ts +14 -0
  121. package/dist/tempo/internal/signature-envelope.js +28 -0
  122. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
  123. package/dist/tempo/legacy/client/ChannelOps.js +11 -5
  124. package/dist/tempo/legacy/client/Session.d.ts +33 -21
  125. package/dist/tempo/legacy/client/Session.js +3 -3
  126. package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
  127. package/dist/tempo/legacy/client/SessionManager.js +2 -0
  128. package/dist/tempo/legacy/index.d.ts +1 -3
  129. package/dist/tempo/legacy/index.js +1 -3
  130. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  131. package/dist/tempo/server/Charge.d.ts +28 -11
  132. package/dist/tempo/server/Charge.js +101 -55
  133. package/dist/tempo/server/Methods.d.ts +58 -56
  134. package/dist/tempo/server/Methods.js +8 -18
  135. package/dist/tempo/server/Relay.d.ts +1 -1
  136. package/dist/tempo/server/Relay.js +2 -2
  137. package/dist/tempo/server/Subscription.d.ts +25 -25
  138. package/dist/tempo/server/Subscription.js +2 -0
  139. package/dist/tempo/server/index.d.ts +1 -1
  140. package/dist/tempo/server/index.js +1 -1
  141. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  142. package/dist/tempo/server/internal/html.gen.js +1 -1
  143. package/dist/tempo/server/internal/transport.d.ts +2 -0
  144. package/dist/tempo/server/internal/transport.js +9 -2
  145. package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
  146. package/dist/tempo/session/client/ChannelOps.js +35 -6
  147. package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
  148. package/dist/tempo/session/client/ChannelStore.js +2 -2
  149. package/dist/tempo/session/client/CredentialState.d.ts +18 -3
  150. package/dist/tempo/session/client/CredentialState.js +77 -76
  151. package/dist/tempo/session/client/Runtime.d.ts +4 -2
  152. package/dist/tempo/session/client/Runtime.js +21 -5
  153. package/dist/tempo/session/client/Session.d.ts +34 -22
  154. package/dist/tempo/session/client/Session.js +186 -63
  155. package/dist/tempo/session/client/SessionManager.d.ts +3 -1
  156. package/dist/tempo/session/client/SessionManager.js +35 -11
  157. package/dist/tempo/session/client/Transports.d.ts +2 -0
  158. package/dist/tempo/session/client/Transports.js +12 -2
  159. package/dist/tempo/session/precompile/Chain.d.ts +37 -2
  160. package/dist/tempo/session/precompile/Chain.js +116 -15
  161. package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
  162. package/dist/tempo/session/precompile/Protocol.js +7 -0
  163. package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
  164. package/dist/tempo/session/precompile/Voucher.js +6 -12
  165. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  166. package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
  167. package/dist/tempo/session/server/ChannelStore.js +27 -12
  168. package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
  169. package/dist/tempo/session/server/CredentialVerification.js +359 -89
  170. package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
  171. package/dist/tempo/session/server/MeteredStream.js +8 -5
  172. package/dist/tempo/session/server/RequestState.d.ts +19 -0
  173. package/dist/tempo/session/server/RequestState.js +61 -15
  174. package/dist/tempo/session/server/Session.d.ts +46 -23
  175. package/dist/tempo/session/server/Session.js +150 -56
  176. package/dist/tempo/session/server/Settlement.d.ts +11 -4
  177. package/dist/tempo/session/server/Settlement.js +53 -21
  178. package/dist/tempo/session/server/Sse.d.ts +3 -1
  179. package/dist/tempo/session/server/Sse.js +2 -1
  180. package/dist/tempo/session/server/Transports.d.ts +1 -1
  181. package/dist/tempo/session/server/Transports.js +1 -0
  182. package/dist/tempo/session/server/Ws.d.ts +6 -1
  183. package/dist/tempo/session/server/Ws.js +1 -0
  184. package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
  185. package/dist/web-bot-auth/Constants.d.ts +20 -0
  186. package/dist/web-bot-auth/Constants.js +24 -0
  187. package/dist/web-bot-auth/Types.d.ts +10 -0
  188. package/dist/web-bot-auth/Types.js +2 -0
  189. package/dist/web-bot-auth/client/index.d.ts +29 -0
  190. package/dist/web-bot-auth/client/index.js +64 -0
  191. package/dist/web-bot-auth/index.d.ts +7 -0
  192. package/dist/web-bot-auth/index.js +7 -0
  193. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  194. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  195. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  196. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  197. package/dist/web-bot-auth/server/index.d.ts +35 -0
  198. package/dist/web-bot-auth/server/index.js +88 -0
  199. package/dist/x402/Types.d.ts +6 -6
  200. package/dist/x402/client/Exact.d.ts +8 -0
  201. package/dist/x402/client/Exact.js +40 -10
  202. package/dist/x402/server/EvmCharge.d.ts +22 -0
  203. package/dist/x402/server/EvmCharge.js +54 -20
  204. package/package.json +28 -34
  205. package/dist/BodyDigest.d.ts.map +0 -1
  206. package/dist/BodyDigest.js.map +0 -1
  207. package/dist/Challenge.d.ts.map +0 -1
  208. package/dist/Challenge.js.map +0 -1
  209. package/dist/Constants.d.ts.map +0 -1
  210. package/dist/Constants.js.map +0 -1
  211. package/dist/Credential.d.ts.map +0 -1
  212. package/dist/Credential.js.map +0 -1
  213. package/dist/Errors.d.ts.map +0 -1
  214. package/dist/Errors.js.map +0 -1
  215. package/dist/Expires.d.ts.map +0 -1
  216. package/dist/Expires.js.map +0 -1
  217. package/dist/Html.d.ts.map +0 -1
  218. package/dist/Html.js.map +0 -1
  219. package/dist/Mcp.d.ts.map +0 -1
  220. package/dist/Mcp.js.map +0 -1
  221. package/dist/Method.d.ts.map +0 -1
  222. package/dist/Method.js.map +0 -1
  223. package/dist/PaymentRequest.d.ts.map +0 -1
  224. package/dist/PaymentRequest.js.map +0 -1
  225. package/dist/Receipt.d.ts.map +0 -1
  226. package/dist/Receipt.js.map +0 -1
  227. package/dist/Store.d.ts.map +0 -1
  228. package/dist/Store.js.map +0 -1
  229. package/dist/bin.d.ts.map +0 -1
  230. package/dist/bin.js.map +0 -1
  231. package/dist/cli/account.d.ts.map +0 -1
  232. package/dist/cli/account.js.map +0 -1
  233. package/dist/cli/cli.d.ts.map +0 -1
  234. package/dist/cli/cli.js.map +0 -1
  235. package/dist/cli/config.d.ts.map +0 -1
  236. package/dist/cli/config.js.map +0 -1
  237. package/dist/cli/internal.d.ts.map +0 -1
  238. package/dist/cli/internal.js.map +0 -1
  239. package/dist/cli/plugins/evm.d.ts.map +0 -1
  240. package/dist/cli/plugins/evm.js.map +0 -1
  241. package/dist/cli/plugins/index.d.ts.map +0 -1
  242. package/dist/cli/plugins/index.js.map +0 -1
  243. package/dist/cli/plugins/plugin.d.ts.map +0 -1
  244. package/dist/cli/plugins/plugin.js.map +0 -1
  245. package/dist/cli/plugins/stripe.d.ts.map +0 -1
  246. package/dist/cli/plugins/stripe.js.map +0 -1
  247. package/dist/cli/plugins/tempo.d.ts.map +0 -1
  248. package/dist/cli/plugins/tempo.js.map +0 -1
  249. package/dist/cli/sessions/Manager.d.ts.map +0 -1
  250. package/dist/cli/sessions/Manager.js.map +0 -1
  251. package/dist/cli/sessions/commands.d.ts.map +0 -1
  252. package/dist/cli/sessions/commands.js.map +0 -1
  253. package/dist/cli/sessions/request.d.ts.map +0 -1
  254. package/dist/cli/sessions/request.js.map +0 -1
  255. package/dist/cli/sessions/store.d.ts.map +0 -1
  256. package/dist/cli/sessions/store.js.map +0 -1
  257. package/dist/cli/utils.d.ts.map +0 -1
  258. package/dist/cli/utils.js.map +0 -1
  259. package/dist/cli/validate/challenge.d.ts.map +0 -1
  260. package/dist/cli/validate/challenge.js.map +0 -1
  261. package/dist/cli/validate/discovery.d.ts.map +0 -1
  262. package/dist/cli/validate/discovery.js.map +0 -1
  263. package/dist/cli/validate/helpers.d.ts.map +0 -1
  264. package/dist/cli/validate/helpers.js.map +0 -1
  265. package/dist/cli/validate/index.d.ts.map +0 -1
  266. package/dist/cli/validate/index.js.map +0 -1
  267. package/dist/cli/validate/messages.d.ts.map +0 -1
  268. package/dist/cli/validate/messages.js.map +0 -1
  269. package/dist/cli/validate/payment.d.ts.map +0 -1
  270. package/dist/cli/validate/payment.js.map +0 -1
  271. package/dist/client/Methods.d.ts.map +0 -1
  272. package/dist/client/Methods.js.map +0 -1
  273. package/dist/client/Mppx.d.ts.map +0 -1
  274. package/dist/client/Mppx.js.map +0 -1
  275. package/dist/client/Transport.d.ts.map +0 -1
  276. package/dist/client/Transport.js.map +0 -1
  277. package/dist/client/index.d.ts.map +0 -1
  278. package/dist/client/index.js.map +0 -1
  279. package/dist/client/internal/Fetch.d.ts.map +0 -1
  280. package/dist/client/internal/Fetch.js.map +0 -1
  281. package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
  282. package/dist/client/internal/MethodChallenge.js.map +0 -1
  283. package/dist/client/internal/MethodResponse.d.ts.map +0 -1
  284. package/dist/client/internal/MethodResponse.js.map +0 -1
  285. package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
  286. package/dist/client/internal/protocols/Mcp.js.map +0 -1
  287. package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
  288. package/dist/client/internal/protocols/Mpp.js.map +0 -1
  289. package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
  290. package/dist/client/internal/protocols/Protocol.js.map +0 -1
  291. package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
  292. package/dist/client/internal/protocols/Shared.js.map +0 -1
  293. package/dist/client/internal/protocols/X402.d.ts.map +0 -1
  294. package/dist/client/internal/protocols/X402.js.map +0 -1
  295. package/dist/client/node.d.ts.map +0 -1
  296. package/dist/client/node.js.map +0 -1
  297. package/dist/discovery/Discovery.d.ts.map +0 -1
  298. package/dist/discovery/Discovery.js.map +0 -1
  299. package/dist/discovery/OpenApi.d.ts.map +0 -1
  300. package/dist/discovery/OpenApi.js.map +0 -1
  301. package/dist/discovery/Validate.d.ts.map +0 -1
  302. package/dist/discovery/Validate.js.map +0 -1
  303. package/dist/discovery/index.d.ts.map +0 -1
  304. package/dist/discovery/index.js.map +0 -1
  305. package/dist/evm/Assets.d.ts.map +0 -1
  306. package/dist/evm/Assets.js.map +0 -1
  307. package/dist/evm/Chains.d.ts.map +0 -1
  308. package/dist/evm/Chains.js.map +0 -1
  309. package/dist/evm/Methods.d.ts.map +0 -1
  310. package/dist/evm/Methods.js.map +0 -1
  311. package/dist/evm/Types.d.ts.map +0 -1
  312. package/dist/evm/Types.js.map +0 -1
  313. package/dist/evm/client/Charge.d.ts.map +0 -1
  314. package/dist/evm/client/Charge.js.map +0 -1
  315. package/dist/evm/client/Methods.d.ts.map +0 -1
  316. package/dist/evm/client/Methods.js.map +0 -1
  317. package/dist/evm/client/index.d.ts.map +0 -1
  318. package/dist/evm/client/index.js.map +0 -1
  319. package/dist/evm/index.d.ts.map +0 -1
  320. package/dist/evm/index.js.map +0 -1
  321. package/dist/evm/server/Charge.d.ts.map +0 -1
  322. package/dist/evm/server/Charge.js.map +0 -1
  323. package/dist/evm/server/Methods.d.ts.map +0 -1
  324. package/dist/evm/server/Methods.js.map +0 -1
  325. package/dist/evm/server/index.d.ts.map +0 -1
  326. package/dist/evm/server/index.js.map +0 -1
  327. package/dist/index.d.ts.map +0 -1
  328. package/dist/index.js.map +0 -1
  329. package/dist/internal/AcceptPayment.d.ts.map +0 -1
  330. package/dist/internal/AcceptPayment.js.map +0 -1
  331. package/dist/internal/HeaderCodec.d.ts.map +0 -1
  332. package/dist/internal/HeaderCodec.js.map +0 -1
  333. package/dist/internal/constantTimeEqual.d.ts.map +0 -1
  334. package/dist/internal/constantTimeEqual.js.map +0 -1
  335. package/dist/internal/env.d.ts.map +0 -1
  336. package/dist/internal/env.js.map +0 -1
  337. package/dist/internal/types.d.ts.map +0 -1
  338. package/dist/internal/types.js.map +0 -1
  339. package/dist/mcp/client/McpClient.d.ts.map +0 -1
  340. package/dist/mcp/client/McpClient.js.map +0 -1
  341. package/dist/mcp/client/index.d.ts.map +0 -1
  342. package/dist/mcp/client/index.js.map +0 -1
  343. package/dist/mcp/server/Transport.d.ts.map +0 -1
  344. package/dist/mcp/server/Transport.js.map +0 -1
  345. package/dist/mcp/server/index.d.ts.map +0 -1
  346. package/dist/mcp/server/index.js.map +0 -1
  347. package/dist/middlewares/elysia.d.ts.map +0 -1
  348. package/dist/middlewares/elysia.js.map +0 -1
  349. package/dist/middlewares/express.d.ts.map +0 -1
  350. package/dist/middlewares/express.js.map +0 -1
  351. package/dist/middlewares/hono.d.ts.map +0 -1
  352. package/dist/middlewares/hono.js.map +0 -1
  353. package/dist/middlewares/internal/mppx.d.ts.map +0 -1
  354. package/dist/middlewares/internal/mppx.js.map +0 -1
  355. package/dist/middlewares/nextjs.d.ts.map +0 -1
  356. package/dist/middlewares/nextjs.js.map +0 -1
  357. package/dist/proxy/Proxy.d.ts.map +0 -1
  358. package/dist/proxy/Proxy.js.map +0 -1
  359. package/dist/proxy/Service.d.ts.map +0 -1
  360. package/dist/proxy/Service.js.map +0 -1
  361. package/dist/proxy/index.d.ts.map +0 -1
  362. package/dist/proxy/index.js.map +0 -1
  363. package/dist/proxy/internal/Headers.d.ts.map +0 -1
  364. package/dist/proxy/internal/Headers.js.map +0 -1
  365. package/dist/proxy/internal/Route.d.ts.map +0 -1
  366. package/dist/proxy/internal/Route.js.map +0 -1
  367. package/dist/proxy/services/anthropic.d.ts.map +0 -1
  368. package/dist/proxy/services/anthropic.js.map +0 -1
  369. package/dist/proxy/services/openai.d.ts.map +0 -1
  370. package/dist/proxy/services/openai.js.map +0 -1
  371. package/dist/proxy/services/stripe.d.ts.map +0 -1
  372. package/dist/proxy/services/stripe.js.map +0 -1
  373. package/dist/server/Methods.d.ts.map +0 -1
  374. package/dist/server/Methods.js.map +0 -1
  375. package/dist/server/Mppx.d.ts.map +0 -1
  376. package/dist/server/Mppx.js.map +0 -1
  377. package/dist/server/NodeListener.d.ts.map +0 -1
  378. package/dist/server/NodeListener.js.map +0 -1
  379. package/dist/server/Request.d.ts.map +0 -1
  380. package/dist/server/Request.js.map +0 -1
  381. package/dist/server/Response.d.ts.map +0 -1
  382. package/dist/server/Response.js.map +0 -1
  383. package/dist/server/Transport.d.ts.map +0 -1
  384. package/dist/server/Transport.js.map +0 -1
  385. package/dist/server/index.d.ts.map +0 -1
  386. package/dist/server/index.js.map +0 -1
  387. package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
  388. package/dist/server/internal/html/compose.main.gen.js.map +0 -1
  389. package/dist/server/internal/html/config.d.ts.map +0 -1
  390. package/dist/server/internal/html/config.js.map +0 -1
  391. package/dist/server/internal/html/constants.d.ts.map +0 -1
  392. package/dist/server/internal/html/constants.js.map +0 -1
  393. package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
  394. package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
  395. package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
  396. package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
  397. package/dist/server/internal/scope.d.ts.map +0 -1
  398. package/dist/server/internal/scope.js.map +0 -1
  399. package/dist/stripe/Methods.d.ts.map +0 -1
  400. package/dist/stripe/Methods.js.map +0 -1
  401. package/dist/stripe/client/Charge.d.ts.map +0 -1
  402. package/dist/stripe/client/Charge.js.map +0 -1
  403. package/dist/stripe/client/Methods.d.ts.map +0 -1
  404. package/dist/stripe/client/Methods.js.map +0 -1
  405. package/dist/stripe/client/index.d.ts.map +0 -1
  406. package/dist/stripe/client/index.js.map +0 -1
  407. package/dist/stripe/index.d.ts.map +0 -1
  408. package/dist/stripe/index.js.map +0 -1
  409. package/dist/stripe/internal/constants.d.ts.map +0 -1
  410. package/dist/stripe/internal/constants.js.map +0 -1
  411. package/dist/stripe/internal/types.d.ts.map +0 -1
  412. package/dist/stripe/internal/types.js.map +0 -1
  413. package/dist/stripe/server/Charge.d.ts.map +0 -1
  414. package/dist/stripe/server/Charge.js.map +0 -1
  415. package/dist/stripe/server/Methods.d.ts.map +0 -1
  416. package/dist/stripe/server/Methods.js.map +0 -1
  417. package/dist/stripe/server/index.d.ts.map +0 -1
  418. package/dist/stripe/server/index.js.map +0 -1
  419. package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
  420. package/dist/stripe/server/internal/html/types.js.map +0 -1
  421. package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
  422. package/dist/stripe/server/internal/html.gen.js.map +0 -1
  423. package/dist/tempo/Attribution.d.ts.map +0 -1
  424. package/dist/tempo/Attribution.js.map +0 -1
  425. package/dist/tempo/Methods.d.ts.map +0 -1
  426. package/dist/tempo/Methods.js.map +0 -1
  427. package/dist/tempo/Proof.d.ts.map +0 -1
  428. package/dist/tempo/Proof.js.map +0 -1
  429. package/dist/tempo/client/Charge.d.ts.map +0 -1
  430. package/dist/tempo/client/Charge.js.map +0 -1
  431. package/dist/tempo/client/Methods.d.ts.map +0 -1
  432. package/dist/tempo/client/Methods.js.map +0 -1
  433. package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
  434. package/dist/tempo/client/ResolveAccount.js.map +0 -1
  435. package/dist/tempo/client/Subscription.d.ts.map +0 -1
  436. package/dist/tempo/client/Subscription.js.map +0 -1
  437. package/dist/tempo/client/index.d.ts.map +0 -1
  438. package/dist/tempo/client/index.js.map +0 -1
  439. package/dist/tempo/index.d.ts.map +0 -1
  440. package/dist/tempo/index.js.map +0 -1
  441. package/dist/tempo/internal/account.d.ts.map +0 -1
  442. package/dist/tempo/internal/account.js.map +0 -1
  443. package/dist/tempo/internal/address.d.ts.map +0 -1
  444. package/dist/tempo/internal/address.js.map +0 -1
  445. package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
  446. package/dist/tempo/internal/auto-swap.js.map +0 -1
  447. package/dist/tempo/internal/charge.d.ts.map +0 -1
  448. package/dist/tempo/internal/charge.js.map +0 -1
  449. package/dist/tempo/internal/defaults.d.ts.map +0 -1
  450. package/dist/tempo/internal/defaults.js.map +0 -1
  451. package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
  452. package/dist/tempo/internal/fee-payer.js.map +0 -1
  453. package/dist/tempo/internal/fee-token.d.ts.map +0 -1
  454. package/dist/tempo/internal/fee-token.js.map +0 -1
  455. package/dist/tempo/internal/proof.d.ts.map +0 -1
  456. package/dist/tempo/internal/proof.js.map +0 -1
  457. package/dist/tempo/internal/selectors.d.ts.map +0 -1
  458. package/dist/tempo/internal/selectors.js.map +0 -1
  459. package/dist/tempo/internal/types.d.ts.map +0 -1
  460. package/dist/tempo/internal/types.js.map +0 -1
  461. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
  462. package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
  463. package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
  464. package/dist/tempo/legacy/client/Session.js.map +0 -1
  465. package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
  466. package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
  467. package/dist/tempo/legacy/client/index.d.ts.map +0 -1
  468. package/dist/tempo/legacy/client/index.js.map +0 -1
  469. package/dist/tempo/legacy/index.d.ts.map +0 -1
  470. package/dist/tempo/legacy/index.js.map +0 -1
  471. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  472. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  473. package/dist/tempo/legacy/server/Session.js +0 -698
  474. package/dist/tempo/legacy/server/Session.js.map +0 -1
  475. package/dist/tempo/legacy/server/index.d.ts +0 -5
  476. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  477. package/dist/tempo/legacy/server/index.js +0 -5
  478. package/dist/tempo/legacy/server/index.js.map +0 -1
  479. package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
  480. package/dist/tempo/legacy/session/Chain.js.map +0 -1
  481. package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
  482. package/dist/tempo/legacy/session/Channel.js.map +0 -1
  483. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  484. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  485. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  486. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  487. package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
  488. package/dist/tempo/legacy/session/Types.js.map +0 -1
  489. package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
  490. package/dist/tempo/legacy/session/Voucher.js.map +0 -1
  491. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
  492. package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
  493. package/dist/tempo/legacy/session/index.d.ts.map +0 -1
  494. package/dist/tempo/legacy/session/index.js.map +0 -1
  495. package/dist/tempo/server/Charge.d.ts.map +0 -1
  496. package/dist/tempo/server/Charge.js.map +0 -1
  497. package/dist/tempo/server/Methods.d.ts.map +0 -1
  498. package/dist/tempo/server/Methods.js.map +0 -1
  499. package/dist/tempo/server/Relay.d.ts.map +0 -1
  500. package/dist/tempo/server/Relay.js.map +0 -1
  501. package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
  502. package/dist/tempo/server/SponsorBudget.js.map +0 -1
  503. package/dist/tempo/server/Subscription.d.ts.map +0 -1
  504. package/dist/tempo/server/Subscription.js.map +0 -1
  505. package/dist/tempo/server/index.d.ts.map +0 -1
  506. package/dist/tempo/server/index.js.map +0 -1
  507. package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
  508. package/dist/tempo/server/internal/html.gen.js.map +0 -1
  509. package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
  510. package/dist/tempo/server/internal/request-body.js.map +0 -1
  511. package/dist/tempo/server/internal/transport.d.ts.map +0 -1
  512. package/dist/tempo/server/internal/transport.js.map +0 -1
  513. package/dist/tempo/session/Snapshot.d.ts.map +0 -1
  514. package/dist/tempo/session/Snapshot.js.map +0 -1
  515. package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
  516. package/dist/tempo/session/client/ChannelOps.js.map +0 -1
  517. package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
  518. package/dist/tempo/session/client/ChannelStore.js.map +0 -1
  519. package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
  520. package/dist/tempo/session/client/CredentialState.js.map +0 -1
  521. package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
  522. package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
  523. package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
  524. package/dist/tempo/session/client/Runtime.js.map +0 -1
  525. package/dist/tempo/session/client/Session.d.ts.map +0 -1
  526. package/dist/tempo/session/client/Session.js.map +0 -1
  527. package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
  528. package/dist/tempo/session/client/SessionManager.js.map +0 -1
  529. package/dist/tempo/session/client/Transports.d.ts.map +0 -1
  530. package/dist/tempo/session/client/Transports.js.map +0 -1
  531. package/dist/tempo/session/client/index.d.ts.map +0 -1
  532. package/dist/tempo/session/client/index.js.map +0 -1
  533. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
  534. package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
  535. package/dist/tempo/session/index.d.ts.map +0 -1
  536. package/dist/tempo/session/index.js.map +0 -1
  537. package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
  538. package/dist/tempo/session/precompile/Chain.js.map +0 -1
  539. package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
  540. package/dist/tempo/session/precompile/Channel.js.map +0 -1
  541. package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
  542. package/dist/tempo/session/precompile/Protocol.js.map +0 -1
  543. package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
  544. package/dist/tempo/session/precompile/Voucher.js.map +0 -1
  545. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
  546. package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
  547. package/dist/tempo/session/precompile/index.d.ts.map +0 -1
  548. package/dist/tempo/session/precompile/index.js.map +0 -1
  549. package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
  550. package/dist/tempo/session/server/ChannelOps.js.map +0 -1
  551. package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
  552. package/dist/tempo/session/server/ChannelStore.js.map +0 -1
  553. package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
  554. package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
  555. package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
  556. package/dist/tempo/session/server/MeteredStream.js.map +0 -1
  557. package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
  558. package/dist/tempo/session/server/RequestState.js.map +0 -1
  559. package/dist/tempo/session/server/Session.d.ts.map +0 -1
  560. package/dist/tempo/session/server/Session.js.map +0 -1
  561. package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
  562. package/dist/tempo/session/server/Settlement.js.map +0 -1
  563. package/dist/tempo/session/server/Sse.d.ts.map +0 -1
  564. package/dist/tempo/session/server/Sse.js.map +0 -1
  565. package/dist/tempo/session/server/Transports.d.ts.map +0 -1
  566. package/dist/tempo/session/server/Transports.js.map +0 -1
  567. package/dist/tempo/session/server/Ws.d.ts.map +0 -1
  568. package/dist/tempo/session/server/Ws.js.map +0 -1
  569. package/dist/tempo/session/server/index.d.ts.map +0 -1
  570. package/dist/tempo/session/server/index.js.map +0 -1
  571. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
  572. package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
  573. package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
  574. package/dist/tempo/subscription/Receipt.js.map +0 -1
  575. package/dist/tempo/subscription/Store.d.ts.map +0 -1
  576. package/dist/tempo/subscription/Store.js.map +0 -1
  577. package/dist/tempo/subscription/Types.d.ts.map +0 -1
  578. package/dist/tempo/subscription/Types.js.map +0 -1
  579. package/dist/tempo/subscription/index.d.ts.map +0 -1
  580. package/dist/tempo/subscription/index.js.map +0 -1
  581. package/dist/validation/core.d.ts.map +0 -1
  582. package/dist/validation/core.js.map +0 -1
  583. package/dist/validation/index.d.ts.map +0 -1
  584. package/dist/validation/index.js.map +0 -1
  585. package/dist/viem/Account.d.ts.map +0 -1
  586. package/dist/viem/Account.js.map +0 -1
  587. package/dist/viem/Client.d.ts.map +0 -1
  588. package/dist/viem/Client.js.map +0 -1
  589. package/dist/x402/Assets.d.ts.map +0 -1
  590. package/dist/x402/Assets.js.map +0 -1
  591. package/dist/x402/Header.d.ts.map +0 -1
  592. package/dist/x402/Header.js.map +0 -1
  593. package/dist/x402/Types.d.ts.map +0 -1
  594. package/dist/x402/Types.js.map +0 -1
  595. package/dist/x402/client/Exact.d.ts.map +0 -1
  596. package/dist/x402/client/Exact.js.map +0 -1
  597. package/dist/x402/index.d.ts.map +0 -1
  598. package/dist/x402/index.js.map +0 -1
  599. package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
  600. package/dist/x402/internal/ChallengeBrand.js.map +0 -1
  601. package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
  602. package/dist/x402/internal/RouteBinding.js.map +0 -1
  603. package/dist/x402/server/EvmCharge.d.ts.map +0 -1
  604. package/dist/x402/server/EvmCharge.js.map +0 -1
  605. package/dist/x402/server/Facilitator.d.ts.map +0 -1
  606. package/dist/x402/server/Facilitator.js.map +0 -1
  607. package/dist/zod.d.ts.map +0 -1
  608. package/dist/zod.js.map +0 -1
  609. package/src/BodyDigest.test.ts +0 -43
  610. package/src/BodyDigest.ts +0 -55
  611. package/src/Challenge.fuzz.test.ts +0 -121
  612. package/src/Challenge.test-d.ts +0 -82
  613. package/src/Challenge.test.ts +0 -995
  614. package/src/Challenge.ts +0 -683
  615. package/src/Constants.ts +0 -58
  616. package/src/Credential.fuzz.test.ts +0 -62
  617. package/src/Credential.test.ts +0 -378
  618. package/src/Credential.ts +0 -217
  619. package/src/Errors.test.ts +0 -520
  620. package/src/Errors.ts +0 -448
  621. package/src/Expires.test.ts +0 -112
  622. package/src/Expires.ts +0 -59
  623. package/src/Html.ts +0 -67
  624. package/src/Mcp.ts +0 -85
  625. package/src/Method.test.ts +0 -177
  626. package/src/Method.ts +0 -617
  627. package/src/PaymentRequest.test.ts +0 -147
  628. package/src/PaymentRequest.ts +0 -108
  629. package/src/Receipt.test.ts +0 -151
  630. package/src/Receipt.ts +0 -146
  631. package/src/Store.test-d.ts +0 -195
  632. package/src/Store.test.ts +0 -357
  633. package/src/Store.ts +0 -329
  634. package/src/bin.ts +0 -4
  635. package/src/cli/account.ts +0 -269
  636. package/src/cli/cli.test.ts +0 -2221
  637. package/src/cli/cli.ts +0 -1649
  638. package/src/cli/config.test.ts +0 -89
  639. package/src/cli/config.ts +0 -50
  640. package/src/cli/internal.ts +0 -114
  641. package/src/cli/mcp.test.ts +0 -262
  642. package/src/cli/plugins/evm.ts +0 -55
  643. package/src/cli/plugins/index.ts +0 -4
  644. package/src/cli/plugins/plugin.ts +0 -84
  645. package/src/cli/plugins/stripe.ts +0 -174
  646. package/src/cli/plugins/tempo.ts +0 -1102
  647. package/src/cli/sessions/Manager.test.ts +0 -249
  648. package/src/cli/sessions/Manager.ts +0 -93
  649. package/src/cli/sessions/commands.ts +0 -444
  650. package/src/cli/sessions/request.test.ts +0 -51
  651. package/src/cli/sessions/request.ts +0 -353
  652. package/src/cli/sessions/store.test.ts +0 -581
  653. package/src/cli/sessions/store.ts +0 -940
  654. package/src/cli/utils.test.ts +0 -156
  655. package/src/cli/utils.ts +0 -394
  656. package/src/cli/validate/challenge.ts +0 -565
  657. package/src/cli/validate/discovery.test.ts +0 -435
  658. package/src/cli/validate/discovery.ts +0 -221
  659. package/src/cli/validate/helpers.ts +0 -166
  660. package/src/cli/validate/index.ts +0 -229
  661. package/src/cli/validate/messages.ts +0 -7
  662. package/src/cli/validate/payment.ts +0 -774
  663. package/src/cli/validate.test.ts +0 -843
  664. package/src/client/Methods.ts +0 -8
  665. package/src/client/Mppx.test-d.ts +0 -270
  666. package/src/client/Mppx.test.ts +0 -1065
  667. package/src/client/Mppx.ts +0 -466
  668. package/src/client/Transport.test.ts +0 -619
  669. package/src/client/Transport.ts +0 -191
  670. package/src/client/index.ts +0 -29
  671. package/src/client/internal/Fetch.browser.test.ts +0 -197
  672. package/src/client/internal/Fetch.test-d.ts +0 -109
  673. package/src/client/internal/Fetch.test.ts +0 -2336
  674. package/src/client/internal/Fetch.ts +0 -1079
  675. package/src/client/internal/MethodChallenge.ts +0 -35
  676. package/src/client/internal/MethodResponse.ts +0 -67
  677. package/src/client/internal/protocols/Mcp.test.ts +0 -220
  678. package/src/client/internal/protocols/Mcp.ts +0 -186
  679. package/src/client/internal/protocols/Mpp.ts +0 -21
  680. package/src/client/internal/protocols/Protocol.ts +0 -10
  681. package/src/client/internal/protocols/Shared.ts +0 -25
  682. package/src/client/internal/protocols/X402.ts +0 -46
  683. package/src/client/node.test.ts +0 -115
  684. package/src/client/node.ts +0 -247
  685. package/src/discovery/Discovery.test.ts +0 -214
  686. package/src/discovery/Discovery.ts +0 -105
  687. package/src/discovery/OpenApi.test.ts +0 -453
  688. package/src/discovery/OpenApi.ts +0 -224
  689. package/src/discovery/Validate.test.ts +0 -305
  690. package/src/discovery/Validate.ts +0 -77
  691. package/src/discovery/index.ts +0 -3
  692. package/src/env.d.ts +0 -12
  693. package/src/evm/Assets.ts +0 -1
  694. package/src/evm/Chains.ts +0 -11
  695. package/src/evm/Methods.ts +0 -44
  696. package/src/evm/PublicInterface.test-d.ts +0 -134
  697. package/src/evm/Types.ts +0 -140
  698. package/src/evm/client/Charge.test.ts +0 -347
  699. package/src/evm/client/Charge.ts +0 -187
  700. package/src/evm/client/Methods.ts +0 -19
  701. package/src/evm/client/index.ts +0 -6
  702. package/src/evm/index.ts +0 -16
  703. package/src/evm/server/Charge.test.ts +0 -339
  704. package/src/evm/server/Charge.ts +0 -290
  705. package/src/evm/server/Methods.ts +0 -22
  706. package/src/evm/server/index.ts +0 -6
  707. package/src/index.ts +0 -14
  708. package/src/internal/AcceptPayment.test.ts +0 -343
  709. package/src/internal/AcceptPayment.ts +0 -366
  710. package/src/internal/HeaderCodec.ts +0 -36
  711. package/src/internal/changeset.test.ts +0 -106
  712. package/src/internal/constantTimeEqual.test.ts +0 -47
  713. package/src/internal/constantTimeEqual.ts +0 -10
  714. package/src/internal/env.test.ts +0 -42
  715. package/src/internal/env.ts +0 -49
  716. package/src/internal/types.test-d.ts +0 -21
  717. package/src/internal/types.ts +0 -470
  718. package/src/mcp/client/McpClient.integration.test.ts +0 -652
  719. package/src/mcp/client/McpClient.test-d.ts +0 -144
  720. package/src/mcp/client/McpClient.test.ts +0 -463
  721. package/src/mcp/client/McpClient.ts +0 -307
  722. package/src/mcp/client/McpClient.unit.test.ts +0 -135
  723. package/src/mcp/client/index.ts +0 -2
  724. package/src/mcp/server/Transport.test.ts +0 -191
  725. package/src/mcp/server/Transport.ts +0 -111
  726. package/src/mcp/server/index.ts +0 -1
  727. package/src/middlewares/elysia.test.ts +0 -295
  728. package/src/middlewares/elysia.ts +0 -116
  729. package/src/middlewares/express.test.ts +0 -371
  730. package/src/middlewares/express.ts +0 -140
  731. package/src/middlewares/hono.test.ts +0 -476
  732. package/src/middlewares/hono.ts +0 -153
  733. package/src/middlewares/internal/mppx.test.ts +0 -177
  734. package/src/middlewares/internal/mppx.ts +0 -67
  735. package/src/middlewares/nextjs.test.ts +0 -369
  736. package/src/middlewares/nextjs.ts +0 -107
  737. package/src/proxy/Proxy.test.ts +0 -1031
  738. package/src/proxy/Proxy.ts +0 -345
  739. package/src/proxy/Service.test.ts +0 -182
  740. package/src/proxy/Service.ts +0 -253
  741. package/src/proxy/index.ts +0 -6
  742. package/src/proxy/internal/Headers.test.ts +0 -139
  743. package/src/proxy/internal/Headers.ts +0 -66
  744. package/src/proxy/internal/Route.test.ts +0 -217
  745. package/src/proxy/internal/Route.ts +0 -64
  746. package/src/proxy/services/anthropic.test.ts +0 -132
  747. package/src/proxy/services/anthropic.ts +0 -52
  748. package/src/proxy/services/openai.test.ts +0 -157
  749. package/src/proxy/services/openai.ts +0 -59
  750. package/src/proxy/services/stripe.test.ts +0 -175
  751. package/src/proxy/services/stripe.ts +0 -58
  752. package/src/server/Methods.ts +0 -3
  753. package/src/server/Mppx.authorize.test.ts +0 -210
  754. package/src/server/Mppx.test-d.ts +0 -360
  755. package/src/server/Mppx.test.ts +0 -5813
  756. package/src/server/Mppx.ts +0 -2623
  757. package/src/server/NodeListener.test.ts +0 -293
  758. package/src/server/NodeListener.ts +0 -45
  759. package/src/server/Request.test.ts +0 -255
  760. package/src/server/Request.ts +0 -155
  761. package/src/server/Response.test.ts +0 -32
  762. package/src/server/Response.ts +0 -45
  763. package/src/server/Transport.test.ts +0 -598
  764. package/src/server/Transport.ts +0 -320
  765. package/src/server/index.ts +0 -9
  766. package/src/server/internal/html/compose.main.gen.ts +0 -2
  767. package/src/server/internal/html/compose.main.ts +0 -88
  768. package/src/server/internal/html/config.ts +0 -672
  769. package/src/server/internal/html/constants.ts +0 -28
  770. package/src/server/internal/html/serviceWorker.client.ts +0 -28
  771. package/src/server/internal/html/serviceWorker.gen.ts +0 -2
  772. package/src/server/internal/html/serviceWorker.ts +0 -27
  773. package/src/server/internal/html/tsconfig.compose.json +0 -8
  774. package/src/server/internal/html/tsconfig.worker.client.json +0 -8
  775. package/src/server/internal/html/tsconfig.worker.json +0 -8
  776. package/src/server/internal/scope.ts +0 -43
  777. package/src/stripe/Charge.integration.test.ts +0 -329
  778. package/src/stripe/Methods.test.ts +0 -62
  779. package/src/stripe/Methods.ts +0 -44
  780. package/src/stripe/client/Charge.test.ts +0 -205
  781. package/src/stripe/client/Charge.ts +0 -132
  782. package/src/stripe/client/Methods.ts +0 -37
  783. package/src/stripe/client/index.ts +0 -2
  784. package/src/stripe/index.ts +0 -1
  785. package/src/stripe/internal/constants.ts +0 -7
  786. package/src/stripe/internal/types.ts +0 -46
  787. package/src/stripe/server/Charge.test-d.ts +0 -66
  788. package/src/stripe/server/Charge.test.ts +0 -621
  789. package/src/stripe/server/Charge.ts +0 -434
  790. package/src/stripe/server/Methods.ts +0 -24
  791. package/src/stripe/server/index.ts +0 -2
  792. package/src/stripe/server/internal/html/main.ts +0 -165
  793. package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
  794. package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
  795. package/src/stripe/server/internal/html/package.json +0 -9
  796. package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
  797. package/src/stripe/server/internal/html/tsconfig.json +0 -8
  798. package/src/stripe/server/internal/html/types.ts +0 -5
  799. package/src/stripe/server/internal/html.gen.ts +0 -2
  800. package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
  801. package/src/tempo/Attribution.test.ts +0 -294
  802. package/src/tempo/Attribution.ts +0 -185
  803. package/src/tempo/Methods.test.ts +0 -425
  804. package/src/tempo/Methods.ts +0 -367
  805. package/src/tempo/Proof.conformance.test.ts +0 -146
  806. package/src/tempo/Proof.test-d.ts +0 -32
  807. package/src/tempo/Proof.test.ts +0 -40
  808. package/src/tempo/Proof.ts +0 -69
  809. package/src/tempo/PublicExports.test-d.ts +0 -130
  810. package/src/tempo/Subscription.integration.test.ts +0 -591
  811. package/src/tempo/client/Charge.test.ts +0 -501
  812. package/src/tempo/client/Charge.ts +0 -289
  813. package/src/tempo/client/Methods.ts +0 -45
  814. package/src/tempo/client/ResolveAccount.ts +0 -46
  815. package/src/tempo/client/Subscription.test.ts +0 -180
  816. package/src/tempo/client/Subscription.ts +0 -156
  817. package/src/tempo/client/index.ts +0 -17
  818. package/src/tempo/index.ts +0 -5
  819. package/src/tempo/internal/account.ts +0 -56
  820. package/src/tempo/internal/address.ts +0 -6
  821. package/src/tempo/internal/auto-swap.test.ts +0 -198
  822. package/src/tempo/internal/auto-swap.ts +0 -188
  823. package/src/tempo/internal/charge.test.ts +0 -66
  824. package/src/tempo/internal/charge.ts +0 -43
  825. package/src/tempo/internal/defaults.test.ts +0 -95
  826. package/src/tempo/internal/defaults.ts +0 -53
  827. package/src/tempo/internal/fee-payer.test.ts +0 -1177
  828. package/src/tempo/internal/fee-payer.ts +0 -808
  829. package/src/tempo/internal/fee-token.test.ts +0 -165
  830. package/src/tempo/internal/fee-token.ts +0 -72
  831. package/src/tempo/internal/proof.test.ts +0 -97
  832. package/src/tempo/internal/proof.ts +0 -87
  833. package/src/tempo/internal/selectors.ts +0 -10
  834. package/src/tempo/internal/types.ts +0 -19
  835. package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
  836. package/src/tempo/legacy/README.md +0 -9
  837. package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
  838. package/src/tempo/legacy/client/ChannelOps.ts +0 -271
  839. package/src/tempo/legacy/client/Session.test.ts +0 -800
  840. package/src/tempo/legacy/client/Session.ts +0 -397
  841. package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
  842. package/src/tempo/legacy/client/SessionManager.ts +0 -909
  843. package/src/tempo/legacy/client/index.ts +0 -6
  844. package/src/tempo/legacy/index.ts +0 -6
  845. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  846. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  847. package/src/tempo/legacy/server/Session.ts +0 -1024
  848. package/src/tempo/legacy/server/index.ts +0 -4
  849. package/src/tempo/legacy/session/Chain.test.ts +0 -1349
  850. package/src/tempo/legacy/session/Chain.ts +0 -830
  851. package/src/tempo/legacy/session/Channel.test.ts +0 -109
  852. package/src/tempo/legacy/session/Channel.ts +0 -51
  853. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  854. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
  855. package/src/tempo/legacy/session/Types.ts +0 -91
  856. package/src/tempo/legacy/session/Voucher.test.ts +0 -410
  857. package/src/tempo/legacy/session/Voucher.ts +0 -183
  858. package/src/tempo/legacy/session/escrow.abi.ts +0 -760
  859. package/src/tempo/legacy/session/index.ts +0 -8
  860. package/src/tempo/server/AtomicStore.test-d.ts +0 -50
  861. package/src/tempo/server/Charge.test.ts +0 -6121
  862. package/src/tempo/server/Charge.ts +0 -1351
  863. package/src/tempo/server/Methods.ts +0 -106
  864. package/src/tempo/server/Relay.test.ts +0 -677
  865. package/src/tempo/server/Relay.ts +0 -297
  866. package/src/tempo/server/SponsorBudget.test.ts +0 -154
  867. package/src/tempo/server/SponsorBudget.ts +0 -219
  868. package/src/tempo/server/Sse.test.ts +0 -321
  869. package/src/tempo/server/Subscription.test.ts +0 -1944
  870. package/src/tempo/server/Subscription.ts +0 -1333
  871. package/src/tempo/server/index.ts +0 -12
  872. package/src/tempo/server/internal/html/main.ts +0 -115
  873. package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
  874. package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
  875. package/src/tempo/server/internal/html/package.json +0 -10
  876. package/src/tempo/server/internal/html/tsconfig.json +0 -8
  877. package/src/tempo/server/internal/html.gen.ts +0 -2
  878. package/src/tempo/server/internal/request-body.test.ts +0 -210
  879. package/src/tempo/server/internal/request-body.ts +0 -61
  880. package/src/tempo/server/internal/transport.test.ts +0 -903
  881. package/src/tempo/server/internal/transport.ts +0 -310
  882. package/src/tempo/session/README.md +0 -208
  883. package/src/tempo/session/Snapshot.test.ts +0 -41
  884. package/src/tempo/session/Snapshot.ts +0 -95
  885. package/src/tempo/session/client/ChannelOps.test.ts +0 -218
  886. package/src/tempo/session/client/ChannelOps.ts +0 -348
  887. package/src/tempo/session/client/ChannelStore.ts +0 -111
  888. package/src/tempo/session/client/CredentialState.test.ts +0 -789
  889. package/src/tempo/session/client/CredentialState.ts +0 -942
  890. package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
  891. package/src/tempo/session/client/Runtime.test.ts +0 -1104
  892. package/src/tempo/session/client/Runtime.ts +0 -1008
  893. package/src/tempo/session/client/Session.test.ts +0 -1355
  894. package/src/tempo/session/client/Session.ts +0 -420
  895. package/src/tempo/session/client/SessionManager.test.ts +0 -1899
  896. package/src/tempo/session/client/SessionManager.ts +0 -996
  897. package/src/tempo/session/client/Transports.test.ts +0 -1141
  898. package/src/tempo/session/client/Transports.ts +0 -1534
  899. package/src/tempo/session/client/index.ts +0 -40
  900. package/src/tempo/session/client/internal/SessionManager.ts +0 -36
  901. package/src/tempo/session/index.ts +0 -7
  902. package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
  903. package/src/tempo/session/precompile/Chain.test.ts +0 -1641
  904. package/src/tempo/session/precompile/Chain.ts +0 -1149
  905. package/src/tempo/session/precompile/Channel.test.ts +0 -147
  906. package/src/tempo/session/precompile/Channel.ts +0 -108
  907. package/src/tempo/session/precompile/Protocol.test.ts +0 -358
  908. package/src/tempo/session/precompile/Protocol.ts +0 -520
  909. package/src/tempo/session/precompile/Voucher.test.ts +0 -354
  910. package/src/tempo/session/precompile/Voucher.ts +0 -162
  911. package/src/tempo/session/precompile/escrow.abi.ts +0 -226
  912. package/src/tempo/session/precompile/index.ts +0 -33
  913. package/src/tempo/session/server/ChannelOps.test.ts +0 -129
  914. package/src/tempo/session/server/ChannelOps.ts +0 -157
  915. package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
  916. package/src/tempo/session/server/ChannelStore.ts +0 -835
  917. package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
  918. package/src/tempo/session/server/CredentialVerification.ts +0 -775
  919. package/src/tempo/session/server/MeteredStream.ts +0 -95
  920. package/src/tempo/session/server/RequestState.test.ts +0 -574
  921. package/src/tempo/session/server/RequestState.ts +0 -507
  922. package/src/tempo/session/server/Session.integration.test.ts +0 -449
  923. package/src/tempo/session/server/Session.test.ts +0 -3862
  924. package/src/tempo/session/server/Session.ts +0 -570
  925. package/src/tempo/session/server/Settlement.test.ts +0 -345
  926. package/src/tempo/session/server/Settlement.ts +0 -527
  927. package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
  928. package/src/tempo/session/server/Sse.test.ts +0 -557
  929. package/src/tempo/session/server/Sse.ts +0 -254
  930. package/src/tempo/session/server/Transports.test.ts +0 -346
  931. package/src/tempo/session/server/Transports.ts +0 -255
  932. package/src/tempo/session/server/Ws.test.ts +0 -594
  933. package/src/tempo/session/server/Ws.ts +0 -385
  934. package/src/tempo/session/server/index.ts +0 -12
  935. package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
  936. package/src/tempo/subscription/KeyAuthorization.ts +0 -396
  937. package/src/tempo/subscription/Receipt.ts +0 -28
  938. package/src/tempo/subscription/Store.test.ts +0 -609
  939. package/src/tempo/subscription/Store.ts +0 -449
  940. package/src/tempo/subscription/Types.ts +0 -68
  941. package/src/tempo/subscription/index.ts +0 -23
  942. package/src/tsconfig.json +0 -10
  943. package/src/validation/core.ts +0 -386
  944. package/src/validation/index.ts +0 -11
  945. package/src/viem/Account.test.ts +0 -72
  946. package/src/viem/Account.ts +0 -30
  947. package/src/viem/Client.test.ts +0 -366
  948. package/src/viem/Client.ts +0 -93
  949. package/src/x402/Assets.test.ts +0 -253
  950. package/src/x402/Assets.ts +0 -221
  951. package/src/x402/Exact.e2e.test.ts +0 -448
  952. package/src/x402/Exact.localnet.test.ts +0 -475
  953. package/src/x402/Header.test.ts +0 -73
  954. package/src/x402/Header.ts +0 -79
  955. package/src/x402/PublicInterface.test-d.ts +0 -39
  956. package/src/x402/Types.ts +0 -248
  957. package/src/x402/client/Exact.test.ts +0 -309
  958. package/src/x402/client/Exact.ts +0 -186
  959. package/src/x402/index.ts +0 -6
  960. package/src/x402/internal/ChallengeBrand.ts +0 -14
  961. package/src/x402/internal/RouteBinding.ts +0 -18
  962. package/src/x402/server/EvmCharge.ts +0 -394
  963. package/src/x402/server/Facilitator.test.ts +0 -111
  964. package/src/x402/server/Facilitator.ts +0 -56
  965. package/src/zod.test.ts +0 -169
  966. package/src/zod.ts +0 -71
@@ -1,1079 +0,0 @@
1
- import * as Challenge from '../../Challenge.js'
2
- import * as Constants from '../../Constants.js'
3
- import * as Expires from '../../Expires.js'
4
- import * as AcceptPayment from '../../internal/AcceptPayment.js'
5
- import type { MaybePromise } from '../../internal/types.js'
6
- import type * as Method from '../../Method.js'
7
- import type * as z from '../../zod.js'
8
- import * as Transport from '../Transport.js'
9
- import * as MethodChallenge from './MethodChallenge.js'
10
- import * as MethodResponse from './MethodResponse.js'
11
-
12
- // We tag wrappers with a global symbol so we can recognize wrappers created by mppx,
13
- // even across multiple module instances/bundles. This lets restore() avoid clobbering
14
- // an unrelated fetch installed by user code or another library.
15
- const MPPX_FETCH_WRAPPER = Symbol.for('mppx.fetch.wrapper')
16
- const defaultMaxPaymentRetries = 3
17
-
18
- type WrappedFetch = typeof globalThis.fetch & {
19
- [MPPX_FETCH_WRAPPER]?: typeof globalThis.fetch
20
- }
21
-
22
- /** Credential state retained between payment retries until its method settles it. */
23
- type PreparedCredential = {
24
- /** Method-owned preparation and settlement hooks. */
25
- attempt: MethodResponse.Attempt
26
- /** Serialized challenge used to recognize the same retry. */
27
- key?: string | undefined
28
- /** Method that prepared the credential. */
29
- method: Method.AnyClient
30
- /** Memoized credential reused for the same retry. */
31
- promise: Promise<string>
32
- }
33
-
34
- let originalFetch: typeof globalThis.fetch | undefined
35
- const eventObserverChecks = new WeakMap<object, (name: keyof ClientEventMap) => boolean>()
36
-
37
- async function settleAttempt(
38
- prepared: PreparedCredential | undefined,
39
- outcome: MethodResponse.AttemptOutcome,
40
- ): Promise<boolean> {
41
- const settle = prepared?.attempt.settle
42
- if (!settle) return outcome.status !== 'pending'
43
- prepared.attempt.settle = undefined
44
- const settled = await settle(outcome)
45
- if (!settled) prepared.attempt.settle = settle
46
- return settled
47
- }
48
-
49
- export type ClientEventMap<
50
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
51
- response = Response,
52
- > = {
53
- 'challenge.received': ChallengeReceivedPayload<methods, response>
54
- 'credential.created': CredentialCreatedPayload<methods, response>
55
- 'payment.failed': PaymentFailedPayload<methods, response>
56
- 'payment.response': PaymentResponsePayload<methods, response>
57
- }
58
-
59
- export type ClientEventName<
60
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
61
- response = Response,
62
- > = keyof ClientEventMap<methods, response> | '*'
63
-
64
- export type ClientEventEnvelope<
65
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
66
- response = Response,
67
- > = {
68
- [name in keyof ClientEventMap<methods, response>]: Readonly<{
69
- name: name
70
- payload: ClientEventMap<methods, response>[name]
71
- }>
72
- }[keyof ClientEventMap<methods, response>]
73
-
74
- export type ClientEventPayload<
75
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
76
- name extends ClientEventName<methods> = ClientEventName<methods>,
77
- response = Response,
78
- > = name extends '*'
79
- ? ClientEventEnvelope<methods, response>
80
- : name extends keyof ClientEventMap<methods, response>
81
- ? ClientEventMap<methods, response>[name]
82
- : never
83
-
84
- export type ClientEventResult<
85
- methods extends readonly Method.AnyClient[],
86
- name extends ClientEventName<methods> = ClientEventName<methods>,
87
- _response = Response,
88
- > = name extends 'challenge.received' ? string | undefined : void
89
-
90
- export type ClientEventHandler<
91
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
92
- name extends ClientEventName<methods> = ClientEventName<methods>,
93
- response = Response,
94
- > = (
95
- payload: ClientEventPayload<methods, name, response>,
96
- ) => MaybePromise<ClientEventResult<methods, name, response>>
97
-
98
- export type Unsubscribe = () => void
99
-
100
- export type ChallengeReceivedPayload<
101
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
102
- response = Response,
103
- > = Readonly<{
104
- challenge: Challenge.Challenge
105
- challenges: readonly Challenge.Challenge[]
106
- createCredential: (context?: AnyContextFor<methods>) => Promise<string>
107
- init?: from.RequestInit<methods> | undefined
108
- input?: RequestInfo | URL | undefined
109
- method: methods[number]
110
- response: response
111
- }>
112
-
113
- export type CredentialCreatedPayload<
114
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
115
- response = Response,
116
- > = Readonly<{
117
- challenge: Challenge.Challenge
118
- credential: string
119
- init?: from.RequestInit<methods> | undefined
120
- input?: RequestInfo | URL | undefined
121
- method: methods[number]
122
- response?: response | undefined
123
- }>
124
-
125
- export type PaymentResponsePayload<
126
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
127
- response = Response,
128
- > = Readonly<{
129
- challenge: Challenge.Challenge
130
- credential: string
131
- init?: from.RequestInit<methods> | undefined
132
- input?: RequestInfo | URL | undefined
133
- method: methods[number]
134
- response: response
135
- }>
136
-
137
- export type PaymentFailedPayload<
138
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
139
- response = Response,
140
- > = Readonly<{
141
- challenge?: Challenge.Challenge | undefined
142
- challenges?: readonly Challenge.Challenge[] | undefined
143
- error: unknown
144
- init?: from.RequestInit<methods> | undefined
145
- input?: RequestInfo | URL | undefined
146
- method?: methods[number] | undefined
147
- response?: response | undefined
148
- }>
149
-
150
- export type ClientEventDispatcher<
151
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
152
- response = Response,
153
- > = {
154
- emit<name extends Exclude<ClientEventName<methods, response>, '*'>>(
155
- name: name,
156
- payload: ClientEventMap<methods, response>[name],
157
- ): Promise<ClientEventResult<methods, name, response>>
158
- on<name extends ClientEventName<methods, response>>(
159
- name: name,
160
- handler: ClientEventHandler<methods, name, response>,
161
- ): Unsubscribe
162
- }
163
-
164
- /**
165
- * Creates a fetch wrapper that automatically handles 402 Payment Required responses.
166
- *
167
- * @example
168
- * ```ts
169
- * import { Fetch, tempo } from 'mppx/client'
170
- * import { privateKeyToAccount } from 'viem/accounts'
171
- *
172
- * const fetch = Fetch.from({
173
- * methods: [
174
- * tempo({
175
- * account: privateKeyToAccount('0x...'),
176
- * }),
177
- * ],
178
- * })
179
- *
180
- * // Use the wrapped fetch — handles 402 automatically
181
- * const res = await fetch('https://api.example.com/resource')
182
- * ```
183
- *
184
- */
185
- export function from<const methods extends readonly Method.AnyClient[]>(
186
- config: from.Config<methods>,
187
- ): from.Fetch<methods> {
188
- const {
189
- acceptPayment,
190
- acceptPaymentPolicy = 'always',
191
- fetch = globalThis.fetch,
192
- maxPaymentRetries = defaultMaxPaymentRetries,
193
- methods,
194
- onChallenge,
195
- orderChallenges,
196
- transport = Transport.http(),
197
- } = config
198
- const events = config.eventDispatcher ?? createEventDispatcher()
199
- const resolvedAcceptPayment = acceptPayment ?? AcceptPayment.resolve(methods)
200
- // Always operate on the true underlying fetch to avoid wrapper-on-wrapper stacking,
201
- // which can duplicate retries and make restore semantics fragile.
202
- const baseFetch = unwrapFetch(fetch)
203
-
204
- const request = async (
205
- input: RequestInfo | URL,
206
- init: from.RequestInit<methods> | undefined,
207
- canRefetch: boolean,
208
- ): Promise<Response> => {
209
- const callerHeaders = getCallerHeaders(input, init?.headers)
210
- const hasExplicitAcceptPayment = callerHeaders.has(Constants.Headers.acceptPayment)
211
- const paymentPreferences = resolvePaymentPreferences(callerHeaders, resolvedAcceptPayment)
212
- const capturedBody = captureRequestBody(input, init, callerHeaders)
213
- const initialRequest = prepareInitialRequest(
214
- input,
215
- init,
216
- callerHeaders,
217
- paymentPreferences.header,
218
- hasExplicitAcceptPayment,
219
- acceptPaymentPolicy,
220
- )
221
- let response = await baseFetch(cloneRequestInput(initialRequest.input), initialRequest.init)
222
- const transportRequest = withCapturedBody(initialRequest.init, await capturedBody)
223
-
224
- if (!(await transport.isPaymentRequired(response, transportRequest as never))) return response
225
-
226
- // Only extract context for payment handling after confirming 402.
227
- const context = (init as Record<string, unknown> | undefined)?.context
228
- const {
229
- context: _,
230
- orderChallenges: requestOrderChallenges,
231
- ...fetchInit
232
- } = (transportRequest ?? {}) as Record<string, unknown>
233
-
234
- let challenge: Challenge.Challenge | undefined
235
- let challenges: readonly Challenge.Challenge[] | undefined
236
- let mi: methods[number] | undefined
237
- let preparedCredential: PreparedCredential | undefined
238
-
239
- try {
240
- for (let retry = 0; retry < maxPaymentRetries; retry++) {
241
- challenges = transport.getChallenges
242
- ? await transport.getChallenges(response, transportRequest as never)
243
- : [await transport.getChallenge(response, transportRequest as never)]
244
-
245
- const candidates = AcceptPayment.selectChallengeCandidates(
246
- challenges,
247
- methods,
248
- paymentPreferences.entries,
249
- )
250
- const orderedCandidates = await resolveChallengeOrder(
251
- candidates,
252
- (requestOrderChallenges as AcceptPayment.OrderChallenges<methods> | undefined) ??
253
- orderChallenges,
254
- )
255
- const selected = orderedCandidates[0]
256
- if (!selected) {
257
- await settleAttempt(preparedCredential, {
258
- challenges,
259
- response,
260
- status: 'rejected',
261
- })
262
- // A post-payment 402 with no actionable challenge (e.g. rejected credential)
263
- // is the server's final answer, not a new challenge round.
264
- if (retry > 0) return response
265
- throw new Error(
266
- `No method found for challenges: ${challenges.map((c) => `${c.method}.${c.intent}`).join(', ')}. Available: ${methods.map((m) => `${m.name}.${m.intent}`).join(', ')}`,
267
- )
268
- }
269
-
270
- const selectedChallenge = selected.challenge
271
- challenge = selectedChallenge
272
- mi = selected.method
273
- if (challenge.expires) Expires.assert(challenge.expires, challenge.id)
274
-
275
- const paymentInput = resolvePaymentRetryInput(
276
- response,
277
- initialRequest.input,
278
- initialRequest.input,
279
- )
280
- const previousCredential = preparedCredential
281
- const key = Challenge.serialize(selectedChallenge)
282
- const sameAttempt =
283
- previousCredential?.method === selected.method && previousCredential?.key === key
284
- let canReusePrevious = false
285
- if (previousCredential) {
286
- const settled = await settleAttempt(previousCredential, {
287
- challenges,
288
- response,
289
- status: sameAttempt ? 'pending' : 'rejected',
290
- })
291
- canReusePrevious = sameAttempt && !settled
292
- }
293
- preparedCredential = canReusePrevious ? previousCredential : undefined
294
- const createCredential = memoizeCreateCredential(
295
- async (overrideContext?: AnyContextFor<methods>) => {
296
- if (overrideContext === undefined && canReusePrevious && previousCredential) {
297
- return previousCredential.promise
298
- }
299
- if (canReusePrevious && previousCredential) {
300
- await settleAttempt(previousCredential, { status: 'rejected' })
301
- preparedCredential = undefined
302
- }
303
-
304
- const credentialContext = overrideContext ?? context
305
- if (!MethodChallenge.has(selected.method))
306
- return resolveCredential(selectedChallenge, selected.method, credentialContext)
307
- const attempt: MethodResponse.Attempt = {
308
- prepare: () =>
309
- MethodChallenge.handle(selected.method, {
310
- challenge: selectedChallenge,
311
- context: credentialContext,
312
- fetch: baseFetch,
313
- input: paymentInput,
314
- }),
315
- }
316
- const promise = attempt
317
- .prepare()
318
- .then(() =>
319
- resolveCredential(selectedChallenge, selected.method, credentialContext, attempt),
320
- )
321
- preparedCredential = {
322
- attempt,
323
- key: overrideContext === undefined ? key : undefined,
324
- method: selected.method,
325
- promise,
326
- }
327
- return promise
328
- },
329
- )
330
- const eventCredential = await events.emit(
331
- 'challenge.received',
332
- createChallengeReceivedPayload({
333
- challenge: selectedChallenge,
334
- challenges,
335
- createCredential,
336
- init,
337
- input,
338
- method: selected.method,
339
- response,
340
- }),
341
- )
342
- const onChallengeCredential =
343
- eventCredential ??
344
- (onChallenge
345
- ? await onChallenge(challenge, {
346
- createCredential,
347
- })
348
- : undefined)
349
- const credential = onChallengeCredential ?? (await createCredential())
350
- const prepared = preparedCredential
351
- if (prepared && (await prepared.promise.catch(() => undefined)) !== credential) {
352
- await settleAttempt(prepared, { status: 'rejected' })
353
- preparedCredential = undefined
354
- }
355
- validateCredentialHeaderValue(credential)
356
- await events.emit(
357
- 'credential.created',
358
- createCredentialCreatedPayload({
359
- challenge: selectedChallenge,
360
- credential,
361
- init,
362
- input,
363
- method: selected.method,
364
- response,
365
- }),
366
- )
367
-
368
- response = await baseFetch(
369
- paymentInput,
370
- transport.setCredential(
371
- {
372
- ...fetchInit,
373
- headers: initialRequest.headers,
374
- },
375
- credential,
376
- { challenge: selectedChallenge },
377
- ),
378
- )
379
- const paymentRequired = await transport.isPaymentRequired(
380
- response,
381
- transportRequest as never,
382
- )
383
- if (!paymentRequired) {
384
- await settleAttempt(prepared, {
385
- response,
386
- status: response.ok ? 'accepted' : 'rejected',
387
- })
388
- preparedCredential = undefined
389
- }
390
- // Cloning an unobserved stream would tee and buffer it indefinitely.
391
- if (response.ok && hasEventObservers(events, 'payment.response'))
392
- await events.emit(
393
- 'payment.response',
394
- createPaymentResponsePayload({
395
- challenge: selectedChallenge,
396
- credential,
397
- init,
398
- input,
399
- method: selected.method,
400
- response,
401
- }),
402
- )
403
- if (!paymentRequired) {
404
- if (!response.ok) return response
405
- return MethodResponse.handle(selected.method, {
406
- challenge: selectedChallenge,
407
- credential,
408
- fetch: baseFetch,
409
- headers: initialRequest.headers,
410
- input: paymentInput,
411
- ...(canRefetch
412
- ? {
413
- refetch: () => request(cloneRequestInput(initialRequest.input), init, false),
414
- }
415
- : {}),
416
- response,
417
- signal: resolveRequestSignal(input, init),
418
- })
419
- }
420
- }
421
- challenges = undefined
422
- try {
423
- challenges = transport.getChallenges
424
- ? await transport.getChallenges(response, transportRequest as never)
425
- : [await transport.getChallenge(response, transportRequest as never)]
426
- } catch {}
427
- await settleAttempt(preparedCredential, {
428
- challenges,
429
- response,
430
- status: 'rejected',
431
- })
432
- return response
433
- } catch (error) {
434
- await settleAttempt(preparedCredential, {
435
- challenges,
436
- response,
437
- status: 'rejected',
438
- })
439
- await events.emit(
440
- 'payment.failed',
441
- createPaymentFailedPayload({
442
- challenge,
443
- challenges,
444
- error,
445
- init,
446
- input,
447
- method: mi,
448
- response,
449
- }),
450
- )
451
- throw error
452
- }
453
- }
454
- const wrappedFetch = (input: RequestInfo | URL, init?: from.RequestInit<methods>) =>
455
- request(input, init, true)
456
-
457
- // Record the wrapped target so future polyfill() / restore() calls can detect origin
458
- // and safely unwrap only mppx-installed wrappers.
459
- ;(wrappedFetch as WrappedFetch)[MPPX_FETCH_WRAPPER] = baseFetch
460
- return wrappedFetch as from.Fetch<methods>
461
- }
462
-
463
- /** Union of all context types from all methods that have context schemas. */
464
- type AnyContextFor<methods extends readonly Method.AnyClient[]> = {
465
- [K in keyof methods]: NonNullable<methods[K]['context']> extends infer ctx
466
- ? ctx extends z.ZodMiniType
467
- ? z.input<ctx>
468
- : undefined
469
- : undefined
470
- }[number]
471
-
472
- export declare namespace from {
473
- type Config<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> = {
474
- /** Resolved `Accept-Payment` header and selection preferences. */
475
- acceptPayment?: AcceptPayment.Resolved<methods> | undefined
476
- /** Controls when `Accept-Payment` is injected. @default 'always' */
477
- acceptPaymentPolicy?:
478
- | 'always'
479
- | 'same-origin'
480
- | 'never'
481
- | { origins: readonly string[] }
482
- | undefined
483
- /** Custom fetch function to wrap. Defaults to `globalThis.fetch`. */
484
- fetch?: typeof globalThis.fetch
485
- /** Advanced shared event dispatcher. `challenge.received` handlers run before `onChallenge`; the first non-empty credential returned by a handler skips `onChallenge`. */
486
- eventDispatcher?: ClientEventDispatcher<methods, any> | undefined
487
- /** Maximum number of payment challenge retries after the initial response. @default 3 */
488
- maxPaymentRetries?: number | undefined
489
- /** Array of methods to use. */
490
- methods: methods
491
- /** Called when a 402 challenge is received and no event handler supplies a credential. */
492
- onChallenge?:
493
- | ((
494
- challenge: Challenge.Challenge,
495
- helpers: {
496
- createCredential: (context?: AnyContextFor<methods>) => Promise<string>
497
- },
498
- ) => Promise<string | undefined>)
499
- | undefined
500
- /** Filters and sorts supported challenges before credential creation. */
501
- orderChallenges?: AcceptPayment.OrderChallenges<methods> | undefined
502
- /** Transport to use for challenge extraction and credential attachment. */
503
- transport?: Transport.AnyTransport | undefined
504
- }
505
-
506
- type Fetch<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> = (
507
- input: RequestInfo | URL,
508
- init?: RequestInit<methods>,
509
- ) => Promise<Response>
510
-
511
- type RequestInit<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> =
512
- globalThis.RequestInit & {
513
- /** Context to pass to the method intent's createCredential. */
514
- context?: AnyContextFor<methods>
515
- /** Request-local challenge filtering and sorting. */
516
- orderChallenges?: AcceptPayment.OrderChallenges<methods> | undefined
517
- }
518
- }
519
-
520
- /**
521
- * Replaces the global `fetch` with a payment-aware wrapper.
522
- *
523
- * @example
524
- * ```ts
525
- * import { Fetch, tempo } from 'mppx/client'
526
- * import { privateKeyToAccount } from 'viem/accounts'
527
- *
528
- * Fetch.polyfill({
529
- * methods: [
530
- * tempo({
531
- * account: privateKeyToAccount('0x...'),
532
- * }),
533
- * ],
534
- * })
535
- *
536
- * // Global fetch now handles 402 automatically
537
- * const res = await fetch('https://api.example.com/resource')
538
- * ```
539
- */
540
- export function polyfill<const methods extends readonly Method.AnyClient[]>(
541
- config: polyfill.Config<methods>,
542
- ): void {
543
- // Defensive guard for runtimes/tests where fetch might be non-configurable.
544
- const descriptor = Object.getOwnPropertyDescriptor(globalThis, 'fetch')
545
- if (!descriptor || (!descriptor.writable && !descriptor.set)) {
546
- throw new Error('globalThis.fetch is not writable')
547
- }
548
-
549
- if (!originalFetch) originalFetch = globalThis.fetch
550
- globalThis.fetch = from({
551
- ...config,
552
- acceptPaymentPolicy: config.acceptPaymentPolicy ?? (isBrowser() ? 'same-origin' : 'always'),
553
- fetch: globalThis.fetch,
554
- }) as typeof globalThis.fetch
555
- }
556
-
557
- export declare namespace polyfill {
558
- type Config<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> =
559
- from.Config<methods>
560
- }
561
-
562
- /**
563
- * Restores the original `fetch` after calling `polyfill`.
564
- *
565
- * @example
566
- * ```ts
567
- * import { Fetch } from 'mppx/client'
568
- *
569
- * Fetch.polyfill({ methods: [...] })
570
- *
571
- * // ... use payment-aware fetch ...
572
- *
573
- * Fetch.restore()
574
- * ```
575
- */
576
- export function restore(): void {
577
- // Only restore if the current fetch is still an mppx wrapper.
578
- // If app code replaced fetch after polyfill(), we must not overwrite it.
579
- if (originalFetch && isWrappedFetch(globalThis.fetch)) {
580
- globalThis.fetch = originalFetch
581
- originalFetch = undefined
582
- }
583
- }
584
-
585
- /** @internal Normalizes headers to a plain object for spreading. */
586
- export function normalizeHeaders(headers: unknown): Record<string, string> {
587
- if (!headers) return {}
588
- if (headers instanceof Headers) {
589
- const result: Record<string, string> = {}
590
- headers.forEach((value, key) => {
591
- result[key] = value
592
- })
593
- return result
594
- }
595
- if (Array.isArray(headers)) return Object.fromEntries(headers)
596
- return headers as Record<string, string>
597
- }
598
-
599
- /**
600
- * Creates a typed client payment event dispatcher.
601
- *
602
- * `challenge.received` handlers run before `onChallenge`; the first non-empty
603
- * credential returned by a handler wins. Observation handlers are isolated, so
604
- * thrown listener errors do not stop sibling listeners or payment flow.
605
- */
606
- export function createEventDispatcher<
607
- methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[],
608
- response = Response,
609
- >(): ClientEventDispatcher<methods, response> {
610
- const handlers = {
611
- '*': new Set<ClientEventHandler<methods, '*', response>>(),
612
- 'challenge.received': new Set<ClientEventHandler<methods, 'challenge.received', response>>(),
613
- 'credential.created': new Set<ClientEventHandler<methods, 'credential.created', response>>(),
614
- 'payment.failed': new Set<ClientEventHandler<methods, 'payment.failed', response>>(),
615
- 'payment.response': new Set<ClientEventHandler<methods, 'payment.response', response>>(),
616
- }
617
-
618
- const on: ClientEventDispatcher<methods, response>['on'] = (name, handler) => {
619
- switch (name) {
620
- case '*':
621
- case 'challenge.received':
622
- case 'credential.created':
623
- case 'payment.failed':
624
- case 'payment.response':
625
- handlers[name].add(handler as never)
626
- return () => handlers[name].delete(handler as never)
627
- default:
628
- throw new Error(`Unknown client event "${String(name)}".`)
629
- }
630
- }
631
-
632
- const dispatcher: ClientEventDispatcher<methods, response> = {
633
- async emit(name, payload) {
634
- switch (name) {
635
- case 'challenge.received': {
636
- let credential: string | undefined
637
- for (const handler of handlers['challenge.received']) {
638
- const value = await emitChallengeReceived(
639
- handler,
640
- payload as ChallengeReceivedPayload<methods, response>,
641
- )
642
- if (typeof value === 'string' && value.length > 0) {
643
- credential = value
644
- break
645
- }
646
- }
647
- await emitCatchall(handlers['*'], name, payload)
648
- return credential as ClientEventResult<methods, typeof name, response>
649
- }
650
- case 'credential.created':
651
- await emitObserveHandlers(handlers['credential.created'], payload)
652
- await emitCatchall(handlers['*'], name, payload)
653
- return undefined as ClientEventResult<methods, typeof name, response>
654
- case 'payment.failed':
655
- await emitObserveHandlers(handlers['payment.failed'], payload)
656
- await emitCatchall(handlers['*'], name, payload)
657
- return undefined as ClientEventResult<methods, typeof name, response>
658
- case 'payment.response':
659
- await emitObserveHandlers(handlers['payment.response'], payload)
660
- await emitCatchall(handlers['*'], name, payload)
661
- return undefined as ClientEventResult<methods, typeof name, response>
662
- }
663
- },
664
- on,
665
- }
666
- eventObserverChecks.set(
667
- dispatcher,
668
- (name) => handlers[name as keyof typeof handlers].size > 0 || handlers['*'].size > 0,
669
- )
670
- return dispatcher
671
- }
672
-
673
- function hasEventObservers(dispatcher: ClientEventDispatcher, name: keyof ClientEventMap): boolean {
674
- return eventObserverChecks.get(dispatcher)?.(name) ?? true
675
- }
676
-
677
- async function emitChallengeReceived<methods extends readonly Method.AnyClient[], response>(
678
- handler: ClientEventHandler<methods, 'challenge.received', response>,
679
- payload: ChallengeReceivedPayload<methods, response>,
680
- ): Promise<string | undefined> {
681
- try {
682
- return await handler(payload)
683
- } catch {
684
- return undefined
685
- }
686
- }
687
-
688
- async function emitObserveHandlers(
689
- handlers: ReadonlySet<(payload: never) => MaybePromise<unknown>>,
690
- payload: unknown,
691
- ): Promise<void> {
692
- for (const handler of handlers) {
693
- try {
694
- await handler(payload as never)
695
- } catch {
696
- // Client observation events must not alter payment flow.
697
- }
698
- }
699
- }
700
-
701
- async function emitCatchall<
702
- methods extends readonly Method.AnyClient[],
703
- response,
704
- name extends keyof ClientEventMap<methods, response>,
705
- >(
706
- handlers: ReadonlySet<ClientEventHandler<methods, '*', response>>,
707
- name: name,
708
- payload: ClientEventMap<methods, response>[name],
709
- ) {
710
- await emitObserveHandlers(
711
- handlers as ReadonlySet<(payload: never) => MaybePromise<unknown>>,
712
- Object.freeze({ name, payload }) as ClientEventPayload<methods, '*', response>,
713
- )
714
- }
715
-
716
- function memoizeCreateCredential<methods extends readonly Method.AnyClient[]>(
717
- createCredential: (context?: AnyContextFor<methods>) => Promise<string>,
718
- ) {
719
- let promise: Promise<string> | undefined
720
- return (context?: AnyContextFor<methods>) => {
721
- promise ??= createCredential(context)
722
- return promise
723
- }
724
- }
725
-
726
- function createChallengeReceivedPayload<
727
- methods extends readonly Method.AnyClient[],
728
- response,
729
- >(parameters: {
730
- challenge: Challenge.Challenge
731
- challenges: readonly Challenge.Challenge[]
732
- createCredential: (context?: AnyContextFor<methods>) => Promise<string>
733
- init?: from.RequestInit<methods> | undefined
734
- input?: RequestInfo | URL | undefined
735
- method: methods[number]
736
- response: response
737
- }): ChallengeReceivedPayload<methods, response> {
738
- return Object.freeze({
739
- challenge: snapshotValue(parameters.challenge),
740
- challenges: parameters.challenges.map((challenge) => snapshotValue(challenge)),
741
- createCredential: parameters.createCredential,
742
- init: snapshotInit(parameters.init),
743
- input: snapshotInput(parameters.input),
744
- method: snapshotMethod(parameters.method),
745
- response: snapshotResponse(parameters.response),
746
- }) as never
747
- }
748
-
749
- function createCredentialCreatedPayload<
750
- methods extends readonly Method.AnyClient[],
751
- response,
752
- >(parameters: {
753
- challenge: Challenge.Challenge
754
- credential: string
755
- init?: from.RequestInit<methods> | undefined
756
- input?: RequestInfo | URL | undefined
757
- method: methods[number]
758
- response?: response | undefined
759
- }): CredentialCreatedPayload<methods, response> {
760
- return Object.freeze({
761
- challenge: snapshotValue(parameters.challenge),
762
- credential: parameters.credential,
763
- init: snapshotInit(parameters.init),
764
- input: snapshotInput(parameters.input),
765
- method: snapshotMethod(parameters.method),
766
- ...(parameters.response !== undefined
767
- ? { response: snapshotResponse(parameters.response) }
768
- : {}),
769
- }) as never
770
- }
771
-
772
- function createPaymentResponsePayload<
773
- methods extends readonly Method.AnyClient[],
774
- response,
775
- >(parameters: {
776
- challenge: Challenge.Challenge
777
- credential: string
778
- init?: from.RequestInit<methods> | undefined
779
- input?: RequestInfo | URL | undefined
780
- method: methods[number]
781
- response: response
782
- }): PaymentResponsePayload<methods, response> {
783
- return Object.freeze({
784
- challenge: snapshotValue(parameters.challenge),
785
- credential: parameters.credential,
786
- init: snapshotInit(parameters.init),
787
- input: snapshotInput(parameters.input),
788
- method: snapshotMethod(parameters.method),
789
- response: snapshotResponse(parameters.response),
790
- }) as never
791
- }
792
-
793
- function createPaymentFailedPayload<
794
- methods extends readonly Method.AnyClient[],
795
- response,
796
- >(parameters: {
797
- challenge?: Challenge.Challenge | undefined
798
- challenges?: readonly Challenge.Challenge[] | undefined
799
- error: unknown
800
- init?: from.RequestInit<methods> | undefined
801
- input?: RequestInfo | URL | undefined
802
- method?: methods[number] | undefined
803
- response?: response | undefined
804
- }): PaymentFailedPayload<methods, response> {
805
- return Object.freeze({
806
- ...(parameters.challenge ? { challenge: snapshotValue(parameters.challenge) } : {}),
807
- ...(parameters.challenges
808
- ? { challenges: parameters.challenges.map((challenge) => snapshotValue(challenge)) }
809
- : {}),
810
- error: parameters.error,
811
- init: snapshotInit(parameters.init),
812
- input: snapshotInput(parameters.input),
813
- ...(parameters.method ? { method: snapshotMethod(parameters.method) } : {}),
814
- ...(parameters.response !== undefined
815
- ? { response: snapshotResponse(parameters.response) }
816
- : {}),
817
- }) as never
818
- }
819
-
820
- function snapshotInit<methods extends readonly Method.AnyClient[]>(
821
- init: from.RequestInit<methods> | undefined,
822
- ): from.RequestInit<methods> | undefined {
823
- if (!init) return undefined
824
- return freezeSnapshot({
825
- ...init,
826
- ...(init.headers ? { headers: new Headers(init.headers) } : {}),
827
- }) as from.RequestInit<methods>
828
- }
829
-
830
- function snapshotInput(input: RequestInfo | URL | undefined): RequestInfo | URL | undefined {
831
- if (input instanceof Request) {
832
- try {
833
- return input.clone()
834
- } catch {
835
- return input
836
- }
837
- }
838
- if (input instanceof URL) return new URL(input)
839
- return input
840
- }
841
-
842
- function snapshotMethod<method extends Method.AnyClient>(method: method): method {
843
- return freezeSnapshot(Object.assign({}, method)) as method
844
- }
845
-
846
- function snapshotResponse<response>(response: response): response {
847
- if (response instanceof Response) return response.clone() as response
848
- return snapshotValue(response)
849
- }
850
-
851
- function snapshotValue<value>(value: value): value {
852
- try {
853
- return deepFreeze(structuredClone(value))
854
- } catch {
855
- return freezeSnapshot(value)
856
- }
857
- }
858
-
859
- function deepFreeze<value>(value: value): value {
860
- if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value
861
- Object.freeze(value)
862
- for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child)
863
- return value
864
- }
865
-
866
- function freezeSnapshot<value>(value: value): value {
867
- if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value
868
- Object.freeze(value)
869
- return value
870
- }
871
-
872
- /** @internal */
873
- function prepareInitialRequest<methods extends readonly Method.AnyClient[]>(
874
- input: RequestInfo | URL,
875
- init: from.RequestInit<methods> | undefined,
876
- callerHeaders: Headers,
877
- header: string,
878
- hasExplicitAcceptPayment: boolean,
879
- policy: NonNullable<from.Config['acceptPaymentPolicy']>,
880
- ): { headers: Headers; init: from.RequestInit<methods> | undefined; input: RequestInfo | URL } {
881
- const shouldInjectAcceptPayment =
882
- Boolean(header) && !hasExplicitAcceptPayment && shouldInjectForPolicy(input, policy)
883
- if (!shouldInjectAcceptPayment) return { headers: callerHeaders, init, input }
884
-
885
- const headers = new Headers(input instanceof Request ? input.headers : undefined)
886
- callerHeaders.forEach((value, key) => {
887
- headers.set(key, value)
888
- })
889
- headers.set(Constants.Headers.acceptPayment, header)
890
-
891
- if (init) {
892
- // Preserve init identity for callers like websocket upgrade helpers that
893
- // depend on the original RequestInit object reaching the underlying fetch.
894
- ;(init as from.RequestInit<methods> & { headers?: HeadersInit }).headers = headers
895
- return {
896
- headers,
897
- init,
898
- input,
899
- }
900
- }
901
-
902
- return {
903
- headers,
904
- init: shouldInjectAcceptPayment ? ({ headers } as from.RequestInit<methods>) : undefined,
905
- input,
906
- }
907
- }
908
-
909
- function captureRequestBody<methods extends readonly Method.AnyClient[]>(
910
- input: RequestInfo | URL,
911
- init: from.RequestInit<methods> | undefined,
912
- headers: Headers,
913
- ): Promise<string | undefined> | undefined {
914
- if (!(input instanceof Request) || init?.body !== undefined || !input.body || input.bodyUsed)
915
- return undefined
916
- if (!headers.has('mcp-method')) {
917
- const accept = headers.get('accept')?.toLowerCase() ?? ''
918
- if (!accept.includes('application/json') || !accept.includes('text/event-stream'))
919
- return undefined
920
- }
921
- try {
922
- return input
923
- .clone()
924
- .text()
925
- .catch(() => undefined)
926
- } catch {
927
- return undefined
928
- }
929
- }
930
-
931
- function withCapturedBody<methods extends readonly Method.AnyClient[]>(
932
- init: from.RequestInit<methods> | undefined,
933
- body: string | undefined,
934
- ): from.RequestInit<methods> | undefined {
935
- return body === undefined ? init : ({ ...init, body } as from.RequestInit<methods>)
936
- }
937
-
938
- /** @internal */
939
- function getCallerHeaders(input: RequestInfo | URL, headers: HeadersInit | undefined): Headers {
940
- if (headers) return new Headers(headers)
941
- return new Headers(input instanceof Request ? input.headers : undefined)
942
- }
943
-
944
- /** @internal */
945
- function unwrapFetch(fetch: typeof globalThis.fetch): typeof globalThis.fetch {
946
- let current = fetch as WrappedFetch
947
- while (current[MPPX_FETCH_WRAPPER]) {
948
- current = current[MPPX_FETCH_WRAPPER] as WrappedFetch
949
- }
950
- return current as typeof globalThis.fetch
951
- }
952
-
953
- function cloneRequestInput(input: RequestInfo | URL): RequestInfo | URL {
954
- if (!(input instanceof Request) || !input.body || input.bodyUsed) return input
955
- try {
956
- return input.clone()
957
- } catch {
958
- return input
959
- }
960
- }
961
-
962
- function resolveRequestSignal(
963
- input: RequestInfo | URL,
964
- init: RequestInit | undefined,
965
- ): AbortSignal | undefined {
966
- return init?.signal ?? (input instanceof Request ? input.signal : undefined)
967
- }
968
-
969
- /** @internal */
970
- function isWrappedFetch(fetch: typeof globalThis.fetch): fetch is WrappedFetch {
971
- return Boolean((fetch as WrappedFetch)[MPPX_FETCH_WRAPPER])
972
- }
973
-
974
- /** @internal */
975
- export function validateCredentialHeaderValue(credential: string): void {
976
- if (!credential.trim()) throw new Error('Credential header value must be non-empty')
977
- if (credential.includes('\r') || credential.includes('\n')) {
978
- throw new Error('Credential header value contains illegal newline characters')
979
- }
980
- }
981
-
982
- /** @internal */
983
- async function resolveCredential(
984
- challenge: Challenge.Challenge,
985
- mi: Method.AnyClient,
986
- context: unknown,
987
- attempt?: MethodResponse.Attempt | undefined,
988
- ): Promise<string> {
989
- const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined
990
- const parameters =
991
- parsedContext !== undefined ? { challenge, context: parsedContext } : { challenge }
992
- if (attempt) MethodResponse.attachAttempt(mi, parameters, attempt)
993
- return mi.createCredential(parameters as never)
994
- }
995
-
996
- function resolvePaymentPreferences<methods extends readonly Method.AnyClient[]>(
997
- headers: Headers,
998
- acceptPayment: AcceptPayment.Resolved<methods>,
999
- ): AcceptPayment.Resolved<methods> {
1000
- const header = headers.get(Constants.Headers.acceptPayment)
1001
- if (!header) return acceptPayment
1002
-
1003
- try {
1004
- return {
1005
- ...acceptPayment,
1006
- entries: AcceptPayment.parse(header),
1007
- header,
1008
- }
1009
- } catch {
1010
- // Fail open for explicit malformed headers: preserve the caller's header on
1011
- // the wire, but continue automatic challenge selection with configured
1012
- // defaults instead of throwing from the wrapper.
1013
- return acceptPayment
1014
- }
1015
- }
1016
-
1017
- async function resolveChallengeOrder<methods extends readonly Method.AnyClient[]>(
1018
- candidates: readonly AcceptPayment.ChallengeCandidate<methods[number]>[],
1019
- orderChallenges: AcceptPayment.OrderChallenges<methods> | undefined,
1020
- ): Promise<readonly AcceptPayment.ChallengeCandidate<methods[number]>[]> {
1021
- return orderChallenges ? orderChallenges(candidates) : candidates
1022
- }
1023
-
1024
- /** @internal */
1025
- function shouldInjectForPolicy(
1026
- input: RequestInfo | URL,
1027
- policy: NonNullable<from.Config['acceptPaymentPolicy']>,
1028
- ): boolean {
1029
- if (policy === 'always') return true
1030
- if (policy === 'never') return false
1031
-
1032
- const url = resolveRequestUrl(input)
1033
-
1034
- if (policy === 'same-origin') {
1035
- if (!isBrowser()) return true
1036
- return url.origin === globalThis.location.origin
1037
- }
1038
-
1039
- return policy.origins.some((origin) => matchesOrigin(url, origin))
1040
- }
1041
-
1042
- /** @internal Matches an origin pattern, supporting `*.` prefix for subdomain wildcards. */
1043
- function matchesOrigin(url: URL, pattern: string): boolean {
1044
- if (pattern.startsWith('*.')) {
1045
- const suffix = pattern.slice(1) // e.g. ".example.com"
1046
- return url.hostname.endsWith(suffix) || url.hostname === pattern.slice(2)
1047
- }
1048
- return url.origin === new URL(pattern).origin
1049
- }
1050
-
1051
- /** @internal */
1052
- function isBrowser(): boolean {
1053
- return typeof globalThis.location !== 'undefined'
1054
- }
1055
-
1056
- /** @internal */
1057
- function resolveRequestUrl(input: RequestInfo | URL): URL {
1058
- if (input instanceof URL) return input
1059
- if (input instanceof Request) return new URL(input.url)
1060
- return new URL(input, isBrowser() ? globalThis.location.href : undefined)
1061
- }
1062
-
1063
- function resolvePaymentRetryInput(
1064
- response: Response,
1065
- fallback: RequestInfo | URL,
1066
- initialInput: RequestInfo | URL,
1067
- ): RequestInfo | URL {
1068
- if (!response.url) return fallback
1069
-
1070
- const responseUrl = new URL(response.url)
1071
- const initialUrl = resolveRequestUrl(initialInput)
1072
- if (responseUrl.origin !== initialUrl.origin) {
1073
- throw new Error(
1074
- `Refusing to send payment credential across redirect from ${initialUrl.origin} to ${responseUrl.origin}`,
1075
- )
1076
- }
1077
-
1078
- return response.url
1079
- }