mppx 0.6.31 → 0.7.0
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 +17 -0
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +9 -7
- package/dist/Challenge.js.map +1 -1
- package/dist/Constants.d.ts +46 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +46 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Credential.d.ts.map +1 -1
- package/dist/Credential.js +5 -4
- package/dist/Credential.js.map +1 -1
- package/dist/Method.d.ts +32 -4
- package/dist/Method.d.ts.map +1 -1
- package/dist/Method.js +5 -2
- package/dist/Method.js.map +1 -1
- package/dist/Receipt.d.ts.map +1 -1
- package/dist/Receipt.js +3 -2
- package/dist/Receipt.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +19 -11
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/plugins/tempo.d.ts.map +1 -1
- package/dist/cli/plugins/tempo.js +17 -6
- package/dist/cli/plugins/tempo.js.map +1 -1
- package/dist/cli/utils.d.ts +5 -0
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js +10 -0
- package/dist/cli/utils.js.map +1 -1
- package/dist/client/Methods.d.ts +5 -2
- package/dist/client/Methods.d.ts.map +1 -1
- package/dist/client/Methods.js +5 -2
- package/dist/client/Methods.js.map +1 -1
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +4 -5
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +14 -6
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/evm/server/Methods.d.ts +1 -1
- package/dist/evm/server/Methods.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/AcceptPayment.d.ts +3 -0
- package/dist/internal/AcceptPayment.d.ts.map +1 -1
- package/dist/internal/AcceptPayment.js +15 -11
- package/dist/internal/AcceptPayment.js.map +1 -1
- package/dist/mcp-sdk/client/McpClient.d.ts +12 -5
- package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -1
- package/dist/mcp-sdk/client/McpClient.js +55 -42
- package/dist/mcp-sdk/client/McpClient.js.map +1 -1
- package/dist/server/Mppx.d.ts +11 -3
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +76 -27
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/Response.d.ts.map +1 -1
- package/dist/server/Response.js +2 -1
- package/dist/server/Response.js.map +1 -1
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +4 -3
- package/dist/server/Transport.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/stripe/client/Charge.d.ts +1 -1
- package/dist/stripe/client/Charge.d.ts.map +1 -1
- package/dist/stripe/client/Charge.js +3 -1
- package/dist/stripe/client/Charge.js.map +1 -1
- package/dist/stripe/server/Charge.d.ts +1 -1
- package/dist/stripe/server/Charge.d.ts.map +1 -1
- package/dist/stripe/server/Charge.js +9 -2
- package/dist/stripe/server/Charge.js.map +1 -1
- package/dist/stripe/server/Methods.d.ts +1 -1
- package/dist/stripe/server/Methods.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/Methods.d.ts +18 -0
- package/dist/tempo/Methods.d.ts.map +1 -1
- package/dist/tempo/Methods.js +16 -1
- package/dist/tempo/Methods.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts +6 -0
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +9 -2
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +36 -7
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Methods.js +12 -5
- package/dist/tempo/client/Methods.js.map +1 -1
- package/dist/tempo/client/index.d.ts +7 -4
- package/dist/tempo/client/index.d.ts.map +1 -1
- package/dist/tempo/client/index.js +5 -3
- package/dist/tempo/client/index.js.map +1 -1
- package/dist/tempo/index.d.ts +1 -0
- package/dist/tempo/index.d.ts.map +1 -1
- package/dist/tempo/index.js +1 -0
- package/dist/tempo/index.js.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts +21 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +109 -4
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
- package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
- package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
- package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
- package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/Session.js +14 -7
- package/dist/tempo/legacy/client/Session.js.map +1 -0
- package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
- package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/SessionManager.js +20 -16
- package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
- package/dist/tempo/legacy/client/index.d.ts +7 -0
- package/dist/tempo/legacy/client/index.d.ts.map +1 -0
- package/dist/tempo/legacy/client/index.js +5 -0
- package/dist/tempo/legacy/client/index.js.map +1 -0
- package/dist/tempo/legacy/index.d.ts +7 -0
- package/dist/tempo/legacy/index.d.ts.map +1 -0
- package/dist/tempo/legacy/index.js +7 -0
- package/dist/tempo/legacy/index.js.map +1 -0
- package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
- package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
- package/dist/tempo/{server → legacy/server}/Session.js +12 -10
- package/dist/tempo/legacy/server/Session.js.map +1 -0
- package/dist/tempo/legacy/server/index.d.ts +5 -0
- package/dist/tempo/legacy/server/index.d.ts.map +1 -0
- package/dist/tempo/legacy/server/index.js +5 -0
- package/dist/tempo/legacy/server/index.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
- package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
- package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
- package/dist/tempo/legacy/session/Chain.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
- package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
- package/dist/tempo/legacy/session/Channel.js.map +1 -0
- package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
- package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/legacy/session/ChannelStore.js +6 -0
- package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
- package/dist/tempo/legacy/session/Types.d.ts +73 -0
- package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
- package/dist/tempo/legacy/session/Types.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
- package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
- package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
- package/dist/tempo/legacy/session/Voucher.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
- package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
- package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
- package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
- package/dist/tempo/legacy/session/index.d.ts +9 -0
- package/dist/tempo/legacy/session/index.d.ts.map +1 -0
- package/dist/tempo/legacy/session/index.js +9 -0
- package/dist/tempo/legacy/session/index.js.map +1 -0
- package/dist/tempo/server/Charge.d.ts +1 -1
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +13 -16
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +63 -6
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +36 -8
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +1 -1
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/index.d.ts +6 -5
- package/dist/tempo/server/index.d.ts.map +1 -1
- package/dist/tempo/server/index.js +5 -5
- package/dist/tempo/server/index.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/server/internal/request-body.d.ts +7 -2
- package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
- package/dist/tempo/server/internal/request-body.js +20 -3
- package/dist/tempo/server/internal/request-body.js.map +1 -1
- package/dist/tempo/server/internal/transport.d.ts +8 -4
- package/dist/tempo/server/internal/transport.d.ts.map +1 -1
- package/dist/tempo/server/internal/transport.js +8 -7
- package/dist/tempo/server/internal/transport.js.map +1 -1
- package/dist/tempo/session/Snapshot.d.ts +32 -0
- package/dist/tempo/session/Snapshot.d.ts.map +1 -0
- package/dist/tempo/session/Snapshot.js +37 -0
- package/dist/tempo/session/Snapshot.js.map +1 -0
- package/dist/tempo/session/client/ChannelOps.d.ts +82 -0
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/session/client/ChannelOps.js +204 -0
- package/dist/tempo/session/client/ChannelOps.js.map +1 -0
- package/dist/tempo/session/client/CredentialState.d.ts +262 -0
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
- package/dist/tempo/session/client/CredentialState.js +417 -0
- package/dist/tempo/session/client/CredentialState.js.map +1 -0
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
- package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
- package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
- package/dist/tempo/session/client/Runtime.d.ts +464 -0
- package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
- package/dist/tempo/session/client/Runtime.js +499 -0
- package/dist/tempo/session/client/Runtime.js.map +1 -0
- package/dist/tempo/session/client/Session.d.ts +132 -0
- package/dist/tempo/session/client/Session.d.ts.map +1 -0
- package/dist/tempo/session/client/Session.js +55 -0
- package/dist/tempo/session/client/Session.js.map +1 -0
- package/dist/tempo/session/client/SessionManager.d.ts +120 -0
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
- package/dist/tempo/session/client/SessionManager.js +627 -0
- package/dist/tempo/session/client/SessionManager.js.map +1 -0
- package/dist/tempo/session/client/Transports.d.ts +449 -0
- package/dist/tempo/session/client/Transports.d.ts.map +1 -0
- package/dist/tempo/session/client/Transports.js +721 -0
- package/dist/tempo/session/client/Transports.js.map +1 -0
- package/dist/tempo/session/client/index.d.ts +12 -0
- package/dist/tempo/session/client/index.d.ts.map +1 -0
- package/dist/tempo/session/client/index.js +5 -0
- package/dist/tempo/session/client/index.js.map +1 -0
- package/dist/tempo/session/index.d.ts +7 -8
- package/dist/tempo/session/index.d.ts.map +1 -1
- package/dist/tempo/session/index.js +7 -8
- package/dist/tempo/session/index.js.map +1 -1
- package/dist/tempo/session/precompile/Chain.d.ts +319 -0
- package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Chain.js +492 -0
- package/dist/tempo/session/precompile/Chain.js.map +1 -0
- package/dist/tempo/session/precompile/Channel.d.ts +46 -0
- package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Channel.js +56 -0
- package/dist/tempo/session/precompile/Channel.js.map +1 -0
- package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
- package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Protocol.js +264 -0
- package/dist/tempo/session/precompile/Protocol.js.map +1 -0
- package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
- package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Voucher.js +126 -0
- package/dist/tempo/session/precompile/Voucher.js.map +1 -0
- package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
- package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
- package/dist/tempo/session/precompile/escrow.abi.js +224 -0
- package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
- package/dist/tempo/session/precompile/index.d.ts +24 -0
- package/dist/tempo/session/precompile/index.d.ts.map +1 -0
- package/dist/tempo/session/precompile/index.js +22 -0
- package/dist/tempo/session/precompile/index.js.map +1 -0
- package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
- package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/session/server/ChannelOps.js +91 -0
- package/dist/tempo/session/server/ChannelOps.js.map +1 -0
- package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
- package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/session/server/ChannelStore.js +404 -0
- package/dist/tempo/session/server/ChannelStore.js.map +1 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
- package/dist/tempo/session/server/CredentialVerification.js +494 -0
- package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
- package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
- package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
- package/dist/tempo/session/server/MeteredStream.js +42 -0
- package/dist/tempo/session/server/MeteredStream.js.map +1 -0
- package/dist/tempo/session/server/RequestState.d.ts +208 -0
- package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
- package/dist/tempo/session/server/RequestState.js +252 -0
- package/dist/tempo/session/server/RequestState.js.map +1 -0
- package/dist/tempo/session/server/Session.d.ts +169 -0
- package/dist/tempo/session/server/Session.d.ts.map +1 -0
- package/dist/tempo/session/server/Session.js +351 -0
- package/dist/tempo/session/server/Session.js.map +1 -0
- package/dist/tempo/session/server/Settlement.d.ts +185 -0
- package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
- package/dist/tempo/session/server/Settlement.js +250 -0
- package/dist/tempo/session/server/Settlement.js.map +1 -0
- package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
- package/dist/tempo/session/server/Sse.d.ts.map +1 -0
- package/dist/tempo/session/server/Sse.js +184 -0
- package/dist/tempo/session/server/Sse.js.map +1 -0
- package/dist/tempo/session/server/Transports.d.ts +89 -0
- package/dist/tempo/session/server/Transports.d.ts.map +1 -0
- package/dist/tempo/session/server/Transports.js +149 -0
- package/dist/tempo/session/server/Transports.js.map +1 -0
- package/dist/tempo/session/server/Ws.d.ts +48 -0
- package/dist/tempo/session/server/Ws.d.ts.map +1 -0
- package/dist/tempo/session/server/Ws.js +244 -0
- package/dist/tempo/session/server/Ws.js.map +1 -0
- package/dist/tempo/session/server/index.d.ts +4 -0
- package/dist/tempo/session/server/index.d.ts.map +1 -0
- package/dist/tempo/session/server/index.js +2 -0
- package/dist/tempo/session/server/index.js.map +1 -0
- package/package.json +6 -1
- package/src/Challenge.ts +9 -7
- package/src/Constants.ts +58 -0
- package/src/Credential.ts +5 -4
- package/src/Method.ts +46 -5
- package/src/Receipt.ts +3 -2
- package/src/cli/cli.test.ts +23 -28
- package/src/cli/cli.ts +23 -10
- package/src/cli/mcp.test.ts +21 -7
- package/src/cli/plugins/tempo.ts +21 -8
- package/src/cli/utils.test.ts +25 -1
- package/src/cli/utils.ts +10 -0
- package/src/client/Methods.ts +5 -2
- package/src/client/Mppx.test-d.ts +10 -0
- package/src/client/Mppx.test.ts +75 -0
- package/src/client/Transport.ts +4 -5
- package/src/client/index.ts +11 -1
- package/src/client/internal/Fetch.test.ts +29 -4
- package/src/client/internal/Fetch.ts +17 -5
- package/src/env.d.ts +1 -1
- package/src/index.ts +1 -0
- package/src/internal/AcceptPayment.test.ts +61 -0
- package/src/internal/AcceptPayment.ts +21 -14
- package/src/mcp-sdk/client/McpClient.integration.test.ts +8 -7
- package/src/mcp-sdk/client/McpClient.test-d.ts +7 -0
- package/src/mcp-sdk/client/McpClient.ts +99 -67
- package/src/mcp-sdk/client/McpClient.unit.test.ts +131 -0
- package/src/middlewares/elysia.test.ts +8 -4
- package/src/middlewares/express.test.ts +8 -4
- package/src/middlewares/hono.test.ts +4 -4
- package/src/middlewares/nextjs.test.ts +8 -4
- package/src/proxy/Proxy.test.ts +8 -8
- package/src/server/Mppx.test-d.ts +54 -0
- package/src/server/Mppx.test.ts +200 -7
- package/src/server/Mppx.ts +487 -406
- package/src/server/Response.ts +2 -1
- package/src/server/Transport.ts +4 -3
- package/src/server/index.ts +1 -0
- package/src/stripe/client/Charge.test.ts +20 -5
- package/src/stripe/client/Charge.ts +6 -2
- package/src/stripe/server/Charge.test.ts +114 -1
- package/src/stripe/server/Charge.ts +13 -2
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
- package/src/tempo/Methods.test.ts +45 -17
- package/src/tempo/Methods.ts +22 -0
- package/src/tempo/PublicExports.test-d.ts +105 -0
- package/src/tempo/client/Charge.test.ts +85 -0
- package/src/tempo/client/Charge.ts +19 -2
- package/src/tempo/client/Methods.ts +18 -6
- package/src/tempo/client/index.ts +15 -4
- package/src/tempo/index.ts +1 -0
- package/src/tempo/internal/fee-payer.test.ts +241 -17
- package/src/tempo/internal/fee-payer.ts +150 -4
- package/src/tempo/internal/fee-token.test.ts +14 -9
- package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
- package/src/tempo/legacy/README.md +9 -0
- package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
- package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
- package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
- package/src/tempo/{client → legacy/client}/Session.ts +25 -11
- package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
- package/src/tempo/{client → legacy/client}/SessionManager.ts +41 -20
- package/src/tempo/legacy/client/index.ts +6 -0
- package/src/tempo/legacy/index.ts +6 -0
- package/src/tempo/{server → legacy/server}/Session.test.ts +45 -45
- package/src/tempo/{server → legacy/server}/Session.ts +32 -23
- package/src/tempo/legacy/server/index.ts +4 -0
- package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
- package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
- package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
- package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
- package/src/tempo/legacy/session/ChannelStore.ts +39 -0
- package/src/tempo/legacy/session/Types.ts +91 -0
- package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
- package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
- package/src/tempo/legacy/session/index.ts +8 -0
- package/src/tempo/server/AtomicStore.test-d.ts +16 -11
- package/src/tempo/server/Charge.test.ts +92 -14
- package/src/tempo/server/Charge.ts +18 -16
- package/src/tempo/server/Methods.ts +54 -8
- package/src/tempo/server/Sse.test.ts +2 -2
- package/src/tempo/server/index.ts +6 -5
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/server/internal/request-body.test.ts +37 -4
- package/src/tempo/server/internal/request-body.ts +25 -6
- package/src/tempo/server/internal/transport.test.ts +4 -4
- package/src/tempo/server/internal/transport.ts +19 -10
- package/src/tempo/session/Snapshot.test.ts +41 -0
- package/src/tempo/session/Snapshot.ts +74 -0
- package/src/tempo/session/client/ChannelOps.test.ts +163 -0
- package/src/tempo/session/client/ChannelOps.ts +344 -0
- package/src/tempo/session/client/CredentialState.test.ts +645 -0
- package/src/tempo/session/client/CredentialState.ts +814 -0
- package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
- package/src/tempo/session/client/Runtime.test.ts +1092 -0
- package/src/tempo/session/client/Runtime.ts +986 -0
- package/src/tempo/session/client/Session.test.ts +734 -0
- package/src/tempo/session/client/Session.ts +97 -0
- package/src/tempo/session/client/SessionManager.test.ts +1308 -0
- package/src/tempo/session/client/SessionManager.ts +845 -0
- package/src/tempo/session/client/Transports.test.ts +837 -0
- package/src/tempo/session/client/Transports.ts +1292 -0
- package/src/tempo/session/client/index.ts +37 -0
- package/src/tempo/session/index.ts +7 -8
- package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
- package/src/tempo/session/precompile/Chain.test.ts +1258 -0
- package/src/tempo/session/precompile/Chain.ts +979 -0
- package/src/tempo/session/precompile/Channel.test.ts +138 -0
- package/src/tempo/session/precompile/Channel.ts +103 -0
- package/src/tempo/session/precompile/Protocol.test.ts +358 -0
- package/src/tempo/session/precompile/Protocol.ts +520 -0
- package/src/tempo/session/precompile/Voucher.test.ts +316 -0
- package/src/tempo/session/precompile/Voucher.ts +160 -0
- package/src/tempo/session/precompile/escrow.abi.ts +226 -0
- package/src/tempo/session/precompile/index.ts +33 -0
- package/src/tempo/session/server/ChannelOps.test.ts +129 -0
- package/src/tempo/session/server/ChannelOps.ts +157 -0
- package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
- package/src/tempo/session/server/ChannelStore.ts +835 -0
- package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
- package/src/tempo/session/server/CredentialVerification.ts +710 -0
- package/src/tempo/session/server/MeteredStream.ts +88 -0
- package/src/tempo/session/server/RequestState.test.ts +531 -0
- package/src/tempo/session/server/RequestState.ts +499 -0
- package/src/tempo/session/server/Session.integration.test.ts +444 -0
- package/src/tempo/session/server/Session.test.ts +3253 -0
- package/src/tempo/session/server/Session.ts +543 -0
- package/src/tempo/session/server/Settlement.test.ts +242 -0
- package/src/tempo/session/server/Settlement.ts +470 -0
- package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
- package/src/tempo/session/server/Sse.ts +256 -0
- package/src/tempo/session/server/Transports.test.ts +346 -0
- package/src/tempo/session/server/Transports.ts +255 -0
- package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
- package/src/tempo/session/server/Ws.ts +384 -0
- package/src/tempo/session/server/index.ts +8 -0
- package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/client/ChannelOps.js.map +0 -1
- package/dist/tempo/client/Session.d.ts.map +0 -1
- package/dist/tempo/client/Session.js.map +0 -1
- package/dist/tempo/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/client/SessionManager.js.map +0 -1
- package/dist/tempo/server/Session.d.ts.map +0 -1
- package/dist/tempo/server/Session.js.map +0 -1
- package/dist/tempo/session/Chain.d.ts.map +0 -1
- package/dist/tempo/session/Chain.js.map +0 -1
- package/dist/tempo/session/Channel.d.ts.map +0 -1
- package/dist/tempo/session/Channel.js.map +0 -1
- package/dist/tempo/session/ChannelStore.d.ts +0 -117
- package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/ChannelStore.js +0 -172
- package/dist/tempo/session/ChannelStore.js.map +0 -1
- package/dist/tempo/session/Receipt.d.ts +0 -22
- package/dist/tempo/session/Receipt.d.ts.map +0 -1
- package/dist/tempo/session/Receipt.js +0 -34
- package/dist/tempo/session/Receipt.js.map +0 -1
- package/dist/tempo/session/Sse.d.ts.map +0 -1
- package/dist/tempo/session/Sse.js +0 -363
- package/dist/tempo/session/Sse.js.map +0 -1
- package/dist/tempo/session/Types.d.ts +0 -78
- package/dist/tempo/session/Types.d.ts.map +0 -1
- package/dist/tempo/session/Types.js.map +0 -1
- package/dist/tempo/session/Voucher.d.ts.map +0 -1
- package/dist/tempo/session/Voucher.js.map +0 -1
- package/dist/tempo/session/Ws.d.ts +0 -87
- package/dist/tempo/session/Ws.d.ts.map +0 -1
- package/dist/tempo/session/Ws.js +0 -443
- package/dist/tempo/session/Ws.js.map +0 -1
- package/dist/tempo/session/escrow.abi.js.map +0 -1
- package/src/tempo/session/ChannelStore.ts +0 -308
- package/src/tempo/session/Receipt.test.ts +0 -89
- package/src/tempo/session/Receipt.ts +0 -46
- package/src/tempo/session/Sse.ts +0 -462
- package/src/tempo/session/Types.ts +0 -86
- package/src/tempo/session/Ws.ts +0 -576
- /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
- /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
- /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
- /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
- /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import type { Hex } from 'ox'
|
|
2
2
|
import { parseUnits, type Account as viem_Account, type Address } from 'viem'
|
|
3
3
|
|
|
4
|
-
import * as Challenge from '
|
|
5
|
-
import * as Fetch from '
|
|
6
|
-
import * as
|
|
7
|
-
import * as
|
|
8
|
-
import
|
|
9
|
-
import type * as
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import type {
|
|
13
|
-
import
|
|
4
|
+
import * as Challenge from '../../../Challenge.js'
|
|
5
|
+
import * as Fetch from '../../../client/internal/Fetch.js'
|
|
6
|
+
import * as Constants from '../../../Constants.js'
|
|
7
|
+
import * as PaymentCredential from '../../../Credential.js'
|
|
8
|
+
import * as AcceptPayment from '../../../internal/AcceptPayment.js'
|
|
9
|
+
import type * as Account from '../../../viem/Account.js'
|
|
10
|
+
import type * as Client from '../../../viem/Client.js'
|
|
11
|
+
import { deserializeSessionReceipt } from '../../session/precompile/Protocol.js'
|
|
12
|
+
import type { SessionReceipt } from '../../session/precompile/Protocol.js'
|
|
13
|
+
import { parseEvent } from '../../session/precompile/Protocol.js'
|
|
14
|
+
import * as Ws from '../../session/precompile/Protocol.js'
|
|
15
|
+
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
14
16
|
import type { ChannelEntry } from './ChannelOps.js'
|
|
15
17
|
import { session as sessionPlugin } from './Session.js'
|
|
16
18
|
|
|
@@ -46,13 +48,20 @@ const WebSocketReadyState = {
|
|
|
46
48
|
// Keep protocol/policy close codes on the server side and use an app-defined code here.
|
|
47
49
|
const ClientWebSocketProtocolErrorCloseCode = 3008
|
|
48
50
|
|
|
51
|
+
/** Auto-driving legacy client manager for HTTP, SSE, and WebSocket sessions. */
|
|
49
52
|
export type SessionManager = {
|
|
53
|
+
/** Active legacy channel ID, when opened or recovered. */
|
|
50
54
|
readonly channelId: Hex.Hex | undefined
|
|
55
|
+
/** Local cumulative voucher authorization in raw token units. */
|
|
51
56
|
readonly cumulative: bigint
|
|
57
|
+
/** Whether the manager currently has an open local channel. */
|
|
52
58
|
readonly opened: boolean
|
|
53
59
|
|
|
60
|
+
/** Opens a legacy contract-backed channel before the first paid request. */
|
|
54
61
|
open(options?: { deposit?: bigint }): Promise<void>
|
|
62
|
+
/** Performs the HTTP 402 challenge/retry flow and returns receipt metadata. */
|
|
55
63
|
fetch(input: RequestInfo | URL, init?: SessionRequestInit): Promise<PaymentResponse>
|
|
64
|
+
/** Opens a paid SSE stream and responds to voucher requests. */
|
|
56
65
|
sse(
|
|
57
66
|
input: RequestInfo | URL,
|
|
58
67
|
init?: SessionRequestInit & {
|
|
@@ -60,6 +69,7 @@ export type SessionManager = {
|
|
|
60
69
|
signal?: AbortSignal | undefined
|
|
61
70
|
},
|
|
62
71
|
): Promise<AsyncIterable<string>>
|
|
72
|
+
/** Opens a paid WebSocket session and manages in-band payment frames. */
|
|
63
73
|
ws(
|
|
64
74
|
input: string | URL,
|
|
65
75
|
init?: {
|
|
@@ -69,13 +79,19 @@ export type SessionManager = {
|
|
|
69
79
|
signal?: AbortSignal | undefined
|
|
70
80
|
},
|
|
71
81
|
): Promise<WebSocket>
|
|
82
|
+
/** Cooperatively closes the active legacy channel. */
|
|
72
83
|
close(): Promise<SessionReceipt | undefined>
|
|
73
84
|
}
|
|
74
85
|
|
|
86
|
+
/** HTTP response enriched with latest legacy session metadata. */
|
|
75
87
|
export type PaymentResponse = Response & {
|
|
88
|
+
/** Parsed payment receipt, when the response included one. */
|
|
76
89
|
receipt: SessionReceipt | null
|
|
90
|
+
/** Last session challenge observed by the manager. */
|
|
77
91
|
challenge: Challenge.Challenge | null
|
|
92
|
+
/** Active channel ID, when available. */
|
|
78
93
|
channelId: Hex.Hex | null
|
|
94
|
+
/** Local cumulative voucher authorization in raw token units. */
|
|
79
95
|
cumulative: bigint
|
|
80
96
|
}
|
|
81
97
|
|
|
@@ -250,7 +266,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
250
266
|
}
|
|
251
267
|
|
|
252
268
|
function toPaymentResponse(response: Response): PaymentResponse {
|
|
253
|
-
const receiptHeader = response.headers.get(
|
|
269
|
+
const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
|
|
254
270
|
const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : null
|
|
255
271
|
updateSpentFromReceipt(receipt)
|
|
256
272
|
return Object.assign(response, {
|
|
@@ -425,13 +441,13 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
425
441
|
if (!lastUrl) throw new Error('No URL available — call fetch() or sse() before open().')
|
|
426
442
|
const response = await fetchFn(lastUrl, {
|
|
427
443
|
method: 'POST',
|
|
428
|
-
headers: {
|
|
444
|
+
headers: { [Constants.Headers.authorization]: credential },
|
|
429
445
|
})
|
|
430
446
|
if (!response.ok) {
|
|
431
447
|
const body = await response.text().catch(() => '')
|
|
432
|
-
const wwwAuth = response.headers.get(
|
|
448
|
+
const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
|
|
433
449
|
throw new Error(
|
|
434
|
-
`Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [
|
|
450
|
+
`Open request failed with status ${response.status}${body ? `: ${body}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
|
|
435
451
|
)
|
|
436
452
|
}
|
|
437
453
|
},
|
|
@@ -504,7 +520,10 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
504
520
|
})
|
|
505
521
|
const voucherResponse = await fetchFn(input, {
|
|
506
522
|
method: 'POST',
|
|
507
|
-
headers: {
|
|
523
|
+
headers: {
|
|
524
|
+
Accept: 'text/event-stream',
|
|
525
|
+
[Constants.Headers.authorization]: credential,
|
|
526
|
+
},
|
|
508
527
|
})
|
|
509
528
|
if (!voucherResponse.ok) {
|
|
510
529
|
throw new Error(`Voucher POST failed with status ${voucherResponse.status}`)
|
|
@@ -575,7 +594,8 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
575
594
|
activeSocketChallenge = challenge
|
|
576
595
|
wsDeliveredChunks = 0n
|
|
577
596
|
wsTickCost = BigInt(challenge.request.amount as string)
|
|
578
|
-
const openCredential =
|
|
597
|
+
const openCredential =
|
|
598
|
+
PaymentCredential.deserialize<LegacySessionCredentialPayload>(credential)
|
|
579
599
|
activeSocketChannelId = openCredential.payload.channelId
|
|
580
600
|
const rawSocket = new WebSocketImpl(wsUrl, protocols)
|
|
581
601
|
activeSocket = rawSocket
|
|
@@ -819,7 +839,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
819
839
|
|
|
820
840
|
const response = await fetchFn(lastUrl, {
|
|
821
841
|
method: 'POST',
|
|
822
|
-
headers: {
|
|
842
|
+
headers: { [Constants.Headers.authorization]: credential },
|
|
823
843
|
})
|
|
824
844
|
if (!response.ok) {
|
|
825
845
|
const body = await response.text().catch(() => '')
|
|
@@ -835,12 +855,12 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
835
855
|
return body
|
|
836
856
|
}
|
|
837
857
|
})()
|
|
838
|
-
const wwwAuth = response.headers.get(
|
|
858
|
+
const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate) ?? ''
|
|
839
859
|
throw new Error(
|
|
840
|
-
`Close request failed with status ${response.status}${detail ? `: ${detail}` : ''}${wwwAuth ? ` [
|
|
860
|
+
`Close request failed with status ${response.status}${detail ? `: ${detail}` : ''}${wwwAuth ? ` [${Constants.Headers.wwwAuthenticate}: ${wwwAuth}]` : ''}`,
|
|
841
861
|
)
|
|
842
862
|
}
|
|
843
|
-
const receiptHeader = response.headers.get(
|
|
863
|
+
const receiptHeader = response.headers.get(Constants.Headers.paymentReceipt)
|
|
844
864
|
const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : undefined
|
|
845
865
|
|
|
846
866
|
return receipt
|
|
@@ -850,6 +870,7 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
850
870
|
return self
|
|
851
871
|
}
|
|
852
872
|
|
|
873
|
+
/** Type helpers for the legacy auto-driving session manager. */
|
|
853
874
|
export declare namespace sessionManager {
|
|
854
875
|
type Parameters = Account.getResolver.Parameters &
|
|
855
876
|
Client.getResolver.Parameters & {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Legacy contract-backed session client method. */
|
|
2
|
+
export { session } from './Session.js'
|
|
3
|
+
/** Legacy contract-backed session manager. */
|
|
4
|
+
export { sessionManager } from './SessionManager.js'
|
|
5
|
+
/** Legacy client session manager types. */
|
|
6
|
+
export type { PaymentResponse, SessionManager } from './SessionManager.js'
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Legacy contract-backed session client surface. */
|
|
2
|
+
export * as Client from './client/index.js'
|
|
3
|
+
/** Legacy contract-backed session server surface. */
|
|
4
|
+
export * as Server from './server/index.js'
|
|
5
|
+
/** Legacy contract-backed session channel primitives. */
|
|
6
|
+
export * as Session from './session/index.js'
|
|
@@ -21,10 +21,8 @@ import { waitForTransactionReceipt } from 'viem/actions'
|
|
|
21
21
|
import { Account as TempoAccount, Actions, Addresses } from 'viem/tempo'
|
|
22
22
|
import { beforeAll, beforeEach, describe, expect, expectTypeOf, test } from 'vp/test'
|
|
23
23
|
import { WebSocketServer } from 'ws'
|
|
24
|
-
import {
|
|
24
|
+
import { tempoNetwork } from '~test/config.js'
|
|
25
25
|
import * as Http from '~test/Http.js'
|
|
26
|
-
|
|
27
|
-
const isLocalnet = nodeEnv === 'localnet'
|
|
28
26
|
import {
|
|
29
27
|
closeChannelOnChain,
|
|
30
28
|
deployEscrow,
|
|
@@ -32,7 +30,7 @@ import {
|
|
|
32
30
|
signOpenChannel,
|
|
33
31
|
signTopUpChannel,
|
|
34
32
|
topUpChannel,
|
|
35
|
-
} from '~test/tempo/session.js'
|
|
33
|
+
} from '~test/tempo/legacy/session.js'
|
|
36
34
|
import { accounts, asset, chain, client, fundAccount, http } from '~test/tempo/viem.js'
|
|
37
35
|
|
|
38
36
|
import {
|
|
@@ -40,21 +38,22 @@ import {
|
|
|
40
38
|
ChannelNotFoundError,
|
|
41
39
|
InsufficientBalanceError,
|
|
42
40
|
InvalidSignatureError,
|
|
43
|
-
} from '
|
|
44
|
-
import * as NodeRequest from '
|
|
45
|
-
import * as Store from '
|
|
46
|
-
import { sessionManager } from '../client/SessionManager.js'
|
|
41
|
+
} from '../../../Errors.js'
|
|
42
|
+
import * as NodeRequest from '../../../server/Request.js'
|
|
43
|
+
import * as Store from '../../../Store.js'
|
|
47
44
|
import {
|
|
48
45
|
chainId as chainIdDefaults,
|
|
49
46
|
escrowContract as escrowContractDefaults,
|
|
50
|
-
} from '
|
|
51
|
-
import type * as Methods from '
|
|
47
|
+
} from '../../internal/defaults.js'
|
|
48
|
+
import type * as Methods from '../../Methods.js'
|
|
49
|
+
import { deserializeSessionReceipt } from '../../session/precompile/Protocol.js'
|
|
50
|
+
import { serializeSessionReceipt } from '../../session/precompile/Protocol.js'
|
|
51
|
+
import type { SessionReceipt } from '../../session/precompile/Protocol.js'
|
|
52
|
+
import * as TempoWs from '../../session/server/Ws.js'
|
|
53
|
+
import { sessionManager } from '../client/SessionManager.js'
|
|
52
54
|
import * as ChannelStore from '../session/ChannelStore.js'
|
|
53
|
-
import {
|
|
54
|
-
import { serializeSessionReceipt } from '../session/Receipt.js'
|
|
55
|
-
import type { SessionCredentialPayload, SessionReceipt } from '../session/Types.js'
|
|
55
|
+
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
56
56
|
import { signVoucher } from '../session/Voucher.js'
|
|
57
|
-
import * as TempoWs from '../session/Ws.js'
|
|
58
57
|
import { charge, session, settle } from './Session.js'
|
|
59
58
|
|
|
60
59
|
const payer = accounts[2]
|
|
@@ -62,6 +61,7 @@ const delegatedSigner = accounts[4]
|
|
|
62
61
|
const recipientAccount = accounts[0]
|
|
63
62
|
const recipient = accounts[0].address
|
|
64
63
|
const currency = asset
|
|
64
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
65
65
|
|
|
66
66
|
let escrowContract: Address
|
|
67
67
|
let saltCounter = 0
|
|
@@ -112,7 +112,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
112
112
|
function createHandler(overrides: Partial<session.Parameters> = {}) {
|
|
113
113
|
return Mppx_server.create({
|
|
114
114
|
methods: [
|
|
115
|
-
tempo_server.
|
|
115
|
+
tempo_server.sessionLegacy({
|
|
116
116
|
store: rawStore,
|
|
117
117
|
getClient: () => client,
|
|
118
118
|
account: recipientAccount,
|
|
@@ -2285,7 +2285,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
2285
2285
|
})
|
|
2286
2286
|
}
|
|
2287
2287
|
|
|
2288
|
-
const credential = Credential.deserialize<
|
|
2288
|
+
const credential = Credential.deserialize<LegacySessionCredentialPayload>(authorization)
|
|
2289
2289
|
if (credential.payload.action === 'open') {
|
|
2290
2290
|
return new Response('ok', {
|
|
2291
2291
|
status: 200,
|
|
@@ -4201,7 +4201,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4201
4201
|
const backingStore = Store.memory()
|
|
4202
4202
|
const routeHandler = Mppx_server.create({
|
|
4203
4203
|
methods: [
|
|
4204
|
-
tempo_server.
|
|
4204
|
+
tempo_server.sessionLegacy({
|
|
4205
4205
|
store: backingStore,
|
|
4206
4206
|
getClient: () => client,
|
|
4207
4207
|
account: recipientAccount,
|
|
@@ -4243,7 +4243,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4243
4243
|
const backingStore = Store.memory()
|
|
4244
4244
|
const routeHandler = Mppx_server.create({
|
|
4245
4245
|
methods: [
|
|
4246
|
-
tempo_server.
|
|
4246
|
+
tempo_server.sessionLegacy({
|
|
4247
4247
|
store: backingStore,
|
|
4248
4248
|
getClient: () => client,
|
|
4249
4249
|
account: recipientAccount,
|
|
@@ -4286,7 +4286,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4286
4286
|
const backingStore = Store.memory()
|
|
4287
4287
|
const routeHandler = Mppx_server.create({
|
|
4288
4288
|
methods: [
|
|
4289
|
-
tempo_server.
|
|
4289
|
+
tempo_server.sessionLegacy({
|
|
4290
4290
|
store: backingStore,
|
|
4291
4291
|
getClient: () => client,
|
|
4292
4292
|
account: recipientAccount,
|
|
@@ -4336,7 +4336,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4336
4336
|
const backingStore = Store.memory()
|
|
4337
4337
|
const routeHandler = Mppx_server.create({
|
|
4338
4338
|
methods: [
|
|
4339
|
-
tempo_server.
|
|
4339
|
+
tempo_server.sessionLegacy({
|
|
4340
4340
|
store: backingStore,
|
|
4341
4341
|
getClient: () => client,
|
|
4342
4342
|
account: recipientAccount,
|
|
@@ -4381,7 +4381,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4381
4381
|
test('behavior: withReceipt accepts async generator and returns Response', async () => {
|
|
4382
4382
|
const handler = Mppx_server.create({
|
|
4383
4383
|
methods: [
|
|
4384
|
-
tempo_server.
|
|
4384
|
+
tempo_server.sessionLegacy({
|
|
4385
4385
|
account: accounts[0],
|
|
4386
4386
|
currency: asset,
|
|
4387
4387
|
escrowContract,
|
|
@@ -4401,7 +4401,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4401
4401
|
|
|
4402
4402
|
if (result.status === 200) {
|
|
4403
4403
|
// async generator function should be accepted and return Response
|
|
4404
|
-
const response = result.withReceipt(async function* (_stream) {
|
|
4404
|
+
const response = result.withReceipt(async function* (_stream: unknown) {
|
|
4405
4405
|
yield 'token'
|
|
4406
4406
|
})
|
|
4407
4407
|
expectTypeOf(response).toEqualTypeOf<Response>()
|
|
@@ -4426,7 +4426,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4426
4426
|
test('behavior: non-SSE session withReceipt only accepts Response', async () => {
|
|
4427
4427
|
const handler = Mppx_server.create({
|
|
4428
4428
|
methods: [
|
|
4429
|
-
tempo_server.
|
|
4429
|
+
tempo_server.sessionLegacy({
|
|
4430
4430
|
account: accounts[0],
|
|
4431
4431
|
currency: asset,
|
|
4432
4432
|
escrowContract,
|
|
@@ -4453,7 +4453,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4453
4453
|
const backingStore = Store.memory()
|
|
4454
4454
|
const routeHandler = Mppx_server.create({
|
|
4455
4455
|
methods: [
|
|
4456
|
-
tempo_server.
|
|
4456
|
+
tempo_server.sessionLegacy({
|
|
4457
4457
|
store: backingStore,
|
|
4458
4458
|
getClient: () => client,
|
|
4459
4459
|
account: recipientAccount,
|
|
@@ -4488,7 +4488,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4488
4488
|
}
|
|
4489
4489
|
|
|
4490
4490
|
if (request.headers.get('Accept')?.includes('text/event-stream')) {
|
|
4491
|
-
return result.withReceipt(async function* (stream) {
|
|
4491
|
+
return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
|
|
4492
4492
|
await stream.charge()
|
|
4493
4493
|
yield 'chunk-1'
|
|
4494
4494
|
await stream.charge()
|
|
@@ -4531,7 +4531,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4531
4531
|
const backingStore = Store.memory()
|
|
4532
4532
|
const routeHandler = Mppx_server.create({
|
|
4533
4533
|
methods: [
|
|
4534
|
-
tempo_server.
|
|
4534
|
+
tempo_server.sessionLegacy({
|
|
4535
4535
|
store: backingStore,
|
|
4536
4536
|
getClient: () => client,
|
|
4537
4537
|
account: recipientAccount,
|
|
@@ -4616,7 +4616,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4616
4616
|
const backingStore = Store.memory()
|
|
4617
4617
|
const route = Mppx_server.create({
|
|
4618
4618
|
methods: [
|
|
4619
|
-
tempo_server.
|
|
4619
|
+
tempo_server.sessionLegacy({
|
|
4620
4620
|
store: backingStore,
|
|
4621
4621
|
getClient: () => client,
|
|
4622
4622
|
account: recipientAccount,
|
|
@@ -4699,7 +4699,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4699
4699
|
const backingStore = Store.memory()
|
|
4700
4700
|
const routeHandler = Mppx_server.create({
|
|
4701
4701
|
methods: [
|
|
4702
|
-
tempo_server.
|
|
4702
|
+
tempo_server.sessionLegacy({
|
|
4703
4703
|
store: backingStore,
|
|
4704
4704
|
getClient: () => client,
|
|
4705
4705
|
account: recipientAccount,
|
|
@@ -4734,7 +4734,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4734
4734
|
}
|
|
4735
4735
|
|
|
4736
4736
|
if (request.headers.get('Accept')?.includes('text/event-stream')) {
|
|
4737
|
-
return result.withReceipt(async function* (stream) {
|
|
4737
|
+
return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
|
|
4738
4738
|
await stream.charge()
|
|
4739
4739
|
yield 'chunk-1'
|
|
4740
4740
|
await stream.charge()
|
|
@@ -4773,7 +4773,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4773
4773
|
const backingStore = Store.memory()
|
|
4774
4774
|
const routeHandler = Mppx_server.create({
|
|
4775
4775
|
methods: [
|
|
4776
|
-
tempo_server.
|
|
4776
|
+
tempo_server.sessionLegacy({
|
|
4777
4777
|
store: backingStore,
|
|
4778
4778
|
getClient: () => client,
|
|
4779
4779
|
account: recipientAccount,
|
|
@@ -4793,7 +4793,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4793
4793
|
if (result.status === 402) return result.challenge
|
|
4794
4794
|
|
|
4795
4795
|
if (request.headers.get('Accept')?.includes('text/event-stream')) {
|
|
4796
|
-
return result.withReceipt(async function* (stream) {
|
|
4796
|
+
return result.withReceipt(async function* (stream: { charge(): Promise<void> }) {
|
|
4797
4797
|
await stream.charge()
|
|
4798
4798
|
yield 'chunk-1'
|
|
4799
4799
|
await stream.charge()
|
|
@@ -4845,7 +4845,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4845
4845
|
const backingStore = Store.memory()
|
|
4846
4846
|
const routeHandler = Mppx_server.create({
|
|
4847
4847
|
methods: [
|
|
4848
|
-
tempo_server.
|
|
4848
|
+
tempo_server.sessionLegacy({
|
|
4849
4849
|
store: backingStore,
|
|
4850
4850
|
getClient: () => client,
|
|
4851
4851
|
account: recipientAccount,
|
|
@@ -4958,7 +4958,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
4958
4958
|
const backingStore = Store.memory()
|
|
4959
4959
|
const routeHandler = Mppx_server.create({
|
|
4960
4960
|
methods: [
|
|
4961
|
-
tempo_server.
|
|
4961
|
+
tempo_server.sessionLegacy({
|
|
4962
4962
|
store: backingStore,
|
|
4963
4963
|
getClient: () => client,
|
|
4964
4964
|
account: recipientAccount,
|
|
@@ -5071,7 +5071,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5071
5071
|
const backingStore = Store.memory()
|
|
5072
5072
|
const routeHandler = Mppx_server.create({
|
|
5073
5073
|
methods: [
|
|
5074
|
-
tempo_server.
|
|
5074
|
+
tempo_server.sessionLegacy({
|
|
5075
5075
|
store: backingStore,
|
|
5076
5076
|
getClient: () => client,
|
|
5077
5077
|
account: recipientAccount,
|
|
@@ -5181,7 +5181,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5181
5181
|
test('rejects websocket receipts bound to a different channel', async () => {
|
|
5182
5182
|
const routeHandler = Mppx_server.create({
|
|
5183
5183
|
methods: [
|
|
5184
|
-
tempo_server.
|
|
5184
|
+
tempo_server.sessionLegacy({
|
|
5185
5185
|
store: Store.memory(),
|
|
5186
5186
|
getClient: () => client,
|
|
5187
5187
|
account: recipientAccount,
|
|
@@ -5268,7 +5268,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5268
5268
|
const backingStore = Store.memory()
|
|
5269
5269
|
const routeHandler = Mppx_server.create({
|
|
5270
5270
|
methods: [
|
|
5271
|
-
tempo_server.
|
|
5271
|
+
tempo_server.sessionLegacy({
|
|
5272
5272
|
store: backingStore,
|
|
5273
5273
|
getClient: () => client,
|
|
5274
5274
|
account: recipientAccount,
|
|
@@ -5361,7 +5361,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5361
5361
|
test('rejects close-ready receipts beyond local voucher state', async () => {
|
|
5362
5362
|
const routeHandler = Mppx_server.create({
|
|
5363
5363
|
methods: [
|
|
5364
|
-
tempo_server.
|
|
5364
|
+
tempo_server.sessionLegacy({
|
|
5365
5365
|
store: Store.memory(),
|
|
5366
5366
|
getClient: () => client,
|
|
5367
5367
|
account: recipientAccount,
|
|
@@ -5470,7 +5470,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5470
5470
|
const backingStore = Store.memory()
|
|
5471
5471
|
const routeHandler = Mppx_server.create({
|
|
5472
5472
|
methods: [
|
|
5473
|
-
tempo_server.
|
|
5473
|
+
tempo_server.sessionLegacy({
|
|
5474
5474
|
store: backingStore,
|
|
5475
5475
|
getClient: () => client,
|
|
5476
5476
|
account: recipientAccount,
|
|
@@ -5572,7 +5572,7 @@ describe.runIf(isLocalnet)('session', () => {
|
|
|
5572
5572
|
test('rejects tx-bearing open receipts replayed during websocket close', async () => {
|
|
5573
5573
|
const routeHandler = Mppx_server.create({
|
|
5574
5574
|
methods: [
|
|
5575
|
-
tempo_server.
|
|
5575
|
+
tempo_server.sessionLegacy({
|
|
5576
5576
|
store: Store.memory(),
|
|
5577
5577
|
getClient: () => client,
|
|
5578
5578
|
account: recipientAccount,
|
|
@@ -5691,7 +5691,7 @@ describe('monotonicity and TOCTOU (unit tests)', () => {
|
|
|
5691
5691
|
|
|
5692
5692
|
function seedChannel(
|
|
5693
5693
|
store: ChannelStore.ChannelStore,
|
|
5694
|
-
overrides: Partial<ChannelStore.
|
|
5694
|
+
overrides: Partial<ChannelStore.BaseState & ChannelStore.LegacyContractBackendState> = {},
|
|
5695
5695
|
) {
|
|
5696
5696
|
return store.updateChannel(testChannelId, () => ({
|
|
5697
5697
|
channelId: testChannelId,
|
|
@@ -6031,7 +6031,7 @@ describe('session default currency resolution', () => {
|
|
|
6031
6031
|
test('challenge contains USDC currency (mainnet default)', async () => {
|
|
6032
6032
|
const handler = Mppx_server.create({
|
|
6033
6033
|
methods: [
|
|
6034
|
-
tempo_server.
|
|
6034
|
+
tempo_server.sessionLegacy({
|
|
6035
6035
|
store: Store.memory(),
|
|
6036
6036
|
getClient: () => mockMainnetClient,
|
|
6037
6037
|
account: mockAccount,
|
|
@@ -6058,7 +6058,7 @@ describe('session default currency resolution', () => {
|
|
|
6058
6058
|
test('challenge contains pathUSD currency when testnet: true', async () => {
|
|
6059
6059
|
const handler = Mppx_server.create({
|
|
6060
6060
|
methods: [
|
|
6061
|
-
tempo_server.
|
|
6061
|
+
tempo_server.sessionLegacy({
|
|
6062
6062
|
store: Store.memory(),
|
|
6063
6063
|
getClient: () => mockTestnetClient,
|
|
6064
6064
|
account: mockAccount,
|
|
@@ -6085,7 +6085,7 @@ describe('session default currency resolution', () => {
|
|
|
6085
6085
|
test('challenge contains pathUSD currency (unknown chain)', async () => {
|
|
6086
6086
|
const handler = Mppx_server.create({
|
|
6087
6087
|
methods: [
|
|
6088
|
-
tempo_server.
|
|
6088
|
+
tempo_server.sessionLegacy({
|
|
6089
6089
|
store: Store.memory(),
|
|
6090
6090
|
getClient: () => mockTestnetClient,
|
|
6091
6091
|
account: mockAccount,
|
|
@@ -6111,7 +6111,7 @@ describe('session default currency resolution', () => {
|
|
|
6111
6111
|
test('explicit currency in challenge overrides testnet default', async () => {
|
|
6112
6112
|
const handler = Mppx_server.create({
|
|
6113
6113
|
methods: [
|
|
6114
|
-
tempo_server.
|
|
6114
|
+
tempo_server.sessionLegacy({
|
|
6115
6115
|
store: Store.memory(),
|
|
6116
6116
|
getClient: () => mockClient,
|
|
6117
6117
|
account: mockAccount,
|
|
@@ -6140,7 +6140,7 @@ describe('session default currency resolution', () => {
|
|
|
6140
6140
|
test('handler.session throws for zero-amount routes', () => {
|
|
6141
6141
|
const handler = Mppx_server.create({
|
|
6142
6142
|
methods: [
|
|
6143
|
-
tempo_server.
|
|
6143
|
+
tempo_server.sessionLegacy({
|
|
6144
6144
|
store: Store.memory(),
|
|
6145
6145
|
getClient: () => mockClient,
|
|
6146
6146
|
account: mockAccount,
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from 'viem'
|
|
21
21
|
import { tempo as tempo_chain } from 'viem/tempo/chains'
|
|
22
22
|
|
|
23
|
+
import * as Constants from '../../../Constants.js'
|
|
23
24
|
import {
|
|
24
25
|
AmountExceedsDepositError,
|
|
25
26
|
BadRequestError,
|
|
@@ -29,18 +30,25 @@ import {
|
|
|
29
30
|
InsufficientBalanceError,
|
|
30
31
|
InvalidSignatureError,
|
|
31
32
|
VerificationFailedError,
|
|
32
|
-
} from '
|
|
33
|
-
import type { Challenge, Credential } from '
|
|
34
|
-
import type { LooseOmit, NoExtraKeys } from '
|
|
35
|
-
import * as Method from '
|
|
36
|
-
import * as Store from '
|
|
37
|
-
import * as Client from '
|
|
38
|
-
import type * as z from '
|
|
39
|
-
import * as Account from '
|
|
40
|
-
import * as defaults from '
|
|
41
|
-
import * as FeePayer from '
|
|
42
|
-
import type * as types from '
|
|
43
|
-
import * as Methods from '
|
|
33
|
+
} from '../../../Errors.js'
|
|
34
|
+
import type { Challenge, Credential } from '../../../index.js'
|
|
35
|
+
import type { LooseOmit, NoExtraKeys } from '../../../internal/types.js'
|
|
36
|
+
import * as Method from '../../../Method.js'
|
|
37
|
+
import * as Store from '../../../Store.js'
|
|
38
|
+
import * as Client from '../../../viem/Client.js'
|
|
39
|
+
import type * as z from '../../../zod.js'
|
|
40
|
+
import * as Account from '../../internal/account.js'
|
|
41
|
+
import * as defaults from '../../internal/defaults.js'
|
|
42
|
+
import * as FeePayer from '../../internal/fee-payer.js'
|
|
43
|
+
import type * as types from '../../internal/types.js'
|
|
44
|
+
import * as Methods from '../../Methods.js'
|
|
45
|
+
import {
|
|
46
|
+
captureRequestBodyProbe,
|
|
47
|
+
isSessionContentRequest,
|
|
48
|
+
} from '../../server/internal/request-body.js'
|
|
49
|
+
import * as Transport from '../../server/internal/transport.js'
|
|
50
|
+
import { createSessionReceipt } from '../../session/precompile/Protocol.js'
|
|
51
|
+
import type { SessionReceipt } from '../../session/precompile/Protocol.js'
|
|
44
52
|
import {
|
|
45
53
|
broadcastOpenTransaction,
|
|
46
54
|
broadcastTopUpTransaction,
|
|
@@ -50,11 +58,8 @@ import {
|
|
|
50
58
|
settleOnChain,
|
|
51
59
|
} from '../session/Chain.js'
|
|
52
60
|
import * as ChannelStore from '../session/ChannelStore.js'
|
|
53
|
-
import {
|
|
54
|
-
import type { SessionCredentialPayload, SessionReceipt, SignedVoucher } from '../session/Types.js'
|
|
61
|
+
import type { LegacySessionCredentialPayload, LegacySignedVoucher } from '../session/Types.js'
|
|
55
62
|
import { parseVoucherFromPayload, verifyVoucher } from '../session/Voucher.js'
|
|
56
|
-
import { captureRequestBodyProbe, isSessionContentRequest } from './internal/request-body.js'
|
|
57
|
-
import * as Transport from './internal/transport.js'
|
|
58
63
|
|
|
59
64
|
/** Challenge methodDetails shape for session methods. */
|
|
60
65
|
type SessionMethodDetails = {
|
|
@@ -63,6 +68,7 @@ type SessionMethodDetails = {
|
|
|
63
68
|
channelId?: Hex | undefined
|
|
64
69
|
minVoucherDelta?: string | undefined
|
|
65
70
|
feePayer?: boolean | undefined
|
|
71
|
+
sessionProtocol?: Constants.SessionProtocol | undefined
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
/**
|
|
@@ -183,11 +189,13 @@ export function session<const parameters extends session.Parameters>(
|
|
|
183
189
|
chainId,
|
|
184
190
|
escrowContract: resolvedEscrow,
|
|
185
191
|
feePayer: resolvedFeePayer,
|
|
192
|
+
sessionProtocol: Constants.SessionProtocols.v1,
|
|
186
193
|
}
|
|
187
194
|
},
|
|
188
195
|
|
|
189
196
|
async verify({ credential, envelope, request }) {
|
|
190
|
-
const { challenge, payload } =
|
|
197
|
+
const { challenge, payload } =
|
|
198
|
+
credential as Credential.Credential<LegacySessionCredentialPayload>
|
|
191
199
|
|
|
192
200
|
const resolvedRequest = (() => {
|
|
193
201
|
const parsed = Methods.session.schema.request.safeParse(request)
|
|
@@ -315,7 +323,7 @@ export function session<const parameters extends session.Parameters>(
|
|
|
315
323
|
// during verification. Non-billable requests are treated as management
|
|
316
324
|
// updates; billable requests fall through to the application handler.
|
|
317
325
|
respond({ credential, envelope, input }) {
|
|
318
|
-
const { payload } = credential as Credential.Credential<
|
|
326
|
+
const { payload } = credential as Credential.Credential<LegacySessionCredentialPayload>
|
|
319
327
|
const request = envelope?.capturedRequest ?? captureRequestBodyProbe(input)
|
|
320
328
|
|
|
321
329
|
if (payload.action === 'close') return new Response(null, { status: 204 })
|
|
@@ -333,6 +341,7 @@ function isSseNegotiationRequest(input: Pick<Method.CapturedRequest, 'headers'>)
|
|
|
333
341
|
return input.headers.get('Accept')?.includes('text/event-stream') ?? false
|
|
334
342
|
}
|
|
335
343
|
|
|
344
|
+
/** Type helpers for the legacy contract-backed session server method. */
|
|
336
345
|
export declare namespace session {
|
|
337
346
|
type Defaults = LooseOmit<
|
|
338
347
|
Method.RequestDefaults<typeof Methods.session>,
|
|
@@ -537,7 +546,7 @@ async function verifyAndAcceptVoucher(parameters: {
|
|
|
537
546
|
challenge: Challenge.Challenge
|
|
538
547
|
channel: ChannelStore.State
|
|
539
548
|
channelId: Hex
|
|
540
|
-
voucher:
|
|
549
|
+
voucher: LegacySignedVoucher
|
|
541
550
|
onChain: OnChainChannel
|
|
542
551
|
}): Promise<SessionReceipt> {
|
|
543
552
|
const { store, minVoucherDelta, challenge, channel, channelId, voucher, onChain } = parameters
|
|
@@ -635,7 +644,7 @@ async function handleOpen(
|
|
|
635
644
|
store: ChannelStore.ChannelStore,
|
|
636
645
|
client: viem_Client,
|
|
637
646
|
challenge: Challenge.Challenge,
|
|
638
|
-
payload:
|
|
647
|
+
payload: LegacySessionCredentialPayload & { action: 'open' },
|
|
639
648
|
methodDetails: SessionMethodDetails,
|
|
640
649
|
feePayer: viem_Account | undefined,
|
|
641
650
|
isSponsored: boolean,
|
|
@@ -774,7 +783,7 @@ async function handleTopUp(
|
|
|
774
783
|
store: ChannelStore.ChannelStore,
|
|
775
784
|
client: viem_Client,
|
|
776
785
|
challenge: Challenge.Challenge,
|
|
777
|
-
payload:
|
|
786
|
+
payload: LegacySessionCredentialPayload & { action: 'topUp' },
|
|
778
787
|
methodDetails: SessionMethodDetails,
|
|
779
788
|
feePayer: viem_Account | undefined,
|
|
780
789
|
isSponsored: boolean,
|
|
@@ -824,7 +833,7 @@ async function handleVoucher(
|
|
|
824
833
|
client: viem_Client,
|
|
825
834
|
minVoucherDelta: bigint,
|
|
826
835
|
challenge: Challenge.Challenge,
|
|
827
|
-
payload:
|
|
836
|
+
payload: LegacySessionCredentialPayload & { action: 'voucher' },
|
|
828
837
|
methodDetails: SessionMethodDetails,
|
|
829
838
|
channelStateTtl: number,
|
|
830
839
|
lastOnChainVerified: Map<Hex, number>,
|
|
@@ -896,7 +905,7 @@ async function handleClose(
|
|
|
896
905
|
store: ChannelStore.ChannelStore,
|
|
897
906
|
client: viem_Client,
|
|
898
907
|
challenge: Challenge.Challenge,
|
|
899
|
-
payload:
|
|
908
|
+
payload: LegacySessionCredentialPayload & { action: 'close' },
|
|
900
909
|
methodDetails: SessionMethodDetails,
|
|
901
910
|
account?: viem_Account,
|
|
902
911
|
feePayer?: viem_Account,
|