mppx 0.8.15 → 0.8.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +40 -35
- package/dist/Challenge.js.map +1 -1
- package/dist/Constants.d.ts +17 -17
- package/dist/Constants.d.ts.map +1 -1
- package/dist/Credential.d.ts.map +1 -1
- package/dist/Errors.d.ts +3 -3
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js.map +1 -1
- package/dist/Method.d.ts +35 -5
- package/dist/Method.d.ts.map +1 -1
- package/dist/Method.js +7 -22
- package/dist/Method.js.map +1 -1
- package/dist/Store.d.ts +19 -0
- package/dist/Store.d.ts.map +1 -1
- package/dist/Store.js +43 -0
- package/dist/Store.js.map +1 -1
- package/dist/attestation/Client.d.ts +17 -0
- package/dist/attestation/Client.d.ts.map +1 -0
- package/dist/attestation/Client.js +28 -0
- package/dist/attestation/Client.js.map +1 -0
- package/dist/attestation/Constants.d.ts +15 -0
- package/dist/attestation/Constants.d.ts.map +1 -0
- package/dist/attestation/Constants.js +15 -0
- package/dist/attestation/Constants.js.map +1 -0
- package/dist/attestation/Server.d.ts +4 -0
- package/dist/attestation/Server.d.ts.map +1 -0
- package/dist/attestation/Server.js +8 -0
- package/dist/attestation/Server.js.map +1 -0
- package/dist/attestation/Types.d.ts +76 -0
- package/dist/attestation/Types.d.ts.map +1 -0
- package/dist/attestation/Types.js +2 -0
- package/dist/attestation/Types.js.map +1 -0
- package/dist/attestation/index.d.ts +6 -0
- package/dist/attestation/index.d.ts.map +1 -0
- package/dist/attestation/index.js +6 -0
- package/dist/attestation/index.js.map +1 -0
- package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
- package/dist/attestation/internal/HttpMessageSignature.d.ts.map +1 -0
- package/dist/attestation/internal/HttpMessageSignature.js +320 -0
- package/dist/attestation/internal/HttpMessageSignature.js.map +1 -0
- package/dist/attestation/internal/SigningContext.d.ts +4 -0
- package/dist/attestation/internal/SigningContext.d.ts.map +1 -0
- package/dist/attestation/internal/SigningContext.js +11 -0
- package/dist/attestation/internal/SigningContext.js.map +1 -0
- package/dist/cli/account.d.ts +14 -14
- package/dist/cli/account.d.ts.map +1 -1
- package/dist/cli/cli.d.ts +6 -6
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +1 -0
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/plugins/tempo.js.map +1 -1
- package/dist/cli/sessions/commands.d.ts +4 -4
- package/dist/cli/sessions/commands.d.ts.map +1 -1
- package/dist/cli/sessions/commands.js.map +1 -1
- package/dist/cli/sessions/store.d.ts.map +1 -1
- package/dist/cli/sessions/store.js.map +1 -1
- package/dist/cli/utils.d.ts +1 -1
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js.map +1 -1
- package/dist/cli/validate/discovery.js.map +1 -1
- package/dist/cli/validate/index.d.ts +3 -3
- package/dist/cli/validate/index.d.ts.map +1 -1
- package/dist/client/Mppx.d.ts +3 -0
- package/dist/client/Mppx.d.ts.map +1 -1
- package/dist/client/Mppx.js +13 -5
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/Transport.d.ts +3 -5
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +1 -17
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +2 -6
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/client/node.js.map +1 -1
- package/dist/discovery/OpenApi.d.ts +3 -5
- package/dist/discovery/OpenApi.d.ts.map +1 -1
- package/dist/discovery/OpenApi.js +13 -34
- package/dist/discovery/OpenApi.js.map +1 -1
- package/dist/discovery/internal/Metadata.d.ts +20 -0
- package/dist/discovery/internal/Metadata.d.ts.map +1 -0
- package/dist/discovery/internal/Metadata.js +36 -0
- package/dist/discovery/internal/Metadata.js.map +1 -0
- package/dist/evm/Methods.d.ts +11 -11
- package/dist/evm/Methods.d.ts.map +1 -1
- package/dist/evm/Types.d.ts +17 -17
- package/dist/evm/Types.d.ts.map +1 -1
- package/dist/evm/client/Charge.d.ts +11 -11
- package/dist/evm/client/Methods.d.ts +11 -11
- package/dist/evm/server/Charge.d.ts +1 -1
- package/dist/evm/server/Charge.d.ts.map +1 -1
- package/dist/evm/server/Charge.js +2 -0
- package/dist/evm/server/Charge.js.map +1 -1
- package/dist/evm/server/Methods.d.ts +11 -11
- package/dist/internal/HeaderCodec.d.ts +2 -2
- package/dist/internal/HeaderCodec.d.ts.map +1 -1
- package/dist/internal/types.d.ts +6 -0
- package/dist/internal/types.d.ts.map +1 -1
- package/dist/middlewares/elysia.js.map +1 -1
- package/dist/middlewares/express.js.map +1 -1
- package/dist/middlewares/hono.js.map +1 -1
- package/dist/middlewares/nextjs.js.map +1 -1
- package/dist/proxy/Proxy.d.ts +2 -0
- package/dist/proxy/Proxy.d.ts.map +1 -1
- package/dist/proxy/Proxy.js +117 -9
- package/dist/proxy/Proxy.js.map +1 -1
- package/dist/proxy/Service.d.ts +36 -1
- package/dist/proxy/Service.d.ts.map +1 -1
- package/dist/proxy/Service.js +9 -8
- package/dist/proxy/Service.js.map +1 -1
- package/dist/proxy/services/anthropic.d.ts.map +1 -1
- package/dist/proxy/services/anthropic.js +1 -0
- package/dist/proxy/services/anthropic.js.map +1 -1
- package/dist/proxy/services/openai.d.ts.map +1 -1
- package/dist/proxy/services/openai.js +1 -0
- package/dist/proxy/services/openai.js.map +1 -1
- package/dist/proxy/services/stripe.d.ts.map +1 -1
- package/dist/proxy/services/stripe.js +1 -0
- package/dist/proxy/services/stripe.js.map +1 -1
- package/dist/server/Mppx.d.ts +75 -13
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +201 -23
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/internal/html/config.d.ts +9 -9
- package/dist/server/internal/html/config.d.ts.map +1 -1
- package/dist/server/internal/html/constants.d.ts +17 -17
- package/dist/server/internal/html/constants.d.ts.map +1 -1
- package/dist/stripe/Methods.d.ts +10 -10
- package/dist/stripe/Methods.d.ts.map +1 -1
- 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/internal/types.d.ts.map +1 -1
- package/dist/stripe/server/Charge.d.ts +11 -11
- package/dist/stripe/server/Charge.d.ts.map +1 -1
- package/dist/stripe/server/Charge.js +49 -1
- package/dist/stripe/server/Charge.js.map +1 -1
- package/dist/stripe/server/Methods.d.ts +137 -48
- package/dist/stripe/server/Methods.d.ts.map +1 -1
- package/dist/stripe/server/Methods.js +259 -4
- package/dist/stripe/server/Methods.js.map +1 -1
- package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
- package/dist/stripe/server/internal/deposit-address.d.ts.map +1 -0
- package/dist/stripe/server/internal/deposit-address.js +28 -0
- package/dist/stripe/server/internal/deposit-address.js.map +1 -0
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/stripe/server/internal/record-payment.d.ts +15 -0
- package/dist/stripe/server/internal/record-payment.d.ts.map +1 -0
- package/dist/stripe/server/internal/record-payment.js +42 -0
- package/dist/stripe/server/internal/record-payment.js.map +1 -0
- package/dist/stripe/server/internal/request.d.ts +25 -0
- package/dist/stripe/server/internal/request.d.ts.map +1 -0
- package/dist/stripe/server/internal/request.js +29 -0
- package/dist/stripe/server/internal/request.js.map +1 -0
- package/dist/tap/Constants.d.ts +28 -0
- package/dist/tap/Constants.d.ts.map +1 -0
- package/dist/tap/Constants.js +32 -0
- package/dist/tap/Constants.js.map +1 -0
- package/dist/tap/Types.d.ts +11 -0
- package/dist/tap/Types.d.ts.map +1 -0
- package/dist/tap/Types.js +2 -0
- package/dist/tap/Types.js.map +1 -0
- package/dist/tap/client/index.d.ts +26 -0
- package/dist/tap/client/index.d.ts.map +1 -0
- package/dist/tap/client/index.js +33 -0
- package/dist/tap/client/index.js.map +1 -0
- package/dist/tap/index.d.ts +5 -0
- package/dist/tap/index.d.ts.map +1 -0
- package/dist/tap/index.js +5 -0
- package/dist/tap/index.js.map +1 -0
- package/dist/tap/server/index.d.ts +20 -0
- package/dist/tap/server/index.d.ts.map +1 -0
- package/dist/tap/server/index.js +36 -0
- package/dist/tap/server/index.js.map +1 -0
- package/dist/tempo/Attribution.d.ts +1 -1
- package/dist/tempo/Methods.d.ts +60 -60
- package/dist/tempo/Methods.d.ts.map +1 -1
- package/dist/tempo/Proof.d.ts +16 -16
- package/dist/tempo/client/Charge.d.ts +19 -19
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +1 -7
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +38 -38
- package/dist/tempo/client/Methods.js.map +1 -1
- package/dist/tempo/client/Subscription.d.ts +23 -23
- package/dist/tempo/client/Subscription.js.map +1 -1
- package/dist/tempo/internal/address.d.ts +2 -1
- package/dist/tempo/internal/address.d.ts.map +1 -1
- package/dist/tempo/internal/address.js +3 -1
- package/dist/tempo/internal/address.js.map +1 -1
- package/dist/tempo/internal/auto-swap.d.ts.map +1 -1
- package/dist/tempo/internal/auto-swap.js +4 -19
- package/dist/tempo/internal/auto-swap.js.map +1 -1
- package/dist/tempo/internal/defaults.d.ts +6 -6
- package/dist/tempo/internal/defaults.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts +12 -12
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/internal/proof.d.ts +17 -17
- package/dist/tempo/internal/proof.d.ts.map +1 -1
- package/dist/tempo/legacy/client/Session.d.ts +20 -20
- package/dist/tempo/legacy/client/Session.js.map +1 -1
- package/dist/tempo/legacy/client/SessionManager.js.map +1 -1
- package/dist/tempo/legacy/index.d.ts +1 -3
- package/dist/tempo/legacy/index.d.ts.map +1 -1
- package/dist/tempo/legacy/index.js +1 -3
- package/dist/tempo/legacy/index.js.map +1 -1
- package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
- package/dist/tempo/legacy/session/escrow.abi.d.ts.map +1 -1
- package/dist/tempo/server/Charge.d.ts +25 -11
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +44 -39
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +37 -52
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +0 -14
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Relay.d.ts +1 -1
- package/dist/tempo/server/Relay.d.ts.map +1 -1
- package/dist/tempo/server/Relay.js +2 -2
- package/dist/tempo/server/Relay.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +25 -25
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/Subscription.js +2 -0
- package/dist/tempo/server/Subscription.js.map +1 -1
- package/dist/tempo/server/index.d.ts +1 -1
- package/dist/tempo/server/index.d.ts.map +1 -1
- package/dist/tempo/server/index.js +1 -1
- package/dist/tempo/server/index.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/server/internal/transport.d.ts +2 -0
- package/dist/tempo/server/internal/transport.d.ts.map +1 -1
- package/dist/tempo/server/internal/transport.js +9 -2
- package/dist/tempo/server/internal/transport.js.map +1 -1
- package/dist/tempo/session/client/ChannelOps.js.map +1 -1
- package/dist/tempo/session/client/CredentialState.d.ts +1 -1
- package/dist/tempo/session/client/CredentialState.js.map +1 -1
- package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -1
- package/dist/tempo/session/client/Runtime.js.map +1 -1
- package/dist/tempo/session/client/Session.d.ts +19 -19
- package/dist/tempo/session/client/Session.js.map +1 -1
- package/dist/tempo/session/client/SessionManager.js.map +1 -1
- package/dist/tempo/session/client/Transports.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Chain.d.ts +27 -0
- package/dist/tempo/session/precompile/Chain.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Chain.js +68 -7
- package/dist/tempo/session/precompile/Chain.js.map +1 -1
- package/dist/tempo/session/precompile/Protocol.js.map +1 -1
- package/dist/tempo/session/precompile/Voucher.d.ts +4 -4
- package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -1
- package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
- package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -1
- package/dist/tempo/session/server/ChannelStore.d.ts +9 -0
- package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -1
- package/dist/tempo/session/server/ChannelStore.js +16 -8
- package/dist/tempo/session/server/ChannelStore.js.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.d.ts +30 -13
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.js +207 -13
- package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
- package/dist/tempo/session/server/MeteredStream.d.ts +3 -0
- package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -1
- package/dist/tempo/session/server/MeteredStream.js +3 -1
- package/dist/tempo/session/server/MeteredStream.js.map +1 -1
- package/dist/tempo/session/server/Session.d.ts +32 -21
- package/dist/tempo/session/server/Session.d.ts.map +1 -1
- package/dist/tempo/session/server/Session.js +116 -53
- package/dist/tempo/session/server/Session.js.map +1 -1
- package/dist/tempo/session/server/Sse.d.ts +3 -1
- package/dist/tempo/session/server/Sse.d.ts.map +1 -1
- package/dist/tempo/session/server/Sse.js +2 -1
- package/dist/tempo/session/server/Sse.js.map +1 -1
- package/dist/tempo/session/server/Transports.d.ts +1 -1
- package/dist/tempo/session/server/Transports.d.ts.map +1 -1
- package/dist/tempo/session/server/Transports.js +1 -0
- package/dist/tempo/session/server/Transports.js.map +1 -1
- package/dist/tempo/session/server/Ws.d.ts +6 -1
- package/dist/tempo/session/server/Ws.d.ts.map +1 -1
- package/dist/tempo/session/server/Ws.js +1 -0
- package/dist/tempo/session/server/Ws.js.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
- package/dist/viem/Account.d.ts.map +1 -1
- package/dist/viem/Account.js.map +1 -1
- package/dist/web-bot-auth/Constants.d.ts +20 -0
- package/dist/web-bot-auth/Constants.d.ts.map +1 -0
- package/dist/web-bot-auth/Constants.js +24 -0
- package/dist/web-bot-auth/Constants.js.map +1 -0
- package/dist/web-bot-auth/Types.d.ts +10 -0
- package/dist/web-bot-auth/Types.d.ts.map +1 -0
- package/dist/web-bot-auth/Types.js +2 -0
- package/dist/web-bot-auth/Types.js.map +1 -0
- package/dist/web-bot-auth/client/index.d.ts +29 -0
- package/dist/web-bot-auth/client/index.d.ts.map +1 -0
- package/dist/web-bot-auth/client/index.js +64 -0
- package/dist/web-bot-auth/client/index.js.map +1 -0
- package/dist/web-bot-auth/index.d.ts +7 -0
- package/dist/web-bot-auth/index.d.ts.map +1 -0
- package/dist/web-bot-auth/index.js +7 -0
- package/dist/web-bot-auth/index.js.map +1 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +1 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.js.map +1 -0
- package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
- package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +1 -0
- package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
- package/dist/web-bot-auth/internal/SignatureAgent.js.map +1 -0
- package/dist/web-bot-auth/server/index.d.ts +35 -0
- package/dist/web-bot-auth/server/index.d.ts.map +1 -0
- package/dist/web-bot-auth/server/index.js +88 -0
- package/dist/web-bot-auth/server/index.js.map +1 -0
- package/dist/x402/Assets.d.ts.map +1 -1
- package/dist/x402/Types.d.ts +6 -6
- package/dist/x402/Types.d.ts.map +1 -1
- package/dist/x402/server/EvmCharge.d.ts.map +1 -1
- package/dist/x402/server/EvmCharge.js +32 -20
- package/dist/x402/server/EvmCharge.js.map +1 -1
- package/package.json +19 -3
- package/src/Challenge.fuzz.test.ts +80 -47
- package/src/Challenge.test.ts +65 -0
- package/src/Challenge.ts +39 -35
- package/src/Method.ts +82 -68
- package/src/Store.test-d.ts +16 -0
- package/src/Store.test.ts +50 -0
- package/src/Store.ts +68 -0
- package/src/attestation/Attestation.integration.test.ts +208 -0
- package/src/attestation/Client.test.ts +83 -0
- package/src/attestation/Client.ts +34 -0
- package/src/attestation/Constants.ts +15 -0
- package/src/attestation/Server.test.ts +60 -0
- package/src/attestation/Server.ts +12 -0
- package/src/attestation/Types.test-d.ts +54 -0
- package/src/attestation/Types.ts +77 -0
- package/src/attestation/index.ts +5 -0
- package/src/attestation/internal/HttpMessageSignature.test.ts +101 -0
- package/src/attestation/internal/HttpMessageSignature.ts +429 -0
- package/src/attestation/internal/SigningContext.ts +13 -0
- package/src/bin.js +2 -0
- package/src/cli/cli.ts +1 -0
- package/src/client/Mppx.test-d.ts +17 -0
- package/src/client/Mppx.test.ts +14 -14
- package/src/client/Mppx.ts +25 -4
- package/src/client/Transport.test.ts +12 -45
- package/src/client/Transport.ts +3 -24
- package/src/client/internal/Fetch.ts +2 -6
- package/src/discovery/OpenApi.test.ts +170 -0
- package/src/discovery/OpenApi.ts +16 -48
- package/src/discovery/internal/Metadata.ts +51 -0
- package/src/evm/server/Charge.ts +6 -1
- package/src/internal/AcceptPayment.test.ts +12 -8
- package/src/internal/types.ts +9 -0
- package/src/mcp/client/McpClient.integration.test.ts +19 -32
- package/src/middlewares/elysia.test.ts +2 -12
- package/src/middlewares/express.test.ts +2 -12
- package/src/middlewares/hono.test.ts +6 -9
- package/src/middlewares/nextjs.test.ts +2 -12
- package/src/proxy/Proxy.test.ts +26 -19
- package/src/proxy/Proxy.ts +147 -9
- package/src/proxy/Proxy.upstreamError.test.ts +364 -0
- package/src/proxy/Service.test.ts +73 -3
- package/src/proxy/Service.ts +50 -23
- package/src/proxy/services/anthropic.ts +1 -0
- package/src/proxy/services/hooks.test-d.ts +14 -0
- package/src/proxy/services/hooks.test.ts +44 -0
- package/src/proxy/services/openai.ts +1 -0
- package/src/proxy/services/stripe.ts +1 -0
- package/src/server/Methods.test-d.ts +88 -0
- package/src/server/Methods.test.ts +69 -0
- package/src/server/Mppx.test-d.ts +141 -7
- package/src/server/Mppx.test.ts +1017 -119
- package/src/server/Mppx.ts +350 -54
- package/src/stripe/internal/constants.ts +1 -1
- package/src/stripe/internal/types.ts +1 -0
- package/src/stripe/server/Charge.test-d.ts +16 -1
- package/src/stripe/server/Charge.test.ts +79 -0
- package/src/stripe/server/Charge.ts +54 -1
- package/src/stripe/server/Methods.test-d.ts +157 -0
- package/src/stripe/server/Methods.test.ts +403 -0
- package/src/stripe/server/Methods.ts +423 -6
- package/src/stripe/server/internal/deposit-address.ts +57 -0
- package/src/stripe/server/internal/html/node_modules/.bin/mppx +3 -3
- package/src/stripe/server/internal/html/package.json +1 -1
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/stripe/server/internal/record-payment.ts +66 -0
- package/src/stripe/server/internal/request.ts +49 -0
- package/src/tap/Constants.ts +32 -0
- package/src/tap/Tap.test.ts +125 -0
- package/src/tap/Types.ts +11 -0
- package/src/tap/client/index.ts +54 -0
- package/src/tap/index.ts +4 -0
- package/src/tap/server/index.ts +48 -0
- package/src/tempo/PublicExports.test-d.ts +3 -3
- package/src/tempo/client/Charge.ts +1 -19
- package/src/tempo/internal/address.test.ts +42 -0
- package/src/tempo/internal/address.ts +3 -3
- package/src/tempo/internal/auto-swap.test.ts +4 -4
- package/src/tempo/internal/auto-swap.ts +7 -50
- package/src/tempo/legacy/README.md +5 -5
- package/src/tempo/legacy/index.ts +1 -3
- package/src/tempo/server/AtomicStore.test-d.ts +13 -0
- package/src/tempo/server/Charge.test.ts +19 -84
- package/src/tempo/server/Charge.ts +83 -55
- package/src/tempo/server/Methods.ts +0 -20
- package/src/tempo/server/Relay.test.ts +5 -5
- package/src/tempo/server/Relay.ts +2 -2
- package/src/tempo/server/Subscription.ts +4 -1
- package/src/tempo/server/index.ts +1 -1
- package/src/tempo/server/internal/html/node_modules/.bin/mppx +3 -3
- package/src/tempo/server/internal/html/package.json +1 -1
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/server/internal/transport.test.ts +22 -3
- package/src/tempo/server/internal/transport.ts +15 -3
- package/src/tempo/session/README.md +112 -0
- package/src/tempo/session/precompile/Chain.ts +131 -11
- package/src/tempo/session/server/ChannelStore.ts +33 -12
- package/src/tempo/session/server/CredentialVerification.test.ts +4 -4
- package/src/tempo/session/server/CredentialVerification.ts +340 -28
- package/src/tempo/session/server/MeteredStream.ts +5 -1
- package/src/tempo/session/server/Session.test.ts +428 -43
- package/src/tempo/session/server/Session.ts +159 -60
- package/src/tempo/session/server/Sse.test.ts +77 -0
- package/src/tempo/session/server/Sse.ts +8 -1
- package/src/tempo/session/server/Transports.ts +2 -1
- package/src/tempo/session/server/Ws.test.ts +171 -0
- package/src/tempo/session/server/Ws.ts +7 -1
- package/src/web-bot-auth/Constants.ts +24 -0
- package/src/web-bot-auth/Types.ts +9 -0
- package/src/web-bot-auth/WebBotAuth.test.ts +182 -0
- package/src/web-bot-auth/client/index.ts +84 -0
- package/src/web-bot-auth/index.ts +6 -0
- package/src/web-bot-auth/internal/JwkThumbprint.ts +21 -0
- package/src/web-bot-auth/internal/SignatureAgent.ts +18 -0
- package/src/web-bot-auth/server/index.ts +113 -0
- package/src/x402/Exact.e2e.test.ts +121 -81
- package/src/x402/Exact.localnet.test.ts +1 -1
- package/src/x402/server/EvmCharge.ts +35 -19
- 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/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/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/ChannelStore.test.ts +0 -58
- package/src/tempo/legacy/session/ChannelStore.ts +0 -39
|
@@ -37,6 +37,85 @@ function createMockStripeClient(
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
describe('stripe.charge offer availability', () => {
|
|
41
|
+
test.each([
|
|
42
|
+
{ atMinimum: '0.50', belowMinimum: '0.49', currency: 'usd', decimals: 2, normalized: '50' },
|
|
43
|
+
{ atMinimum: '0.30', belowMinimum: '0.29', currency: 'gbp', decimals: 2, normalized: '30' },
|
|
44
|
+
{ atMinimum: '50', belowMinimum: '49', currency: 'jpy', decimals: 0, normalized: '50' },
|
|
45
|
+
{ atMinimum: '10', belowMinimum: '9.99', currency: 'mxn', decimals: 2, normalized: '1000' },
|
|
46
|
+
])(
|
|
47
|
+
'filters $currency offers below the Stripe currency minimum',
|
|
48
|
+
async ({ atMinimum, belowMinimum, currency, decimals, normalized }) => {
|
|
49
|
+
const { client } = createMockStripeClient()
|
|
50
|
+
const stripeCharge = stripe.charge({
|
|
51
|
+
client,
|
|
52
|
+
networkId: 'internal',
|
|
53
|
+
paymentMethodTypes: ['card'],
|
|
54
|
+
})
|
|
55
|
+
const server = Mppx.create({ methods: [stripeCharge], realm, secretKey })
|
|
56
|
+
|
|
57
|
+
const result = await server.compose(
|
|
58
|
+
[stripeCharge, { amount: belowMinimum, currency, decimals }],
|
|
59
|
+
[stripeCharge, { amount: atMinimum, currency, decimals }],
|
|
60
|
+
)(new Request('https://example.com/resource'))
|
|
61
|
+
|
|
62
|
+
expect(result.status).toBe(402)
|
|
63
|
+
if (result.status !== 402) throw new Error()
|
|
64
|
+
const challenges = Challenge.fromResponseList(result.challenge)
|
|
65
|
+
expect(challenges).toHaveLength(1)
|
|
66
|
+
expect(challenges[0]?.request).toMatchObject({ amount: normalized, currency })
|
|
67
|
+
},
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
test('composes constructor canOffer after the Stripe currency minimum', async () => {
|
|
71
|
+
const { client } = createMockStripeClient()
|
|
72
|
+
const offeredAmounts: string[] = []
|
|
73
|
+
const stripeCharge = stripe.charge({
|
|
74
|
+
client,
|
|
75
|
+
canOffer({ request }) {
|
|
76
|
+
offeredAmounts.push(request.amount)
|
|
77
|
+
return BigInt(request.amount) >= 100n
|
|
78
|
+
},
|
|
79
|
+
networkId: 'internal',
|
|
80
|
+
paymentMethodTypes: ['card'],
|
|
81
|
+
})
|
|
82
|
+
const server = Mppx.create({ methods: [stripeCharge], realm, secretKey })
|
|
83
|
+
|
|
84
|
+
const result = await server.compose(
|
|
85
|
+
[stripeCharge, { amount: '0.49', currency: 'usd', decimals: 2 }],
|
|
86
|
+
[stripeCharge, { amount: '0.50', currency: 'usd', decimals: 2 }],
|
|
87
|
+
[stripeCharge, { amount: '1', currency: 'usd', decimals: 2 }],
|
|
88
|
+
)(new Request('https://example.com/resource'))
|
|
89
|
+
|
|
90
|
+
expect(result.status).toBe(402)
|
|
91
|
+
if (result.status !== 402) throw new Error()
|
|
92
|
+
expect(offeredAmounts).toEqual(['50', '100'])
|
|
93
|
+
expect(
|
|
94
|
+
Challenge.fromResponseList(result.challenge).map(({ request }) => request.amount),
|
|
95
|
+
).toEqual(['100'])
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
test('lets constructor canOffer decide availability for an unknown currency', async () => {
|
|
99
|
+
const { client } = createMockStripeClient()
|
|
100
|
+
const canOffer = vi.fn(() => true)
|
|
101
|
+
const stripeCharge = stripe.charge({
|
|
102
|
+
client,
|
|
103
|
+
canOffer,
|
|
104
|
+
networkId: 'internal',
|
|
105
|
+
paymentMethodTypes: ['card'],
|
|
106
|
+
})
|
|
107
|
+
const server = Mppx.create({ methods: [stripeCharge], realm, secretKey })
|
|
108
|
+
|
|
109
|
+
const result = await server.compose([
|
|
110
|
+
stripeCharge,
|
|
111
|
+
{ amount: '0.01', currency: 'unknown', decimals: 2 },
|
|
112
|
+
])(new Request('https://example.com/resource'))
|
|
113
|
+
|
|
114
|
+
expect(result.status).toBe(402)
|
|
115
|
+
expect(canOffer).toHaveBeenCalledOnce()
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
|
|
40
119
|
describe('stripe.charge with client', () => {
|
|
41
120
|
test('default: verifies payment via client.paymentIntents.create', async () => {
|
|
42
121
|
const { client, create } = createMockStripeClient()
|
|
@@ -20,6 +20,48 @@ import type {
|
|
|
20
20
|
import * as Methods from '../Methods.js'
|
|
21
21
|
import { html as htmlContent } from './internal/html.gen.js'
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Stripe's general minimum charge amounts in each currency's smallest unit.
|
|
25
|
+
* Payment methods with lower provider-specific exceptions remain conservatively
|
|
26
|
+
* subject to the general minimum.
|
|
27
|
+
*
|
|
28
|
+
* @see https://docs.stripe.com/currencies#minimum-and-maximum-charge-amounts
|
|
29
|
+
*/
|
|
30
|
+
const minimumChargeAmountByCurrency: Readonly<Record<string, bigint>> = {
|
|
31
|
+
aed: 200n,
|
|
32
|
+
ars: 50n,
|
|
33
|
+
aud: 50n,
|
|
34
|
+
bgn: 100n,
|
|
35
|
+
brl: 50n,
|
|
36
|
+
cad: 50n,
|
|
37
|
+
chf: 50n,
|
|
38
|
+
cop: 50n,
|
|
39
|
+
czk: 1_500n,
|
|
40
|
+
dkk: 250n,
|
|
41
|
+
eur: 50n,
|
|
42
|
+
gbp: 30n,
|
|
43
|
+
hkd: 400n,
|
|
44
|
+
huf: 17_500n,
|
|
45
|
+
idr: 50n,
|
|
46
|
+
ils: 50n,
|
|
47
|
+
inr: 50n,
|
|
48
|
+
jpy: 50n,
|
|
49
|
+
krw: 50n,
|
|
50
|
+
mxn: 1_000n,
|
|
51
|
+
myr: 200n,
|
|
52
|
+
nok: 300n,
|
|
53
|
+
nzd: 50n,
|
|
54
|
+
php: 50n,
|
|
55
|
+
pln: 200n,
|
|
56
|
+
ron: 200n,
|
|
57
|
+
rub: 50n,
|
|
58
|
+
sek: 300n,
|
|
59
|
+
sgd: 50n,
|
|
60
|
+
thb: 1_000n,
|
|
61
|
+
usd: 50n,
|
|
62
|
+
zar: 50n,
|
|
63
|
+
}
|
|
64
|
+
|
|
23
65
|
/**
|
|
24
66
|
* Creates a Stripe charge method intent for usage on the server.
|
|
25
67
|
*
|
|
@@ -48,6 +90,8 @@ import { html as htmlContent } from './internal/html.gen.js'
|
|
|
48
90
|
export function charge<const parameters extends charge.Parameters>(parameters: parameters) {
|
|
49
91
|
const {
|
|
50
92
|
amount,
|
|
93
|
+
canOffer,
|
|
94
|
+
onPaymentSuccess,
|
|
51
95
|
currency,
|
|
52
96
|
decimals,
|
|
53
97
|
description,
|
|
@@ -98,6 +142,14 @@ export function charge<const parameters extends charge.Parameters>(parameters: p
|
|
|
98
142
|
}
|
|
99
143
|
: undefined,
|
|
100
144
|
|
|
145
|
+
async canOffer(context) {
|
|
146
|
+
const minimum = minimumChargeAmountByCurrency[context.request.currency.toLowerCase()]
|
|
147
|
+
if (minimum !== undefined && BigInt(context.request.amount) < minimum) return false
|
|
148
|
+
return (await canOffer?.(context)) ?? true
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
onPaymentSuccess,
|
|
152
|
+
|
|
101
153
|
async verify({ credential, envelope, request }) {
|
|
102
154
|
const { challenge } = credential
|
|
103
155
|
const resolvedRequest = (() => {
|
|
@@ -195,7 +247,8 @@ export declare namespace charge {
|
|
|
195
247
|
metadata?: Record<string, string> | undefined
|
|
196
248
|
/** Optional server-side Stripe Connect settlement policy. Not included in MPP challenges. */
|
|
197
249
|
connect?: ConnectSettlement | ResolveConnectSettlement | undefined
|
|
198
|
-
} &
|
|
250
|
+
} & Method.ComposableHooks<typeof Methods.charge> &
|
|
251
|
+
Defaults &
|
|
199
252
|
OneOf<
|
|
200
253
|
| {
|
|
201
254
|
/** Pre-configured Stripe SDK instance. Any object matching the duck-typed `StripeClient` shape works. */
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import type { Client } from 'viem'
|
|
2
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
3
|
+
|
|
4
|
+
import * as Mppx from '../../server/Mppx.js'
|
|
5
|
+
import type { AtomicStore } from '../../Store.js'
|
|
6
|
+
import { stripe } from './Methods.js'
|
|
7
|
+
|
|
8
|
+
test('async defaultMethods() produces types compose can use', async () => {
|
|
9
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
10
|
+
const methods = await mp.defaultMethods()
|
|
11
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
12
|
+
|
|
13
|
+
const result = await mppx.compose(
|
|
14
|
+
['tempo/charge', { amount: '0.01', description: 'test' }],
|
|
15
|
+
['stripe/charge', { amount: '0.50', currency: 'usd', decimals: 2, description: 'test' }],
|
|
16
|
+
)(new Request('http://localhost'))
|
|
17
|
+
|
|
18
|
+
expectTypeOf(result.status).toEqualTypeOf<200 | 402>()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('tempo.session() accepts getClient, feePayer, store without casts', () => {
|
|
22
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
23
|
+
const addr = '' as stripe.DepositAddress<'tempo'>
|
|
24
|
+
|
|
25
|
+
const session = mp.tempo.session({
|
|
26
|
+
recipient: addr,
|
|
27
|
+
getClient: () => ({}) as Client,
|
|
28
|
+
feePayer: 'https://api.tempo.xyz/rpc/sponsor?key=test',
|
|
29
|
+
store: {} as AtomicStore,
|
|
30
|
+
sse: true,
|
|
31
|
+
settlementSchedule: { amount: '0.01' },
|
|
32
|
+
onSessionSettlement: async () => {},
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
expectTypeOf(session).toHaveProperty('name')
|
|
36
|
+
expectTypeOf(session).toHaveProperty('intent')
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('.charge() works with multiple charge methods (implicit compose)', async () => {
|
|
40
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
41
|
+
const methods = await mp.defaultMethods()
|
|
42
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
43
|
+
|
|
44
|
+
expectTypeOf(mppx.charge).toBeFunction()
|
|
45
|
+
expectTypeOf(mppx.charge).not.toBeNullable()
|
|
46
|
+
|
|
47
|
+
// Note: MultiMethodFn options are permissive (UnionToIntersection of any-based schemas).
|
|
48
|
+
// Negative assertions for .charge() options require concrete method schemas to be useful.
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('stripe.create() rejects invalid parameters', () => {
|
|
52
|
+
// @ts-expect-error - livemode is required
|
|
53
|
+
stripe.create({ client: {} as any, networkId: 'x' })
|
|
54
|
+
// @ts-expect-error - networkId is required
|
|
55
|
+
stripe.create({ client: {} as any, livemode: true })
|
|
56
|
+
stripe.create({
|
|
57
|
+
client: {} as any,
|
|
58
|
+
networkId: 'x',
|
|
59
|
+
livemode: true,
|
|
60
|
+
// @ts-expect-error - unsupported network key
|
|
61
|
+
depositAddresses: { ethereum: '0x' },
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('additional() rejects unsupported network keys', async () => {
|
|
66
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
67
|
+
// @ts-expect-error - 'arbitrum' is not a supported custom rail network
|
|
68
|
+
await mp.defaultMethods().additional({ arbitrum: (_addr) => ({}) as any })
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
test('additional() accepts tempo.session and base with full params', async () => {
|
|
72
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
73
|
+
const methods = await mp.defaultMethods().additional({
|
|
74
|
+
base: {
|
|
75
|
+
x402: { facilitator: { verify: async () => ({}) as any, settle: async () => ({}) as any } },
|
|
76
|
+
},
|
|
77
|
+
tempo: {
|
|
78
|
+
session: {
|
|
79
|
+
store: {} as AtomicStore,
|
|
80
|
+
sse: true,
|
|
81
|
+
settlementSchedule: { amount: '0.01' },
|
|
82
|
+
onSessionSettlement: async () => {},
|
|
83
|
+
getClient: () => ({}) as Client,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
89
|
+
expectTypeOf(mppx.charge).toBeFunction()
|
|
90
|
+
expectTypeOf(mppx.charge).not.toBeNullable()
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
test('sync defaultMethods() with static depositAddresses returns SyncMethodsResult', () => {
|
|
94
|
+
const mp = stripe.create({
|
|
95
|
+
client: {} as any,
|
|
96
|
+
networkId: 'profile_x',
|
|
97
|
+
livemode: false,
|
|
98
|
+
depositAddresses: { tempo: '0x123' },
|
|
99
|
+
})
|
|
100
|
+
const methods = mp.defaultMethods()
|
|
101
|
+
expectTypeOf(methods).toHaveProperty('additional')
|
|
102
|
+
|
|
103
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
104
|
+
expectTypeOf(mppx.charge).toBeFunction()
|
|
105
|
+
expectTypeOf(mppx.charge).not.toBeNullable()
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
test('depositAddresses as resolver function returns DefaultMethodsBuilder', async () => {
|
|
109
|
+
const mp = stripe.create({
|
|
110
|
+
client: {} as any,
|
|
111
|
+
networkId: 'profile_x',
|
|
112
|
+
livemode: false,
|
|
113
|
+
depositAddresses: async (_network) => '0xaddr',
|
|
114
|
+
})
|
|
115
|
+
const methods = await mp.defaultMethods()
|
|
116
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
117
|
+
expectTypeOf(mppx.charge).toBeFunction()
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
test('connect config with stripeAccount passes to Mppx.create', async () => {
|
|
121
|
+
const mp = stripe.create({
|
|
122
|
+
client: {} as any,
|
|
123
|
+
networkId: 'profile_x',
|
|
124
|
+
livemode: true,
|
|
125
|
+
connect: { stripeAccount: 'acct_123', applicationFeeAmount: 100 },
|
|
126
|
+
})
|
|
127
|
+
const methods = await mp.defaultMethods()
|
|
128
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
129
|
+
expectTypeOf(mppx.charge).toBeFunction()
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
test('additional() with custom rail (solana) works via compose', async () => {
|
|
133
|
+
const mp = stripe.create({ client: {} as any, networkId: 'profile_x', livemode: false })
|
|
134
|
+
const methods = await mp.defaultMethods().additional({
|
|
135
|
+
base: {
|
|
136
|
+
x402: { facilitator: { verify: async () => ({}) as any, settle: async () => ({}) as any } },
|
|
137
|
+
},
|
|
138
|
+
solana: (_address) => ({
|
|
139
|
+
name: 'solana' as const,
|
|
140
|
+
intent: 'charge' as const,
|
|
141
|
+
schema: { credential: { payload: {} as any }, request: {} as any },
|
|
142
|
+
verify: async () =>
|
|
143
|
+
({ method: 'solana', status: 'success', reference: '0x', timestamp: '' }) as const,
|
|
144
|
+
}),
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
const mppx = Mppx.create({ methods, secretKey: 'test' })
|
|
148
|
+
|
|
149
|
+
const result = await mppx.compose(
|
|
150
|
+
['tempo/charge', { amount: '0.01', description: 'test' }],
|
|
151
|
+
['evm/charge', { amount: '0.01', description: 'test' }],
|
|
152
|
+
['solana/charge', { amount: '10000', description: 'test' }] as any,
|
|
153
|
+
['stripe/charge', { amount: '0.50', currency: 'usd', decimals: 2, description: 'test' }],
|
|
154
|
+
)(new Request('http://localhost'))
|
|
155
|
+
|
|
156
|
+
expectTypeOf(result.status).toEqualTypeOf<200 | 402>()
|
|
157
|
+
})
|