mppx 0.8.17 → 0.8.19
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 +61 -0
- package/README.md +15 -0
- package/dist/Challenge.js +21 -4
- package/dist/bin.js +3 -3
- package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
- package/dist/cli/cli.js +253 -1505
- 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/request.d.ts +2 -0
- package/dist/cli/sessions/request.js +18 -0
- package/dist/cli/sessions/store.js +28 -14
- package/dist/discovery/Discovery.js +2 -1
- package/dist/evm/client/Charge.js +8 -0
- package/dist/server/core.d.ts +9 -0
- package/dist/server/core.js +9 -0
- package/dist/stripe/server/Charge.js +2 -4
- package/dist/stripe/server/Methods.d.ts +2 -2
- package/dist/stripe/server/Methods.js +17 -11
- 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/spt.d.ts +8 -0
- package/dist/stripe/server/spt.js +8 -0
- package/dist/tempo/Methods.d.ts +13 -0
- package/dist/tempo/Methods.js +14 -3
- package/dist/tempo/client/Charge.d.ts +3 -0
- package/dist/tempo/client/Charge.js +31 -9
- package/dist/tempo/client/Methods.d.ts +13 -0
- package/dist/tempo/internal/defaults.d.ts +11 -0
- package/dist/tempo/internal/defaults.js +11 -0
- 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/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 +13 -1
- 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/server/Charge.d.ts +3 -0
- package/dist/tempo/server/Charge.js +58 -17
- package/dist/tempo/server/Methods.d.ts +21 -4
- package/dist/tempo/server/Methods.js +8 -4
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- 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 +17 -2
- 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 +15 -3
- 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 +10 -2
- package/dist/tempo/session/precompile/Chain.js +51 -10
- 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 +3 -1
- package/dist/tempo/session/precompile/Voucher.js +6 -12
- package/dist/tempo/session/server/ChannelStore.d.ts +6 -0
- package/dist/tempo/session/server/ChannelStore.js +11 -4
- package/dist/tempo/session/server/CredentialVerification.d.ts +11 -9
- package/dist/tempo/session/server/CredentialVerification.js +185 -109
- package/dist/tempo/session/server/MeteredStream.d.ts +1 -1
- package/dist/tempo/session/server/MeteredStream.js +5 -4
- 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 +14 -2
- package/dist/tempo/session/server/Session.js +37 -6
- package/dist/tempo/session/server/Settlement.d.ts +11 -4
- package/dist/tempo/session/server/Settlement.js +53 -21
- 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 +23 -1
- package/package.json +15 -37
- 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/attestation/Client.d.ts.map +0 -1
- package/dist/attestation/Client.js.map +0 -1
- package/dist/attestation/Constants.d.ts.map +0 -1
- package/dist/attestation/Constants.js.map +0 -1
- package/dist/attestation/Server.d.ts.map +0 -1
- package/dist/attestation/Server.js.map +0 -1
- package/dist/attestation/Types.d.ts.map +0 -1
- package/dist/attestation/Types.js.map +0 -1
- package/dist/attestation/index.d.ts.map +0 -1
- package/dist/attestation/index.js.map +0 -1
- package/dist/attestation/internal/HttpMessageSignature.d.ts.map +0 -1
- package/dist/attestation/internal/HttpMessageSignature.js.map +0 -1
- package/dist/attestation/internal/SigningContext.d.ts.map +0 -1
- package/dist/attestation/internal/SigningContext.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/discovery/internal/Metadata.d.ts.map +0 -1
- package/dist/discovery/internal/Metadata.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/deposit-address.d.ts.map +0 -1
- package/dist/stripe/server/internal/deposit-address.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/stripe/server/internal/record-payment.d.ts.map +0 -1
- package/dist/stripe/server/internal/record-payment.js.map +0 -1
- package/dist/stripe/server/internal/request.d.ts.map +0 -1
- package/dist/stripe/server/internal/request.js.map +0 -1
- package/dist/tap/Constants.d.ts.map +0 -1
- package/dist/tap/Constants.js.map +0 -1
- package/dist/tap/Types.d.ts.map +0 -1
- package/dist/tap/Types.js.map +0 -1
- package/dist/tap/client/index.d.ts.map +0 -1
- package/dist/tap/client/index.js.map +0 -1
- package/dist/tap/index.d.ts.map +0 -1
- package/dist/tap/index.js.map +0 -1
- package/dist/tap/server/index.d.ts.map +0 -1
- package/dist/tap/server/index.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/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/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/web-bot-auth/Constants.d.ts.map +0 -1
- package/dist/web-bot-auth/Constants.js.map +0 -1
- package/dist/web-bot-auth/Types.d.ts.map +0 -1
- package/dist/web-bot-auth/Types.js.map +0 -1
- package/dist/web-bot-auth/client/index.d.ts.map +0 -1
- package/dist/web-bot-auth/client/index.js.map +0 -1
- package/dist/web-bot-auth/index.d.ts.map +0 -1
- package/dist/web-bot-auth/index.js.map +0 -1
- package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +0 -1
- package/dist/web-bot-auth/internal/JwkThumbprint.js.map +0 -1
- package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +0 -1
- package/dist/web-bot-auth/internal/SignatureAgent.js.map +0 -1
- package/dist/web-bot-auth/server/index.d.ts.map +0 -1
- package/dist/web-bot-auth/server/index.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 -154
- package/src/Challenge.test-d.ts +0 -82
- package/src/Challenge.test.ts +0 -1060
- package/src/Challenge.ts +0 -687
- 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 -631
- 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 -211
- package/src/Store.test.ts +0 -407
- package/src/Store.ts +0 -397
- package/src/attestation/Attestation.integration.test.ts +0 -208
- package/src/attestation/Client.test.ts +0 -83
- package/src/attestation/Client.ts +0 -34
- package/src/attestation/Constants.ts +0 -15
- package/src/attestation/Server.test.ts +0 -60
- package/src/attestation/Server.ts +0 -12
- package/src/attestation/Types.test-d.ts +0 -54
- package/src/attestation/Types.ts +0 -77
- package/src/attestation/index.ts +0 -5
- package/src/attestation/internal/HttpMessageSignature.test.ts +0 -101
- package/src/attestation/internal/HttpMessageSignature.ts +0 -429
- package/src/attestation/internal/SigningContext.ts +0 -13
- package/src/bin.js +0 -2
- 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 -1650
- 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 -287
- package/src/client/Mppx.test.ts +0 -1065
- package/src/client/Mppx.ts +0 -487
- package/src/client/Transport.test.ts +0 -586
- package/src/client/Transport.ts +0 -170
- 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 -1075
- 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 -623
- package/src/discovery/OpenApi.ts +0 -192
- package/src/discovery/Validate.test.ts +0 -305
- package/src/discovery/Validate.ts +0 -77
- package/src/discovery/index.ts +0 -3
- package/src/discovery/internal/Metadata.ts +0 -51
- 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 -295
- 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 -347
- 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 -479
- package/src/mcp/client/McpClient.integration.test.ts +0 -639
- 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 -285
- package/src/middlewares/elysia.ts +0 -116
- package/src/middlewares/express.test.ts +0 -361
- package/src/middlewares/express.ts +0 -140
- package/src/middlewares/hono.test.ts +0 -473
- 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 -359
- package/src/middlewares/nextjs.ts +0 -107
- package/src/proxy/Proxy.test.ts +0 -1038
- package/src/proxy/Proxy.ts +0 -483
- package/src/proxy/Proxy.upstreamError.test.ts +0 -364
- package/src/proxy/Service.test.ts +0 -252
- package/src/proxy/Service.ts +0 -280
- 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 -53
- package/src/proxy/services/hooks.test-d.ts +0 -14
- package/src/proxy/services/hooks.test.ts +0 -44
- package/src/proxy/services/openai.test.ts +0 -157
- package/src/proxy/services/openai.ts +0 -60
- package/src/proxy/services/stripe.test.ts +0 -175
- package/src/proxy/services/stripe.ts +0 -59
- package/src/server/Methods.test-d.ts +0 -88
- package/src/server/Methods.test.ts +0 -69
- package/src/server/Methods.ts +0 -3
- package/src/server/Mppx.authorize.test.ts +0 -210
- package/src/server/Mppx.test-d.ts +0 -494
- package/src/server/Mppx.test.ts +0 -6711
- package/src/server/Mppx.ts +0 -2919
- 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 -47
- package/src/stripe/server/Charge.test-d.ts +0 -81
- package/src/stripe/server/Charge.test.ts +0 -700
- package/src/stripe/server/Charge.ts +0 -487
- package/src/stripe/server/Methods.test-d.ts +0 -157
- package/src/stripe/server/Methods.test.ts +0 -403
- package/src/stripe/server/Methods.ts +0 -441
- package/src/stripe/server/index.ts +0 -2
- package/src/stripe/server/internal/deposit-address.ts +0 -57
- 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/stripe/server/internal/record-payment.ts +0 -66
- package/src/stripe/server/internal/request.ts +0 -49
- package/src/tap/Constants.ts +0 -32
- package/src/tap/Tap.test.ts +0 -125
- package/src/tap/Types.ts +0 -11
- package/src/tap/client/index.ts +0 -54
- package/src/tap/index.ts +0 -4
- package/src/tap/server/index.ts +0 -48
- 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 -271
- 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.test.ts +0 -42
- 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 -145
- 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 -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/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 -63
- package/src/tempo/server/Charge.test.ts +0 -6056
- package/src/tempo/server/Charge.ts +0 -1379
- package/src/tempo/server/Methods.ts +0 -86
- 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 -1336
- 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 -922
- package/src/tempo/server/internal/transport.ts +0 -322
- package/src/tempo/session/README.md +0 -320
- 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 -1269
- 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 -856
- package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
- package/src/tempo/session/server/CredentialVerification.ts +0 -1087
- package/src/tempo/session/server/MeteredStream.ts +0 -99
- 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 -4247
- package/src/tempo/session/server/Session.ts +0 -669
- 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 -634
- package/src/tempo/session/server/Sse.ts +0 -261
- package/src/tempo/session/server/Transports.test.ts +0 -346
- package/src/tempo/session/server/Transports.ts +0 -256
- package/src/tempo/session/server/Ws.test.ts +0 -765
- package/src/tempo/session/server/Ws.ts +0 -391
- 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/web-bot-auth/Constants.ts +0 -24
- package/src/web-bot-auth/Types.ts +0 -9
- package/src/web-bot-auth/WebBotAuth.test.ts +0 -182
- package/src/web-bot-auth/client/index.ts +0 -84
- package/src/web-bot-auth/index.ts +0 -6
- package/src/web-bot-auth/internal/JwkThumbprint.ts +0 -21
- package/src/web-bot-auth/internal/SignatureAgent.ts +0 -18
- package/src/web-bot-auth/server/index.ts +0 -113
- package/src/x402/Assets.test.ts +0 -253
- package/src/x402/Assets.ts +0 -221
- package/src/x402/Exact.e2e.test.ts +0 -488
- 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 -410
- 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,909 +0,0 @@
|
|
|
1
|
-
import type { Hex } from 'ox'
|
|
2
|
-
import { parseUnits, type Account as viem_Account, type Address } from 'viem'
|
|
3
|
-
|
|
4
|
-
import * as Challenge from '../../../Challenge.js'
|
|
5
|
-
import * as Fetch from '../../../client/internal/Fetch.js'
|
|
6
|
-
import * as Constants from '../../../Constants.js'
|
|
7
|
-
import * as PaymentCredential from '../../../Credential.js'
|
|
8
|
-
import * as AcceptPayment from '../../../internal/AcceptPayment.js'
|
|
9
|
-
import type * as Account from '../../../viem/Account.js'
|
|
10
|
-
import type * as Client from '../../../viem/Client.js'
|
|
11
|
-
import { deserializeSessionReceipt } from '../../session/precompile/Protocol.js'
|
|
12
|
-
import type { SessionReceipt } from '../../session/precompile/Protocol.js'
|
|
13
|
-
import { parseEvent } from '../../session/precompile/Protocol.js'
|
|
14
|
-
import * as Ws from '../../session/precompile/Protocol.js'
|
|
15
|
-
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
16
|
-
import type { ChannelEntry } from './ChannelOps.js'
|
|
17
|
-
import { session as sessionPlugin } from './Session.js'
|
|
18
|
-
|
|
19
|
-
type WebSocketConstructor = {
|
|
20
|
-
new (url: string | URL, protocols?: string | string[]): WebSocket
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
type ReceiptWaiter = {
|
|
24
|
-
predicate: (receipt: SessionReceipt) => boolean
|
|
25
|
-
reject(error: Error): void
|
|
26
|
-
resolve(receipt: SessionReceipt): void
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
type CloseReadyWaiter = {
|
|
30
|
-
reject(error: Error): void
|
|
31
|
-
resolve(receipt: SessionReceipt): void
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
type SessionMethod = ReturnType<typeof sessionPlugin>
|
|
35
|
-
type SessionOrderChallenges = AcceptPayment.OrderChallenges<readonly [SessionMethod]>
|
|
36
|
-
type SessionRequestInit = RequestInit & {
|
|
37
|
-
orderChallenges?: SessionOrderChallenges | undefined
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const WebSocketReadyState = {
|
|
41
|
-
CONNECTING: 0,
|
|
42
|
-
OPEN: 1,
|
|
43
|
-
CLOSING: 2,
|
|
44
|
-
CLOSED: 3,
|
|
45
|
-
} as const
|
|
46
|
-
|
|
47
|
-
// Browser-style WebSocket clients may only initiate close with 1000 or 3000-4999.
|
|
48
|
-
// Keep protocol/policy close codes on the server side and use an app-defined code here.
|
|
49
|
-
const ClientWebSocketProtocolErrorCloseCode = 3008
|
|
50
|
-
|
|
51
|
-
/** Auto-driving legacy client manager for HTTP, SSE, and WebSocket sessions. */
|
|
52
|
-
export type SessionManager = {
|
|
53
|
-
/** Active legacy channel ID, when opened or recovered. */
|
|
54
|
-
readonly channelId: Hex.Hex | undefined
|
|
55
|
-
/** Local cumulative voucher authorization in raw token units. */
|
|
56
|
-
readonly cumulative: bigint
|
|
57
|
-
/** Whether the manager currently has an open local channel. */
|
|
58
|
-
readonly opened: boolean
|
|
59
|
-
|
|
60
|
-
/** Opens a legacy contract-backed channel before the first paid request. */
|
|
61
|
-
open(options?: { deposit?: bigint }): Promise<void>
|
|
62
|
-
/** Performs the HTTP 402 challenge/retry flow and returns receipt metadata. */
|
|
63
|
-
fetch(input: RequestInfo | URL, init?: SessionRequestInit): Promise<PaymentResponse>
|
|
64
|
-
/** Opens a paid SSE stream and responds to voucher requests. */
|
|
65
|
-
sse(
|
|
66
|
-
input: RequestInfo | URL,
|
|
67
|
-
init?: SessionRequestInit & {
|
|
68
|
-
onReceipt?: ((receipt: SessionReceipt) => void) | undefined
|
|
69
|
-
signal?: AbortSignal | undefined
|
|
70
|
-
},
|
|
71
|
-
): Promise<AsyncIterable<string>>
|
|
72
|
-
/** Opens a paid WebSocket session and manages in-band payment frames. */
|
|
73
|
-
ws(
|
|
74
|
-
input: string | URL,
|
|
75
|
-
init?: {
|
|
76
|
-
onReceipt?: ((receipt: SessionReceipt) => void) | undefined
|
|
77
|
-
orderChallenges?: SessionOrderChallenges | undefined
|
|
78
|
-
protocols?: string | string[] | undefined
|
|
79
|
-
signal?: AbortSignal | undefined
|
|
80
|
-
},
|
|
81
|
-
): Promise<WebSocket>
|
|
82
|
-
/** Cooperatively closes the active legacy channel. */
|
|
83
|
-
close(): Promise<SessionReceipt | undefined>
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** HTTP response enriched with latest legacy session metadata. */
|
|
87
|
-
export type PaymentResponse = Response & {
|
|
88
|
-
/** Parsed payment receipt, when the response included one. */
|
|
89
|
-
receipt: SessionReceipt | null
|
|
90
|
-
/** Last session challenge observed by the manager. */
|
|
91
|
-
challenge: Challenge.Challenge | null
|
|
92
|
-
/** Active channel ID, when available. */
|
|
93
|
-
channelId: Hex.Hex | null
|
|
94
|
-
/** Local cumulative voucher authorization in raw token units. */
|
|
95
|
-
cumulative: bigint
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Creates a session manager that handles the full client payment lifecycle:
|
|
100
|
-
* channel open, incremental vouchers, SSE streaming, and channel close.
|
|
101
|
-
*
|
|
102
|
-
* Internally delegates to the `session()` method for all
|
|
103
|
-
* channel state management and credential creation, and to `Fetch.from`
|
|
104
|
-
* for the 402 challenge/retry flow.
|
|
105
|
-
*
|
|
106
|
-
* ## Session resumption
|
|
107
|
-
*
|
|
108
|
-
* All channel state is held **in memory**. If the client process restarts,
|
|
109
|
-
* the session is lost and a new on-chain channel will be opened on the next
|
|
110
|
-
* request — the previous channel's deposit is orphaned until manually closed.
|
|
111
|
-
*
|
|
112
|
-
* When the server includes a `channelId` in the 402 challenge `methodDetails`,
|
|
113
|
-
* the client will attempt to recover the channel by reading its on-chain state
|
|
114
|
-
* via `getOnChainChannel()`. If the channel has a positive deposit and is not
|
|
115
|
-
* finalized, it resumes from the on-chain settled amount.
|
|
116
|
-
*/
|
|
117
|
-
export function sessionManager(parameters: sessionManager.Parameters): SessionManager {
|
|
118
|
-
const fetchFn = parameters.fetch ?? globalThis.fetch
|
|
119
|
-
const WebSocketImpl =
|
|
120
|
-
parameters.webSocket ??
|
|
121
|
-
(globalThis as typeof globalThis & { WebSocket?: WebSocketConstructor }).WebSocket
|
|
122
|
-
const maxVoucherCumulative =
|
|
123
|
-
parameters.maxDeposit !== undefined
|
|
124
|
-
? parseUnits(parameters.maxDeposit, parameters.decimals ?? 6)
|
|
125
|
-
: null
|
|
126
|
-
|
|
127
|
-
let channel: ChannelEntry | null = null
|
|
128
|
-
let lastChallenge: Challenge.Challenge | null = null
|
|
129
|
-
let lastUrl: RequestInfo | URL | null = null
|
|
130
|
-
let acceptedCumulative = 0n
|
|
131
|
-
let spent = 0n
|
|
132
|
-
let activeSocketChallenge: Challenge.Challenge | null = null
|
|
133
|
-
let activeSocketChannelId: Hex.Hex | null = null
|
|
134
|
-
let activeSocket: WebSocket | null = null
|
|
135
|
-
let closeReadyReceipt: SessionReceipt | null = null
|
|
136
|
-
let closeReadyWaiter: CloseReadyWaiter | null = null
|
|
137
|
-
let expectedSocketCloseAmount: string | null = null
|
|
138
|
-
let receiptWaiter: ReceiptWaiter | null = null
|
|
139
|
-
let wsDeliveredChunks = 0n
|
|
140
|
-
let wsTickCost = 0n
|
|
141
|
-
|
|
142
|
-
const method = sessionPlugin({
|
|
143
|
-
account: parameters.account,
|
|
144
|
-
voucherSigner: parameters.voucherSigner,
|
|
145
|
-
getClient: parameters.client ? () => parameters.client! : parameters.getClient,
|
|
146
|
-
escrowContract: parameters.escrowContract,
|
|
147
|
-
decimals: parameters.decimals,
|
|
148
|
-
maxDeposit: parameters.maxDeposit,
|
|
149
|
-
onChannelUpdate(entry) {
|
|
150
|
-
if (entry.channelId !== channel?.channelId) {
|
|
151
|
-
acceptedCumulative = 0n
|
|
152
|
-
spent = 0n
|
|
153
|
-
}
|
|
154
|
-
channel = entry
|
|
155
|
-
},
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
const wrappedFetch = Fetch.from({
|
|
159
|
-
fetch: fetchFn,
|
|
160
|
-
methods: [method],
|
|
161
|
-
onChallenge: async (challenge, _helpers) => {
|
|
162
|
-
lastChallenge = challenge
|
|
163
|
-
return undefined
|
|
164
|
-
},
|
|
165
|
-
orderChallenges: parameters.orderChallenges,
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
function updateSpentFromReceipt(receipt: SessionReceipt | null | undefined) {
|
|
169
|
-
if (!receipt || receipt.channelId !== channel?.channelId) return
|
|
170
|
-
assertReceiptWithinLocalState(receipt)
|
|
171
|
-
const nextAcceptedCumulative = BigInt(receipt.acceptedCumulative)
|
|
172
|
-
const next = BigInt(receipt.spent)
|
|
173
|
-
acceptedCumulative =
|
|
174
|
-
acceptedCumulative > nextAcceptedCumulative ? acceptedCumulative : nextAcceptedCumulative
|
|
175
|
-
spent = spent > next ? spent : next
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function assertReceiptWithinLocalState(receipt: SessionReceipt) {
|
|
179
|
-
if (!channel || receipt.channelId !== channel.channelId) return
|
|
180
|
-
const acceptedCumulative = BigInt(receipt.acceptedCumulative)
|
|
181
|
-
const receiptSpent = BigInt(receipt.spent)
|
|
182
|
-
if (receiptSpent > acceptedCumulative) {
|
|
183
|
-
throw new Error('receipt spent exceeds accepted cumulative voucher amount')
|
|
184
|
-
}
|
|
185
|
-
if (acceptedCumulative > channel.cumulativeAmount) {
|
|
186
|
-
throw new Error('receipt accepted cumulative exceeds local voucher state')
|
|
187
|
-
}
|
|
188
|
-
if (receiptSpent > channel.cumulativeAmount) {
|
|
189
|
-
throw new Error('receipt spent exceeds local voucher state')
|
|
190
|
-
}
|
|
191
|
-
assertVoucherWithinLocalLimit(acceptedCumulative)
|
|
192
|
-
assertVoucherWithinLocalLimit(receiptSpent)
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function waitForReceipt(predicate: (receipt: SessionReceipt) => boolean = () => true) {
|
|
196
|
-
if (receiptWaiter) throw new Error('receipt wait already in progress')
|
|
197
|
-
return new Promise<SessionReceipt>((resolve, reject) => {
|
|
198
|
-
receiptWaiter = { predicate, resolve, reject }
|
|
199
|
-
})
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function waitForCloseReady() {
|
|
203
|
-
if (closeReadyReceipt) return Promise.resolve(closeReadyReceipt)
|
|
204
|
-
if (closeReadyWaiter) throw new Error('close-ready wait already in progress')
|
|
205
|
-
return new Promise<SessionReceipt>((resolve, reject) => {
|
|
206
|
-
closeReadyWaiter = { resolve, reject }
|
|
207
|
-
})
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
function settleReceipt(receipt: SessionReceipt) {
|
|
211
|
-
if (!receiptWaiter) return
|
|
212
|
-
if (!receiptWaiter.predicate(receipt)) return
|
|
213
|
-
const waiter = receiptWaiter
|
|
214
|
-
receiptWaiter = null
|
|
215
|
-
waiter.resolve(receipt)
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function settleCloseReady(receipt: SessionReceipt) {
|
|
219
|
-
closeReadyReceipt = receipt
|
|
220
|
-
if (!closeReadyWaiter) return
|
|
221
|
-
const waiter = closeReadyWaiter
|
|
222
|
-
closeReadyWaiter = null
|
|
223
|
-
waiter.resolve(receipt)
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function rejectReceipt(error: Error) {
|
|
227
|
-
if (!receiptWaiter) return
|
|
228
|
-
const waiter = receiptWaiter
|
|
229
|
-
receiptWaiter = null
|
|
230
|
-
waiter.reject(error)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function rejectCloseReady(error: Error) {
|
|
234
|
-
if (!closeReadyWaiter) return
|
|
235
|
-
const waiter = closeReadyWaiter
|
|
236
|
-
closeReadyWaiter = null
|
|
237
|
-
waiter.reject(error)
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
function getFallbackCloseAmount(challenge: Challenge.Challenge, channelId: Hex.Hex): string {
|
|
241
|
-
if (
|
|
242
|
-
closeReadyReceipt &&
|
|
243
|
-
closeReadyReceipt.challengeId === challenge.id &&
|
|
244
|
-
closeReadyReceipt.channelId === channelId
|
|
245
|
-
) {
|
|
246
|
-
return closeReadyReceipt.spent
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
const cumulative = channel?.channelId === channelId ? channel.cumulativeAmount : 0n
|
|
250
|
-
|
|
251
|
-
// For WS sessions, use delivered chunk count × tick cost as a tight spend
|
|
252
|
-
// estimate. Without this, a socket death before close-ready would cause
|
|
253
|
-
// the client to sign for the full cumulative voucher authorization —
|
|
254
|
-
// potentially orders of magnitude more than what was actually consumed.
|
|
255
|
-
// The estimate may undercount by at most 1 chunk (if the server committed
|
|
256
|
-
// a charge but the socket died before delivering the message).
|
|
257
|
-
if (wsTickCost > 0n) {
|
|
258
|
-
const deliveryEstimate = wsDeliveredChunks * wsTickCost
|
|
259
|
-
const bestSpent = spent > deliveryEstimate ? spent : deliveryEstimate
|
|
260
|
-
return (bestSpent > cumulative ? cumulative : bestSpent).toString()
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Some legacy servers report receipt.spent as a per-request delta while
|
|
264
|
-
// still requiring close at the highest accepted cumulative voucher.
|
|
265
|
-
return (spent > acceptedCumulative ? spent : acceptedCumulative).toString()
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
function assertVoucherWithinLocalLimit(cumulativeAmount: bigint) {
|
|
269
|
-
if (maxVoucherCumulative === null) return
|
|
270
|
-
if (cumulativeAmount <= maxVoucherCumulative) return
|
|
271
|
-
throw new Error(
|
|
272
|
-
`requested voucher amount ${cumulativeAmount} exceeds local maxDeposit ${maxVoucherCumulative}`,
|
|
273
|
-
)
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
function toPaymentResponse(response: Response): PaymentResponse {
|
|
277
|
-
const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
|
|
278
|
-
const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : null
|
|
279
|
-
updateSpentFromReceipt(receipt)
|
|
280
|
-
return Object.assign(response, {
|
|
281
|
-
receipt,
|
|
282
|
-
challenge: lastChallenge,
|
|
283
|
-
channelId: channel?.channelId ?? null,
|
|
284
|
-
cumulative: channel?.cumulativeAmount ?? 0n,
|
|
285
|
-
})
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
async function doFetch(
|
|
289
|
-
input: RequestInfo | URL,
|
|
290
|
-
init?: SessionRequestInit,
|
|
291
|
-
): Promise<PaymentResponse> {
|
|
292
|
-
lastUrl = input
|
|
293
|
-
const response = await wrappedFetch(input, init)
|
|
294
|
-
return toPaymentResponse(response)
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
function createManagedSocket(socket: WebSocket) {
|
|
298
|
-
type EventType = 'close' | 'error' | 'message' | 'open'
|
|
299
|
-
type MessageEvent = { data: string; type: 'message' }
|
|
300
|
-
type Listener = {
|
|
301
|
-
once: boolean
|
|
302
|
-
value: ((event: any) => void) | { handleEvent(event: any): void }
|
|
303
|
-
}
|
|
304
|
-
const listeners = new Map<EventType, Set<Listener>>()
|
|
305
|
-
let emittedClose = false
|
|
306
|
-
let messageBuffer: MessageEvent[] | null = []
|
|
307
|
-
let readyState = socket.readyState
|
|
308
|
-
|
|
309
|
-
const add = (
|
|
310
|
-
type: EventType,
|
|
311
|
-
listener: ((event: any) => void) | { handleEvent(event: any): void },
|
|
312
|
-
options?: boolean | AddEventListenerOptions,
|
|
313
|
-
) => {
|
|
314
|
-
let set = listeners.get(type)
|
|
315
|
-
if (!set) {
|
|
316
|
-
set = new Set()
|
|
317
|
-
listeners.set(type, set)
|
|
318
|
-
}
|
|
319
|
-
set.add({
|
|
320
|
-
once: typeof options === 'object' ? options.once === true : false,
|
|
321
|
-
value: listener,
|
|
322
|
-
})
|
|
323
|
-
if (type === 'message' && messageBuffer) {
|
|
324
|
-
const buffered = messageBuffer
|
|
325
|
-
messageBuffer = null
|
|
326
|
-
for (const event of buffered) emit('message', event)
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
const remove = (
|
|
331
|
-
type: EventType,
|
|
332
|
-
listener: ((event: any) => void) | { handleEvent(event: any): void },
|
|
333
|
-
) => {
|
|
334
|
-
const set = listeners.get(type)
|
|
335
|
-
if (!set) return
|
|
336
|
-
for (const entry of set) {
|
|
337
|
-
if (entry.value === listener) set.delete(entry)
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
const emit = (type: EventType, event: any) => {
|
|
342
|
-
if (type === 'close') {
|
|
343
|
-
if (emittedClose) return
|
|
344
|
-
emittedClose = true
|
|
345
|
-
readyState = WebSocketReadyState.CLOSED
|
|
346
|
-
messageBuffer = null
|
|
347
|
-
}
|
|
348
|
-
if (type === 'open') readyState = WebSocketReadyState.OPEN
|
|
349
|
-
|
|
350
|
-
if (type === 'message' && messageBuffer) {
|
|
351
|
-
messageBuffer.push(event)
|
|
352
|
-
return
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
const property = `on${type}` as const
|
|
356
|
-
const handler = (managed as Record<string, unknown>)[property]
|
|
357
|
-
if (typeof handler === 'function') handler(event)
|
|
358
|
-
|
|
359
|
-
const set = listeners.get(type)
|
|
360
|
-
if (!set) return
|
|
361
|
-
for (const entry of Array.from(set)) {
|
|
362
|
-
if (typeof entry.value === 'function') entry.value(event)
|
|
363
|
-
else entry.value.handleEvent(event)
|
|
364
|
-
if (entry.once) set.delete(entry)
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
const managed = {
|
|
369
|
-
addEventListener: add,
|
|
370
|
-
close(code?: number, reason?: string) {
|
|
371
|
-
socket.close(code, reason)
|
|
372
|
-
},
|
|
373
|
-
get bufferedAmount() {
|
|
374
|
-
return socket.bufferedAmount
|
|
375
|
-
},
|
|
376
|
-
get extensions() {
|
|
377
|
-
return socket.extensions
|
|
378
|
-
},
|
|
379
|
-
on(type: EventType, listener: (...args: any[]) => void) {
|
|
380
|
-
add(type, listener)
|
|
381
|
-
},
|
|
382
|
-
onclose: null as ((event: any) => void) | null,
|
|
383
|
-
onerror: null as ((event: any) => void) | null,
|
|
384
|
-
_onmessage: null as ((event: any) => void) | null,
|
|
385
|
-
get onmessage() {
|
|
386
|
-
return managed._onmessage
|
|
387
|
-
},
|
|
388
|
-
set onmessage(fn: ((event: any) => void) | null) {
|
|
389
|
-
managed._onmessage = fn
|
|
390
|
-
if (fn && messageBuffer) {
|
|
391
|
-
const buffered = messageBuffer
|
|
392
|
-
messageBuffer = null
|
|
393
|
-
for (const event of buffered) emit('message', event)
|
|
394
|
-
}
|
|
395
|
-
},
|
|
396
|
-
onopen: null as ((event: any) => void) | null,
|
|
397
|
-
off(type: EventType, listener: (...args: any[]) => void) {
|
|
398
|
-
remove(type, listener)
|
|
399
|
-
},
|
|
400
|
-
get protocol() {
|
|
401
|
-
return socket.protocol
|
|
402
|
-
},
|
|
403
|
-
get readyState() {
|
|
404
|
-
return readyState
|
|
405
|
-
},
|
|
406
|
-
removeEventListener: remove,
|
|
407
|
-
send(data: string) {
|
|
408
|
-
socket.send(data)
|
|
409
|
-
},
|
|
410
|
-
get url() {
|
|
411
|
-
return socket.url
|
|
412
|
-
},
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return {
|
|
416
|
-
emit,
|
|
417
|
-
socket: managed as unknown as WebSocket,
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
const self: SessionManager = {
|
|
422
|
-
get channelId() {
|
|
423
|
-
return channel?.channelId
|
|
424
|
-
},
|
|
425
|
-
get cumulative() {
|
|
426
|
-
return channel?.cumulativeAmount ?? 0n
|
|
427
|
-
},
|
|
428
|
-
get opened() {
|
|
429
|
-
return channel?.opened ?? false
|
|
430
|
-
},
|
|
431
|
-
|
|
432
|
-
async open(options) {
|
|
433
|
-
if (channel?.opened) return
|
|
434
|
-
|
|
435
|
-
if (!lastChallenge) {
|
|
436
|
-
throw new Error(
|
|
437
|
-
'No challenge available. Make a request first to receive a 402 challenge, or pass a challenge via .fetch()/.sse().',
|
|
438
|
-
)
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
const deposit = options?.deposit
|
|
442
|
-
const credential = await method.createCredential({
|
|
443
|
-
challenge: lastChallenge as never,
|
|
444
|
-
context: {
|
|
445
|
-
...(deposit !== undefined && { depositRaw: deposit.toString() }),
|
|
446
|
-
},
|
|
447
|
-
})
|
|
448
|
-
|
|
449
|
-
if (!lastUrl) throw new Error('No URL available — call fetch() or sse() before open().')
|
|
450
|
-
const response = await fetchFn(lastUrl, {
|
|
451
|
-
method: 'POST',
|
|
452
|
-
headers: { [Constants.Headers.authorization]: credential },
|
|
453
|
-
})
|
|
454
|
-
if (!response.ok) {
|
|
455
|
-
const body = await response.text().catch(() => '')
|
|
456
|
-
const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
|
|
457
|
-
throw new Error(
|
|
458
|
-
`Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
|
|
459
|
-
)
|
|
460
|
-
}
|
|
461
|
-
},
|
|
462
|
-
|
|
463
|
-
fetch: doFetch,
|
|
464
|
-
|
|
465
|
-
async sse(input, init) {
|
|
466
|
-
const { onReceipt, signal, ...fetchInit } = init ?? {}
|
|
467
|
-
|
|
468
|
-
const sseInit = {
|
|
469
|
-
...fetchInit,
|
|
470
|
-
headers: {
|
|
471
|
-
...Fetch.normalizeHeaders(fetchInit.headers),
|
|
472
|
-
Accept: 'text/event-stream',
|
|
473
|
-
},
|
|
474
|
-
...(signal ? { signal } : {}),
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
const response = await doFetch(input, sseInit)
|
|
478
|
-
|
|
479
|
-
// Snapshot the challenge at SSE open time so concurrent
|
|
480
|
-
// calls don't overwrite it.
|
|
481
|
-
const sseChallenge = lastChallenge
|
|
482
|
-
|
|
483
|
-
if (!response.body) throw new Error('Response has no body.')
|
|
484
|
-
|
|
485
|
-
const reader = response.body.getReader()
|
|
486
|
-
const decoder = new TextDecoder()
|
|
487
|
-
|
|
488
|
-
async function* iterate(): AsyncGenerator<string> {
|
|
489
|
-
let buffer = ''
|
|
490
|
-
|
|
491
|
-
try {
|
|
492
|
-
while (true) {
|
|
493
|
-
if (signal?.aborted) break
|
|
494
|
-
|
|
495
|
-
const { done, value } = await reader.read()
|
|
496
|
-
if (done) break
|
|
497
|
-
|
|
498
|
-
buffer += decoder.decode(value, { stream: true })
|
|
499
|
-
|
|
500
|
-
const parts = buffer.split('\n\n')
|
|
501
|
-
buffer = parts.pop()!
|
|
502
|
-
|
|
503
|
-
for (const part of parts) {
|
|
504
|
-
if (!part.trim()) continue
|
|
505
|
-
|
|
506
|
-
const event = parseEvent(part)
|
|
507
|
-
if (!event) continue
|
|
508
|
-
|
|
509
|
-
switch (event.type) {
|
|
510
|
-
case 'message':
|
|
511
|
-
yield event.data
|
|
512
|
-
break
|
|
513
|
-
|
|
514
|
-
case 'payment-need-voucher': {
|
|
515
|
-
if (!channel || !sseChallenge) break
|
|
516
|
-
const required = BigInt(event.data.requiredCumulative)
|
|
517
|
-
assertVoucherWithinLocalLimit(required)
|
|
518
|
-
channel.cumulativeAmount =
|
|
519
|
-
channel.cumulativeAmount > required ? channel.cumulativeAmount : required
|
|
520
|
-
|
|
521
|
-
const credential = await method.createCredential({
|
|
522
|
-
challenge: sseChallenge as never,
|
|
523
|
-
context: {
|
|
524
|
-
action: 'voucher',
|
|
525
|
-
channelId: channel.channelId,
|
|
526
|
-
cumulativeAmountRaw: channel.cumulativeAmount.toString(),
|
|
527
|
-
},
|
|
528
|
-
})
|
|
529
|
-
const voucherResponse = await fetchFn(input, {
|
|
530
|
-
method: 'POST',
|
|
531
|
-
headers: {
|
|
532
|
-
Accept: 'text/event-stream',
|
|
533
|
-
[Constants.Headers.authorization]: credential,
|
|
534
|
-
},
|
|
535
|
-
})
|
|
536
|
-
if (!voucherResponse.ok) {
|
|
537
|
-
throw new Error(`Voucher POST failed with status ${voucherResponse.status}`)
|
|
538
|
-
}
|
|
539
|
-
break
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
case 'payment-receipt':
|
|
543
|
-
updateSpentFromReceipt(event.data)
|
|
544
|
-
onReceipt?.(event.data)
|
|
545
|
-
break
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
} finally {
|
|
550
|
-
reader.releaseLock()
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
return iterate()
|
|
555
|
-
},
|
|
556
|
-
|
|
557
|
-
async ws(input, init) {
|
|
558
|
-
if (!WebSocketImpl) {
|
|
559
|
-
throw new Error(
|
|
560
|
-
'No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.',
|
|
561
|
-
)
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
const { onReceipt, protocols, signal } = init ?? {}
|
|
565
|
-
const wsUrl = new URL(input.toString())
|
|
566
|
-
const httpUrl = new URL(wsUrl.toString())
|
|
567
|
-
if (httpUrl.protocol === 'ws:') httpUrl.protocol = 'http:'
|
|
568
|
-
if (httpUrl.protocol === 'wss:') httpUrl.protocol = 'https:'
|
|
569
|
-
|
|
570
|
-
lastUrl = httpUrl.toString()
|
|
571
|
-
const probe = await fetchFn(httpUrl, signal ? { signal } : undefined)
|
|
572
|
-
if (probe.status !== 402) {
|
|
573
|
-
throw new Error(
|
|
574
|
-
`Expected a 402 payment challenge from ${httpUrl}, received ${probe.status} instead.`,
|
|
575
|
-
)
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
const candidates = AcceptPayment.selectChallengeCandidates(
|
|
579
|
-
Challenge.fromResponseList(probe),
|
|
580
|
-
[method] as const,
|
|
581
|
-
AcceptPayment.resolve([method] as const).entries,
|
|
582
|
-
)
|
|
583
|
-
const challenge = (
|
|
584
|
-
await resolveSessionChallengeOrder(
|
|
585
|
-
candidates,
|
|
586
|
-
init?.orderChallenges ?? parameters.orderChallenges,
|
|
587
|
-
)
|
|
588
|
-
)[0]?.challenge
|
|
589
|
-
if (!challenge) {
|
|
590
|
-
throw new Error(
|
|
591
|
-
'No payment challenge received from HTTP endpoint for this WebSocket URL. The server may not require payment or did not advertise a challenge.',
|
|
592
|
-
)
|
|
593
|
-
}
|
|
594
|
-
lastChallenge = challenge
|
|
595
|
-
|
|
596
|
-
const credential = await method.createCredential({
|
|
597
|
-
challenge: challenge as never,
|
|
598
|
-
context: {},
|
|
599
|
-
})
|
|
600
|
-
|
|
601
|
-
closeReadyReceipt = null
|
|
602
|
-
activeSocketChallenge = challenge
|
|
603
|
-
wsDeliveredChunks = 0n
|
|
604
|
-
wsTickCost = BigInt(challenge.request.amount as string)
|
|
605
|
-
const openCredential =
|
|
606
|
-
PaymentCredential.deserialize<LegacySessionCredentialPayload>(credential)
|
|
607
|
-
activeSocketChannelId = openCredential.payload.channelId
|
|
608
|
-
const rawSocket = new WebSocketImpl(wsUrl, protocols)
|
|
609
|
-
activeSocket = rawSocket
|
|
610
|
-
const managedSocket = createManagedSocket(rawSocket)
|
|
611
|
-
|
|
612
|
-
const failSocketFlow = (message: string) => {
|
|
613
|
-
rejectReceipt(new Error(message))
|
|
614
|
-
rejectCloseReady(new Error(message))
|
|
615
|
-
if (
|
|
616
|
-
rawSocket.readyState === WebSocketReadyState.CONNECTING ||
|
|
617
|
-
rawSocket.readyState === WebSocketReadyState.OPEN
|
|
618
|
-
) {
|
|
619
|
-
rawSocket.close(ClientWebSocketProtocolErrorCloseCode, message)
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
const isExpectedReceipt = (receipt: SessionReceipt) =>
|
|
624
|
-
receipt.challengeId === challenge.id && receipt.channelId === activeSocketChannelId
|
|
625
|
-
|
|
626
|
-
const socketOpened = new Promise<void>((resolve, reject) => {
|
|
627
|
-
const onOpen = () => {
|
|
628
|
-
rawSocket.removeEventListener('error', onError)
|
|
629
|
-
managedSocket.emit('open', { type: 'open' })
|
|
630
|
-
resolve()
|
|
631
|
-
}
|
|
632
|
-
const onError = () => {
|
|
633
|
-
rawSocket.removeEventListener('open', onOpen)
|
|
634
|
-
reject(new Error(`WebSocket connection to ${wsUrl} failed to open.`))
|
|
635
|
-
}
|
|
636
|
-
rawSocket.addEventListener('open', onOpen, { once: true })
|
|
637
|
-
rawSocket.addEventListener('error', onError, { once: true })
|
|
638
|
-
})
|
|
639
|
-
|
|
640
|
-
rawSocket.addEventListener('close', (event) => {
|
|
641
|
-
if (activeSocket === rawSocket) activeSocket = null
|
|
642
|
-
if (activeSocketChallenge === challenge) activeSocketChallenge = null
|
|
643
|
-
if (activeSocketChannelId === openCredential.payload.channelId) activeSocketChannelId = null
|
|
644
|
-
expectedSocketCloseAmount = null
|
|
645
|
-
rejectReceipt(new Error('WebSocket closed before the payment flow completed.'))
|
|
646
|
-
rejectCloseReady(new Error('WebSocket closed before the payment flow completed.'))
|
|
647
|
-
managedSocket.emit('close', {
|
|
648
|
-
code: (event as CloseEvent).code ?? 1000,
|
|
649
|
-
reason: (event as CloseEvent).reason ?? '',
|
|
650
|
-
type: 'close',
|
|
651
|
-
wasClean: true,
|
|
652
|
-
})
|
|
653
|
-
})
|
|
654
|
-
|
|
655
|
-
rawSocket.addEventListener('error', () => {
|
|
656
|
-
managedSocket.emit('error', { type: 'error' })
|
|
657
|
-
})
|
|
658
|
-
|
|
659
|
-
rawSocket.addEventListener('message', async (event) => {
|
|
660
|
-
const raw = typeof event.data === 'string' ? event.data : undefined
|
|
661
|
-
if (!raw) return
|
|
662
|
-
|
|
663
|
-
const message = Ws.parseMessage(raw)
|
|
664
|
-
if (!message) {
|
|
665
|
-
managedSocket.emit('message', { data: raw, type: 'message' })
|
|
666
|
-
return
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
switch (message.mpp) {
|
|
670
|
-
case 'authorization':
|
|
671
|
-
break
|
|
672
|
-
case 'message':
|
|
673
|
-
wsDeliveredChunks += 1n
|
|
674
|
-
managedSocket.emit('message', { data: message.data, type: 'message' })
|
|
675
|
-
break
|
|
676
|
-
case 'payment-close-ready':
|
|
677
|
-
if (!isExpectedReceipt(message.data)) {
|
|
678
|
-
failSocketFlow('received mismatched payment-close-ready frame')
|
|
679
|
-
break
|
|
680
|
-
}
|
|
681
|
-
if (BigInt(message.data.spent) > (channel?.cumulativeAmount ?? 0n)) {
|
|
682
|
-
failSocketFlow('received payment-close-ready beyond local voucher state')
|
|
683
|
-
break
|
|
684
|
-
}
|
|
685
|
-
updateSpentFromReceipt(message.data)
|
|
686
|
-
onReceipt?.(message.data)
|
|
687
|
-
settleCloseReady(message.data)
|
|
688
|
-
managedSocket.emit('close', { code: 1000, reason: 'stream complete', type: 'close' })
|
|
689
|
-
break
|
|
690
|
-
case 'payment-error':
|
|
691
|
-
rejectReceipt(new Error(message.message))
|
|
692
|
-
rejectCloseReady(new Error(message.message))
|
|
693
|
-
break
|
|
694
|
-
case 'payment-need-voucher': {
|
|
695
|
-
if (message.data.channelId !== activeSocketChannelId) {
|
|
696
|
-
failSocketFlow('received mismatched payment-need-voucher frame')
|
|
697
|
-
break
|
|
698
|
-
}
|
|
699
|
-
const required = BigInt(message.data.requiredCumulative)
|
|
700
|
-
try {
|
|
701
|
-
assertVoucherWithinLocalLimit(required)
|
|
702
|
-
} catch (error) {
|
|
703
|
-
failSocketFlow(
|
|
704
|
-
error instanceof Error
|
|
705
|
-
? error.message
|
|
706
|
-
: 'requested voucher amount exceeds local maxDeposit',
|
|
707
|
-
)
|
|
708
|
-
break
|
|
709
|
-
}
|
|
710
|
-
const nextCumulative =
|
|
711
|
-
(channel?.cumulativeAmount ?? 0n) > required
|
|
712
|
-
? (channel?.cumulativeAmount ?? 0n)
|
|
713
|
-
: required
|
|
714
|
-
if (channel?.channelId === activeSocketChannelId)
|
|
715
|
-
channel.cumulativeAmount = nextCumulative
|
|
716
|
-
|
|
717
|
-
const voucher = await method.createCredential({
|
|
718
|
-
challenge: challenge as never,
|
|
719
|
-
context: {
|
|
720
|
-
action: 'voucher',
|
|
721
|
-
channelId: activeSocketChannelId,
|
|
722
|
-
cumulativeAmountRaw: nextCumulative.toString(),
|
|
723
|
-
},
|
|
724
|
-
})
|
|
725
|
-
rawSocket.send(Ws.formatAuthorizationMessage(voucher))
|
|
726
|
-
break
|
|
727
|
-
}
|
|
728
|
-
case 'payment-receipt':
|
|
729
|
-
if (!isExpectedReceipt(message.data)) {
|
|
730
|
-
failSocketFlow('received mismatched payment-receipt frame')
|
|
731
|
-
break
|
|
732
|
-
}
|
|
733
|
-
if (
|
|
734
|
-
expectedSocketCloseAmount !== null &&
|
|
735
|
-
Boolean(message.data.txHash) &&
|
|
736
|
-
(message.data.acceptedCumulative !== expectedSocketCloseAmount ||
|
|
737
|
-
message.data.spent !== expectedSocketCloseAmount)
|
|
738
|
-
) {
|
|
739
|
-
failSocketFlow('received mismatched payment-close receipt frame')
|
|
740
|
-
break
|
|
741
|
-
}
|
|
742
|
-
updateSpentFromReceipt(message.data)
|
|
743
|
-
onReceipt?.(message.data)
|
|
744
|
-
settleReceipt(message.data)
|
|
745
|
-
break
|
|
746
|
-
}
|
|
747
|
-
})
|
|
748
|
-
|
|
749
|
-
if (signal) {
|
|
750
|
-
signal.addEventListener(
|
|
751
|
-
'abort',
|
|
752
|
-
() => {
|
|
753
|
-
rejectReceipt(new Error('WebSocket payment flow aborted.'))
|
|
754
|
-
rejectCloseReady(new Error('WebSocket payment flow aborted.'))
|
|
755
|
-
rawSocket.close()
|
|
756
|
-
},
|
|
757
|
-
{ once: true },
|
|
758
|
-
)
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
await socketOpened
|
|
762
|
-
rawSocket.send(Ws.formatAuthorizationMessage(credential))
|
|
763
|
-
await waitForReceipt()
|
|
764
|
-
return managedSocket.socket
|
|
765
|
-
},
|
|
766
|
-
|
|
767
|
-
async close() {
|
|
768
|
-
const closeChallenge = activeSocketChallenge ?? lastChallenge
|
|
769
|
-
const closeChannelId = activeSocketChannelId ?? channel?.channelId
|
|
770
|
-
|
|
771
|
-
if (!channel?.opened) return undefined
|
|
772
|
-
|
|
773
|
-
if (!closeChallenge) {
|
|
774
|
-
throw new Error(
|
|
775
|
-
'Cannot close session: no challenge available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or make a request first to receive a fresh 402 challenge.',
|
|
776
|
-
)
|
|
777
|
-
}
|
|
778
|
-
if (!closeChannelId) {
|
|
779
|
-
throw new Error(
|
|
780
|
-
'Cannot close session: no channel ID available. The session may not have been fully opened.',
|
|
781
|
-
)
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
if (activeSocket?.readyState === WebSocketReadyState.OPEN) {
|
|
785
|
-
const ready =
|
|
786
|
-
closeReadyReceipt ??
|
|
787
|
-
(await (async () => {
|
|
788
|
-
activeSocket.send(Ws.formatCloseRequestMessage())
|
|
789
|
-
return waitForCloseReady()
|
|
790
|
-
})())
|
|
791
|
-
const readySpent = BigInt(ready.spent)
|
|
792
|
-
if (readySpent > (channel.cumulativeAmount > spent ? channel.cumulativeAmount : spent)) {
|
|
793
|
-
throw new Error('close-ready spent exceeds local voucher state')
|
|
794
|
-
}
|
|
795
|
-
|
|
796
|
-
const credential = await method.createCredential({
|
|
797
|
-
challenge: closeChallenge as never,
|
|
798
|
-
context: {
|
|
799
|
-
action: 'close',
|
|
800
|
-
channelId: closeChannelId,
|
|
801
|
-
cumulativeAmountRaw: readySpent.toString(),
|
|
802
|
-
},
|
|
803
|
-
})
|
|
804
|
-
|
|
805
|
-
const expectedCloseAmount = readySpent.toString()
|
|
806
|
-
expectedSocketCloseAmount = expectedCloseAmount
|
|
807
|
-
try {
|
|
808
|
-
const pendingReceipt = waitForReceipt(
|
|
809
|
-
(receipt) =>
|
|
810
|
-
Boolean(receipt.txHash) &&
|
|
811
|
-
receipt.challengeId === closeChallenge.id &&
|
|
812
|
-
receipt.channelId === closeChannelId &&
|
|
813
|
-
receipt.acceptedCumulative === expectedCloseAmount &&
|
|
814
|
-
receipt.spent === expectedCloseAmount,
|
|
815
|
-
)
|
|
816
|
-
activeSocket.send(Ws.formatAuthorizationMessage(credential))
|
|
817
|
-
const receipt = await pendingReceipt
|
|
818
|
-
activeSocket.close()
|
|
819
|
-
closeReadyReceipt = null
|
|
820
|
-
return receipt
|
|
821
|
-
} finally {
|
|
822
|
-
expectedSocketCloseAmount = null
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
|
|
826
|
-
const credential = await method.createCredential({
|
|
827
|
-
challenge: closeChallenge as never,
|
|
828
|
-
context: {
|
|
829
|
-
action: 'close',
|
|
830
|
-
channelId: closeChannelId,
|
|
831
|
-
cumulativeAmountRaw: (() => {
|
|
832
|
-
const closeAmount = BigInt(getFallbackCloseAmount(closeChallenge, closeChannelId))
|
|
833
|
-
if (closeAmount > channel.cumulativeAmount) {
|
|
834
|
-
throw new Error('fallback close amount exceeds local voucher state')
|
|
835
|
-
}
|
|
836
|
-
assertVoucherWithinLocalLimit(closeAmount)
|
|
837
|
-
return closeAmount.toString()
|
|
838
|
-
})(),
|
|
839
|
-
},
|
|
840
|
-
})
|
|
841
|
-
|
|
842
|
-
if (!lastUrl) {
|
|
843
|
-
throw new Error(
|
|
844
|
-
'Cannot close session: no URL available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or call fetch()/sse() before close().',
|
|
845
|
-
)
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
const response = await fetchFn(lastUrl, {
|
|
849
|
-
method: 'POST',
|
|
850
|
-
headers: { [Constants.Headers.authorization]: credential },
|
|
851
|
-
})
|
|
852
|
-
if (!response.ok) {
|
|
853
|
-
const body = await response.text().catch(() => '')
|
|
854
|
-
const detail = (() => {
|
|
855
|
-
if (!body) return ''
|
|
856
|
-
if (!response.headers.get('Content-Type')?.includes('application/problem+json')) {
|
|
857
|
-
return body
|
|
858
|
-
}
|
|
859
|
-
try {
|
|
860
|
-
const problem = JSON.parse(body) as { detail?: string }
|
|
861
|
-
return problem.detail ?? body
|
|
862
|
-
} catch {
|
|
863
|
-
return body
|
|
864
|
-
}
|
|
865
|
-
})()
|
|
866
|
-
const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
|
|
867
|
-
throw new Error(
|
|
868
|
-
`Close request failed with status ${response.status}${detail ? `: ${detail}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
|
|
869
|
-
)
|
|
870
|
-
}
|
|
871
|
-
const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
|
|
872
|
-
const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : undefined
|
|
873
|
-
|
|
874
|
-
return receipt
|
|
875
|
-
},
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
return self
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
/** Type helpers for the legacy auto-driving session manager. */
|
|
882
|
-
export declare namespace sessionManager {
|
|
883
|
-
type Parameters = Account.getResolver.Parameters &
|
|
884
|
-
Client.getResolver.Parameters & {
|
|
885
|
-
/** Account that signs voucher digests. Defaults to `account`; access-key accounts sign raw vouchers as their access-key address. */
|
|
886
|
-
voucherSigner?: viem_Account | undefined
|
|
887
|
-
/** Viem client instance. Shorthand for `getClient: () => client`. */
|
|
888
|
-
client?: import('viem').Client | undefined
|
|
889
|
-
/** Token decimals used to convert `maxDeposit` to raw units. Defaults to `6`. */
|
|
890
|
-
decimals?: number | undefined
|
|
891
|
-
/** Escrow contract address. */
|
|
892
|
-
escrowContract?: Address | undefined
|
|
893
|
-
fetch?: typeof globalThis.fetch | undefined
|
|
894
|
-
/** Maximum deposit in human-readable units (e.g. `'10'` for 10 tokens). Converted to raw units via `decimals`. */
|
|
895
|
-
maxDeposit?: string | undefined
|
|
896
|
-
/** Filters and sorts supported session challenges before credential creation. */
|
|
897
|
-
orderChallenges?: SessionOrderChallenges | undefined
|
|
898
|
-
/** Optional websocket constructor for runtimes without a global WebSocket. */
|
|
899
|
-
webSocket?: WebSocketConstructor | undefined
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
|
|
903
|
-
async function resolveSessionChallengeOrder(
|
|
904
|
-
candidates: readonly AcceptPayment.ChallengeCandidate<SessionMethod>[],
|
|
905
|
-
override: SessionOrderChallenges | undefined,
|
|
906
|
-
): Promise<readonly AcceptPayment.ChallengeCandidate<SessionMethod>[]> {
|
|
907
|
-
const orderChallenges = override
|
|
908
|
-
return orderChallenges ? orderChallenges(candidates) : candidates
|
|
909
|
-
}
|