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.
- package/CHANGELOG.md +91 -0
- package/README.md +15 -0
- package/dist/Challenge.js +61 -39
- package/dist/Constants.d.ts +17 -17
- package/dist/Errors.d.ts +3 -3
- package/dist/Method.d.ts +35 -5
- package/dist/Method.js +7 -22
- package/dist/Store.d.ts +19 -0
- package/dist/Store.js +43 -0
- package/dist/attestation/Client.d.ts +17 -0
- package/dist/attestation/Client.js +28 -0
- package/dist/attestation/Constants.d.ts +15 -0
- package/dist/attestation/Constants.js +15 -0
- package/dist/attestation/Server.d.ts +4 -0
- package/dist/attestation/Server.js +8 -0
- package/dist/attestation/Types.d.ts +76 -0
- package/dist/attestation/Types.js +2 -0
- package/dist/attestation/index.d.ts +6 -0
- package/dist/attestation/index.js +6 -0
- package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
- package/dist/attestation/internal/HttpMessageSignature.js +320 -0
- package/dist/attestation/internal/SigningContext.d.ts +4 -0
- package/dist/attestation/internal/SigningContext.js +11 -0
- package/dist/bin.js +3 -3
- package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
- package/dist/cli/account.d.ts +14 -14
- package/dist/cli/cli.d.ts +6 -6
- package/dist/cli/cli.js +253 -1504
- package/dist/cli/plugins/index.js +19 -5
- package/dist/cli/plugins/tempo.js +7 -3
- package/dist/cli/sessions/Manager.js +7 -4
- package/dist/cli/sessions/commands.d.ts +4 -4
- package/dist/cli/sessions/request.d.ts +2 -0
- package/dist/cli/sessions/request.js +18 -0
- package/dist/cli/sessions/store.js +28 -14
- package/dist/cli/utils.d.ts +1 -1
- package/dist/cli/validate/index.d.ts +3 -3
- package/dist/client/Mppx.d.ts +3 -0
- package/dist/client/Mppx.js +13 -5
- package/dist/client/Transport.d.ts +3 -5
- package/dist/client/Transport.js +1 -17
- package/dist/client/internal/Fetch.js +2 -6
- package/dist/discovery/Discovery.js +2 -1
- package/dist/discovery/OpenApi.d.ts +3 -5
- package/dist/discovery/OpenApi.js +13 -34
- package/dist/discovery/internal/Metadata.d.ts +20 -0
- package/dist/discovery/internal/Metadata.js +36 -0
- package/dist/evm/Methods.d.ts +11 -11
- package/dist/evm/Types.d.ts +17 -17
- package/dist/evm/client/Charge.d.ts +11 -11
- package/dist/evm/client/Charge.js +8 -0
- package/dist/evm/client/Methods.d.ts +11 -11
- package/dist/evm/server/Charge.d.ts +1 -1
- package/dist/evm/server/Charge.js +2 -0
- package/dist/evm/server/Methods.d.ts +11 -11
- package/dist/internal/HeaderCodec.d.ts +2 -2
- package/dist/internal/types.d.ts +6 -0
- package/dist/proxy/Proxy.d.ts +2 -0
- package/dist/proxy/Proxy.js +117 -9
- package/dist/proxy/Service.d.ts +36 -1
- package/dist/proxy/Service.js +9 -8
- package/dist/proxy/services/anthropic.js +1 -0
- package/dist/proxy/services/openai.js +1 -0
- package/dist/proxy/services/stripe.js +1 -0
- package/dist/server/Mppx.d.ts +75 -13
- package/dist/server/Mppx.js +201 -23
- package/dist/server/core.d.ts +9 -0
- package/dist/server/core.js +9 -0
- package/dist/server/internal/html/config.d.ts +9 -9
- package/dist/server/internal/html/constants.d.ts +17 -17
- package/dist/stripe/Methods.d.ts +10 -10
- package/dist/stripe/client/Charge.d.ts +10 -10
- package/dist/stripe/client/Methods.d.ts +10 -10
- package/dist/stripe/internal/constants.d.ts +1 -1
- package/dist/stripe/internal/constants.js +1 -1
- package/dist/stripe/internal/types.d.ts +1 -0
- package/dist/stripe/server/Charge.d.ts +11 -11
- package/dist/stripe/server/Charge.js +51 -5
- package/dist/stripe/server/Methods.d.ts +137 -48
- package/dist/stripe/server/Methods.js +265 -4
- package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
- package/dist/stripe/server/internal/deposit-address.js +28 -0
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/record-payment.d.ts +15 -0
- package/dist/stripe/server/internal/record-payment.js +42 -0
- package/dist/stripe/server/internal/request.d.ts +25 -0
- package/dist/stripe/server/internal/request.js +29 -0
- package/dist/stripe/server/spt.d.ts +8 -0
- package/dist/stripe/server/spt.js +8 -0
- package/dist/tap/Constants.d.ts +28 -0
- package/dist/tap/Constants.js +32 -0
- package/dist/tap/Types.d.ts +11 -0
- package/dist/tap/Types.js +2 -0
- package/dist/tap/client/index.d.ts +26 -0
- package/dist/tap/client/index.js +33 -0
- package/dist/tap/index.d.ts +5 -0
- package/dist/tap/index.js +5 -0
- package/dist/tap/server/index.d.ts +20 -0
- package/dist/tap/server/index.js +36 -0
- package/dist/tempo/Attribution.d.ts +1 -1
- package/dist/tempo/Methods.d.ts +73 -60
- package/dist/tempo/Methods.js +14 -3
- package/dist/tempo/Proof.d.ts +16 -16
- package/dist/tempo/client/Charge.d.ts +22 -19
- package/dist/tempo/client/Charge.js +32 -16
- package/dist/tempo/client/Methods.d.ts +51 -38
- package/dist/tempo/client/Subscription.d.ts +23 -23
- package/dist/tempo/internal/address.d.ts +2 -1
- package/dist/tempo/internal/address.js +3 -1
- package/dist/tempo/internal/auto-swap.js +4 -19
- package/dist/tempo/internal/defaults.d.ts +17 -6
- package/dist/tempo/internal/defaults.js +11 -0
- package/dist/tempo/internal/fee-payer.d.ts +12 -12
- package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
- package/dist/tempo/internal/machine-token-charge.js +113 -0
- package/dist/tempo/internal/machine-token-session.d.ts +88 -0
- package/dist/tempo/internal/machine-token-session.js +173 -0
- package/dist/tempo/internal/proof.d.ts +17 -17
- package/dist/tempo/internal/signature-envelope.d.ts +14 -0
- package/dist/tempo/internal/signature-envelope.js +28 -0
- package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
- package/dist/tempo/legacy/client/ChannelOps.js +11 -5
- package/dist/tempo/legacy/client/Session.d.ts +33 -21
- package/dist/tempo/legacy/client/Session.js +3 -3
- package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
- package/dist/tempo/legacy/client/SessionManager.js +2 -0
- package/dist/tempo/legacy/index.d.ts +1 -3
- package/dist/tempo/legacy/index.js +1 -3
- package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
- package/dist/tempo/server/Charge.d.ts +28 -11
- package/dist/tempo/server/Charge.js +101 -55
- package/dist/tempo/server/Methods.d.ts +58 -56
- package/dist/tempo/server/Methods.js +8 -18
- package/dist/tempo/server/Relay.d.ts +1 -1
- package/dist/tempo/server/Relay.js +2 -2
- package/dist/tempo/server/Subscription.d.ts +25 -25
- package/dist/tempo/server/Subscription.js +2 -0
- package/dist/tempo/server/index.d.ts +1 -1
- package/dist/tempo/server/index.js +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/transport.d.ts +2 -0
- package/dist/tempo/server/internal/transport.js +9 -2
- package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
- package/dist/tempo/session/client/ChannelOps.js +35 -6
- package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
- package/dist/tempo/session/client/ChannelStore.js +2 -2
- package/dist/tempo/session/client/CredentialState.d.ts +18 -3
- package/dist/tempo/session/client/CredentialState.js +77 -76
- package/dist/tempo/session/client/Runtime.d.ts +4 -2
- package/dist/tempo/session/client/Runtime.js +21 -5
- package/dist/tempo/session/client/Session.d.ts +34 -22
- package/dist/tempo/session/client/Session.js +186 -63
- package/dist/tempo/session/client/SessionManager.d.ts +3 -1
- package/dist/tempo/session/client/SessionManager.js +35 -11
- package/dist/tempo/session/client/Transports.d.ts +2 -0
- package/dist/tempo/session/client/Transports.js +12 -2
- package/dist/tempo/session/precompile/Chain.d.ts +37 -2
- package/dist/tempo/session/precompile/Chain.js +116 -15
- package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
- package/dist/tempo/session/precompile/Protocol.js +7 -0
- package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
- package/dist/tempo/session/precompile/Voucher.js +6 -12
- package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
- package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
- package/dist/tempo/session/server/ChannelStore.js +27 -12
- package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
- package/dist/tempo/session/server/CredentialVerification.js +359 -89
- package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
- package/dist/tempo/session/server/MeteredStream.js +8 -5
- package/dist/tempo/session/server/RequestState.d.ts +19 -0
- package/dist/tempo/session/server/RequestState.js +61 -15
- package/dist/tempo/session/server/Session.d.ts +46 -23
- package/dist/tempo/session/server/Session.js +150 -56
- package/dist/tempo/session/server/Settlement.d.ts +11 -4
- package/dist/tempo/session/server/Settlement.js +53 -21
- package/dist/tempo/session/server/Sse.d.ts +3 -1
- package/dist/tempo/session/server/Sse.js +2 -1
- package/dist/tempo/session/server/Transports.d.ts +1 -1
- package/dist/tempo/session/server/Transports.js +1 -0
- package/dist/tempo/session/server/Ws.d.ts +6 -1
- package/dist/tempo/session/server/Ws.js +1 -0
- package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
- package/dist/web-bot-auth/Constants.d.ts +20 -0
- package/dist/web-bot-auth/Constants.js +24 -0
- package/dist/web-bot-auth/Types.d.ts +10 -0
- package/dist/web-bot-auth/Types.js +2 -0
- package/dist/web-bot-auth/client/index.d.ts +29 -0
- package/dist/web-bot-auth/client/index.js +64 -0
- package/dist/web-bot-auth/index.d.ts +7 -0
- package/dist/web-bot-auth/index.js +7 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
- package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
- package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
- package/dist/web-bot-auth/server/index.d.ts +35 -0
- package/dist/web-bot-auth/server/index.js +88 -0
- package/dist/x402/Types.d.ts +6 -6
- package/dist/x402/client/Exact.d.ts +8 -0
- package/dist/x402/client/Exact.js +40 -10
- package/dist/x402/server/EvmCharge.d.ts +22 -0
- package/dist/x402/server/EvmCharge.js +54 -20
- package/package.json +28 -34
- package/dist/BodyDigest.d.ts.map +0 -1
- package/dist/BodyDigest.js.map +0 -1
- package/dist/Challenge.d.ts.map +0 -1
- package/dist/Challenge.js.map +0 -1
- package/dist/Constants.d.ts.map +0 -1
- package/dist/Constants.js.map +0 -1
- package/dist/Credential.d.ts.map +0 -1
- package/dist/Credential.js.map +0 -1
- package/dist/Errors.d.ts.map +0 -1
- package/dist/Errors.js.map +0 -1
- package/dist/Expires.d.ts.map +0 -1
- package/dist/Expires.js.map +0 -1
- package/dist/Html.d.ts.map +0 -1
- package/dist/Html.js.map +0 -1
- package/dist/Mcp.d.ts.map +0 -1
- package/dist/Mcp.js.map +0 -1
- package/dist/Method.d.ts.map +0 -1
- package/dist/Method.js.map +0 -1
- package/dist/PaymentRequest.d.ts.map +0 -1
- package/dist/PaymentRequest.js.map +0 -1
- package/dist/Receipt.d.ts.map +0 -1
- package/dist/Receipt.js.map +0 -1
- package/dist/Store.d.ts.map +0 -1
- package/dist/Store.js.map +0 -1
- package/dist/bin.d.ts.map +0 -1
- package/dist/bin.js.map +0 -1
- package/dist/cli/account.d.ts.map +0 -1
- package/dist/cli/account.js.map +0 -1
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/internal.d.ts.map +0 -1
- package/dist/cli/internal.js.map +0 -1
- package/dist/cli/plugins/evm.d.ts.map +0 -1
- package/dist/cli/plugins/evm.js.map +0 -1
- package/dist/cli/plugins/index.d.ts.map +0 -1
- package/dist/cli/plugins/index.js.map +0 -1
- package/dist/cli/plugins/plugin.d.ts.map +0 -1
- package/dist/cli/plugins/plugin.js.map +0 -1
- package/dist/cli/plugins/stripe.d.ts.map +0 -1
- package/dist/cli/plugins/stripe.js.map +0 -1
- package/dist/cli/plugins/tempo.d.ts.map +0 -1
- package/dist/cli/plugins/tempo.js.map +0 -1
- package/dist/cli/sessions/Manager.d.ts.map +0 -1
- package/dist/cli/sessions/Manager.js.map +0 -1
- package/dist/cli/sessions/commands.d.ts.map +0 -1
- package/dist/cli/sessions/commands.js.map +0 -1
- package/dist/cli/sessions/request.d.ts.map +0 -1
- package/dist/cli/sessions/request.js.map +0 -1
- package/dist/cli/sessions/store.d.ts.map +0 -1
- package/dist/cli/sessions/store.js.map +0 -1
- package/dist/cli/utils.d.ts.map +0 -1
- package/dist/cli/utils.js.map +0 -1
- package/dist/cli/validate/challenge.d.ts.map +0 -1
- package/dist/cli/validate/challenge.js.map +0 -1
- package/dist/cli/validate/discovery.d.ts.map +0 -1
- package/dist/cli/validate/discovery.js.map +0 -1
- package/dist/cli/validate/helpers.d.ts.map +0 -1
- package/dist/cli/validate/helpers.js.map +0 -1
- package/dist/cli/validate/index.d.ts.map +0 -1
- package/dist/cli/validate/index.js.map +0 -1
- package/dist/cli/validate/messages.d.ts.map +0 -1
- package/dist/cli/validate/messages.js.map +0 -1
- package/dist/cli/validate/payment.d.ts.map +0 -1
- package/dist/cli/validate/payment.js.map +0 -1
- package/dist/client/Methods.d.ts.map +0 -1
- package/dist/client/Methods.js.map +0 -1
- package/dist/client/Mppx.d.ts.map +0 -1
- package/dist/client/Mppx.js.map +0 -1
- package/dist/client/Transport.d.ts.map +0 -1
- package/dist/client/Transport.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/internal/Fetch.d.ts.map +0 -1
- package/dist/client/internal/Fetch.js.map +0 -1
- package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
- package/dist/client/internal/MethodChallenge.js.map +0 -1
- package/dist/client/internal/MethodResponse.d.ts.map +0 -1
- package/dist/client/internal/MethodResponse.js.map +0 -1
- package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
- package/dist/client/internal/protocols/Mcp.js.map +0 -1
- package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
- package/dist/client/internal/protocols/Mpp.js.map +0 -1
- package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
- package/dist/client/internal/protocols/Protocol.js.map +0 -1
- package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
- package/dist/client/internal/protocols/Shared.js.map +0 -1
- package/dist/client/internal/protocols/X402.d.ts.map +0 -1
- package/dist/client/internal/protocols/X402.js.map +0 -1
- package/dist/client/node.d.ts.map +0 -1
- package/dist/client/node.js.map +0 -1
- package/dist/discovery/Discovery.d.ts.map +0 -1
- package/dist/discovery/Discovery.js.map +0 -1
- package/dist/discovery/OpenApi.d.ts.map +0 -1
- package/dist/discovery/OpenApi.js.map +0 -1
- package/dist/discovery/Validate.d.ts.map +0 -1
- package/dist/discovery/Validate.js.map +0 -1
- package/dist/discovery/index.d.ts.map +0 -1
- package/dist/discovery/index.js.map +0 -1
- package/dist/evm/Assets.d.ts.map +0 -1
- package/dist/evm/Assets.js.map +0 -1
- package/dist/evm/Chains.d.ts.map +0 -1
- package/dist/evm/Chains.js.map +0 -1
- package/dist/evm/Methods.d.ts.map +0 -1
- package/dist/evm/Methods.js.map +0 -1
- package/dist/evm/Types.d.ts.map +0 -1
- package/dist/evm/Types.js.map +0 -1
- package/dist/evm/client/Charge.d.ts.map +0 -1
- package/dist/evm/client/Charge.js.map +0 -1
- package/dist/evm/client/Methods.d.ts.map +0 -1
- package/dist/evm/client/Methods.js.map +0 -1
- package/dist/evm/client/index.d.ts.map +0 -1
- package/dist/evm/client/index.js.map +0 -1
- package/dist/evm/index.d.ts.map +0 -1
- package/dist/evm/index.js.map +0 -1
- package/dist/evm/server/Charge.d.ts.map +0 -1
- package/dist/evm/server/Charge.js.map +0 -1
- package/dist/evm/server/Methods.d.ts.map +0 -1
- package/dist/evm/server/Methods.js.map +0 -1
- package/dist/evm/server/index.d.ts.map +0 -1
- package/dist/evm/server/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/AcceptPayment.d.ts.map +0 -1
- package/dist/internal/AcceptPayment.js.map +0 -1
- package/dist/internal/HeaderCodec.d.ts.map +0 -1
- package/dist/internal/HeaderCodec.js.map +0 -1
- package/dist/internal/constantTimeEqual.d.ts.map +0 -1
- package/dist/internal/constantTimeEqual.js.map +0 -1
- package/dist/internal/env.d.ts.map +0 -1
- package/dist/internal/env.js.map +0 -1
- package/dist/internal/types.d.ts.map +0 -1
- package/dist/internal/types.js.map +0 -1
- package/dist/mcp/client/McpClient.d.ts.map +0 -1
- package/dist/mcp/client/McpClient.js.map +0 -1
- package/dist/mcp/client/index.d.ts.map +0 -1
- package/dist/mcp/client/index.js.map +0 -1
- package/dist/mcp/server/Transport.d.ts.map +0 -1
- package/dist/mcp/server/Transport.js.map +0 -1
- package/dist/mcp/server/index.d.ts.map +0 -1
- package/dist/mcp/server/index.js.map +0 -1
- package/dist/middlewares/elysia.d.ts.map +0 -1
- package/dist/middlewares/elysia.js.map +0 -1
- package/dist/middlewares/express.d.ts.map +0 -1
- package/dist/middlewares/express.js.map +0 -1
- package/dist/middlewares/hono.d.ts.map +0 -1
- package/dist/middlewares/hono.js.map +0 -1
- package/dist/middlewares/internal/mppx.d.ts.map +0 -1
- package/dist/middlewares/internal/mppx.js.map +0 -1
- package/dist/middlewares/nextjs.d.ts.map +0 -1
- package/dist/middlewares/nextjs.js.map +0 -1
- package/dist/proxy/Proxy.d.ts.map +0 -1
- package/dist/proxy/Proxy.js.map +0 -1
- package/dist/proxy/Service.d.ts.map +0 -1
- package/dist/proxy/Service.js.map +0 -1
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/internal/Headers.d.ts.map +0 -1
- package/dist/proxy/internal/Headers.js.map +0 -1
- package/dist/proxy/internal/Route.d.ts.map +0 -1
- package/dist/proxy/internal/Route.js.map +0 -1
- package/dist/proxy/services/anthropic.d.ts.map +0 -1
- package/dist/proxy/services/anthropic.js.map +0 -1
- package/dist/proxy/services/openai.d.ts.map +0 -1
- package/dist/proxy/services/openai.js.map +0 -1
- package/dist/proxy/services/stripe.d.ts.map +0 -1
- package/dist/proxy/services/stripe.js.map +0 -1
- package/dist/server/Methods.d.ts.map +0 -1
- package/dist/server/Methods.js.map +0 -1
- package/dist/server/Mppx.d.ts.map +0 -1
- package/dist/server/Mppx.js.map +0 -1
- package/dist/server/NodeListener.d.ts.map +0 -1
- package/dist/server/NodeListener.js.map +0 -1
- package/dist/server/Request.d.ts.map +0 -1
- package/dist/server/Request.js.map +0 -1
- package/dist/server/Response.d.ts.map +0 -1
- package/dist/server/Response.js.map +0 -1
- package/dist/server/Transport.d.ts.map +0 -1
- package/dist/server/Transport.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
- package/dist/server/internal/html/compose.main.gen.js.map +0 -1
- package/dist/server/internal/html/config.d.ts.map +0 -1
- package/dist/server/internal/html/config.js.map +0 -1
- package/dist/server/internal/html/constants.d.ts.map +0 -1
- package/dist/server/internal/html/constants.js.map +0 -1
- package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
- package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
- package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
- package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
- package/dist/server/internal/scope.d.ts.map +0 -1
- package/dist/server/internal/scope.js.map +0 -1
- package/dist/stripe/Methods.d.ts.map +0 -1
- package/dist/stripe/Methods.js.map +0 -1
- package/dist/stripe/client/Charge.d.ts.map +0 -1
- package/dist/stripe/client/Charge.js.map +0 -1
- package/dist/stripe/client/Methods.d.ts.map +0 -1
- package/dist/stripe/client/Methods.js.map +0 -1
- package/dist/stripe/client/index.d.ts.map +0 -1
- package/dist/stripe/client/index.js.map +0 -1
- package/dist/stripe/index.d.ts.map +0 -1
- package/dist/stripe/index.js.map +0 -1
- package/dist/stripe/internal/constants.d.ts.map +0 -1
- package/dist/stripe/internal/constants.js.map +0 -1
- package/dist/stripe/internal/types.d.ts.map +0 -1
- package/dist/stripe/internal/types.js.map +0 -1
- package/dist/stripe/server/Charge.d.ts.map +0 -1
- package/dist/stripe/server/Charge.js.map +0 -1
- package/dist/stripe/server/Methods.d.ts.map +0 -1
- package/dist/stripe/server/Methods.js.map +0 -1
- package/dist/stripe/server/index.d.ts.map +0 -1
- package/dist/stripe/server/index.js.map +0 -1
- package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
- package/dist/stripe/server/internal/html/types.js.map +0 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
- package/dist/stripe/server/internal/html.gen.js.map +0 -1
- package/dist/tempo/Attribution.d.ts.map +0 -1
- package/dist/tempo/Attribution.js.map +0 -1
- package/dist/tempo/Methods.d.ts.map +0 -1
- package/dist/tempo/Methods.js.map +0 -1
- package/dist/tempo/Proof.d.ts.map +0 -1
- package/dist/tempo/Proof.js.map +0 -1
- package/dist/tempo/client/Charge.d.ts.map +0 -1
- package/dist/tempo/client/Charge.js.map +0 -1
- package/dist/tempo/client/Methods.d.ts.map +0 -1
- package/dist/tempo/client/Methods.js.map +0 -1
- package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
- package/dist/tempo/client/ResolveAccount.js.map +0 -1
- package/dist/tempo/client/Subscription.d.ts.map +0 -1
- package/dist/tempo/client/Subscription.js.map +0 -1
- package/dist/tempo/client/index.d.ts.map +0 -1
- package/dist/tempo/client/index.js.map +0 -1
- package/dist/tempo/index.d.ts.map +0 -1
- package/dist/tempo/index.js.map +0 -1
- package/dist/tempo/internal/account.d.ts.map +0 -1
- package/dist/tempo/internal/account.js.map +0 -1
- package/dist/tempo/internal/address.d.ts.map +0 -1
- package/dist/tempo/internal/address.js.map +0 -1
- package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
- package/dist/tempo/internal/auto-swap.js.map +0 -1
- package/dist/tempo/internal/charge.d.ts.map +0 -1
- package/dist/tempo/internal/charge.js.map +0 -1
- package/dist/tempo/internal/defaults.d.ts.map +0 -1
- package/dist/tempo/internal/defaults.js.map +0 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
- package/dist/tempo/internal/fee-payer.js.map +0 -1
- package/dist/tempo/internal/fee-token.d.ts.map +0 -1
- package/dist/tempo/internal/fee-token.js.map +0 -1
- package/dist/tempo/internal/proof.d.ts.map +0 -1
- package/dist/tempo/internal/proof.js.map +0 -1
- package/dist/tempo/internal/selectors.d.ts.map +0 -1
- package/dist/tempo/internal/selectors.js.map +0 -1
- package/dist/tempo/internal/types.d.ts.map +0 -1
- package/dist/tempo/internal/types.js.map +0 -1
- package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
- package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
- package/dist/tempo/legacy/client/Session.js.map +0 -1
- package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
- package/dist/tempo/legacy/client/index.d.ts.map +0 -1
- package/dist/tempo/legacy/client/index.js.map +0 -1
- package/dist/tempo/legacy/index.d.ts.map +0 -1
- package/dist/tempo/legacy/index.js.map +0 -1
- package/dist/tempo/legacy/server/Session.d.ts +0 -208
- package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
- package/dist/tempo/legacy/server/Session.js +0 -698
- package/dist/tempo/legacy/server/Session.js.map +0 -1
- package/dist/tempo/legacy/server/index.d.ts +0 -5
- package/dist/tempo/legacy/server/index.d.ts.map +0 -1
- package/dist/tempo/legacy/server/index.js +0 -5
- package/dist/tempo/legacy/server/index.js.map +0 -1
- package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Chain.js.map +0 -1
- package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Channel.js.map +0 -1
- package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
- package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/legacy/session/ChannelStore.js +0 -6
- package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
- package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Types.js.map +0 -1
- package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Voucher.js.map +0 -1
- package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
- package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
- package/dist/tempo/legacy/session/index.d.ts.map +0 -1
- package/dist/tempo/legacy/session/index.js.map +0 -1
- package/dist/tempo/server/Charge.d.ts.map +0 -1
- package/dist/tempo/server/Charge.js.map +0 -1
- package/dist/tempo/server/Methods.d.ts.map +0 -1
- package/dist/tempo/server/Methods.js.map +0 -1
- package/dist/tempo/server/Relay.d.ts.map +0 -1
- package/dist/tempo/server/Relay.js.map +0 -1
- package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
- package/dist/tempo/server/SponsorBudget.js.map +0 -1
- package/dist/tempo/server/Subscription.d.ts.map +0 -1
- package/dist/tempo/server/Subscription.js.map +0 -1
- package/dist/tempo/server/index.d.ts.map +0 -1
- package/dist/tempo/server/index.js.map +0 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
- package/dist/tempo/server/internal/html.gen.js.map +0 -1
- package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
- package/dist/tempo/server/internal/request-body.js.map +0 -1
- package/dist/tempo/server/internal/transport.d.ts.map +0 -1
- package/dist/tempo/server/internal/transport.js.map +0 -1
- package/dist/tempo/session/Snapshot.d.ts.map +0 -1
- package/dist/tempo/session/Snapshot.js.map +0 -1
- package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/session/client/ChannelOps.js.map +0 -1
- package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/client/ChannelStore.js.map +0 -1
- package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
- package/dist/tempo/session/client/CredentialState.js.map +0 -1
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
- package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
- package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
- package/dist/tempo/session/client/Runtime.js.map +0 -1
- package/dist/tempo/session/client/Session.d.ts.map +0 -1
- package/dist/tempo/session/client/Session.js.map +0 -1
- package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/session/client/SessionManager.js.map +0 -1
- package/dist/tempo/session/client/Transports.d.ts.map +0 -1
- package/dist/tempo/session/client/Transports.js.map +0 -1
- package/dist/tempo/session/client/index.d.ts.map +0 -1
- package/dist/tempo/session/client/index.js.map +0 -1
- package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
- package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
- package/dist/tempo/session/index.d.ts.map +0 -1
- package/dist/tempo/session/index.js.map +0 -1
- package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Chain.js.map +0 -1
- package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Channel.js.map +0 -1
- package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Protocol.js.map +0 -1
- package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Voucher.js.map +0 -1
- package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
- package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
- package/dist/tempo/session/precompile/index.d.ts.map +0 -1
- package/dist/tempo/session/precompile/index.js.map +0 -1
- package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/session/server/ChannelOps.js.map +0 -1
- package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/server/ChannelStore.js.map +0 -1
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
- package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
- package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
- package/dist/tempo/session/server/MeteredStream.js.map +0 -1
- package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
- package/dist/tempo/session/server/RequestState.js.map +0 -1
- package/dist/tempo/session/server/Session.d.ts.map +0 -1
- package/dist/tempo/session/server/Session.js.map +0 -1
- package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
- package/dist/tempo/session/server/Settlement.js.map +0 -1
- package/dist/tempo/session/server/Sse.d.ts.map +0 -1
- package/dist/tempo/session/server/Sse.js.map +0 -1
- package/dist/tempo/session/server/Transports.d.ts.map +0 -1
- package/dist/tempo/session/server/Transports.js.map +0 -1
- package/dist/tempo/session/server/Ws.d.ts.map +0 -1
- package/dist/tempo/session/server/Ws.js.map +0 -1
- package/dist/tempo/session/server/index.d.ts.map +0 -1
- package/dist/tempo/session/server/index.js.map +0 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
- package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
- package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
- package/dist/tempo/subscription/Receipt.js.map +0 -1
- package/dist/tempo/subscription/Store.d.ts.map +0 -1
- package/dist/tempo/subscription/Store.js.map +0 -1
- package/dist/tempo/subscription/Types.d.ts.map +0 -1
- package/dist/tempo/subscription/Types.js.map +0 -1
- package/dist/tempo/subscription/index.d.ts.map +0 -1
- package/dist/tempo/subscription/index.js.map +0 -1
- package/dist/validation/core.d.ts.map +0 -1
- package/dist/validation/core.js.map +0 -1
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js.map +0 -1
- package/dist/viem/Account.d.ts.map +0 -1
- package/dist/viem/Account.js.map +0 -1
- package/dist/viem/Client.d.ts.map +0 -1
- package/dist/viem/Client.js.map +0 -1
- package/dist/x402/Assets.d.ts.map +0 -1
- package/dist/x402/Assets.js.map +0 -1
- package/dist/x402/Header.d.ts.map +0 -1
- package/dist/x402/Header.js.map +0 -1
- package/dist/x402/Types.d.ts.map +0 -1
- package/dist/x402/Types.js.map +0 -1
- package/dist/x402/client/Exact.d.ts.map +0 -1
- package/dist/x402/client/Exact.js.map +0 -1
- package/dist/x402/index.d.ts.map +0 -1
- package/dist/x402/index.js.map +0 -1
- package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
- package/dist/x402/internal/ChallengeBrand.js.map +0 -1
- package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
- package/dist/x402/internal/RouteBinding.js.map +0 -1
- package/dist/x402/server/EvmCharge.d.ts.map +0 -1
- package/dist/x402/server/EvmCharge.js.map +0 -1
- package/dist/x402/server/Facilitator.d.ts.map +0 -1
- package/dist/x402/server/Facilitator.js.map +0 -1
- package/dist/zod.d.ts.map +0 -1
- package/dist/zod.js.map +0 -1
- package/src/BodyDigest.test.ts +0 -43
- package/src/BodyDigest.ts +0 -55
- package/src/Challenge.fuzz.test.ts +0 -121
- package/src/Challenge.test-d.ts +0 -82
- package/src/Challenge.test.ts +0 -995
- package/src/Challenge.ts +0 -683
- package/src/Constants.ts +0 -58
- package/src/Credential.fuzz.test.ts +0 -62
- package/src/Credential.test.ts +0 -378
- package/src/Credential.ts +0 -217
- package/src/Errors.test.ts +0 -520
- package/src/Errors.ts +0 -448
- package/src/Expires.test.ts +0 -112
- package/src/Expires.ts +0 -59
- package/src/Html.ts +0 -67
- package/src/Mcp.ts +0 -85
- package/src/Method.test.ts +0 -177
- package/src/Method.ts +0 -617
- package/src/PaymentRequest.test.ts +0 -147
- package/src/PaymentRequest.ts +0 -108
- package/src/Receipt.test.ts +0 -151
- package/src/Receipt.ts +0 -146
- package/src/Store.test-d.ts +0 -195
- package/src/Store.test.ts +0 -357
- package/src/Store.ts +0 -329
- package/src/bin.ts +0 -4
- package/src/cli/account.ts +0 -269
- package/src/cli/cli.test.ts +0 -2221
- package/src/cli/cli.ts +0 -1649
- package/src/cli/config.test.ts +0 -89
- package/src/cli/config.ts +0 -50
- package/src/cli/internal.ts +0 -114
- package/src/cli/mcp.test.ts +0 -262
- package/src/cli/plugins/evm.ts +0 -55
- package/src/cli/plugins/index.ts +0 -4
- package/src/cli/plugins/plugin.ts +0 -84
- package/src/cli/plugins/stripe.ts +0 -174
- package/src/cli/plugins/tempo.ts +0 -1102
- package/src/cli/sessions/Manager.test.ts +0 -249
- package/src/cli/sessions/Manager.ts +0 -93
- package/src/cli/sessions/commands.ts +0 -444
- package/src/cli/sessions/request.test.ts +0 -51
- package/src/cli/sessions/request.ts +0 -353
- package/src/cli/sessions/store.test.ts +0 -581
- package/src/cli/sessions/store.ts +0 -940
- package/src/cli/utils.test.ts +0 -156
- package/src/cli/utils.ts +0 -394
- package/src/cli/validate/challenge.ts +0 -565
- package/src/cli/validate/discovery.test.ts +0 -435
- package/src/cli/validate/discovery.ts +0 -221
- package/src/cli/validate/helpers.ts +0 -166
- package/src/cli/validate/index.ts +0 -229
- package/src/cli/validate/messages.ts +0 -7
- package/src/cli/validate/payment.ts +0 -774
- package/src/cli/validate.test.ts +0 -843
- package/src/client/Methods.ts +0 -8
- package/src/client/Mppx.test-d.ts +0 -270
- package/src/client/Mppx.test.ts +0 -1065
- package/src/client/Mppx.ts +0 -466
- package/src/client/Transport.test.ts +0 -619
- package/src/client/Transport.ts +0 -191
- package/src/client/index.ts +0 -29
- package/src/client/internal/Fetch.browser.test.ts +0 -197
- package/src/client/internal/Fetch.test-d.ts +0 -109
- package/src/client/internal/Fetch.test.ts +0 -2336
- package/src/client/internal/Fetch.ts +0 -1079
- package/src/client/internal/MethodChallenge.ts +0 -35
- package/src/client/internal/MethodResponse.ts +0 -67
- package/src/client/internal/protocols/Mcp.test.ts +0 -220
- package/src/client/internal/protocols/Mcp.ts +0 -186
- package/src/client/internal/protocols/Mpp.ts +0 -21
- package/src/client/internal/protocols/Protocol.ts +0 -10
- package/src/client/internal/protocols/Shared.ts +0 -25
- package/src/client/internal/protocols/X402.ts +0 -46
- package/src/client/node.test.ts +0 -115
- package/src/client/node.ts +0 -247
- package/src/discovery/Discovery.test.ts +0 -214
- package/src/discovery/Discovery.ts +0 -105
- package/src/discovery/OpenApi.test.ts +0 -453
- package/src/discovery/OpenApi.ts +0 -224
- package/src/discovery/Validate.test.ts +0 -305
- package/src/discovery/Validate.ts +0 -77
- package/src/discovery/index.ts +0 -3
- package/src/env.d.ts +0 -12
- package/src/evm/Assets.ts +0 -1
- package/src/evm/Chains.ts +0 -11
- package/src/evm/Methods.ts +0 -44
- package/src/evm/PublicInterface.test-d.ts +0 -134
- package/src/evm/Types.ts +0 -140
- package/src/evm/client/Charge.test.ts +0 -347
- package/src/evm/client/Charge.ts +0 -187
- package/src/evm/client/Methods.ts +0 -19
- package/src/evm/client/index.ts +0 -6
- package/src/evm/index.ts +0 -16
- package/src/evm/server/Charge.test.ts +0 -339
- package/src/evm/server/Charge.ts +0 -290
- package/src/evm/server/Methods.ts +0 -22
- package/src/evm/server/index.ts +0 -6
- package/src/index.ts +0 -14
- package/src/internal/AcceptPayment.test.ts +0 -343
- package/src/internal/AcceptPayment.ts +0 -366
- package/src/internal/HeaderCodec.ts +0 -36
- package/src/internal/changeset.test.ts +0 -106
- package/src/internal/constantTimeEqual.test.ts +0 -47
- package/src/internal/constantTimeEqual.ts +0 -10
- package/src/internal/env.test.ts +0 -42
- package/src/internal/env.ts +0 -49
- package/src/internal/types.test-d.ts +0 -21
- package/src/internal/types.ts +0 -470
- package/src/mcp/client/McpClient.integration.test.ts +0 -652
- package/src/mcp/client/McpClient.test-d.ts +0 -144
- package/src/mcp/client/McpClient.test.ts +0 -463
- package/src/mcp/client/McpClient.ts +0 -307
- package/src/mcp/client/McpClient.unit.test.ts +0 -135
- package/src/mcp/client/index.ts +0 -2
- package/src/mcp/server/Transport.test.ts +0 -191
- package/src/mcp/server/Transport.ts +0 -111
- package/src/mcp/server/index.ts +0 -1
- package/src/middlewares/elysia.test.ts +0 -295
- package/src/middlewares/elysia.ts +0 -116
- package/src/middlewares/express.test.ts +0 -371
- package/src/middlewares/express.ts +0 -140
- package/src/middlewares/hono.test.ts +0 -476
- package/src/middlewares/hono.ts +0 -153
- package/src/middlewares/internal/mppx.test.ts +0 -177
- package/src/middlewares/internal/mppx.ts +0 -67
- package/src/middlewares/nextjs.test.ts +0 -369
- package/src/middlewares/nextjs.ts +0 -107
- package/src/proxy/Proxy.test.ts +0 -1031
- package/src/proxy/Proxy.ts +0 -345
- package/src/proxy/Service.test.ts +0 -182
- package/src/proxy/Service.ts +0 -253
- package/src/proxy/index.ts +0 -6
- package/src/proxy/internal/Headers.test.ts +0 -139
- package/src/proxy/internal/Headers.ts +0 -66
- package/src/proxy/internal/Route.test.ts +0 -217
- package/src/proxy/internal/Route.ts +0 -64
- package/src/proxy/services/anthropic.test.ts +0 -132
- package/src/proxy/services/anthropic.ts +0 -52
- package/src/proxy/services/openai.test.ts +0 -157
- package/src/proxy/services/openai.ts +0 -59
- package/src/proxy/services/stripe.test.ts +0 -175
- package/src/proxy/services/stripe.ts +0 -58
- package/src/server/Methods.ts +0 -3
- package/src/server/Mppx.authorize.test.ts +0 -210
- package/src/server/Mppx.test-d.ts +0 -360
- package/src/server/Mppx.test.ts +0 -5813
- package/src/server/Mppx.ts +0 -2623
- package/src/server/NodeListener.test.ts +0 -293
- package/src/server/NodeListener.ts +0 -45
- package/src/server/Request.test.ts +0 -255
- package/src/server/Request.ts +0 -155
- package/src/server/Response.test.ts +0 -32
- package/src/server/Response.ts +0 -45
- package/src/server/Transport.test.ts +0 -598
- package/src/server/Transport.ts +0 -320
- package/src/server/index.ts +0 -9
- package/src/server/internal/html/compose.main.gen.ts +0 -2
- package/src/server/internal/html/compose.main.ts +0 -88
- package/src/server/internal/html/config.ts +0 -672
- package/src/server/internal/html/constants.ts +0 -28
- package/src/server/internal/html/serviceWorker.client.ts +0 -28
- package/src/server/internal/html/serviceWorker.gen.ts +0 -2
- package/src/server/internal/html/serviceWorker.ts +0 -27
- package/src/server/internal/html/tsconfig.compose.json +0 -8
- package/src/server/internal/html/tsconfig.worker.client.json +0 -8
- package/src/server/internal/html/tsconfig.worker.json +0 -8
- package/src/server/internal/scope.ts +0 -43
- package/src/stripe/Charge.integration.test.ts +0 -329
- package/src/stripe/Methods.test.ts +0 -62
- package/src/stripe/Methods.ts +0 -44
- package/src/stripe/client/Charge.test.ts +0 -205
- package/src/stripe/client/Charge.ts +0 -132
- package/src/stripe/client/Methods.ts +0 -37
- package/src/stripe/client/index.ts +0 -2
- package/src/stripe/index.ts +0 -1
- package/src/stripe/internal/constants.ts +0 -7
- package/src/stripe/internal/types.ts +0 -46
- package/src/stripe/server/Charge.test-d.ts +0 -66
- package/src/stripe/server/Charge.test.ts +0 -621
- package/src/stripe/server/Charge.ts +0 -434
- package/src/stripe/server/Methods.ts +0 -24
- package/src/stripe/server/index.ts +0 -2
- package/src/stripe/server/internal/html/main.ts +0 -165
- package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
- package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
- package/src/stripe/server/internal/html/package.json +0 -9
- package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
- package/src/stripe/server/internal/html/tsconfig.json +0 -8
- package/src/stripe/server/internal/html/types.ts +0 -5
- package/src/stripe/server/internal/html.gen.ts +0 -2
- package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
- package/src/tempo/Attribution.test.ts +0 -294
- package/src/tempo/Attribution.ts +0 -185
- package/src/tempo/Methods.test.ts +0 -425
- package/src/tempo/Methods.ts +0 -367
- package/src/tempo/Proof.conformance.test.ts +0 -146
- package/src/tempo/Proof.test-d.ts +0 -32
- package/src/tempo/Proof.test.ts +0 -40
- package/src/tempo/Proof.ts +0 -69
- package/src/tempo/PublicExports.test-d.ts +0 -130
- package/src/tempo/Subscription.integration.test.ts +0 -591
- package/src/tempo/client/Charge.test.ts +0 -501
- package/src/tempo/client/Charge.ts +0 -289
- package/src/tempo/client/Methods.ts +0 -45
- package/src/tempo/client/ResolveAccount.ts +0 -46
- package/src/tempo/client/Subscription.test.ts +0 -180
- package/src/tempo/client/Subscription.ts +0 -156
- package/src/tempo/client/index.ts +0 -17
- package/src/tempo/index.ts +0 -5
- package/src/tempo/internal/account.ts +0 -56
- package/src/tempo/internal/address.ts +0 -6
- package/src/tempo/internal/auto-swap.test.ts +0 -198
- package/src/tempo/internal/auto-swap.ts +0 -188
- package/src/tempo/internal/charge.test.ts +0 -66
- package/src/tempo/internal/charge.ts +0 -43
- package/src/tempo/internal/defaults.test.ts +0 -95
- package/src/tempo/internal/defaults.ts +0 -53
- package/src/tempo/internal/fee-payer.test.ts +0 -1177
- package/src/tempo/internal/fee-payer.ts +0 -808
- package/src/tempo/internal/fee-token.test.ts +0 -165
- package/src/tempo/internal/fee-token.ts +0 -72
- package/src/tempo/internal/proof.test.ts +0 -97
- package/src/tempo/internal/proof.ts +0 -87
- package/src/tempo/internal/selectors.ts +0 -10
- package/src/tempo/internal/types.ts +0 -19
- package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
- package/src/tempo/legacy/README.md +0 -9
- package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
- package/src/tempo/legacy/client/ChannelOps.ts +0 -271
- package/src/tempo/legacy/client/Session.test.ts +0 -800
- package/src/tempo/legacy/client/Session.ts +0 -397
- package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
- package/src/tempo/legacy/client/SessionManager.ts +0 -909
- package/src/tempo/legacy/client/index.ts +0 -6
- package/src/tempo/legacy/index.ts +0 -6
- package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
- package/src/tempo/legacy/server/Session.test.ts +0 -6370
- package/src/tempo/legacy/server/Session.ts +0 -1024
- package/src/tempo/legacy/server/index.ts +0 -4
- package/src/tempo/legacy/session/Chain.test.ts +0 -1349
- package/src/tempo/legacy/session/Chain.ts +0 -830
- package/src/tempo/legacy/session/Channel.test.ts +0 -109
- package/src/tempo/legacy/session/Channel.ts +0 -51
- package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
- package/src/tempo/legacy/session/ChannelStore.ts +0 -39
- package/src/tempo/legacy/session/Types.ts +0 -91
- package/src/tempo/legacy/session/Voucher.test.ts +0 -410
- package/src/tempo/legacy/session/Voucher.ts +0 -183
- package/src/tempo/legacy/session/escrow.abi.ts +0 -760
- package/src/tempo/legacy/session/index.ts +0 -8
- package/src/tempo/server/AtomicStore.test-d.ts +0 -50
- package/src/tempo/server/Charge.test.ts +0 -6121
- package/src/tempo/server/Charge.ts +0 -1351
- package/src/tempo/server/Methods.ts +0 -106
- package/src/tempo/server/Relay.test.ts +0 -677
- package/src/tempo/server/Relay.ts +0 -297
- package/src/tempo/server/SponsorBudget.test.ts +0 -154
- package/src/tempo/server/SponsorBudget.ts +0 -219
- package/src/tempo/server/Sse.test.ts +0 -321
- package/src/tempo/server/Subscription.test.ts +0 -1944
- package/src/tempo/server/Subscription.ts +0 -1333
- package/src/tempo/server/index.ts +0 -12
- package/src/tempo/server/internal/html/main.ts +0 -115
- package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
- package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
- package/src/tempo/server/internal/html/package.json +0 -10
- package/src/tempo/server/internal/html/tsconfig.json +0 -8
- package/src/tempo/server/internal/html.gen.ts +0 -2
- package/src/tempo/server/internal/request-body.test.ts +0 -210
- package/src/tempo/server/internal/request-body.ts +0 -61
- package/src/tempo/server/internal/transport.test.ts +0 -903
- package/src/tempo/server/internal/transport.ts +0 -310
- package/src/tempo/session/README.md +0 -208
- package/src/tempo/session/Snapshot.test.ts +0 -41
- package/src/tempo/session/Snapshot.ts +0 -95
- package/src/tempo/session/client/ChannelOps.test.ts +0 -218
- package/src/tempo/session/client/ChannelOps.ts +0 -348
- package/src/tempo/session/client/ChannelStore.ts +0 -111
- package/src/tempo/session/client/CredentialState.test.ts +0 -789
- package/src/tempo/session/client/CredentialState.ts +0 -942
- package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
- package/src/tempo/session/client/Runtime.test.ts +0 -1104
- package/src/tempo/session/client/Runtime.ts +0 -1008
- package/src/tempo/session/client/Session.test.ts +0 -1355
- package/src/tempo/session/client/Session.ts +0 -420
- package/src/tempo/session/client/SessionManager.test.ts +0 -1899
- package/src/tempo/session/client/SessionManager.ts +0 -996
- package/src/tempo/session/client/Transports.test.ts +0 -1141
- package/src/tempo/session/client/Transports.ts +0 -1534
- package/src/tempo/session/client/index.ts +0 -40
- package/src/tempo/session/client/internal/SessionManager.ts +0 -36
- package/src/tempo/session/index.ts +0 -7
- package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
- package/src/tempo/session/precompile/Chain.test.ts +0 -1641
- package/src/tempo/session/precompile/Chain.ts +0 -1149
- package/src/tempo/session/precompile/Channel.test.ts +0 -147
- package/src/tempo/session/precompile/Channel.ts +0 -108
- package/src/tempo/session/precompile/Protocol.test.ts +0 -358
- package/src/tempo/session/precompile/Protocol.ts +0 -520
- package/src/tempo/session/precompile/Voucher.test.ts +0 -354
- package/src/tempo/session/precompile/Voucher.ts +0 -162
- package/src/tempo/session/precompile/escrow.abi.ts +0 -226
- package/src/tempo/session/precompile/index.ts +0 -33
- package/src/tempo/session/server/ChannelOps.test.ts +0 -129
- package/src/tempo/session/server/ChannelOps.ts +0 -157
- package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
- package/src/tempo/session/server/ChannelStore.ts +0 -835
- package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
- package/src/tempo/session/server/CredentialVerification.ts +0 -775
- package/src/tempo/session/server/MeteredStream.ts +0 -95
- package/src/tempo/session/server/RequestState.test.ts +0 -574
- package/src/tempo/session/server/RequestState.ts +0 -507
- package/src/tempo/session/server/Session.integration.test.ts +0 -449
- package/src/tempo/session/server/Session.test.ts +0 -3862
- package/src/tempo/session/server/Session.ts +0 -570
- package/src/tempo/session/server/Settlement.test.ts +0 -345
- package/src/tempo/session/server/Settlement.ts +0 -527
- package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
- package/src/tempo/session/server/Sse.test.ts +0 -557
- package/src/tempo/session/server/Sse.ts +0 -254
- package/src/tempo/session/server/Transports.test.ts +0 -346
- package/src/tempo/session/server/Transports.ts +0 -255
- package/src/tempo/session/server/Ws.test.ts +0 -594
- package/src/tempo/session/server/Ws.ts +0 -385
- package/src/tempo/session/server/index.ts +0 -12
- package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
- package/src/tempo/subscription/KeyAuthorization.ts +0 -396
- package/src/tempo/subscription/Receipt.ts +0 -28
- package/src/tempo/subscription/Store.test.ts +0 -609
- package/src/tempo/subscription/Store.ts +0 -449
- package/src/tempo/subscription/Types.ts +0 -68
- package/src/tempo/subscription/index.ts +0 -23
- package/src/tsconfig.json +0 -10
- package/src/validation/core.ts +0 -386
- package/src/validation/index.ts +0 -11
- package/src/viem/Account.test.ts +0 -72
- package/src/viem/Account.ts +0 -30
- package/src/viem/Client.test.ts +0 -366
- package/src/viem/Client.ts +0 -93
- package/src/x402/Assets.test.ts +0 -253
- package/src/x402/Assets.ts +0 -221
- package/src/x402/Exact.e2e.test.ts +0 -448
- package/src/x402/Exact.localnet.test.ts +0 -475
- package/src/x402/Header.test.ts +0 -73
- package/src/x402/Header.ts +0 -79
- package/src/x402/PublicInterface.test-d.ts +0 -39
- package/src/x402/Types.ts +0 -248
- package/src/x402/client/Exact.test.ts +0 -309
- package/src/x402/client/Exact.ts +0 -186
- package/src/x402/index.ts +0 -6
- package/src/x402/internal/ChallengeBrand.ts +0 -14
- package/src/x402/internal/RouteBinding.ts +0 -18
- package/src/x402/server/EvmCharge.ts +0 -394
- package/src/x402/server/Facilitator.test.ts +0 -111
- package/src/x402/server/Facilitator.ts +0 -56
- package/src/zod.test.ts +0 -169
- 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
|
-
}
|