mppx 0.8.15 → 0.8.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -0
- package/README.md +15 -0
- package/dist/Challenge.js +61 -39
- package/dist/Constants.d.ts +17 -17
- package/dist/Errors.d.ts +3 -3
- package/dist/Method.d.ts +35 -5
- package/dist/Method.js +7 -22
- package/dist/Store.d.ts +19 -0
- package/dist/Store.js +43 -0
- package/dist/attestation/Client.d.ts +17 -0
- package/dist/attestation/Client.js +28 -0
- package/dist/attestation/Constants.d.ts +15 -0
- package/dist/attestation/Constants.js +15 -0
- package/dist/attestation/Server.d.ts +4 -0
- package/dist/attestation/Server.js +8 -0
- package/dist/attestation/Types.d.ts +76 -0
- package/dist/attestation/Types.js +2 -0
- package/dist/attestation/index.d.ts +6 -0
- package/dist/attestation/index.js +6 -0
- package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
- package/dist/attestation/internal/HttpMessageSignature.js +320 -0
- package/dist/attestation/internal/SigningContext.d.ts +4 -0
- package/dist/attestation/internal/SigningContext.js +11 -0
- package/dist/bin.js +3 -3
- package/dist/cli/THIRD-PARTY-LICENSES.txt +328 -0
- package/dist/cli/account.d.ts +14 -14
- package/dist/cli/cli.d.ts +6 -6
- package/dist/cli/cli.js +253 -1504
- package/dist/cli/plugins/index.js +19 -5
- package/dist/cli/plugins/tempo.js +7 -3
- package/dist/cli/sessions/Manager.js +7 -4
- package/dist/cli/sessions/commands.d.ts +4 -4
- package/dist/cli/sessions/request.d.ts +2 -0
- package/dist/cli/sessions/request.js +18 -0
- package/dist/cli/sessions/store.js +28 -14
- package/dist/cli/utils.d.ts +1 -1
- package/dist/cli/validate/index.d.ts +3 -3
- package/dist/client/Mppx.d.ts +3 -0
- package/dist/client/Mppx.js +13 -5
- package/dist/client/Transport.d.ts +3 -5
- package/dist/client/Transport.js +1 -17
- package/dist/client/internal/Fetch.js +2 -6
- package/dist/discovery/Discovery.js +2 -1
- package/dist/discovery/OpenApi.d.ts +3 -5
- package/dist/discovery/OpenApi.js +13 -34
- package/dist/discovery/internal/Metadata.d.ts +20 -0
- package/dist/discovery/internal/Metadata.js +36 -0
- package/dist/evm/Methods.d.ts +11 -11
- package/dist/evm/Types.d.ts +17 -17
- package/dist/evm/client/Charge.d.ts +11 -11
- package/dist/evm/client/Charge.js +8 -0
- package/dist/evm/client/Methods.d.ts +11 -11
- package/dist/evm/server/Charge.d.ts +1 -1
- package/dist/evm/server/Charge.js +2 -0
- package/dist/evm/server/Methods.d.ts +11 -11
- package/dist/internal/HeaderCodec.d.ts +2 -2
- package/dist/internal/types.d.ts +6 -0
- package/dist/proxy/Proxy.d.ts +2 -0
- package/dist/proxy/Proxy.js +117 -9
- package/dist/proxy/Service.d.ts +36 -1
- package/dist/proxy/Service.js +9 -8
- package/dist/proxy/services/anthropic.js +1 -0
- package/dist/proxy/services/openai.js +1 -0
- package/dist/proxy/services/stripe.js +1 -0
- package/dist/server/Mppx.d.ts +75 -13
- package/dist/server/Mppx.js +201 -23
- package/dist/server/core.d.ts +9 -0
- package/dist/server/core.js +9 -0
- package/dist/server/internal/html/config.d.ts +9 -9
- package/dist/server/internal/html/constants.d.ts +17 -17
- package/dist/stripe/Methods.d.ts +10 -10
- package/dist/stripe/client/Charge.d.ts +10 -10
- package/dist/stripe/client/Methods.d.ts +10 -10
- package/dist/stripe/internal/constants.d.ts +1 -1
- package/dist/stripe/internal/constants.js +1 -1
- package/dist/stripe/internal/types.d.ts +1 -0
- package/dist/stripe/server/Charge.d.ts +11 -11
- package/dist/stripe/server/Charge.js +51 -5
- package/dist/stripe/server/Methods.d.ts +137 -48
- package/dist/stripe/server/Methods.js +265 -4
- package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
- package/dist/stripe/server/internal/deposit-address.js +28 -0
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/record-payment.d.ts +15 -0
- package/dist/stripe/server/internal/record-payment.js +42 -0
- package/dist/stripe/server/internal/request.d.ts +25 -0
- package/dist/stripe/server/internal/request.js +29 -0
- package/dist/stripe/server/spt.d.ts +8 -0
- package/dist/stripe/server/spt.js +8 -0
- package/dist/tap/Constants.d.ts +28 -0
- package/dist/tap/Constants.js +32 -0
- package/dist/tap/Types.d.ts +11 -0
- package/dist/tap/Types.js +2 -0
- package/dist/tap/client/index.d.ts +26 -0
- package/dist/tap/client/index.js +33 -0
- package/dist/tap/index.d.ts +5 -0
- package/dist/tap/index.js +5 -0
- package/dist/tap/server/index.d.ts +20 -0
- package/dist/tap/server/index.js +36 -0
- package/dist/tempo/Attribution.d.ts +1 -1
- package/dist/tempo/Methods.d.ts +73 -60
- package/dist/tempo/Methods.js +14 -3
- package/dist/tempo/Proof.d.ts +16 -16
- package/dist/tempo/client/Charge.d.ts +22 -19
- package/dist/tempo/client/Charge.js +32 -16
- package/dist/tempo/client/Methods.d.ts +51 -38
- package/dist/tempo/client/Subscription.d.ts +23 -23
- package/dist/tempo/internal/address.d.ts +2 -1
- package/dist/tempo/internal/address.js +3 -1
- package/dist/tempo/internal/auto-swap.js +4 -19
- package/dist/tempo/internal/defaults.d.ts +17 -6
- package/dist/tempo/internal/defaults.js +11 -0
- package/dist/tempo/internal/fee-payer.d.ts +12 -12
- package/dist/tempo/internal/machine-token-charge.d.ts +51 -0
- package/dist/tempo/internal/machine-token-charge.js +113 -0
- package/dist/tempo/internal/machine-token-session.d.ts +88 -0
- package/dist/tempo/internal/machine-token-session.js +173 -0
- package/dist/tempo/internal/proof.d.ts +17 -17
- package/dist/tempo/internal/signature-envelope.d.ts +14 -0
- package/dist/tempo/internal/signature-envelope.js +28 -0
- package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -2
- package/dist/tempo/legacy/client/ChannelOps.js +11 -5
- package/dist/tempo/legacy/client/Session.d.ts +33 -21
- package/dist/tempo/legacy/client/Session.js +3 -3
- package/dist/tempo/legacy/client/SessionManager.d.ts +3 -1
- package/dist/tempo/legacy/client/SessionManager.js +2 -0
- package/dist/tempo/legacy/index.d.ts +1 -3
- package/dist/tempo/legacy/index.js +1 -3
- package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
- package/dist/tempo/server/Charge.d.ts +28 -11
- package/dist/tempo/server/Charge.js +101 -55
- package/dist/tempo/server/Methods.d.ts +58 -56
- package/dist/tempo/server/Methods.js +8 -18
- package/dist/tempo/server/Relay.d.ts +1 -1
- package/dist/tempo/server/Relay.js +2 -2
- package/dist/tempo/server/Subscription.d.ts +25 -25
- package/dist/tempo/server/Subscription.js +2 -0
- package/dist/tempo/server/index.d.ts +1 -1
- package/dist/tempo/server/index.js +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/transport.d.ts +2 -0
- package/dist/tempo/server/internal/transport.js +9 -2
- package/dist/tempo/session/client/ChannelOps.d.ts +18 -3
- package/dist/tempo/session/client/ChannelOps.js +35 -6
- package/dist/tempo/session/client/ChannelStore.d.ts +0 -5
- package/dist/tempo/session/client/ChannelStore.js +2 -2
- package/dist/tempo/session/client/CredentialState.d.ts +18 -3
- package/dist/tempo/session/client/CredentialState.js +77 -76
- package/dist/tempo/session/client/Runtime.d.ts +4 -2
- package/dist/tempo/session/client/Runtime.js +21 -5
- package/dist/tempo/session/client/Session.d.ts +34 -22
- package/dist/tempo/session/client/Session.js +186 -63
- package/dist/tempo/session/client/SessionManager.d.ts +3 -1
- package/dist/tempo/session/client/SessionManager.js +35 -11
- package/dist/tempo/session/client/Transports.d.ts +2 -0
- package/dist/tempo/session/client/Transports.js +12 -2
- package/dist/tempo/session/precompile/Chain.d.ts +37 -2
- package/dist/tempo/session/precompile/Chain.js +116 -15
- package/dist/tempo/session/precompile/Protocol.d.ts +15 -0
- package/dist/tempo/session/precompile/Protocol.js +7 -0
- package/dist/tempo/session/precompile/Voucher.d.ts +7 -5
- package/dist/tempo/session/precompile/Voucher.js +6 -12
- package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
- package/dist/tempo/session/server/ChannelStore.d.ts +15 -0
- package/dist/tempo/session/server/ChannelStore.js +27 -12
- package/dist/tempo/session/server/CredentialVerification.d.ts +39 -20
- package/dist/tempo/session/server/CredentialVerification.js +359 -89
- package/dist/tempo/session/server/MeteredStream.d.ts +4 -1
- package/dist/tempo/session/server/MeteredStream.js +8 -5
- package/dist/tempo/session/server/RequestState.d.ts +19 -0
- package/dist/tempo/session/server/RequestState.js +61 -15
- package/dist/tempo/session/server/Session.d.ts +46 -23
- package/dist/tempo/session/server/Session.js +150 -56
- package/dist/tempo/session/server/Settlement.d.ts +11 -4
- package/dist/tempo/session/server/Settlement.js +53 -21
- package/dist/tempo/session/server/Sse.d.ts +3 -1
- package/dist/tempo/session/server/Sse.js +2 -1
- package/dist/tempo/session/server/Transports.d.ts +1 -1
- package/dist/tempo/session/server/Transports.js +1 -0
- package/dist/tempo/session/server/Ws.d.ts +6 -1
- package/dist/tempo/session/server/Ws.js +1 -0
- package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
- package/dist/web-bot-auth/Constants.d.ts +20 -0
- package/dist/web-bot-auth/Constants.js +24 -0
- package/dist/web-bot-auth/Types.d.ts +10 -0
- package/dist/web-bot-auth/Types.js +2 -0
- package/dist/web-bot-auth/client/index.d.ts +29 -0
- package/dist/web-bot-auth/client/index.js +64 -0
- package/dist/web-bot-auth/index.d.ts +7 -0
- package/dist/web-bot-auth/index.js +7 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
- package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
- package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
- package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
- package/dist/web-bot-auth/server/index.d.ts +35 -0
- package/dist/web-bot-auth/server/index.js +88 -0
- package/dist/x402/Types.d.ts +6 -6
- package/dist/x402/client/Exact.d.ts +8 -0
- package/dist/x402/client/Exact.js +40 -10
- package/dist/x402/server/EvmCharge.d.ts +22 -0
- package/dist/x402/server/EvmCharge.js +54 -20
- package/package.json +28 -34
- package/dist/BodyDigest.d.ts.map +0 -1
- package/dist/BodyDigest.js.map +0 -1
- package/dist/Challenge.d.ts.map +0 -1
- package/dist/Challenge.js.map +0 -1
- package/dist/Constants.d.ts.map +0 -1
- package/dist/Constants.js.map +0 -1
- package/dist/Credential.d.ts.map +0 -1
- package/dist/Credential.js.map +0 -1
- package/dist/Errors.d.ts.map +0 -1
- package/dist/Errors.js.map +0 -1
- package/dist/Expires.d.ts.map +0 -1
- package/dist/Expires.js.map +0 -1
- package/dist/Html.d.ts.map +0 -1
- package/dist/Html.js.map +0 -1
- package/dist/Mcp.d.ts.map +0 -1
- package/dist/Mcp.js.map +0 -1
- package/dist/Method.d.ts.map +0 -1
- package/dist/Method.js.map +0 -1
- package/dist/PaymentRequest.d.ts.map +0 -1
- package/dist/PaymentRequest.js.map +0 -1
- package/dist/Receipt.d.ts.map +0 -1
- package/dist/Receipt.js.map +0 -1
- package/dist/Store.d.ts.map +0 -1
- package/dist/Store.js.map +0 -1
- package/dist/bin.d.ts.map +0 -1
- package/dist/bin.js.map +0 -1
- package/dist/cli/account.d.ts.map +0 -1
- package/dist/cli/account.js.map +0 -1
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/internal.d.ts.map +0 -1
- package/dist/cli/internal.js.map +0 -1
- package/dist/cli/plugins/evm.d.ts.map +0 -1
- package/dist/cli/plugins/evm.js.map +0 -1
- package/dist/cli/plugins/index.d.ts.map +0 -1
- package/dist/cli/plugins/index.js.map +0 -1
- package/dist/cli/plugins/plugin.d.ts.map +0 -1
- package/dist/cli/plugins/plugin.js.map +0 -1
- package/dist/cli/plugins/stripe.d.ts.map +0 -1
- package/dist/cli/plugins/stripe.js.map +0 -1
- package/dist/cli/plugins/tempo.d.ts.map +0 -1
- package/dist/cli/plugins/tempo.js.map +0 -1
- package/dist/cli/sessions/Manager.d.ts.map +0 -1
- package/dist/cli/sessions/Manager.js.map +0 -1
- package/dist/cli/sessions/commands.d.ts.map +0 -1
- package/dist/cli/sessions/commands.js.map +0 -1
- package/dist/cli/sessions/request.d.ts.map +0 -1
- package/dist/cli/sessions/request.js.map +0 -1
- package/dist/cli/sessions/store.d.ts.map +0 -1
- package/dist/cli/sessions/store.js.map +0 -1
- package/dist/cli/utils.d.ts.map +0 -1
- package/dist/cli/utils.js.map +0 -1
- package/dist/cli/validate/challenge.d.ts.map +0 -1
- package/dist/cli/validate/challenge.js.map +0 -1
- package/dist/cli/validate/discovery.d.ts.map +0 -1
- package/dist/cli/validate/discovery.js.map +0 -1
- package/dist/cli/validate/helpers.d.ts.map +0 -1
- package/dist/cli/validate/helpers.js.map +0 -1
- package/dist/cli/validate/index.d.ts.map +0 -1
- package/dist/cli/validate/index.js.map +0 -1
- package/dist/cli/validate/messages.d.ts.map +0 -1
- package/dist/cli/validate/messages.js.map +0 -1
- package/dist/cli/validate/payment.d.ts.map +0 -1
- package/dist/cli/validate/payment.js.map +0 -1
- package/dist/client/Methods.d.ts.map +0 -1
- package/dist/client/Methods.js.map +0 -1
- package/dist/client/Mppx.d.ts.map +0 -1
- package/dist/client/Mppx.js.map +0 -1
- package/dist/client/Transport.d.ts.map +0 -1
- package/dist/client/Transport.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/internal/Fetch.d.ts.map +0 -1
- package/dist/client/internal/Fetch.js.map +0 -1
- package/dist/client/internal/MethodChallenge.d.ts.map +0 -1
- package/dist/client/internal/MethodChallenge.js.map +0 -1
- package/dist/client/internal/MethodResponse.d.ts.map +0 -1
- package/dist/client/internal/MethodResponse.js.map +0 -1
- package/dist/client/internal/protocols/Mcp.d.ts.map +0 -1
- package/dist/client/internal/protocols/Mcp.js.map +0 -1
- package/dist/client/internal/protocols/Mpp.d.ts.map +0 -1
- package/dist/client/internal/protocols/Mpp.js.map +0 -1
- package/dist/client/internal/protocols/Protocol.d.ts.map +0 -1
- package/dist/client/internal/protocols/Protocol.js.map +0 -1
- package/dist/client/internal/protocols/Shared.d.ts.map +0 -1
- package/dist/client/internal/protocols/Shared.js.map +0 -1
- package/dist/client/internal/protocols/X402.d.ts.map +0 -1
- package/dist/client/internal/protocols/X402.js.map +0 -1
- package/dist/client/node.d.ts.map +0 -1
- package/dist/client/node.js.map +0 -1
- package/dist/discovery/Discovery.d.ts.map +0 -1
- package/dist/discovery/Discovery.js.map +0 -1
- package/dist/discovery/OpenApi.d.ts.map +0 -1
- package/dist/discovery/OpenApi.js.map +0 -1
- package/dist/discovery/Validate.d.ts.map +0 -1
- package/dist/discovery/Validate.js.map +0 -1
- package/dist/discovery/index.d.ts.map +0 -1
- package/dist/discovery/index.js.map +0 -1
- package/dist/evm/Assets.d.ts.map +0 -1
- package/dist/evm/Assets.js.map +0 -1
- package/dist/evm/Chains.d.ts.map +0 -1
- package/dist/evm/Chains.js.map +0 -1
- package/dist/evm/Methods.d.ts.map +0 -1
- package/dist/evm/Methods.js.map +0 -1
- package/dist/evm/Types.d.ts.map +0 -1
- package/dist/evm/Types.js.map +0 -1
- package/dist/evm/client/Charge.d.ts.map +0 -1
- package/dist/evm/client/Charge.js.map +0 -1
- package/dist/evm/client/Methods.d.ts.map +0 -1
- package/dist/evm/client/Methods.js.map +0 -1
- package/dist/evm/client/index.d.ts.map +0 -1
- package/dist/evm/client/index.js.map +0 -1
- package/dist/evm/index.d.ts.map +0 -1
- package/dist/evm/index.js.map +0 -1
- package/dist/evm/server/Charge.d.ts.map +0 -1
- package/dist/evm/server/Charge.js.map +0 -1
- package/dist/evm/server/Methods.d.ts.map +0 -1
- package/dist/evm/server/Methods.js.map +0 -1
- package/dist/evm/server/index.d.ts.map +0 -1
- package/dist/evm/server/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/AcceptPayment.d.ts.map +0 -1
- package/dist/internal/AcceptPayment.js.map +0 -1
- package/dist/internal/HeaderCodec.d.ts.map +0 -1
- package/dist/internal/HeaderCodec.js.map +0 -1
- package/dist/internal/constantTimeEqual.d.ts.map +0 -1
- package/dist/internal/constantTimeEqual.js.map +0 -1
- package/dist/internal/env.d.ts.map +0 -1
- package/dist/internal/env.js.map +0 -1
- package/dist/internal/types.d.ts.map +0 -1
- package/dist/internal/types.js.map +0 -1
- package/dist/mcp/client/McpClient.d.ts.map +0 -1
- package/dist/mcp/client/McpClient.js.map +0 -1
- package/dist/mcp/client/index.d.ts.map +0 -1
- package/dist/mcp/client/index.js.map +0 -1
- package/dist/mcp/server/Transport.d.ts.map +0 -1
- package/dist/mcp/server/Transport.js.map +0 -1
- package/dist/mcp/server/index.d.ts.map +0 -1
- package/dist/mcp/server/index.js.map +0 -1
- package/dist/middlewares/elysia.d.ts.map +0 -1
- package/dist/middlewares/elysia.js.map +0 -1
- package/dist/middlewares/express.d.ts.map +0 -1
- package/dist/middlewares/express.js.map +0 -1
- package/dist/middlewares/hono.d.ts.map +0 -1
- package/dist/middlewares/hono.js.map +0 -1
- package/dist/middlewares/internal/mppx.d.ts.map +0 -1
- package/dist/middlewares/internal/mppx.js.map +0 -1
- package/dist/middlewares/nextjs.d.ts.map +0 -1
- package/dist/middlewares/nextjs.js.map +0 -1
- package/dist/proxy/Proxy.d.ts.map +0 -1
- package/dist/proxy/Proxy.js.map +0 -1
- package/dist/proxy/Service.d.ts.map +0 -1
- package/dist/proxy/Service.js.map +0 -1
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/internal/Headers.d.ts.map +0 -1
- package/dist/proxy/internal/Headers.js.map +0 -1
- package/dist/proxy/internal/Route.d.ts.map +0 -1
- package/dist/proxy/internal/Route.js.map +0 -1
- package/dist/proxy/services/anthropic.d.ts.map +0 -1
- package/dist/proxy/services/anthropic.js.map +0 -1
- package/dist/proxy/services/openai.d.ts.map +0 -1
- package/dist/proxy/services/openai.js.map +0 -1
- package/dist/proxy/services/stripe.d.ts.map +0 -1
- package/dist/proxy/services/stripe.js.map +0 -1
- package/dist/server/Methods.d.ts.map +0 -1
- package/dist/server/Methods.js.map +0 -1
- package/dist/server/Mppx.d.ts.map +0 -1
- package/dist/server/Mppx.js.map +0 -1
- package/dist/server/NodeListener.d.ts.map +0 -1
- package/dist/server/NodeListener.js.map +0 -1
- package/dist/server/Request.d.ts.map +0 -1
- package/dist/server/Request.js.map +0 -1
- package/dist/server/Response.d.ts.map +0 -1
- package/dist/server/Response.js.map +0 -1
- package/dist/server/Transport.d.ts.map +0 -1
- package/dist/server/Transport.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/internal/html/compose.main.gen.d.ts.map +0 -1
- package/dist/server/internal/html/compose.main.gen.js.map +0 -1
- package/dist/server/internal/html/config.d.ts.map +0 -1
- package/dist/server/internal/html/config.js.map +0 -1
- package/dist/server/internal/html/constants.d.ts.map +0 -1
- package/dist/server/internal/html/constants.js.map +0 -1
- package/dist/server/internal/html/serviceWorker.client.d.ts.map +0 -1
- package/dist/server/internal/html/serviceWorker.client.js.map +0 -1
- package/dist/server/internal/html/serviceWorker.gen.d.ts.map +0 -1
- package/dist/server/internal/html/serviceWorker.gen.js.map +0 -1
- package/dist/server/internal/scope.d.ts.map +0 -1
- package/dist/server/internal/scope.js.map +0 -1
- package/dist/stripe/Methods.d.ts.map +0 -1
- package/dist/stripe/Methods.js.map +0 -1
- package/dist/stripe/client/Charge.d.ts.map +0 -1
- package/dist/stripe/client/Charge.js.map +0 -1
- package/dist/stripe/client/Methods.d.ts.map +0 -1
- package/dist/stripe/client/Methods.js.map +0 -1
- package/dist/stripe/client/index.d.ts.map +0 -1
- package/dist/stripe/client/index.js.map +0 -1
- package/dist/stripe/index.d.ts.map +0 -1
- package/dist/stripe/index.js.map +0 -1
- package/dist/stripe/internal/constants.d.ts.map +0 -1
- package/dist/stripe/internal/constants.js.map +0 -1
- package/dist/stripe/internal/types.d.ts.map +0 -1
- package/dist/stripe/internal/types.js.map +0 -1
- package/dist/stripe/server/Charge.d.ts.map +0 -1
- package/dist/stripe/server/Charge.js.map +0 -1
- package/dist/stripe/server/Methods.d.ts.map +0 -1
- package/dist/stripe/server/Methods.js.map +0 -1
- package/dist/stripe/server/index.d.ts.map +0 -1
- package/dist/stripe/server/index.js.map +0 -1
- package/dist/stripe/server/internal/html/types.d.ts.map +0 -1
- package/dist/stripe/server/internal/html/types.js.map +0 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +0 -1
- package/dist/stripe/server/internal/html.gen.js.map +0 -1
- package/dist/tempo/Attribution.d.ts.map +0 -1
- package/dist/tempo/Attribution.js.map +0 -1
- package/dist/tempo/Methods.d.ts.map +0 -1
- package/dist/tempo/Methods.js.map +0 -1
- package/dist/tempo/Proof.d.ts.map +0 -1
- package/dist/tempo/Proof.js.map +0 -1
- package/dist/tempo/client/Charge.d.ts.map +0 -1
- package/dist/tempo/client/Charge.js.map +0 -1
- package/dist/tempo/client/Methods.d.ts.map +0 -1
- package/dist/tempo/client/Methods.js.map +0 -1
- package/dist/tempo/client/ResolveAccount.d.ts.map +0 -1
- package/dist/tempo/client/ResolveAccount.js.map +0 -1
- package/dist/tempo/client/Subscription.d.ts.map +0 -1
- package/dist/tempo/client/Subscription.js.map +0 -1
- package/dist/tempo/client/index.d.ts.map +0 -1
- package/dist/tempo/client/index.js.map +0 -1
- package/dist/tempo/index.d.ts.map +0 -1
- package/dist/tempo/index.js.map +0 -1
- package/dist/tempo/internal/account.d.ts.map +0 -1
- package/dist/tempo/internal/account.js.map +0 -1
- package/dist/tempo/internal/address.d.ts.map +0 -1
- package/dist/tempo/internal/address.js.map +0 -1
- package/dist/tempo/internal/auto-swap.d.ts.map +0 -1
- package/dist/tempo/internal/auto-swap.js.map +0 -1
- package/dist/tempo/internal/charge.d.ts.map +0 -1
- package/dist/tempo/internal/charge.js.map +0 -1
- package/dist/tempo/internal/defaults.d.ts.map +0 -1
- package/dist/tempo/internal/defaults.js.map +0 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +0 -1
- package/dist/tempo/internal/fee-payer.js.map +0 -1
- package/dist/tempo/internal/fee-token.d.ts.map +0 -1
- package/dist/tempo/internal/fee-token.js.map +0 -1
- package/dist/tempo/internal/proof.d.ts.map +0 -1
- package/dist/tempo/internal/proof.js.map +0 -1
- package/dist/tempo/internal/selectors.d.ts.map +0 -1
- package/dist/tempo/internal/selectors.js.map +0 -1
- package/dist/tempo/internal/types.d.ts.map +0 -1
- package/dist/tempo/internal/types.js.map +0 -1
- package/dist/tempo/legacy/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/legacy/client/ChannelOps.js.map +0 -1
- package/dist/tempo/legacy/client/Session.d.ts.map +0 -1
- package/dist/tempo/legacy/client/Session.js.map +0 -1
- package/dist/tempo/legacy/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/legacy/client/SessionManager.js.map +0 -1
- package/dist/tempo/legacy/client/index.d.ts.map +0 -1
- package/dist/tempo/legacy/client/index.js.map +0 -1
- package/dist/tempo/legacy/index.d.ts.map +0 -1
- package/dist/tempo/legacy/index.js.map +0 -1
- package/dist/tempo/legacy/server/Session.d.ts +0 -208
- package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
- package/dist/tempo/legacy/server/Session.js +0 -698
- package/dist/tempo/legacy/server/Session.js.map +0 -1
- package/dist/tempo/legacy/server/index.d.ts +0 -5
- package/dist/tempo/legacy/server/index.d.ts.map +0 -1
- package/dist/tempo/legacy/server/index.js +0 -5
- package/dist/tempo/legacy/server/index.js.map +0 -1
- package/dist/tempo/legacy/session/Chain.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Chain.js.map +0 -1
- package/dist/tempo/legacy/session/Channel.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Channel.js.map +0 -1
- package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
- package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/legacy/session/ChannelStore.js +0 -6
- package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
- package/dist/tempo/legacy/session/Types.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Types.js.map +0 -1
- package/dist/tempo/legacy/session/Voucher.d.ts.map +0 -1
- package/dist/tempo/legacy/session/Voucher.js.map +0 -1
- package/dist/tempo/legacy/session/escrow.abi.d.ts.map +0 -1
- package/dist/tempo/legacy/session/escrow.abi.js.map +0 -1
- package/dist/tempo/legacy/session/index.d.ts.map +0 -1
- package/dist/tempo/legacy/session/index.js.map +0 -1
- package/dist/tempo/server/Charge.d.ts.map +0 -1
- package/dist/tempo/server/Charge.js.map +0 -1
- package/dist/tempo/server/Methods.d.ts.map +0 -1
- package/dist/tempo/server/Methods.js.map +0 -1
- package/dist/tempo/server/Relay.d.ts.map +0 -1
- package/dist/tempo/server/Relay.js.map +0 -1
- package/dist/tempo/server/SponsorBudget.d.ts.map +0 -1
- package/dist/tempo/server/SponsorBudget.js.map +0 -1
- package/dist/tempo/server/Subscription.d.ts.map +0 -1
- package/dist/tempo/server/Subscription.js.map +0 -1
- package/dist/tempo/server/index.d.ts.map +0 -1
- package/dist/tempo/server/index.js.map +0 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +0 -1
- package/dist/tempo/server/internal/html.gen.js.map +0 -1
- package/dist/tempo/server/internal/request-body.d.ts.map +0 -1
- package/dist/tempo/server/internal/request-body.js.map +0 -1
- package/dist/tempo/server/internal/transport.d.ts.map +0 -1
- package/dist/tempo/server/internal/transport.js.map +0 -1
- package/dist/tempo/session/Snapshot.d.ts.map +0 -1
- package/dist/tempo/session/Snapshot.js.map +0 -1
- package/dist/tempo/session/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/session/client/ChannelOps.js.map +0 -1
- package/dist/tempo/session/client/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/client/ChannelStore.js.map +0 -1
- package/dist/tempo/session/client/CredentialState.d.ts.map +0 -1
- package/dist/tempo/session/client/CredentialState.js.map +0 -1
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +0 -1
- package/dist/tempo/session/client/ReceiptCoordinator.js.map +0 -1
- package/dist/tempo/session/client/Runtime.d.ts.map +0 -1
- package/dist/tempo/session/client/Runtime.js.map +0 -1
- package/dist/tempo/session/client/Session.d.ts.map +0 -1
- package/dist/tempo/session/client/Session.js.map +0 -1
- package/dist/tempo/session/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/session/client/SessionManager.js.map +0 -1
- package/dist/tempo/session/client/Transports.d.ts.map +0 -1
- package/dist/tempo/session/client/Transports.js.map +0 -1
- package/dist/tempo/session/client/index.d.ts.map +0 -1
- package/dist/tempo/session/client/index.js.map +0 -1
- package/dist/tempo/session/client/internal/SessionManager.d.ts.map +0 -1
- package/dist/tempo/session/client/internal/SessionManager.js.map +0 -1
- package/dist/tempo/session/index.d.ts.map +0 -1
- package/dist/tempo/session/index.js.map +0 -1
- package/dist/tempo/session/precompile/Chain.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Chain.js.map +0 -1
- package/dist/tempo/session/precompile/Channel.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Channel.js.map +0 -1
- package/dist/tempo/session/precompile/Protocol.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Protocol.js.map +0 -1
- package/dist/tempo/session/precompile/Voucher.d.ts.map +0 -1
- package/dist/tempo/session/precompile/Voucher.js.map +0 -1
- package/dist/tempo/session/precompile/escrow.abi.d.ts.map +0 -1
- package/dist/tempo/session/precompile/escrow.abi.js.map +0 -1
- package/dist/tempo/session/precompile/index.d.ts.map +0 -1
- package/dist/tempo/session/precompile/index.js.map +0 -1
- package/dist/tempo/session/server/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/session/server/ChannelOps.js.map +0 -1
- package/dist/tempo/session/server/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/server/ChannelStore.js.map +0 -1
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +0 -1
- package/dist/tempo/session/server/CredentialVerification.js.map +0 -1
- package/dist/tempo/session/server/MeteredStream.d.ts.map +0 -1
- package/dist/tempo/session/server/MeteredStream.js.map +0 -1
- package/dist/tempo/session/server/RequestState.d.ts.map +0 -1
- package/dist/tempo/session/server/RequestState.js.map +0 -1
- package/dist/tempo/session/server/Session.d.ts.map +0 -1
- package/dist/tempo/session/server/Session.js.map +0 -1
- package/dist/tempo/session/server/Settlement.d.ts.map +0 -1
- package/dist/tempo/session/server/Settlement.js.map +0 -1
- package/dist/tempo/session/server/Sse.d.ts.map +0 -1
- package/dist/tempo/session/server/Sse.js.map +0 -1
- package/dist/tempo/session/server/Transports.d.ts.map +0 -1
- package/dist/tempo/session/server/Transports.js.map +0 -1
- package/dist/tempo/session/server/Ws.d.ts.map +0 -1
- package/dist/tempo/session/server/Ws.js.map +0 -1
- package/dist/tempo/session/server/index.d.ts.map +0 -1
- package/dist/tempo/session/server/index.js.map +0 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +0 -1
- package/dist/tempo/subscription/KeyAuthorization.js.map +0 -1
- package/dist/tempo/subscription/Receipt.d.ts.map +0 -1
- package/dist/tempo/subscription/Receipt.js.map +0 -1
- package/dist/tempo/subscription/Store.d.ts.map +0 -1
- package/dist/tempo/subscription/Store.js.map +0 -1
- package/dist/tempo/subscription/Types.d.ts.map +0 -1
- package/dist/tempo/subscription/Types.js.map +0 -1
- package/dist/tempo/subscription/index.d.ts.map +0 -1
- package/dist/tempo/subscription/index.js.map +0 -1
- package/dist/validation/core.d.ts.map +0 -1
- package/dist/validation/core.js.map +0 -1
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js.map +0 -1
- package/dist/viem/Account.d.ts.map +0 -1
- package/dist/viem/Account.js.map +0 -1
- package/dist/viem/Client.d.ts.map +0 -1
- package/dist/viem/Client.js.map +0 -1
- package/dist/x402/Assets.d.ts.map +0 -1
- package/dist/x402/Assets.js.map +0 -1
- package/dist/x402/Header.d.ts.map +0 -1
- package/dist/x402/Header.js.map +0 -1
- package/dist/x402/Types.d.ts.map +0 -1
- package/dist/x402/Types.js.map +0 -1
- package/dist/x402/client/Exact.d.ts.map +0 -1
- package/dist/x402/client/Exact.js.map +0 -1
- package/dist/x402/index.d.ts.map +0 -1
- package/dist/x402/index.js.map +0 -1
- package/dist/x402/internal/ChallengeBrand.d.ts.map +0 -1
- package/dist/x402/internal/ChallengeBrand.js.map +0 -1
- package/dist/x402/internal/RouteBinding.d.ts.map +0 -1
- package/dist/x402/internal/RouteBinding.js.map +0 -1
- package/dist/x402/server/EvmCharge.d.ts.map +0 -1
- package/dist/x402/server/EvmCharge.js.map +0 -1
- package/dist/x402/server/Facilitator.d.ts.map +0 -1
- package/dist/x402/server/Facilitator.js.map +0 -1
- package/dist/zod.d.ts.map +0 -1
- package/dist/zod.js.map +0 -1
- package/src/BodyDigest.test.ts +0 -43
- package/src/BodyDigest.ts +0 -55
- package/src/Challenge.fuzz.test.ts +0 -121
- package/src/Challenge.test-d.ts +0 -82
- package/src/Challenge.test.ts +0 -995
- package/src/Challenge.ts +0 -683
- package/src/Constants.ts +0 -58
- package/src/Credential.fuzz.test.ts +0 -62
- package/src/Credential.test.ts +0 -378
- package/src/Credential.ts +0 -217
- package/src/Errors.test.ts +0 -520
- package/src/Errors.ts +0 -448
- package/src/Expires.test.ts +0 -112
- package/src/Expires.ts +0 -59
- package/src/Html.ts +0 -67
- package/src/Mcp.ts +0 -85
- package/src/Method.test.ts +0 -177
- package/src/Method.ts +0 -617
- package/src/PaymentRequest.test.ts +0 -147
- package/src/PaymentRequest.ts +0 -108
- package/src/Receipt.test.ts +0 -151
- package/src/Receipt.ts +0 -146
- package/src/Store.test-d.ts +0 -195
- package/src/Store.test.ts +0 -357
- package/src/Store.ts +0 -329
- package/src/bin.ts +0 -4
- package/src/cli/account.ts +0 -269
- package/src/cli/cli.test.ts +0 -2221
- package/src/cli/cli.ts +0 -1649
- package/src/cli/config.test.ts +0 -89
- package/src/cli/config.ts +0 -50
- package/src/cli/internal.ts +0 -114
- package/src/cli/mcp.test.ts +0 -262
- package/src/cli/plugins/evm.ts +0 -55
- package/src/cli/plugins/index.ts +0 -4
- package/src/cli/plugins/plugin.ts +0 -84
- package/src/cli/plugins/stripe.ts +0 -174
- package/src/cli/plugins/tempo.ts +0 -1102
- package/src/cli/sessions/Manager.test.ts +0 -249
- package/src/cli/sessions/Manager.ts +0 -93
- package/src/cli/sessions/commands.ts +0 -444
- package/src/cli/sessions/request.test.ts +0 -51
- package/src/cli/sessions/request.ts +0 -353
- package/src/cli/sessions/store.test.ts +0 -581
- package/src/cli/sessions/store.ts +0 -940
- package/src/cli/utils.test.ts +0 -156
- package/src/cli/utils.ts +0 -394
- package/src/cli/validate/challenge.ts +0 -565
- package/src/cli/validate/discovery.test.ts +0 -435
- package/src/cli/validate/discovery.ts +0 -221
- package/src/cli/validate/helpers.ts +0 -166
- package/src/cli/validate/index.ts +0 -229
- package/src/cli/validate/messages.ts +0 -7
- package/src/cli/validate/payment.ts +0 -774
- package/src/cli/validate.test.ts +0 -843
- package/src/client/Methods.ts +0 -8
- package/src/client/Mppx.test-d.ts +0 -270
- package/src/client/Mppx.test.ts +0 -1065
- package/src/client/Mppx.ts +0 -466
- package/src/client/Transport.test.ts +0 -619
- package/src/client/Transport.ts +0 -191
- package/src/client/index.ts +0 -29
- package/src/client/internal/Fetch.browser.test.ts +0 -197
- package/src/client/internal/Fetch.test-d.ts +0 -109
- package/src/client/internal/Fetch.test.ts +0 -2336
- package/src/client/internal/Fetch.ts +0 -1079
- package/src/client/internal/MethodChallenge.ts +0 -35
- package/src/client/internal/MethodResponse.ts +0 -67
- package/src/client/internal/protocols/Mcp.test.ts +0 -220
- package/src/client/internal/protocols/Mcp.ts +0 -186
- package/src/client/internal/protocols/Mpp.ts +0 -21
- package/src/client/internal/protocols/Protocol.ts +0 -10
- package/src/client/internal/protocols/Shared.ts +0 -25
- package/src/client/internal/protocols/X402.ts +0 -46
- package/src/client/node.test.ts +0 -115
- package/src/client/node.ts +0 -247
- package/src/discovery/Discovery.test.ts +0 -214
- package/src/discovery/Discovery.ts +0 -105
- package/src/discovery/OpenApi.test.ts +0 -453
- package/src/discovery/OpenApi.ts +0 -224
- package/src/discovery/Validate.test.ts +0 -305
- package/src/discovery/Validate.ts +0 -77
- package/src/discovery/index.ts +0 -3
- package/src/env.d.ts +0 -12
- package/src/evm/Assets.ts +0 -1
- package/src/evm/Chains.ts +0 -11
- package/src/evm/Methods.ts +0 -44
- package/src/evm/PublicInterface.test-d.ts +0 -134
- package/src/evm/Types.ts +0 -140
- package/src/evm/client/Charge.test.ts +0 -347
- package/src/evm/client/Charge.ts +0 -187
- package/src/evm/client/Methods.ts +0 -19
- package/src/evm/client/index.ts +0 -6
- package/src/evm/index.ts +0 -16
- package/src/evm/server/Charge.test.ts +0 -339
- package/src/evm/server/Charge.ts +0 -290
- package/src/evm/server/Methods.ts +0 -22
- package/src/evm/server/index.ts +0 -6
- package/src/index.ts +0 -14
- package/src/internal/AcceptPayment.test.ts +0 -343
- package/src/internal/AcceptPayment.ts +0 -366
- package/src/internal/HeaderCodec.ts +0 -36
- package/src/internal/changeset.test.ts +0 -106
- package/src/internal/constantTimeEqual.test.ts +0 -47
- package/src/internal/constantTimeEqual.ts +0 -10
- package/src/internal/env.test.ts +0 -42
- package/src/internal/env.ts +0 -49
- package/src/internal/types.test-d.ts +0 -21
- package/src/internal/types.ts +0 -470
- package/src/mcp/client/McpClient.integration.test.ts +0 -652
- package/src/mcp/client/McpClient.test-d.ts +0 -144
- package/src/mcp/client/McpClient.test.ts +0 -463
- package/src/mcp/client/McpClient.ts +0 -307
- package/src/mcp/client/McpClient.unit.test.ts +0 -135
- package/src/mcp/client/index.ts +0 -2
- package/src/mcp/server/Transport.test.ts +0 -191
- package/src/mcp/server/Transport.ts +0 -111
- package/src/mcp/server/index.ts +0 -1
- package/src/middlewares/elysia.test.ts +0 -295
- package/src/middlewares/elysia.ts +0 -116
- package/src/middlewares/express.test.ts +0 -371
- package/src/middlewares/express.ts +0 -140
- package/src/middlewares/hono.test.ts +0 -476
- package/src/middlewares/hono.ts +0 -153
- package/src/middlewares/internal/mppx.test.ts +0 -177
- package/src/middlewares/internal/mppx.ts +0 -67
- package/src/middlewares/nextjs.test.ts +0 -369
- package/src/middlewares/nextjs.ts +0 -107
- package/src/proxy/Proxy.test.ts +0 -1031
- package/src/proxy/Proxy.ts +0 -345
- package/src/proxy/Service.test.ts +0 -182
- package/src/proxy/Service.ts +0 -253
- package/src/proxy/index.ts +0 -6
- package/src/proxy/internal/Headers.test.ts +0 -139
- package/src/proxy/internal/Headers.ts +0 -66
- package/src/proxy/internal/Route.test.ts +0 -217
- package/src/proxy/internal/Route.ts +0 -64
- package/src/proxy/services/anthropic.test.ts +0 -132
- package/src/proxy/services/anthropic.ts +0 -52
- package/src/proxy/services/openai.test.ts +0 -157
- package/src/proxy/services/openai.ts +0 -59
- package/src/proxy/services/stripe.test.ts +0 -175
- package/src/proxy/services/stripe.ts +0 -58
- package/src/server/Methods.ts +0 -3
- package/src/server/Mppx.authorize.test.ts +0 -210
- package/src/server/Mppx.test-d.ts +0 -360
- package/src/server/Mppx.test.ts +0 -5813
- package/src/server/Mppx.ts +0 -2623
- package/src/server/NodeListener.test.ts +0 -293
- package/src/server/NodeListener.ts +0 -45
- package/src/server/Request.test.ts +0 -255
- package/src/server/Request.ts +0 -155
- package/src/server/Response.test.ts +0 -32
- package/src/server/Response.ts +0 -45
- package/src/server/Transport.test.ts +0 -598
- package/src/server/Transport.ts +0 -320
- package/src/server/index.ts +0 -9
- package/src/server/internal/html/compose.main.gen.ts +0 -2
- package/src/server/internal/html/compose.main.ts +0 -88
- package/src/server/internal/html/config.ts +0 -672
- package/src/server/internal/html/constants.ts +0 -28
- package/src/server/internal/html/serviceWorker.client.ts +0 -28
- package/src/server/internal/html/serviceWorker.gen.ts +0 -2
- package/src/server/internal/html/serviceWorker.ts +0 -27
- package/src/server/internal/html/tsconfig.compose.json +0 -8
- package/src/server/internal/html/tsconfig.worker.client.json +0 -8
- package/src/server/internal/html/tsconfig.worker.json +0 -8
- package/src/server/internal/scope.ts +0 -43
- package/src/stripe/Charge.integration.test.ts +0 -329
- package/src/stripe/Methods.test.ts +0 -62
- package/src/stripe/Methods.ts +0 -44
- package/src/stripe/client/Charge.test.ts +0 -205
- package/src/stripe/client/Charge.ts +0 -132
- package/src/stripe/client/Methods.ts +0 -37
- package/src/stripe/client/index.ts +0 -2
- package/src/stripe/index.ts +0 -1
- package/src/stripe/internal/constants.ts +0 -7
- package/src/stripe/internal/types.ts +0 -46
- package/src/stripe/server/Charge.test-d.ts +0 -66
- package/src/stripe/server/Charge.test.ts +0 -621
- package/src/stripe/server/Charge.ts +0 -434
- package/src/stripe/server/Methods.ts +0 -24
- package/src/stripe/server/index.ts +0 -2
- package/src/stripe/server/internal/html/main.ts +0 -165
- package/src/stripe/server/internal/html/node_modules/.bin/mppx +0 -22
- package/src/stripe/server/internal/html/node_modules/.bin/mppx.src +0 -22
- package/src/stripe/server/internal/html/package.json +0 -9
- package/src/stripe/server/internal/html/stripe-js-pure.d.ts +0 -7
- package/src/stripe/server/internal/html/tsconfig.json +0 -8
- package/src/stripe/server/internal/html/types.ts +0 -5
- package/src/stripe/server/internal/html.gen.ts +0 -2
- package/src/tempo/AccessKeyAuthorization.test.ts +0 -141
- package/src/tempo/Attribution.test.ts +0 -294
- package/src/tempo/Attribution.ts +0 -185
- package/src/tempo/Methods.test.ts +0 -425
- package/src/tempo/Methods.ts +0 -367
- package/src/tempo/Proof.conformance.test.ts +0 -146
- package/src/tempo/Proof.test-d.ts +0 -32
- package/src/tempo/Proof.test.ts +0 -40
- package/src/tempo/Proof.ts +0 -69
- package/src/tempo/PublicExports.test-d.ts +0 -130
- package/src/tempo/Subscription.integration.test.ts +0 -591
- package/src/tempo/client/Charge.test.ts +0 -501
- package/src/tempo/client/Charge.ts +0 -289
- package/src/tempo/client/Methods.ts +0 -45
- package/src/tempo/client/ResolveAccount.ts +0 -46
- package/src/tempo/client/Subscription.test.ts +0 -180
- package/src/tempo/client/Subscription.ts +0 -156
- package/src/tempo/client/index.ts +0 -17
- package/src/tempo/index.ts +0 -5
- package/src/tempo/internal/account.ts +0 -56
- package/src/tempo/internal/address.ts +0 -6
- package/src/tempo/internal/auto-swap.test.ts +0 -198
- package/src/tempo/internal/auto-swap.ts +0 -188
- package/src/tempo/internal/charge.test.ts +0 -66
- package/src/tempo/internal/charge.ts +0 -43
- package/src/tempo/internal/defaults.test.ts +0 -95
- package/src/tempo/internal/defaults.ts +0 -53
- package/src/tempo/internal/fee-payer.test.ts +0 -1177
- package/src/tempo/internal/fee-payer.ts +0 -808
- package/src/tempo/internal/fee-token.test.ts +0 -165
- package/src/tempo/internal/fee-token.ts +0 -72
- package/src/tempo/internal/proof.test.ts +0 -97
- package/src/tempo/internal/proof.ts +0 -87
- package/src/tempo/internal/selectors.ts +0 -10
- package/src/tempo/internal/types.ts +0 -19
- package/src/tempo/legacy/AccessKeyAuthorization.test.ts +0 -162
- package/src/tempo/legacy/README.md +0 -9
- package/src/tempo/legacy/client/ChannelOps.test.ts +0 -379
- package/src/tempo/legacy/client/ChannelOps.ts +0 -271
- package/src/tempo/legacy/client/Session.test.ts +0 -800
- package/src/tempo/legacy/client/Session.ts +0 -397
- package/src/tempo/legacy/client/SessionManager.test.ts +0 -468
- package/src/tempo/legacy/client/SessionManager.ts +0 -909
- package/src/tempo/legacy/client/index.ts +0 -6
- package/src/tempo/legacy/index.ts +0 -6
- package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
- package/src/tempo/legacy/server/Session.test.ts +0 -6370
- package/src/tempo/legacy/server/Session.ts +0 -1024
- package/src/tempo/legacy/server/index.ts +0 -4
- package/src/tempo/legacy/session/Chain.test.ts +0 -1349
- package/src/tempo/legacy/session/Chain.ts +0 -830
- package/src/tempo/legacy/session/Channel.test.ts +0 -109
- package/src/tempo/legacy/session/Channel.ts +0 -51
- package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
- package/src/tempo/legacy/session/ChannelStore.ts +0 -39
- package/src/tempo/legacy/session/Types.ts +0 -91
- package/src/tempo/legacy/session/Voucher.test.ts +0 -410
- package/src/tempo/legacy/session/Voucher.ts +0 -183
- package/src/tempo/legacy/session/escrow.abi.ts +0 -760
- package/src/tempo/legacy/session/index.ts +0 -8
- package/src/tempo/server/AtomicStore.test-d.ts +0 -50
- package/src/tempo/server/Charge.test.ts +0 -6121
- package/src/tempo/server/Charge.ts +0 -1351
- package/src/tempo/server/Methods.ts +0 -106
- package/src/tempo/server/Relay.test.ts +0 -677
- package/src/tempo/server/Relay.ts +0 -297
- package/src/tempo/server/SponsorBudget.test.ts +0 -154
- package/src/tempo/server/SponsorBudget.ts +0 -219
- package/src/tempo/server/Sse.test.ts +0 -321
- package/src/tempo/server/Subscription.test.ts +0 -1944
- package/src/tempo/server/Subscription.ts +0 -1333
- package/src/tempo/server/index.ts +0 -12
- package/src/tempo/server/internal/html/main.ts +0 -115
- package/src/tempo/server/internal/html/node_modules/.bin/mppx +0 -22
- package/src/tempo/server/internal/html/node_modules/.bin/mppx.src +0 -22
- package/src/tempo/server/internal/html/package.json +0 -10
- package/src/tempo/server/internal/html/tsconfig.json +0 -8
- package/src/tempo/server/internal/html.gen.ts +0 -2
- package/src/tempo/server/internal/request-body.test.ts +0 -210
- package/src/tempo/server/internal/request-body.ts +0 -61
- package/src/tempo/server/internal/transport.test.ts +0 -903
- package/src/tempo/server/internal/transport.ts +0 -310
- package/src/tempo/session/README.md +0 -208
- package/src/tempo/session/Snapshot.test.ts +0 -41
- package/src/tempo/session/Snapshot.ts +0 -95
- package/src/tempo/session/client/ChannelOps.test.ts +0 -218
- package/src/tempo/session/client/ChannelOps.ts +0 -348
- package/src/tempo/session/client/ChannelStore.ts +0 -111
- package/src/tempo/session/client/CredentialState.test.ts +0 -789
- package/src/tempo/session/client/CredentialState.ts +0 -942
- package/src/tempo/session/client/ReceiptCoordinator.ts +0 -95
- package/src/tempo/session/client/Runtime.test.ts +0 -1104
- package/src/tempo/session/client/Runtime.ts +0 -1008
- package/src/tempo/session/client/Session.test.ts +0 -1355
- package/src/tempo/session/client/Session.ts +0 -420
- package/src/tempo/session/client/SessionManager.test.ts +0 -1899
- package/src/tempo/session/client/SessionManager.ts +0 -996
- package/src/tempo/session/client/Transports.test.ts +0 -1141
- package/src/tempo/session/client/Transports.ts +0 -1534
- package/src/tempo/session/client/index.ts +0 -40
- package/src/tempo/session/client/internal/SessionManager.ts +0 -36
- package/src/tempo/session/index.ts +0 -7
- package/src/tempo/session/precompile/Chain.integration.test.ts +0 -339
- package/src/tempo/session/precompile/Chain.test.ts +0 -1641
- package/src/tempo/session/precompile/Chain.ts +0 -1149
- package/src/tempo/session/precompile/Channel.test.ts +0 -147
- package/src/tempo/session/precompile/Channel.ts +0 -108
- package/src/tempo/session/precompile/Protocol.test.ts +0 -358
- package/src/tempo/session/precompile/Protocol.ts +0 -520
- package/src/tempo/session/precompile/Voucher.test.ts +0 -354
- package/src/tempo/session/precompile/Voucher.ts +0 -162
- package/src/tempo/session/precompile/escrow.abi.ts +0 -226
- package/src/tempo/session/precompile/index.ts +0 -33
- package/src/tempo/session/server/ChannelOps.test.ts +0 -129
- package/src/tempo/session/server/ChannelOps.ts +0 -157
- package/src/tempo/session/server/ChannelStore.test.ts +0 -1093
- package/src/tempo/session/server/ChannelStore.ts +0 -835
- package/src/tempo/session/server/CredentialVerification.test.ts +0 -299
- package/src/tempo/session/server/CredentialVerification.ts +0 -775
- package/src/tempo/session/server/MeteredStream.ts +0 -95
- package/src/tempo/session/server/RequestState.test.ts +0 -574
- package/src/tempo/session/server/RequestState.ts +0 -507
- package/src/tempo/session/server/Session.integration.test.ts +0 -449
- package/src/tempo/session/server/Session.test.ts +0 -3862
- package/src/tempo/session/server/Session.ts +0 -570
- package/src/tempo/session/server/Settlement.test.ts +0 -345
- package/src/tempo/session/server/Settlement.ts +0 -527
- package/src/tempo/session/server/Sse.fuzz.test.ts +0 -138
- package/src/tempo/session/server/Sse.test.ts +0 -557
- package/src/tempo/session/server/Sse.ts +0 -254
- package/src/tempo/session/server/Transports.test.ts +0 -346
- package/src/tempo/session/server/Transports.ts +0 -255
- package/src/tempo/session/server/Ws.test.ts +0 -594
- package/src/tempo/session/server/Ws.ts +0 -385
- package/src/tempo/session/server/index.ts +0 -12
- package/src/tempo/subscription/KeyAuthorization.test.ts +0 -282
- package/src/tempo/subscription/KeyAuthorization.ts +0 -396
- package/src/tempo/subscription/Receipt.ts +0 -28
- package/src/tempo/subscription/Store.test.ts +0 -609
- package/src/tempo/subscription/Store.ts +0 -449
- package/src/tempo/subscription/Types.ts +0 -68
- package/src/tempo/subscription/index.ts +0 -23
- package/src/tsconfig.json +0 -10
- package/src/validation/core.ts +0 -386
- package/src/validation/index.ts +0 -11
- package/src/viem/Account.test.ts +0 -72
- package/src/viem/Account.ts +0 -30
- package/src/viem/Client.test.ts +0 -366
- package/src/viem/Client.ts +0 -93
- package/src/x402/Assets.test.ts +0 -253
- package/src/x402/Assets.ts +0 -221
- package/src/x402/Exact.e2e.test.ts +0 -448
- package/src/x402/Exact.localnet.test.ts +0 -475
- package/src/x402/Header.test.ts +0 -73
- package/src/x402/Header.ts +0 -79
- package/src/x402/PublicInterface.test-d.ts +0 -39
- package/src/x402/Types.ts +0 -248
- package/src/x402/client/Exact.test.ts +0 -309
- package/src/x402/client/Exact.ts +0 -186
- package/src/x402/index.ts +0 -6
- package/src/x402/internal/ChallengeBrand.ts +0 -14
- package/src/x402/internal/RouteBinding.ts +0 -18
- package/src/x402/server/EvmCharge.ts +0 -394
- package/src/x402/server/Facilitator.test.ts +0 -111
- package/src/x402/server/Facilitator.ts +0 -56
- package/src/zod.test.ts +0 -169
- package/src/zod.ts +0 -71
|
@@ -1,996 +0,0 @@
|
|
|
1
|
-
import type { Hex } from 'ox'
|
|
2
|
-
import { parseUnits, type Address } from 'viem'
|
|
3
|
-
import { tempo as tempo_chain } from 'viem/chains'
|
|
4
|
-
|
|
5
|
-
import * as Challenge from '../../../Challenge.js'
|
|
6
|
-
import * as Fetch from '../../../client/internal/Fetch.js'
|
|
7
|
-
import * as MethodChallenge from '../../../client/internal/MethodChallenge.js'
|
|
8
|
-
import * as MethodResponse from '../../../client/internal/MethodResponse.js'
|
|
9
|
-
import * as Constants from '../../../Constants.js'
|
|
10
|
-
import * as Account from '../../../viem/Account.js'
|
|
11
|
-
import * as Client from '../../../viem/Client.js'
|
|
12
|
-
import { charge as chargePlugin } from '../../client/Charge.js'
|
|
13
|
-
import * as defaults from '../../internal/defaults.js'
|
|
14
|
-
import type { ChannelEntry } from '../client/ChannelOps.js'
|
|
15
|
-
import { createChannelStore, entryKey, type ChannelStore } from '../client/ChannelStore.js'
|
|
16
|
-
import { hydrateSessionSnapshot, type SessionContext } from '../client/CredentialState.js'
|
|
17
|
-
import { session as sessionPlugin } from '../client/Session.js'
|
|
18
|
-
import * as Channel from '../precompile/Channel.js'
|
|
19
|
-
import { deserializeSessionReceipt } from '../precompile/Protocol.js'
|
|
20
|
-
import type { SessionReceipt } from '../precompile/Protocol.js'
|
|
21
|
-
import {
|
|
22
|
-
deserializeSnapshot as deserializeSessionSnapshot,
|
|
23
|
-
serializeSnapshot as serializeSessionSnapshot,
|
|
24
|
-
} from '../Snapshot.js'
|
|
25
|
-
import { registerSessionManagerInternals } from './internal/SessionManager.js'
|
|
26
|
-
import { createSessionReceiptCoordinator } from './ReceiptCoordinator.js'
|
|
27
|
-
import { resolveCloseTarget, type CloseTarget } from './Runtime.js'
|
|
28
|
-
import { assertVoucherWithinLocalLimit as assertVoucherWithinLocalAuthorization } from './Runtime.js'
|
|
29
|
-
import type { SessionState } from './Runtime.js'
|
|
30
|
-
import {
|
|
31
|
-
applySessionReceiptToRuntime,
|
|
32
|
-
captureRuntimeSnapshot as captureRuntimeStateSnapshot,
|
|
33
|
-
computeFallbackCloseAmount,
|
|
34
|
-
createSessionManagerRuntime,
|
|
35
|
-
dispatchSessionEvent,
|
|
36
|
-
restoreCumulativeAuthorization,
|
|
37
|
-
restoreRuntimeSnapshot as restoreRuntimeStateSnapshot,
|
|
38
|
-
resolveAutomaticTopUp,
|
|
39
|
-
type RuntimeSnapshot,
|
|
40
|
-
} from './Runtime.js'
|
|
41
|
-
import { closeSocketSession } from './Runtime.js'
|
|
42
|
-
import {
|
|
43
|
-
closeHttpSession,
|
|
44
|
-
getSessionSnapshot,
|
|
45
|
-
isTempoSessionChallenge,
|
|
46
|
-
postTopUp,
|
|
47
|
-
retryHttpPaymentRequired,
|
|
48
|
-
type TempoSessionChallenge,
|
|
49
|
-
webSocketProbeUrl,
|
|
50
|
-
} from './Transports.js'
|
|
51
|
-
import {
|
|
52
|
-
type SessionManagedWebSocket,
|
|
53
|
-
type WebSocketConstructor,
|
|
54
|
-
WebSocketReadyState,
|
|
55
|
-
} from './Transports.js'
|
|
56
|
-
import { consumeSseSessionResponse, openSseSession, type SseDriverOptions } from './Transports.js'
|
|
57
|
-
import { applyTopUpResult, resolveManualTopUp, type TopUpRequirement } from './Transports.js'
|
|
58
|
-
import {
|
|
59
|
-
openWebSocketSession,
|
|
60
|
-
prepareWebSocketSession,
|
|
61
|
-
probeWebSocketSession,
|
|
62
|
-
type WebSocketDriverOptions,
|
|
63
|
-
} from './Transports.js'
|
|
64
|
-
|
|
65
|
-
export { computeFallbackCloseAmount, type FallbackCloseAmountParameters } from './Runtime.js'
|
|
66
|
-
|
|
67
|
-
/** Auto-driving client manager for HTTP, SSE, and WebSocket TIP-1034 sessions. */
|
|
68
|
-
export type SessionManager = {
|
|
69
|
-
/** Active channel ID, when a channel has been opened or recovered. */
|
|
70
|
-
readonly channelId: Hex.Hex | undefined
|
|
71
|
-
/** Local cumulative voucher authorization in raw token units. */
|
|
72
|
-
readonly cumulative: bigint
|
|
73
|
-
/** Whether the manager currently has an open local channel. */
|
|
74
|
-
readonly opened: boolean
|
|
75
|
-
/** Current pure session state-machine state. */
|
|
76
|
-
readonly state: SessionState
|
|
77
|
-
|
|
78
|
-
/** Runs the HTTP 402 probe, signs/open/top-ups as needed, retries, and returns receipt metadata. */
|
|
79
|
-
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<PaymentResponse>
|
|
80
|
-
/** Opens a paid SSE stream and auto-posts vouchers/top-ups when the server requests more headroom. */
|
|
81
|
-
sse(input: RequestInfo | URL, init?: SessionManagerSseOptions): Promise<AsyncIterable<string>>
|
|
82
|
-
/** Opens a paid WebSocket session after an HTTP challenge probe and manages in-band voucher frames. */
|
|
83
|
-
ws(input: string | URL, init?: SessionManagerWebSocketOptions): Promise<SessionManagedWebSocket>
|
|
84
|
-
/** Tops up the active channel deposit. String amounts are parsed with the manager decimals; bigint amounts are raw units. */
|
|
85
|
-
topUp(amount: string | bigint): Promise<SessionReceipt | undefined>
|
|
86
|
-
/** Cooperatively closes the active channel using the latest locally authorized spend boundary. */
|
|
87
|
-
close(): Promise<SessionReceipt | undefined>
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Options for `SessionManager.sse()`. */
|
|
91
|
-
export type SessionManagerSseOptions = SseDriverOptions
|
|
92
|
-
|
|
93
|
-
/** Options for `SessionManager.ws()`. */
|
|
94
|
-
export type SessionManagerWebSocketOptions = WebSocketDriverOptions
|
|
95
|
-
|
|
96
|
-
/** HTTP response enriched with the latest session payment metadata. */
|
|
97
|
-
export type PaymentResponse = Response & {
|
|
98
|
-
/** Parsed payment receipt, when the response included one. */
|
|
99
|
-
receipt: SessionReceipt | null
|
|
100
|
-
/** Last session challenge observed by the manager. */
|
|
101
|
-
challenge: TempoSessionChallenge | null
|
|
102
|
-
/** Active channel ID, when available. */
|
|
103
|
-
channelId: Hex.Hex | null
|
|
104
|
-
/** Local cumulative voucher authorization in raw token units. */
|
|
105
|
-
cumulative: bigint
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** Normalized runtime dependencies derived from `sessionManager()` parameters. */
|
|
109
|
-
type SessionManagerConfig = {
|
|
110
|
-
/** Decimal precision used when parsing human-readable manager amounts. */
|
|
111
|
-
decimals: number
|
|
112
|
-
/** Fetch implementation used for probes, retries, and management posts. */
|
|
113
|
-
fetch: typeof globalThis.fetch
|
|
114
|
-
/** Local maximum cumulative voucher authorization, or null when uncapped. */
|
|
115
|
-
maxVoucherCumulative: bigint | null
|
|
116
|
-
/** Preferred top-up, or null to use a bounded server suggestion and then the exact shortfall. */
|
|
117
|
-
topUpAmount: bigint | null
|
|
118
|
-
/** WebSocket constructor available in the current runtime, when configured. */
|
|
119
|
-
WebSocket: WebSocketConstructor | undefined
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function isTempoChargeChallenge(challenge: Challenge.Challenge) {
|
|
123
|
-
return (
|
|
124
|
-
challenge.method === Constants.Methods.tempo && challenge.intent === Constants.Intents.charge
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function isZeroAmountChargeChallenge(challenge: Challenge.Challenge) {
|
|
129
|
-
if (!isTempoChargeChallenge(challenge)) return false
|
|
130
|
-
if (typeof challenge.request.amount !== 'string') return false
|
|
131
|
-
try {
|
|
132
|
-
return BigInt(challenge.request.amount) === 0n
|
|
133
|
-
} catch {
|
|
134
|
-
return false
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function requestInitWithSessionHint(
|
|
139
|
-
input: RequestInfo | URL,
|
|
140
|
-
init: RequestInit | undefined,
|
|
141
|
-
channelId: Hex.Hex | undefined,
|
|
142
|
-
): RequestInit | undefined {
|
|
143
|
-
if (!channelId) return init
|
|
144
|
-
const requestHeaders = input instanceof Request ? input.headers : undefined
|
|
145
|
-
const headers = {
|
|
146
|
-
...Fetch.normalizeHeaders(requestHeaders),
|
|
147
|
-
...Fetch.normalizeHeaders(init?.headers),
|
|
148
|
-
}
|
|
149
|
-
if (
|
|
150
|
-
Object.keys(headers).some(
|
|
151
|
-
(key) => key.toLowerCase() === Constants.Headers.paymentSession.toLowerCase(),
|
|
152
|
-
)
|
|
153
|
-
)
|
|
154
|
-
return init
|
|
155
|
-
return {
|
|
156
|
-
...init,
|
|
157
|
-
headers: {
|
|
158
|
-
...headers,
|
|
159
|
-
[Constants.Headers.paymentSession]: channelId,
|
|
160
|
-
},
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function resolveSessionManagerConfig(parameters: sessionManager.Parameters): SessionManagerConfig {
|
|
165
|
-
const decimals = parameters.decimals ?? 6
|
|
166
|
-
const WebSocket =
|
|
167
|
-
parameters.webSocket ??
|
|
168
|
-
(globalThis as typeof globalThis & { WebSocket?: WebSocketConstructor }).WebSocket
|
|
169
|
-
|
|
170
|
-
return {
|
|
171
|
-
decimals,
|
|
172
|
-
fetch: parameters.fetch ?? globalThis.fetch.bind(globalThis),
|
|
173
|
-
maxVoucherCumulative:
|
|
174
|
-
parameters.maxDeposit !== undefined ? parseUnits(parameters.maxDeposit, decimals) : null,
|
|
175
|
-
topUpAmount:
|
|
176
|
-
parameters.topUpAmount !== undefined ? parseUnits(parameters.topUpAmount, decimals) : null,
|
|
177
|
-
WebSocket,
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Creates a session manager that handles the full client payment lifecycle:
|
|
183
|
-
* channel open, incremental vouchers, SSE streaming, and channel close.
|
|
184
|
-
*
|
|
185
|
-
* Internally delegates to the `session()` method for all
|
|
186
|
-
* channel state management and credential creation, and to `Fetch.from`
|
|
187
|
-
* for the 402 challenge/retry flow.
|
|
188
|
-
*
|
|
189
|
-
* `channelStore` can persist reusable channels between manager instances.
|
|
190
|
-
*/
|
|
191
|
-
export function sessionManager(parameters: sessionManager.Parameters): SessionManager {
|
|
192
|
-
const config = resolveSessionManagerConfig(parameters)
|
|
193
|
-
const getClient = Client.getResolver({
|
|
194
|
-
chain: tempo_chain,
|
|
195
|
-
getClient: parameters.client ? () => parameters.client! : parameters.getClient,
|
|
196
|
-
rpcUrl: defaults.rpcUrl,
|
|
197
|
-
})
|
|
198
|
-
const getAccount = Account.getResolver({ account: parameters.account })
|
|
199
|
-
const runtime = createSessionManagerRuntime()
|
|
200
|
-
const receipts = createSessionReceiptCoordinator({
|
|
201
|
-
getSocketSession: () => runtime.socketSession,
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
const backing = parameters.channelStore ?? createChannelStore()
|
|
205
|
-
const ignoredChannelIds = new Set<Hex.Hex>()
|
|
206
|
-
|
|
207
|
-
// Tracks one fetch's channel reuse so stale stored entries can be evicted once.
|
|
208
|
-
type ChannelUse = {
|
|
209
|
-
challengesReceived: number
|
|
210
|
-
committed: RuntimeSnapshot | undefined
|
|
211
|
-
created: Map<string, ChannelEntry>
|
|
212
|
-
seenExisting: Set<string>
|
|
213
|
-
previous: RuntimeSnapshot
|
|
214
|
-
resumed: ChannelEntry | undefined
|
|
215
|
-
trackCreates: boolean
|
|
216
|
-
}
|
|
217
|
-
let channelUse: ChannelUse | undefined
|
|
218
|
-
|
|
219
|
-
/** Returns the backing entry for `key` only when it is open and not ignored. */
|
|
220
|
-
async function getReusable(key: string): Promise<ChannelEntry | undefined> {
|
|
221
|
-
const entry = await backing.get(key)
|
|
222
|
-
if (entry?.opened && !ignoredChannelIds.has(entry.channelId)) return entry
|
|
223
|
-
return undefined
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
const store: ChannelStore = {
|
|
227
|
-
async get(key) {
|
|
228
|
-
const entry = await getReusable(key)
|
|
229
|
-
if (entry && channelUse) {
|
|
230
|
-
channelUse.seenExisting.add(key)
|
|
231
|
-
if (!channelUse.committed && !channelUse.created.has(key)) channelUse.resumed ??= entry
|
|
232
|
-
}
|
|
233
|
-
return entry
|
|
234
|
-
},
|
|
235
|
-
async set(entry) {
|
|
236
|
-
const key = entryKey(entry)
|
|
237
|
-
if (entry.opened) ignoredChannelIds.delete(entry.channelId)
|
|
238
|
-
if (channelUse?.trackCreates && !channelUse.seenExisting.has(key))
|
|
239
|
-
channelUse.created.set(key, entry)
|
|
240
|
-
await backing.set(entry)
|
|
241
|
-
},
|
|
242
|
-
delete: (key) => backing.delete(key),
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/** Removes a failed channel from candidacy for the rest of this manager's life. */
|
|
246
|
-
async function ignoreChannel(entry: ChannelEntry) {
|
|
247
|
-
const key = entryKey(entry)
|
|
248
|
-
ignoredChannelIds.add(entry.channelId)
|
|
249
|
-
channelUse?.seenExisting.delete(key)
|
|
250
|
-
if (channelUse?.resumed === entry) channelUse.resumed = undefined
|
|
251
|
-
await Promise.resolve(backing.delete(key)).catch(() => undefined)
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
async function rollbackCreatedChannels() {
|
|
255
|
-
const use = channelUse
|
|
256
|
-
if (!use?.created.size) return
|
|
257
|
-
for (const [key, entry] of use.created) {
|
|
258
|
-
ignoredChannelIds.add(entry.channelId)
|
|
259
|
-
await Promise.resolve(backing.delete(key)).catch(() => undefined)
|
|
260
|
-
}
|
|
261
|
-
use.created.clear()
|
|
262
|
-
await restoreRuntime(use.committed ?? use.previous)
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/** Commits a newly created channel once an authoritative server snapshot references it. */
|
|
266
|
-
function commitReferencedChannel(challenge: Challenge.Challenge): boolean {
|
|
267
|
-
const snapshot = Constants.getMethodDetail<{ channelId?: unknown }>(
|
|
268
|
-
challenge.request.methodDetails,
|
|
269
|
-
Constants.MethodDetailKeys.sessionSnapshot,
|
|
270
|
-
)
|
|
271
|
-
if (typeof snapshot?.channelId !== 'string') return false
|
|
272
|
-
const use = channelUse
|
|
273
|
-
if (!use?.created.size || !runtime.channel) return false
|
|
274
|
-
for (const [key, entry] of use.created) {
|
|
275
|
-
if (
|
|
276
|
-
entry.channelId.toLowerCase() !== snapshot.channelId.toLowerCase() ||
|
|
277
|
-
runtime.channel.channelId.toLowerCase() !== snapshot.channelId.toLowerCase()
|
|
278
|
-
)
|
|
279
|
-
continue
|
|
280
|
-
use.created.delete(key)
|
|
281
|
-
use.committed = captureRuntimeStateSnapshot({
|
|
282
|
-
channel: runtime.channel,
|
|
283
|
-
spent: runtime.spent,
|
|
284
|
-
state: runtime.state,
|
|
285
|
-
})
|
|
286
|
-
return true
|
|
287
|
-
}
|
|
288
|
-
return false
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
function dispatch(event: Parameters<typeof dispatchSessionEvent>[1]) {
|
|
292
|
-
return dispatchSessionEvent(runtime, event)
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
function activeUnits() {
|
|
296
|
-
const state =
|
|
297
|
-
runtime.state.status === 'active'
|
|
298
|
-
? runtime.state
|
|
299
|
-
: (channelUse?.committed?.state ?? channelUse?.previous.state)
|
|
300
|
-
return state?.status === 'active' ? state.units : 0
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
function commitDurableTopUp(entry: ChannelEntry) {
|
|
304
|
-
const use = channelUse
|
|
305
|
-
const baseline = use?.committed?.channel?.entry ?? use?.resumed
|
|
306
|
-
if (
|
|
307
|
-
!use ||
|
|
308
|
-
baseline?.channelId.toLowerCase() !== entry.channelId.toLowerCase() ||
|
|
309
|
-
entry.deposit <= baseline.deposit
|
|
310
|
-
)
|
|
311
|
-
return
|
|
312
|
-
use.resumed = undefined
|
|
313
|
-
use.committed = captureRuntimeStateSnapshot({
|
|
314
|
-
channel: runtime.channel,
|
|
315
|
-
spent: runtime.spent,
|
|
316
|
-
state: runtime.state,
|
|
317
|
-
})
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
const method = sessionPlugin({
|
|
321
|
-
account: parameters.account,
|
|
322
|
-
autoSwap: parameters.autoSwap,
|
|
323
|
-
getClient: parameters.client ? () => parameters.client! : parameters.getClient,
|
|
324
|
-
resolveAccount: parameters.resolveAccount,
|
|
325
|
-
escrow: parameters.escrow,
|
|
326
|
-
decimals: config.decimals,
|
|
327
|
-
maxDeposit: parameters.maxDeposit,
|
|
328
|
-
topUpAmount: parameters.topUpAmount,
|
|
329
|
-
channelStore: store,
|
|
330
|
-
onChannelUpdate(entry) {
|
|
331
|
-
if (entry.channelId !== runtime.channel?.channelId) runtime.spent = 0n
|
|
332
|
-
runtime.channel = entry
|
|
333
|
-
if (runtime.lastChallenge) {
|
|
334
|
-
dispatch({
|
|
335
|
-
type: 'activated',
|
|
336
|
-
challengeId: runtime.lastChallenge.id,
|
|
337
|
-
entry,
|
|
338
|
-
spent: runtime.spent.toString(),
|
|
339
|
-
units: activeUnits(),
|
|
340
|
-
})
|
|
341
|
-
}
|
|
342
|
-
commitDurableTopUp(entry)
|
|
343
|
-
},
|
|
344
|
-
})
|
|
345
|
-
MethodResponse.unregister(method)
|
|
346
|
-
const chargeMethod = chargePlugin({
|
|
347
|
-
account: parameters.account,
|
|
348
|
-
getClient: parameters.client ? () => parameters.client! : parameters.getClient,
|
|
349
|
-
})
|
|
350
|
-
|
|
351
|
-
const wrappedFetch = Fetch.from({
|
|
352
|
-
fetch: config.fetch,
|
|
353
|
-
methods: [method],
|
|
354
|
-
onChallenge: async (challenge, _helpers) => {
|
|
355
|
-
if (!isTempoSessionChallenge(challenge)) return undefined
|
|
356
|
-
const use = channelUse
|
|
357
|
-
const isRepeatedRetryChallenge =
|
|
358
|
-
use && use.challengesReceived > 0 && challenge.id === runtime.lastChallenge?.id
|
|
359
|
-
const isSameRetryChallenge =
|
|
360
|
-
isRepeatedRetryChallenge &&
|
|
361
|
-
Challenge.serialize(challenge) === Challenge.serialize(runtime.lastChallenge!)
|
|
362
|
-
if (use) use.challengesReceived++
|
|
363
|
-
if (isSameRetryChallenge) return undefined
|
|
364
|
-
if (!commitReferencedChannel(challenge)) {
|
|
365
|
-
if (use?.created.size) await rollbackCreatedChannels()
|
|
366
|
-
else if (isRepeatedRetryChallenge) await restoreRuntime(use.committed ?? use.previous)
|
|
367
|
-
}
|
|
368
|
-
runtime.lastChallenge = challenge
|
|
369
|
-
dispatch({ type: 'challengeReceived', challengeId: challenge.id })
|
|
370
|
-
return undefined
|
|
371
|
-
},
|
|
372
|
-
})
|
|
373
|
-
|
|
374
|
-
function createSessionCredential(challenge: TempoSessionChallenge, context: SessionContext) {
|
|
375
|
-
return method.createCredential({ challenge, context })
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
function updateSpentFromReceipt(receipt: SessionReceipt | null | undefined) {
|
|
379
|
-
applySessionReceiptToRuntime({
|
|
380
|
-
maxVoucherCumulative: config.maxVoucherCumulative,
|
|
381
|
-
receipt,
|
|
382
|
-
runtime,
|
|
383
|
-
})
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
function activateCurrentChannel(
|
|
387
|
-
units = runtime.state.status === 'active' ? runtime.state.units : 0,
|
|
388
|
-
) {
|
|
389
|
-
if (!runtime.channel || !runtime.lastChallenge) return
|
|
390
|
-
if (
|
|
391
|
-
runtime.state.status === 'active' ||
|
|
392
|
-
runtime.state.status === 'withdrawable' ||
|
|
393
|
-
runtime.state.status === 'closeRequested'
|
|
394
|
-
)
|
|
395
|
-
return
|
|
396
|
-
dispatch({
|
|
397
|
-
type: 'activated',
|
|
398
|
-
challengeId: runtime.lastChallenge.id,
|
|
399
|
-
entry: runtime.channel,
|
|
400
|
-
spent: runtime.spent.toString(),
|
|
401
|
-
units,
|
|
402
|
-
})
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
/** Persists a server snapshot into the channel store and returns the entry. */
|
|
406
|
-
async function storeSnapshotHeader(response: Response): Promise<ChannelEntry | undefined> {
|
|
407
|
-
const header = response.headers.get(Constants.Headers.paymentSessionSnapshot)
|
|
408
|
-
if (!header) return undefined
|
|
409
|
-
const snapshot = deserializeSessionSnapshot(header)
|
|
410
|
-
const client = await getClient({ chainId: snapshot.chainId })
|
|
411
|
-
const defaultAccount = getAccount(client)
|
|
412
|
-
const account =
|
|
413
|
-
(await parameters.resolveAccount?.({
|
|
414
|
-
account: defaultAccount,
|
|
415
|
-
chainId: snapshot.chainId,
|
|
416
|
-
operation: {
|
|
417
|
-
authority: Channel.resolveAuthorizedSigner(snapshot.descriptor),
|
|
418
|
-
kind: 'authorizePaymentChannel',
|
|
419
|
-
},
|
|
420
|
-
})) ?? defaultAccount
|
|
421
|
-
const { entry, spent } = await hydrateSessionSnapshot({ account, client, snapshot })
|
|
422
|
-
assertVoucherWithinLocalLimit(entry.cumulativeAmount)
|
|
423
|
-
await Promise.resolve(store.set(entry)).catch(() => undefined)
|
|
424
|
-
runtime.channel = entry
|
|
425
|
-
runtime.spent = spent
|
|
426
|
-
return entry
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
async function bootstrapSession(
|
|
430
|
-
input: RequestInfo | URL,
|
|
431
|
-
init?: RequestInit | undefined,
|
|
432
|
-
): Promise<ChannelEntry | undefined> {
|
|
433
|
-
if (!parameters.bootstrap) return undefined
|
|
434
|
-
if (runtime.channel?.opened) return undefined
|
|
435
|
-
|
|
436
|
-
const requestHeaders = input instanceof Request ? input.headers : undefined
|
|
437
|
-
const { body: _body, method: _method, ...bootstrapInit } = init ?? {}
|
|
438
|
-
const bootstrapInput = input instanceof Request ? input.url : input
|
|
439
|
-
const headInit: RequestInit = {
|
|
440
|
-
...bootstrapInit,
|
|
441
|
-
method: 'HEAD',
|
|
442
|
-
headers: {
|
|
443
|
-
...Fetch.normalizeHeaders(requestHeaders),
|
|
444
|
-
...Fetch.normalizeHeaders(init?.headers),
|
|
445
|
-
[Constants.Headers.acceptPayment]: `${Constants.Methods.tempo}/${Constants.Intents.charge}`,
|
|
446
|
-
},
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
try {
|
|
450
|
-
const challengeResponse = await config.fetch(bootstrapInput, headInit)
|
|
451
|
-
if (challengeResponse.status !== 402) return await storeSnapshotHeader(challengeResponse)
|
|
452
|
-
const challenge = Challenge.fromResponseList(challengeResponse).find(isTempoChargeChallenge)
|
|
453
|
-
if (!challenge) return undefined
|
|
454
|
-
if (!isZeroAmountChargeChallenge(challenge)) return undefined
|
|
455
|
-
const credential = await chargeMethod.createCredential({
|
|
456
|
-
challenge: challenge as never,
|
|
457
|
-
context: {},
|
|
458
|
-
})
|
|
459
|
-
const response = await config.fetch(bootstrapInput, {
|
|
460
|
-
...headInit,
|
|
461
|
-
headers: {
|
|
462
|
-
...Fetch.normalizeHeaders(headInit.headers),
|
|
463
|
-
[Constants.Headers.authorization]: credential,
|
|
464
|
-
},
|
|
465
|
-
})
|
|
466
|
-
if (response.ok) return await storeSnapshotHeader(response)
|
|
467
|
-
return undefined
|
|
468
|
-
} catch {
|
|
469
|
-
return undefined
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
function getFallbackCloseAmount(challenge: TempoSessionChallenge, channelId: Hex.Hex): bigint {
|
|
474
|
-
const currentSocket = runtime.socketSession
|
|
475
|
-
return computeFallbackCloseAmount({
|
|
476
|
-
challengeId: challenge.id,
|
|
477
|
-
channelId,
|
|
478
|
-
closeReadyReceipt: currentSocket?.closeReadyReceipt,
|
|
479
|
-
cumulativeAmount:
|
|
480
|
-
runtime.channel?.channelId === channelId ? runtime.channel.cumulativeAmount : 0n,
|
|
481
|
-
deliveredChunks: currentSocket?.deliveredChunks,
|
|
482
|
-
socketChallengeId: currentSocket?.challenge.id,
|
|
483
|
-
socketChannelId: currentSocket?.channelId,
|
|
484
|
-
spent: runtime.spent,
|
|
485
|
-
tickCost: currentSocket?.tickCost,
|
|
486
|
-
})
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
function validateCloseSnapshot(channel: ChannelEntry, challenge: TempoSessionChallenge) {
|
|
490
|
-
const snapshot = getSessionSnapshot(challenge)
|
|
491
|
-
if (!snapshot) return undefined
|
|
492
|
-
|
|
493
|
-
const computedSnapshotId = Channel.computeId({
|
|
494
|
-
...snapshot.descriptor,
|
|
495
|
-
chainId: snapshot.chainId,
|
|
496
|
-
escrow: snapshot.escrow,
|
|
497
|
-
})
|
|
498
|
-
if (computedSnapshotId.toLowerCase() !== snapshot.channelId.toLowerCase()) {
|
|
499
|
-
throw new Error('close snapshot descriptor does not match its channel ID')
|
|
500
|
-
}
|
|
501
|
-
if (snapshot.channelId.toLowerCase() !== channel.channelId.toLowerCase()) {
|
|
502
|
-
throw new Error('close snapshot channel ID does not match local session')
|
|
503
|
-
}
|
|
504
|
-
if (
|
|
505
|
-
snapshot.chainId !== channel.chainId ||
|
|
506
|
-
snapshot.escrow.toLowerCase() !== channel.escrow.toLowerCase()
|
|
507
|
-
) {
|
|
508
|
-
throw new Error('close snapshot payment scope does not match local session')
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
const acceptedCumulative = BigInt(snapshot.acceptedCumulative)
|
|
512
|
-
const snapshotSpent = BigInt(snapshot.spent)
|
|
513
|
-
if (acceptedCumulative < 0n || snapshotSpent < 0n) {
|
|
514
|
-
throw new Error('close snapshot amounts must not be negative')
|
|
515
|
-
}
|
|
516
|
-
if (snapshotSpent > acceptedCumulative) {
|
|
517
|
-
throw new Error('close snapshot spent exceeds accepted cumulative amount')
|
|
518
|
-
}
|
|
519
|
-
if (acceptedCumulative > channel.cumulativeAmount) {
|
|
520
|
-
throw new Error('close snapshot accepted cumulative exceeds local voucher state')
|
|
521
|
-
}
|
|
522
|
-
return { acceptedCumulative, spent: snapshotSpent }
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
function applyCloseSnapshot(target: CloseTarget, challenge: TempoSessionChallenge) {
|
|
526
|
-
const snapshot = validateCloseSnapshot(target.channel, challenge)
|
|
527
|
-
if (!snapshot) return
|
|
528
|
-
|
|
529
|
-
const { acceptedCumulative, spent } = snapshot
|
|
530
|
-
if (runtime.spent > acceptedCumulative) {
|
|
531
|
-
throw new Error('close snapshot accepted cumulative is below locally confirmed spend')
|
|
532
|
-
}
|
|
533
|
-
if (spent > runtime.spent) runtime.spent = spent
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
function getValidatedFallbackCloseAmount(
|
|
537
|
-
target: CloseTarget,
|
|
538
|
-
challenge: TempoSessionChallenge = target.challenge,
|
|
539
|
-
applySnapshot = false,
|
|
540
|
-
) {
|
|
541
|
-
if (applySnapshot) applyCloseSnapshot(target, challenge)
|
|
542
|
-
const closeAmount = getFallbackCloseAmount(challenge, target.channelId)
|
|
543
|
-
if (closeAmount > target.channel.cumulativeAmount) {
|
|
544
|
-
throw new Error('fallback close amount exceeds local voucher state')
|
|
545
|
-
}
|
|
546
|
-
assertVoucherWithinLocalLimit(closeAmount)
|
|
547
|
-
return closeAmount.toString()
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
function assertVoucherWithinLocalLimit(cumulativeAmount: bigint) {
|
|
551
|
-
assertVoucherWithinLocalAuthorization({
|
|
552
|
-
cumulativeAmount,
|
|
553
|
-
maxVoucherCumulative: config.maxVoucherCumulative,
|
|
554
|
-
})
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
async function postTopUpAndApply(parameters: {
|
|
558
|
-
additionalDeposit: bigint
|
|
559
|
-
challenge: TempoSessionChallenge
|
|
560
|
-
channelId: Hex.Hex
|
|
561
|
-
input: RequestInfo | URL
|
|
562
|
-
knownDeposit?: bigint | undefined
|
|
563
|
-
}) {
|
|
564
|
-
const { knownDeposit, ...topUp } = parameters
|
|
565
|
-
const receipt = await postTopUp({
|
|
566
|
-
...topUp,
|
|
567
|
-
channel: runtime.channel,
|
|
568
|
-
createSessionCredential,
|
|
569
|
-
fetch: config.fetch,
|
|
570
|
-
})
|
|
571
|
-
updateSpentFromReceipt(receipt)
|
|
572
|
-
const applied = applyTopUpResult({
|
|
573
|
-
additionalDeposit: parameters.additionalDeposit,
|
|
574
|
-
channel: runtime.channel,
|
|
575
|
-
channelId: parameters.channelId,
|
|
576
|
-
challengeId: runtime.lastChallenge?.id,
|
|
577
|
-
currentState: runtime.state,
|
|
578
|
-
knownDeposit,
|
|
579
|
-
receipt,
|
|
580
|
-
spent: runtime.spent,
|
|
581
|
-
})
|
|
582
|
-
if (applied?.channel && runtime.lastChallenge) {
|
|
583
|
-
await store.set(applied.channel)
|
|
584
|
-
dispatch({
|
|
585
|
-
type: 'activated',
|
|
586
|
-
challengeId: runtime.lastChallenge.id,
|
|
587
|
-
entry: applied.channel,
|
|
588
|
-
spent: runtime.spent.toString(),
|
|
589
|
-
units: activeUnits(),
|
|
590
|
-
})
|
|
591
|
-
commitDurableTopUp(applied.channel)
|
|
592
|
-
}
|
|
593
|
-
return receipt
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
async function topUpIfNeeded(parameters: TopUpRequirement) {
|
|
597
|
-
const channelDeposit =
|
|
598
|
-
runtime.channel?.channelId === parameters.channelId ? runtime.channel.deposit : 0n
|
|
599
|
-
const deposit = channelDeposit > parameters.deposit ? channelDeposit : parameters.deposit
|
|
600
|
-
const additionalDeposit = resolveAutomaticTopUp({
|
|
601
|
-
deposit,
|
|
602
|
-
maxDeposit: config.maxVoucherCumulative,
|
|
603
|
-
requiredCumulative: parameters.requiredCumulative,
|
|
604
|
-
suggestedDeposit:
|
|
605
|
-
parameters.challenge.request.suggestedDeposit === undefined
|
|
606
|
-
? undefined
|
|
607
|
-
: BigInt(parameters.challenge.request.suggestedDeposit),
|
|
608
|
-
topUpAmount: config.topUpAmount,
|
|
609
|
-
})
|
|
610
|
-
if (additionalDeposit === 0n) return
|
|
611
|
-
await postTopUpAndApply({
|
|
612
|
-
challenge: parameters.challenge,
|
|
613
|
-
input: parameters.input,
|
|
614
|
-
channelId: parameters.channelId,
|
|
615
|
-
additionalDeposit,
|
|
616
|
-
knownDeposit: deposit,
|
|
617
|
-
})
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
async function restoreCumulative(channelId: Hex.Hex, cumulativeAmount: bigint) {
|
|
621
|
-
const restored = restoreCumulativeAuthorization({
|
|
622
|
-
channel: runtime.channel,
|
|
623
|
-
channelId,
|
|
624
|
-
challengeId: runtime.lastChallenge?.id,
|
|
625
|
-
cumulativeAmount,
|
|
626
|
-
spent: runtime.spent,
|
|
627
|
-
state: runtime.state,
|
|
628
|
-
})
|
|
629
|
-
if (restored && runtime.channel) {
|
|
630
|
-
dispatch({
|
|
631
|
-
type: 'activated',
|
|
632
|
-
challengeId: restored.challengeId,
|
|
633
|
-
entry: runtime.channel,
|
|
634
|
-
spent: restored.spent,
|
|
635
|
-
units: restored.units,
|
|
636
|
-
})
|
|
637
|
-
await backing.set(runtime.channel)
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
async function restoreRuntime(snapshot: RuntimeSnapshot) {
|
|
642
|
-
const restored = restoreRuntimeStateSnapshot(snapshot, runtime.channel)
|
|
643
|
-
runtime.channel = restored.channel
|
|
644
|
-
runtime.spent = restored.spent
|
|
645
|
-
runtime.state = restored.state
|
|
646
|
-
if (runtime.channel?.opened) await backing.set(runtime.channel)
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
function toPaymentResponse(response: Response): PaymentResponse {
|
|
650
|
-
const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
|
|
651
|
-
const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : null
|
|
652
|
-
updateSpentFromReceipt(receipt)
|
|
653
|
-
return Object.assign(response, {
|
|
654
|
-
receipt,
|
|
655
|
-
challenge: runtime.lastChallenge,
|
|
656
|
-
channelId: runtime.channel?.channelId ?? null,
|
|
657
|
-
cumulative: runtime.channel?.cumulativeAmount ?? 0n,
|
|
658
|
-
})
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
async function doFetch(input: RequestInfo | URL, init?: RequestInit): Promise<PaymentResponse> {
|
|
662
|
-
// The manager drives one shared `runtime` state machine, so requests are
|
|
663
|
-
// single-flight. Reject overlap loudly instead of letting concurrent calls
|
|
664
|
-
// corrupt each other's runtime and channel tracking.
|
|
665
|
-
if (channelUse)
|
|
666
|
-
throw new Error(
|
|
667
|
-
'SessionManager: a request is already in flight; concurrent requests on one manager are not supported',
|
|
668
|
-
)
|
|
669
|
-
runtime.lastUrl = input
|
|
670
|
-
|
|
671
|
-
const previous = captureRuntimeStateSnapshot({
|
|
672
|
-
channel: runtime.channel,
|
|
673
|
-
spent: runtime.spent,
|
|
674
|
-
state: runtime.state,
|
|
675
|
-
})
|
|
676
|
-
const use: ChannelUse = {
|
|
677
|
-
challengesReceived: 0,
|
|
678
|
-
committed: undefined,
|
|
679
|
-
created: new Map(),
|
|
680
|
-
previous,
|
|
681
|
-
seenExisting: new Set(),
|
|
682
|
-
resumed: undefined,
|
|
683
|
-
trackCreates: false,
|
|
684
|
-
}
|
|
685
|
-
channelUse = use
|
|
686
|
-
|
|
687
|
-
// Cold starts resume from `channelStore` after the 402 reveals the scope.
|
|
688
|
-
const liveHint = runtime.channel?.opened ? runtime.channel.channelId : undefined
|
|
689
|
-
|
|
690
|
-
try {
|
|
691
|
-
await bootstrapSession(input, init)
|
|
692
|
-
use.trackCreates = true
|
|
693
|
-
|
|
694
|
-
let effectiveInit = requestInitWithSessionHint(input, init, liveHint)
|
|
695
|
-
// Stored channels may be stale, so retry once after evicting the resumed entry.
|
|
696
|
-
let canRetryResumed = !previous.channel?.opened
|
|
697
|
-
|
|
698
|
-
async function retryWithoutResumed(): Promise<boolean> {
|
|
699
|
-
const resumed = use.resumed
|
|
700
|
-
if (!canRetryResumed || !resumed) return false
|
|
701
|
-
canRetryResumed = false
|
|
702
|
-
await ignoreChannel(resumed)
|
|
703
|
-
effectiveInit = requestInitWithSessionHint(input, init, undefined)
|
|
704
|
-
return true
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
for (;;) {
|
|
708
|
-
let response: Response
|
|
709
|
-
try {
|
|
710
|
-
response = await wrappedFetch(input, effectiveInit)
|
|
711
|
-
} catch (error) {
|
|
712
|
-
if (use.created.size) await rollbackCreatedChannels()
|
|
713
|
-
else await restoreRuntime(use.committed ?? previous)
|
|
714
|
-
if (await retryWithoutResumed()) continue
|
|
715
|
-
throw error
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
let paymentResponse = toPaymentResponse(response)
|
|
719
|
-
let attemptedHttpManagement = false
|
|
720
|
-
if (paymentResponse.status === 402) {
|
|
721
|
-
const retry = await retryHttpPaymentRequired({
|
|
722
|
-
input,
|
|
723
|
-
init: effectiveInit,
|
|
724
|
-
response: paymentResponse,
|
|
725
|
-
createSessionCredential,
|
|
726
|
-
fetch: config.fetch,
|
|
727
|
-
getChannel: () => runtime.channel,
|
|
728
|
-
restoreCumulative,
|
|
729
|
-
setChallenge(challenge) {
|
|
730
|
-
runtime.lastChallenge = challenge
|
|
731
|
-
},
|
|
732
|
-
topUpIfNeeded,
|
|
733
|
-
})
|
|
734
|
-
if (retry) {
|
|
735
|
-
attemptedHttpManagement = true
|
|
736
|
-
paymentResponse = toPaymentResponse(retry)
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
if (!attemptedHttpManagement && !paymentResponse.ok && !paymentResponse.receipt) {
|
|
740
|
-
if (use.created.size) await rollbackCreatedChannels()
|
|
741
|
-
else await restoreRuntime(use.committed ?? previous)
|
|
742
|
-
if (await retryWithoutResumed()) continue
|
|
743
|
-
return paymentResponse
|
|
744
|
-
}
|
|
745
|
-
return paymentResponse
|
|
746
|
-
}
|
|
747
|
-
} finally {
|
|
748
|
-
channelUse = undefined
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
async function closeHttpSessionAndApply(
|
|
753
|
-
target: CloseTarget,
|
|
754
|
-
): Promise<SessionReceipt | undefined> {
|
|
755
|
-
const receipt = await closeHttpSession({
|
|
756
|
-
createSessionCredential,
|
|
757
|
-
fetch: config.fetch,
|
|
758
|
-
lastUrl: runtime.lastUrl,
|
|
759
|
-
resolveSignedCloseAmount: (challenge) =>
|
|
760
|
-
getValidatedFallbackCloseAmount(target, challenge, true),
|
|
761
|
-
signedCloseAmount: getValidatedFallbackCloseAmount(target),
|
|
762
|
-
setChallenge(challenge) {
|
|
763
|
-
runtime.lastChallenge = challenge
|
|
764
|
-
},
|
|
765
|
-
target,
|
|
766
|
-
})
|
|
767
|
-
if (receipt) {
|
|
768
|
-
activateCurrentChannel()
|
|
769
|
-
dispatch({ type: 'closeStarted' })
|
|
770
|
-
dispatch({ type: 'closed', receipt })
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
return receipt
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
const sseDriver = {
|
|
777
|
-
createSessionCredential,
|
|
778
|
-
doFetch,
|
|
779
|
-
fetch: config.fetch,
|
|
780
|
-
getChannel: () => runtime.channel,
|
|
781
|
-
getChallenge: () => runtime.lastChallenge,
|
|
782
|
-
assertVoucherWithinLocalLimit,
|
|
783
|
-
acceptReceipt(receipt: SessionReceipt) {
|
|
784
|
-
updateSpentFromReceipt(receipt)
|
|
785
|
-
},
|
|
786
|
-
topUpIfNeeded,
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
const self: SessionManager = {
|
|
790
|
-
get channelId() {
|
|
791
|
-
return runtime.channel?.channelId
|
|
792
|
-
},
|
|
793
|
-
get cumulative() {
|
|
794
|
-
return runtime.channel?.cumulativeAmount ?? 0n
|
|
795
|
-
},
|
|
796
|
-
get opened() {
|
|
797
|
-
return runtime.channel?.opened ?? false
|
|
798
|
-
},
|
|
799
|
-
get state() {
|
|
800
|
-
return runtime.state
|
|
801
|
-
},
|
|
802
|
-
|
|
803
|
-
fetch: doFetch,
|
|
804
|
-
|
|
805
|
-
async topUp(amount) {
|
|
806
|
-
const target = resolveManualTopUp({
|
|
807
|
-
amount,
|
|
808
|
-
assertVoucherWithinLocalLimit,
|
|
809
|
-
channel: runtime.channel,
|
|
810
|
-
decimals: config.decimals,
|
|
811
|
-
lastChallenge: runtime.lastChallenge,
|
|
812
|
-
lastUrl: runtime.lastUrl,
|
|
813
|
-
})
|
|
814
|
-
|
|
815
|
-
return postTopUpAndApply({
|
|
816
|
-
additionalDeposit: target.additionalDeposit,
|
|
817
|
-
challenge: target.challenge,
|
|
818
|
-
channelId: target.channelId,
|
|
819
|
-
input: target.input,
|
|
820
|
-
})
|
|
821
|
-
},
|
|
822
|
-
|
|
823
|
-
async sse(input, init) {
|
|
824
|
-
return openSseSession(input, init, sseDriver)
|
|
825
|
-
},
|
|
826
|
-
|
|
827
|
-
async ws(input, init) {
|
|
828
|
-
if (!config.WebSocket) {
|
|
829
|
-
throw new Error(
|
|
830
|
-
'No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.',
|
|
831
|
-
)
|
|
832
|
-
}
|
|
833
|
-
const probeUrl = webSocketProbeUrl(input)
|
|
834
|
-
const signalInit = init?.signal ? { signal: init.signal } : undefined
|
|
835
|
-
await bootstrapSession(probeUrl, signalInit)
|
|
836
|
-
// Cold starts resume from `channelStore` after the probe's 402.
|
|
837
|
-
const liveHint = runtime.channel?.opened ? runtime.channel.channelId : undefined
|
|
838
|
-
|
|
839
|
-
const prepared = await prepareWebSocketSession({
|
|
840
|
-
async createSessionCredential(challenge, context) {
|
|
841
|
-
runtime.lastChallenge = challenge
|
|
842
|
-
await MethodChallenge.handle(method, {
|
|
843
|
-
challenge,
|
|
844
|
-
context,
|
|
845
|
-
fetch: config.fetch,
|
|
846
|
-
input: probeUrl,
|
|
847
|
-
})
|
|
848
|
-
return createSessionCredential(challenge, context)
|
|
849
|
-
},
|
|
850
|
-
fetch: config.fetch,
|
|
851
|
-
input,
|
|
852
|
-
onProbeUrl(httpUrl) {
|
|
853
|
-
runtime.lastUrl = httpUrl.toString()
|
|
854
|
-
},
|
|
855
|
-
probeInit: requestInitWithSessionHint(probeUrl, signalInit, liveHint),
|
|
856
|
-
signal: init?.signal,
|
|
857
|
-
})
|
|
858
|
-
const { challenge, credential, httpUrl, wsUrl } = prepared
|
|
859
|
-
runtime.lastChallenge = challenge
|
|
860
|
-
|
|
861
|
-
return openWebSocketSession({
|
|
862
|
-
challenge,
|
|
863
|
-
credential,
|
|
864
|
-
httpUrl,
|
|
865
|
-
WebSocket: config.WebSocket,
|
|
866
|
-
wsUrl,
|
|
867
|
-
options: init,
|
|
868
|
-
createSessionCredential,
|
|
869
|
-
getChannel: () => runtime.channel,
|
|
870
|
-
setSocketSession(session) {
|
|
871
|
-
runtime.socketSession = session
|
|
872
|
-
},
|
|
873
|
-
async refreshChallenge() {
|
|
874
|
-
const refreshed = await probeWebSocketSession({
|
|
875
|
-
fetch: config.fetch,
|
|
876
|
-
input: httpUrl,
|
|
877
|
-
probeInit: requestInitWithSessionHint(
|
|
878
|
-
httpUrl,
|
|
879
|
-
signalInit,
|
|
880
|
-
runtime.channel?.opened ? runtime.channel.channelId : undefined,
|
|
881
|
-
),
|
|
882
|
-
signal: init?.signal,
|
|
883
|
-
})
|
|
884
|
-
runtime.lastChallenge = refreshed.challenge
|
|
885
|
-
return refreshed.challenge
|
|
886
|
-
},
|
|
887
|
-
assertVoucherWithinLocalLimit,
|
|
888
|
-
acceptReceipt: updateSpentFromReceipt,
|
|
889
|
-
rejectCloseReady: receipts.rejectCloseReady,
|
|
890
|
-
rejectReceipt: receipts.rejectReceipt,
|
|
891
|
-
settleCloseReady: receipts.settleCloseReady,
|
|
892
|
-
settleReceipt: receipts.settleReceipt,
|
|
893
|
-
topUpIfNeeded,
|
|
894
|
-
waitForReceipt: receipts.waitForReceipt,
|
|
895
|
-
})
|
|
896
|
-
},
|
|
897
|
-
|
|
898
|
-
async close() {
|
|
899
|
-
const currentSocket = runtime.socketSession
|
|
900
|
-
const target = resolveCloseTarget({
|
|
901
|
-
channel: runtime.channel,
|
|
902
|
-
currentSocket,
|
|
903
|
-
lastChallenge: runtime.lastChallenge,
|
|
904
|
-
})
|
|
905
|
-
if (!target) return undefined
|
|
906
|
-
|
|
907
|
-
const activeSocket = currentSocket?.socket
|
|
908
|
-
if (currentSocket && activeSocket?.readyState === WebSocketReadyState.OPEN) {
|
|
909
|
-
const receipt = await closeSocketSession({
|
|
910
|
-
activeSocket,
|
|
911
|
-
createSessionCredential,
|
|
912
|
-
currentSocket,
|
|
913
|
-
spent: runtime.spent,
|
|
914
|
-
target,
|
|
915
|
-
waitForCloseReady: receipts.waitForCloseReady,
|
|
916
|
-
waitForReceipt: receipts.waitForReceipt,
|
|
917
|
-
})
|
|
918
|
-
activateCurrentChannel()
|
|
919
|
-
dispatch({ type: 'closeStarted' })
|
|
920
|
-
dispatch({ type: 'closed', receipt })
|
|
921
|
-
return receipt
|
|
922
|
-
}
|
|
923
|
-
|
|
924
|
-
return closeHttpSessionAndApply(target)
|
|
925
|
-
},
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
registerSessionManagerInternals(self, {
|
|
929
|
-
consumeSseResponse(input, response, options) {
|
|
930
|
-
return consumeSseSessionResponse(input, response, options, sseDriver)
|
|
931
|
-
},
|
|
932
|
-
rehydrate({ channel, challenge, input, spent }) {
|
|
933
|
-
if (!channel.opened) throw new Error('Cannot restore a closed session channel.')
|
|
934
|
-
if (!isTempoSessionChallenge(challenge)) {
|
|
935
|
-
throw new Error('Cannot restore session: challenge is not tempo/session.')
|
|
936
|
-
}
|
|
937
|
-
if (spent < 0n) throw new Error('Cannot restore session: spent must not be negative.')
|
|
938
|
-
if (spent > channel.cumulativeAmount) {
|
|
939
|
-
throw new Error('Cannot restore session: spent exceeds local voucher state.')
|
|
940
|
-
}
|
|
941
|
-
assertVoucherWithinLocalLimit(channel.cumulativeAmount)
|
|
942
|
-
const snapshot = validateCloseSnapshot(channel, challenge)
|
|
943
|
-
const restoredSpent = snapshot && snapshot.spent > spent ? snapshot.spent : spent
|
|
944
|
-
|
|
945
|
-
runtime.lastUrl = input
|
|
946
|
-
runtime.lastChallenge = challenge
|
|
947
|
-
runtime.channel = channel
|
|
948
|
-
runtime.spent = restoredSpent
|
|
949
|
-
dispatch({ type: 'challengeReceived', challengeId: challenge.id })
|
|
950
|
-
dispatch({
|
|
951
|
-
type: 'activated',
|
|
952
|
-
challengeId: challenge.id,
|
|
953
|
-
entry: channel,
|
|
954
|
-
spent: restoredSpent.toString(),
|
|
955
|
-
units: 0,
|
|
956
|
-
})
|
|
957
|
-
},
|
|
958
|
-
})
|
|
959
|
-
|
|
960
|
-
return self
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
/** Type helpers for `sessionManager()`. */
|
|
964
|
-
export namespace sessionManager {
|
|
965
|
-
export const serializeSnapshot = serializeSessionSnapshot
|
|
966
|
-
export const deserializeSnapshot = deserializeSessionSnapshot
|
|
967
|
-
|
|
968
|
-
export type Parameters = Account.getResolver.Parameters &
|
|
969
|
-
Client.getResolver.Parameters & {
|
|
970
|
-
/** Automatically acquire the session currency from fallback stablecoins before open/top-up. */
|
|
971
|
-
autoSwap?: sessionPlugin.Parameters['autoSwap']
|
|
972
|
-
/** Enables same-route HEAD bootstrap from a server session snapshot before opening a new channel. */
|
|
973
|
-
bootstrap?: boolean | undefined
|
|
974
|
-
/** Viem client instance. Shorthand for `getClient: () => client`. */
|
|
975
|
-
client?: import('viem').Client | undefined
|
|
976
|
-
/** Token decimals used to convert `maxDeposit` to raw units. Defaults to `6`. */
|
|
977
|
-
decimals?: number | undefined
|
|
978
|
-
/** TIP20EscrowChannel precompile address override. */
|
|
979
|
-
escrow?: Address | undefined
|
|
980
|
-
/** Fetch implementation used for HTTP probes, management posts, and paid retries. */
|
|
981
|
-
fetch?: typeof globalThis.fetch | undefined
|
|
982
|
-
/** Maximum deposit in human-readable units (e.g. `'10'` for 10 tokens). Converted to raw units via `decimals`. */
|
|
983
|
-
maxDeposit?: string | undefined
|
|
984
|
-
/**
|
|
985
|
-
* Preferred automatic top-up size in human-readable units. When omitted,
|
|
986
|
-
* a bounded server `suggestedDeposit` is preferred, then the exact shortfall.
|
|
987
|
-
*/
|
|
988
|
-
topUpAmount?: string | undefined
|
|
989
|
-
/** Selects the account that signs session credentials. */
|
|
990
|
-
resolveAccount?: sessionPlugin.ResolveAccount | undefined
|
|
991
|
-
/** Store for reusable session channels. Defaults to in-memory. */
|
|
992
|
-
channelStore?: ChannelStore | undefined
|
|
993
|
-
/** Optional websocket constructor for runtimes without a global WebSocket. */
|
|
994
|
-
webSocket?: WebSocketConstructor | undefined
|
|
995
|
-
}
|
|
996
|
-
}
|