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
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import { prepareTransactionRequest, signTransaction, waitForTransactionReceipt } from 'viem/actions'
|
|
11
11
|
import { Addresses, Transaction } from 'viem/tempo'
|
|
12
12
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
13
|
-
import {
|
|
13
|
+
import { tempoNetwork } from '~test/config.js'
|
|
14
14
|
import {
|
|
15
15
|
closeChannelOnChain,
|
|
16
16
|
deployEscrow,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
signOpenChannel,
|
|
19
19
|
signTopUpChannel,
|
|
20
20
|
topUpChannel,
|
|
21
|
-
} from '~test/tempo/session.js'
|
|
21
|
+
} from '~test/tempo/legacy/session.js'
|
|
22
22
|
import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
|
|
23
23
|
|
|
24
24
|
import {
|
|
@@ -33,9 +33,8 @@ import {
|
|
|
33
33
|
import * as Channel from './Channel.js'
|
|
34
34
|
import { signVoucher } from './Voucher.js'
|
|
35
35
|
|
|
36
|
-
const isLocalnet = nodeEnv === 'localnet'
|
|
37
|
-
|
|
38
36
|
const UINT128_MAX = 2n ** 128n - 1n
|
|
37
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
39
38
|
|
|
40
39
|
describe('assertUint128 (via settleOnChain / closeOnChain)', () => {
|
|
41
40
|
const mockClient = { chain: { id: 42431 } } as any
|
|
@@ -20,23 +20,28 @@ import {
|
|
|
20
20
|
} from 'viem/actions'
|
|
21
21
|
import { Transaction } from 'viem/tempo'
|
|
22
22
|
|
|
23
|
-
import { BadRequestError, ChannelClosedError, VerificationFailedError } from '
|
|
24
|
-
import * as TempoAddress from '
|
|
25
|
-
import * as defaults from '
|
|
26
|
-
import * as FeePayer from '
|
|
27
|
-
import { resolveFeeToken } from '
|
|
23
|
+
import { BadRequestError, ChannelClosedError, VerificationFailedError } from '../../../Errors.js'
|
|
24
|
+
import * as TempoAddress from '../../internal/address.js'
|
|
25
|
+
import * as defaults from '../../internal/defaults.js'
|
|
26
|
+
import * as FeePayer from '../../internal/fee-payer.js'
|
|
27
|
+
import { resolveFeeToken } from '../../internal/fee-token.js'
|
|
28
28
|
import * as Channel from './Channel.js'
|
|
29
29
|
import { escrowAbi } from './escrow.abi.js'
|
|
30
|
-
import type {
|
|
30
|
+
import type { LegacySignedVoucher } from './Types.js'
|
|
31
31
|
|
|
32
32
|
export { escrowAbi }
|
|
33
33
|
|
|
34
|
+
type SenderSignedTransaction = {
|
|
35
|
+
from?: Address | undefined
|
|
36
|
+
signature?: unknown
|
|
37
|
+
}
|
|
38
|
+
|
|
34
39
|
/**
|
|
35
40
|
* Asserts that a deserialized transaction has an existing sender signature —
|
|
36
41
|
* required before fee payer co-signing to prevent the fee payer from becoming
|
|
37
42
|
* the sender.
|
|
38
43
|
*/
|
|
39
|
-
function assertSenderSigned(transaction:
|
|
44
|
+
function assertSenderSigned(transaction: SenderSignedTransaction): void {
|
|
40
45
|
if (!transaction.signature || !transaction.from)
|
|
41
46
|
throw new BadRequestError({
|
|
42
47
|
reason: 'Transaction must be signed by the sender before fee payer co-signing',
|
|
@@ -109,7 +114,7 @@ export type SettleOptions =
|
|
|
109
114
|
export async function settleOnChain(
|
|
110
115
|
client: Client,
|
|
111
116
|
escrowContract: Address,
|
|
112
|
-
voucher:
|
|
117
|
+
voucher: LegacySignedVoucher,
|
|
113
118
|
options?: SettleOptions,
|
|
114
119
|
): Promise<Hex> {
|
|
115
120
|
assertUint128(voucher.cumulativeAmount)
|
|
@@ -160,7 +165,7 @@ export type CloseOptions =
|
|
|
160
165
|
export async function closeOnChain(
|
|
161
166
|
client: Client,
|
|
162
167
|
escrowContract: Address,
|
|
163
|
-
voucher:
|
|
168
|
+
voucher: LegacySignedVoucher,
|
|
164
169
|
options?: CloseOptions,
|
|
165
170
|
): Promise<Hex> {
|
|
166
171
|
assertUint128(voucher.cumulativeAmount)
|
|
@@ -298,11 +303,75 @@ const erc20ApproveSelector = /*#__PURE__*/ toFunctionSelector(
|
|
|
298
303
|
'function approve(address spender, uint256 amount)',
|
|
299
304
|
)
|
|
300
305
|
|
|
306
|
+
/** Result returned after a legacy open transaction is broadcast or recovered from on-chain state. */
|
|
301
307
|
export type BroadcastResult = {
|
|
302
308
|
txHash: Hex | undefined
|
|
303
309
|
onChain: OnChainChannel
|
|
304
310
|
}
|
|
305
311
|
|
|
312
|
+
/** Inputs for validating an ERC-20 approve call inside a fee-sponsored legacy channel transaction. */
|
|
313
|
+
type SponsoredApproveCallParameters = {
|
|
314
|
+
action: 'open' | 'topUp'
|
|
315
|
+
call: TempoCall
|
|
316
|
+
currency: Address
|
|
317
|
+
escrowContract: Address
|
|
318
|
+
expectedAmount: bigint
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/** Inputs for extracting the escrow open call from a fee-sponsored legacy channel transaction. */
|
|
322
|
+
type SponsoredOpenCallsParameters = {
|
|
323
|
+
calls: readonly TempoCall[]
|
|
324
|
+
currency: Address
|
|
325
|
+
deposit: bigint
|
|
326
|
+
escrowContract: Address
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/** Inputs for extracting the escrow top-up call from a fee-sponsored legacy channel transaction. */
|
|
330
|
+
type SponsoredTopUpCallsParameters = {
|
|
331
|
+
calls: readonly TempoCall[]
|
|
332
|
+
currency: Address
|
|
333
|
+
escrowContract: Address
|
|
334
|
+
topUpAmount: bigint
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Inputs for broadcasting and validating a legacy contract-backed open transaction. */
|
|
338
|
+
export type BroadcastOpenTransactionParameters = {
|
|
339
|
+
beforeBroadcast?: ((onChain: OnChainChannel) => Promise<void> | void) | undefined
|
|
340
|
+
challengeExpires?: string | undefined
|
|
341
|
+
channelId: Hex
|
|
342
|
+
client: Client
|
|
343
|
+
currency: Address
|
|
344
|
+
escrowContract: Address
|
|
345
|
+
feePayer?: Account | undefined
|
|
346
|
+
feePayerPolicy?: Partial<FeePayer.Policy> | undefined
|
|
347
|
+
isSponsored?: boolean | undefined
|
|
348
|
+
recipient: Address
|
|
349
|
+
serializedTransaction: Hex
|
|
350
|
+
/** When false, simulates instead of waiting for confirmation and returns derived on-chain state. @default true */
|
|
351
|
+
waitForConfirmation?: boolean | undefined
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** Inputs for broadcasting and validating a legacy contract-backed top-up transaction. */
|
|
355
|
+
export type BroadcastTopUpTransactionParameters = {
|
|
356
|
+
challengeExpires?: string | undefined
|
|
357
|
+
channelId: Hex
|
|
358
|
+
client: Client
|
|
359
|
+
currency: Address
|
|
360
|
+
declaredDeposit: bigint
|
|
361
|
+
escrowContract: Address
|
|
362
|
+
feePayer?: Account | undefined
|
|
363
|
+
feePayerPolicy?: Partial<FeePayer.Policy> | undefined
|
|
364
|
+
isSponsored?: boolean | undefined
|
|
365
|
+
previousDeposit: bigint
|
|
366
|
+
serializedTransaction: Hex
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** Result returned after a legacy top-up transaction is broadcast and verified. */
|
|
370
|
+
export type BroadcastTopUpTransactionResult = {
|
|
371
|
+
newDeposit: bigint
|
|
372
|
+
txHash: Hex
|
|
373
|
+
}
|
|
374
|
+
|
|
306
375
|
type TempoCall = NonNullable<ReturnType<(typeof Transaction)['deserialize']>['calls']>[number]
|
|
307
376
|
|
|
308
377
|
function assertCallHasTargetAndData(call: TempoCall): { to: Address; data: Hex } {
|
|
@@ -314,13 +383,7 @@ function assertCallHasTargetAndData(call: TempoCall): { to: Address; data: Hex }
|
|
|
314
383
|
return { to: call.to, data: call.data }
|
|
315
384
|
}
|
|
316
385
|
|
|
317
|
-
function validateSponsoredApproveCall(parameters: {
|
|
318
|
-
action: 'open' | 'topUp'
|
|
319
|
-
call: TempoCall
|
|
320
|
-
currency: Address
|
|
321
|
-
escrowContract: Address
|
|
322
|
-
expectedAmount: bigint
|
|
323
|
-
}) {
|
|
386
|
+
function validateSponsoredApproveCall(parameters: SponsoredApproveCallParameters) {
|
|
324
387
|
const { action, call, currency, escrowContract, expectedAmount } = parameters
|
|
325
388
|
const { to, data } = assertCallHasTargetAndData(call)
|
|
326
389
|
|
|
@@ -346,12 +409,7 @@ function validateSponsoredApproveCall(parameters: {
|
|
|
346
409
|
}
|
|
347
410
|
}
|
|
348
411
|
|
|
349
|
-
function validateSponsoredOpenCalls(parameters: {
|
|
350
|
-
calls: readonly TempoCall[]
|
|
351
|
-
currency: Address
|
|
352
|
-
escrowContract: Address
|
|
353
|
-
deposit: bigint
|
|
354
|
-
}) {
|
|
412
|
+
function validateSponsoredOpenCalls(parameters: SponsoredOpenCallsParameters) {
|
|
355
413
|
const { calls, currency, escrowContract, deposit } = parameters
|
|
356
414
|
|
|
357
415
|
let openCall: TempoCall | undefined
|
|
@@ -401,12 +459,7 @@ function validateSponsoredOpenCalls(parameters: {
|
|
|
401
459
|
return openCall
|
|
402
460
|
}
|
|
403
461
|
|
|
404
|
-
function validateSponsoredTopUpCalls(parameters: {
|
|
405
|
-
calls: readonly TempoCall[]
|
|
406
|
-
currency: Address
|
|
407
|
-
escrowContract: Address
|
|
408
|
-
topUpAmount: bigint
|
|
409
|
-
}) {
|
|
462
|
+
function validateSponsoredTopUpCalls(parameters: SponsoredTopUpCallsParameters) {
|
|
410
463
|
const { calls, currency, escrowContract, topUpAmount } = parameters
|
|
411
464
|
|
|
412
465
|
let topUpCall: TempoCall | undefined
|
|
@@ -456,21 +509,9 @@ function validateSponsoredTopUpCalls(parameters: {
|
|
|
456
509
|
return topUpCall
|
|
457
510
|
}
|
|
458
511
|
|
|
459
|
-
export async function broadcastOpenTransaction(
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
escrowContract: Address
|
|
463
|
-
channelId: Hex
|
|
464
|
-
recipient: Address
|
|
465
|
-
currency: Address
|
|
466
|
-
challengeExpires?: string | undefined
|
|
467
|
-
feePayerPolicy?: Partial<FeePayer.Policy> | undefined
|
|
468
|
-
feePayer?: Account | undefined
|
|
469
|
-
isSponsored?: boolean | undefined
|
|
470
|
-
beforeBroadcast?: ((onChain: OnChainChannel) => Promise<void> | void) | undefined
|
|
471
|
-
/** When false, simulates instead of waiting for confirmation and returns derived on-chain state. @default true */
|
|
472
|
-
waitForConfirmation?: boolean | undefined
|
|
473
|
-
}): Promise<BroadcastResult> {
|
|
512
|
+
export async function broadcastOpenTransaction(
|
|
513
|
+
parameters: BroadcastOpenTransactionParameters,
|
|
514
|
+
): Promise<BroadcastResult> {
|
|
474
515
|
const {
|
|
475
516
|
client,
|
|
476
517
|
serializedTransaction,
|
|
@@ -569,8 +610,8 @@ export async function broadcastOpenTransaction(parameters: {
|
|
|
569
610
|
reason: 'open transaction does not match claimed channelId',
|
|
570
611
|
})
|
|
571
612
|
|
|
572
|
-
const
|
|
573
|
-
|
|
613
|
+
const defaultFeeToken = defaults.currency[client.chain?.id as keyof typeof defaults.currency]
|
|
614
|
+
const resolvedFeeToken = transaction.feeToken ?? defaultFeeToken
|
|
574
615
|
|
|
575
616
|
const pendingOnChain = {
|
|
576
617
|
finalized: false,
|
|
@@ -594,10 +635,10 @@ export async function broadcastOpenTransaction(parameters: {
|
|
|
594
635
|
|
|
595
636
|
const sponsored = FeePayer.prepareSponsoredTransaction({
|
|
596
637
|
account: feePayer,
|
|
638
|
+
allowedFeeTokens: defaultFeeToken ? [defaultFeeToken] : undefined,
|
|
597
639
|
challengeExpires,
|
|
598
640
|
chainId: client.chain!.id,
|
|
599
641
|
details: { channelId, currency, recipient },
|
|
600
|
-
expectedFeeToken: defaults.currency[client.chain?.id as keyof typeof defaults.currency],
|
|
601
642
|
policy: feePayerPolicy,
|
|
602
643
|
transaction: {
|
|
603
644
|
...transaction,
|
|
@@ -660,19 +701,9 @@ export async function broadcastOpenTransaction(parameters: {
|
|
|
660
701
|
return { txHash, onChain }
|
|
661
702
|
}
|
|
662
703
|
|
|
663
|
-
export async function broadcastTopUpTransaction(
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
escrowContract: Address
|
|
667
|
-
channelId: Hex
|
|
668
|
-
currency: Address
|
|
669
|
-
declaredDeposit: bigint
|
|
670
|
-
previousDeposit: bigint
|
|
671
|
-
challengeExpires?: string | undefined
|
|
672
|
-
feePayerPolicy?: Partial<FeePayer.Policy> | undefined
|
|
673
|
-
feePayer?: Account | undefined
|
|
674
|
-
isSponsored?: boolean | undefined
|
|
675
|
-
}): Promise<{ txHash: Hex; newDeposit: bigint }> {
|
|
704
|
+
export async function broadcastTopUpTransaction(
|
|
705
|
+
parameters: BroadcastTopUpTransactionParameters,
|
|
706
|
+
): Promise<BroadcastTopUpTransactionResult> {
|
|
676
707
|
const {
|
|
677
708
|
client,
|
|
678
709
|
serializedTransaction,
|
|
@@ -743,9 +774,10 @@ export async function broadcastTopUpTransaction(parameters: {
|
|
|
743
774
|
reason: 'transaction does not contain a valid escrow topUp call',
|
|
744
775
|
})
|
|
745
776
|
|
|
746
|
-
const
|
|
777
|
+
const defaultFeeToken = defaults.currency[client.chain?.id as keyof typeof defaults.currency]
|
|
747
778
|
const sponsored = FeePayer.prepareSponsoredTransaction({
|
|
748
779
|
account: feePayer,
|
|
780
|
+
allowedFeeTokens: defaultFeeToken ? [defaultFeeToken] : undefined,
|
|
749
781
|
challengeExpires,
|
|
750
782
|
chainId: client.chain!.id,
|
|
751
783
|
details: {
|
|
@@ -753,12 +785,11 @@ export async function broadcastTopUpTransaction(parameters: {
|
|
|
753
785
|
channelId,
|
|
754
786
|
currency,
|
|
755
787
|
},
|
|
756
|
-
expectedFeeToken,
|
|
757
788
|
policy: feePayerPolicy,
|
|
758
789
|
transaction: {
|
|
759
790
|
...transaction,
|
|
760
|
-
...((transaction.feeToken ??
|
|
761
|
-
? { feeToken: transaction.feeToken ??
|
|
791
|
+
...((transaction.feeToken ?? defaultFeeToken)
|
|
792
|
+
? { feeToken: transaction.feeToken ?? defaultFeeToken }
|
|
762
793
|
: {}),
|
|
763
794
|
},
|
|
764
795
|
})
|
|
@@ -30,6 +30,7 @@ export function computeId(parameters: computeId.Parameters): Hex.Hex {
|
|
|
30
30
|
return Hash.keccak256(encoded)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/** Type helpers for {@link computeId}. */
|
|
33
34
|
export declare namespace computeId {
|
|
34
35
|
type Parameters = {
|
|
35
36
|
/** Address authorized to sign vouchers on behalf of the payer. */
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem'
|
|
2
|
+
import { describe, expect, test } from 'vp/test'
|
|
3
|
+
|
|
4
|
+
import * as Store from '../../../Store.js'
|
|
5
|
+
import { chainId, escrowContract as escrowContractDefaults } from '../../internal/defaults.js'
|
|
6
|
+
import * as ChannelStore from './ChannelStore.js'
|
|
7
|
+
|
|
8
|
+
const channelId = '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex
|
|
9
|
+
|
|
10
|
+
function legacyChannel(
|
|
11
|
+
overrides: Partial<ChannelStore.LegacyState> = {},
|
|
12
|
+
): ChannelStore.LegacyState {
|
|
13
|
+
return {
|
|
14
|
+
channelId,
|
|
15
|
+
payer: '0x0000000000000000000000000000000000000001' as Address,
|
|
16
|
+
payee: '0x0000000000000000000000000000000000000002' as Address,
|
|
17
|
+
token: '0x0000000000000000000000000000000000000003' as Address,
|
|
18
|
+
authorizedSigner: '0x0000000000000000000000000000000000000004' as Address,
|
|
19
|
+
chainId: 42431,
|
|
20
|
+
escrowContract: escrowContractDefaults[chainId.testnet] as Address,
|
|
21
|
+
deposit: 10_000_000n,
|
|
22
|
+
settledOnChain: 0n,
|
|
23
|
+
highestVoucherAmount: 10_000_000n,
|
|
24
|
+
highestVoucher: null,
|
|
25
|
+
spent: 0n,
|
|
26
|
+
units: 0,
|
|
27
|
+
closeRequestedAt: 0n,
|
|
28
|
+
finalized: false,
|
|
29
|
+
createdAt: '2025-01-01T00:00:00.000Z',
|
|
30
|
+
...overrides,
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe('legacy ChannelStore', () => {
|
|
35
|
+
test('keeps existing contract-backed channels compatible when backend fields are absent', async () => {
|
|
36
|
+
const store = ChannelStore.fromStore(Store.memory())
|
|
37
|
+
await store.updateChannel(channelId, () => legacyChannel())
|
|
38
|
+
|
|
39
|
+
const loaded = await store.getChannel(channelId)
|
|
40
|
+
expect(loaded).not.toBeNull()
|
|
41
|
+
expect(ChannelStore.isContractState(loaded!)).toBe(true)
|
|
42
|
+
expect(loaded!.backend).toBeUndefined()
|
|
43
|
+
expect('operator' in loaded!).toBe(false)
|
|
44
|
+
expect('salt' in loaded!).toBe(false)
|
|
45
|
+
expect('expiringNonceHash' in loaded!).toBe(false)
|
|
46
|
+
expect('descriptor' in loaded!).toBe(false)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test('supports explicit contract-backed channel state', async () => {
|
|
50
|
+
const store = ChannelStore.fromStore(Store.memory())
|
|
51
|
+
await store.updateChannel(channelId, () => legacyChannel({ backend: 'contract' }))
|
|
52
|
+
|
|
53
|
+
const loaded = await store.getChannel(channelId)
|
|
54
|
+
expect(loaded).not.toBeNull()
|
|
55
|
+
expect(ChannelStore.isContractState(loaded!)).toBe(true)
|
|
56
|
+
expect(loaded!.backend).toBe('contract')
|
|
57
|
+
})
|
|
58
|
+
})
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy contract-backed session channel-store facade.
|
|
3
|
+
*
|
|
4
|
+
* Legacy code imports channel-store types and helpers from this module so the
|
|
5
|
+
* contract-backed backend stays rooted under `tempo/legacy`. The underlying
|
|
6
|
+
* store adapter is shared with the TIP-1034 implementation because both
|
|
7
|
+
* backends persist the same accounting counters.
|
|
8
|
+
*/
|
|
9
|
+
import type * as SharedChannelStore from '../../session/server/ChannelStore.js'
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
deductFromChannel,
|
|
13
|
+
fromStore,
|
|
14
|
+
normalizeChannelId,
|
|
15
|
+
type BackendState,
|
|
16
|
+
type BaseState,
|
|
17
|
+
type ChannelStore,
|
|
18
|
+
type DeductResult,
|
|
19
|
+
type State,
|
|
20
|
+
} from '../../session/server/ChannelStore.js'
|
|
21
|
+
|
|
22
|
+
/** State for a legacy smart-contract-backed payment channel. */
|
|
23
|
+
export interface LegacyContractBackendState {
|
|
24
|
+
/** Channel backend. Omitted for existing legacy records. */
|
|
25
|
+
backend?: 'contract' | undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** @deprecated Use {@link LegacyContractBackendState}. */
|
|
29
|
+
export type ContractBackendState = LegacyContractBackendState
|
|
30
|
+
|
|
31
|
+
/** Legacy contract-backed channel state persisted by `tempo.sessionLegacy`. */
|
|
32
|
+
export type LegacyState = SharedChannelStore.BaseState & LegacyContractBackendState
|
|
33
|
+
|
|
34
|
+
/** Returns whether a channel is backed by the legacy smart contract escrow. */
|
|
35
|
+
export function isContractState(
|
|
36
|
+
state: SharedChannelStore.State,
|
|
37
|
+
): state is SharedChannelStore.BaseState & LegacyContractBackendState {
|
|
38
|
+
return state.backend === undefined || state.backend === 'contract'
|
|
39
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem'
|
|
2
|
+
|
|
3
|
+
import type { SessionSignedVoucher, SessionVoucher } from '../../session/precompile/Protocol.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Legacy credential payload that opens a smart-contract-backed channel and authorizes initial spend.
|
|
7
|
+
*/
|
|
8
|
+
export type LegacyOpenCredentialPayload = {
|
|
9
|
+
action: 'open'
|
|
10
|
+
type: 'transaction'
|
|
11
|
+
/** Session channel ID. */
|
|
12
|
+
channelId: Hex
|
|
13
|
+
/** Signed transaction containing the channel-open call. */
|
|
14
|
+
transaction: Hex
|
|
15
|
+
/** Voucher signature for `cumulativeAmount`. */
|
|
16
|
+
signature: Hex
|
|
17
|
+
/** Voucher signer selected for the opened channel. */
|
|
18
|
+
authorizedSigner?: Address | undefined
|
|
19
|
+
/** Initial cumulative spend authorized by the opening voucher, as raw units. */
|
|
20
|
+
cumulativeAmount: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Legacy credential payload that adds deposit to an existing smart-contract-backed channel. */
|
|
24
|
+
export type LegacyTopUpCredentialPayload = {
|
|
25
|
+
action: 'topUp'
|
|
26
|
+
type: 'transaction'
|
|
27
|
+
/** Session channel ID being topped up. */
|
|
28
|
+
channelId: Hex
|
|
29
|
+
/** Signed transaction containing the channel top-up call. */
|
|
30
|
+
transaction: Hex
|
|
31
|
+
/** Additional deposit to add, as raw units. */
|
|
32
|
+
additionalDeposit: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Legacy credential payload that increases cumulative spend authorization. */
|
|
36
|
+
export type LegacyVoucherCredentialPayload = {
|
|
37
|
+
action: 'voucher'
|
|
38
|
+
/** Session channel ID the voucher applies to. */
|
|
39
|
+
channelId: Hex
|
|
40
|
+
/** Highest cumulative spend authorized by this voucher, as raw units. */
|
|
41
|
+
cumulativeAmount: string
|
|
42
|
+
/** Voucher signature for `cumulativeAmount`. */
|
|
43
|
+
signature: Hex
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Legacy credential payload that cooperatively closes a channel at final cumulative spend. */
|
|
47
|
+
export type LegacyCloseCredentialPayload = {
|
|
48
|
+
action: 'close'
|
|
49
|
+
/** Session channel ID being closed. */
|
|
50
|
+
channelId: Hex
|
|
51
|
+
/** Final cumulative spend authorized at close, as raw units. */
|
|
52
|
+
cumulativeAmount: string
|
|
53
|
+
/** Voucher signature for `cumulativeAmount`. */
|
|
54
|
+
signature: Hex
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Legacy smart-contract-backed session credential payload.
|
|
59
|
+
*/
|
|
60
|
+
export type LegacySessionCredentialPayload =
|
|
61
|
+
| LegacyOpenCredentialPayload
|
|
62
|
+
| LegacyTopUpCredentialPayload
|
|
63
|
+
| LegacyVoucherCredentialPayload
|
|
64
|
+
| LegacyCloseCredentialPayload
|
|
65
|
+
|
|
66
|
+
/** Legacy smart-contract-backed voucher for cumulative payment. */
|
|
67
|
+
export type LegacyVoucher = SessionVoucher
|
|
68
|
+
|
|
69
|
+
/** Legacy smart-contract-backed voucher with EIP-712 signature. */
|
|
70
|
+
export type LegacySignedVoucher = SessionSignedVoucher
|
|
71
|
+
|
|
72
|
+
/** @deprecated Use {@link LegacyVoucher}. */
|
|
73
|
+
export type Voucher = LegacyVoucher
|
|
74
|
+
|
|
75
|
+
/** @deprecated Use {@link LegacySignedVoucher}. */
|
|
76
|
+
export type SignedVoucher = LegacySignedVoucher
|
|
77
|
+
|
|
78
|
+
/** @deprecated Use {@link LegacyOpenCredentialPayload}. */
|
|
79
|
+
export type OpenCredentialPayload = LegacyOpenCredentialPayload
|
|
80
|
+
|
|
81
|
+
/** @deprecated Use {@link LegacyTopUpCredentialPayload}. */
|
|
82
|
+
export type TopUpCredentialPayload = LegacyTopUpCredentialPayload
|
|
83
|
+
|
|
84
|
+
/** @deprecated Use {@link LegacyVoucherCredentialPayload}. */
|
|
85
|
+
export type VoucherCredentialPayload = LegacyVoucherCredentialPayload
|
|
86
|
+
|
|
87
|
+
/** @deprecated Use {@link LegacyCloseCredentialPayload}. */
|
|
88
|
+
export type CloseCredentialPayload = LegacyCloseCredentialPayload
|
|
89
|
+
|
|
90
|
+
/** @deprecated Use {@link LegacySessionCredentialPayload}. */
|
|
91
|
+
export type SessionCredentialPayload = LegacySessionCredentialPayload
|
|
@@ -4,8 +4,8 @@ import type { Account, Client, Hex } from 'viem'
|
|
|
4
4
|
import { hashTypedData } from 'viem'
|
|
5
5
|
import { signTypedData } from 'viem/actions'
|
|
6
6
|
|
|
7
|
-
import { getAccountSignerAddress, isAccessKeyAccount } from '
|
|
8
|
-
import type {
|
|
7
|
+
import { getAccountSignerAddress, isAccessKeyAccount } from '../../internal/account.js'
|
|
8
|
+
import type { LegacySignedVoucher, LegacyVoucher } from './Types.js'
|
|
9
9
|
|
|
10
10
|
/** Must match the on-chain TempoStreamChannel DOMAIN_SEPARATOR name. */
|
|
11
11
|
const DOMAIN_NAME = 'Tempo Stream Channel'
|
|
@@ -37,14 +37,18 @@ const voucherTypes = {
|
|
|
37
37
|
|
|
38
38
|
const acceptTip1020VoucherSignatures = false
|
|
39
39
|
|
|
40
|
-
function getVoucherMessage(message:
|
|
40
|
+
function getVoucherMessage(message: LegacyVoucher) {
|
|
41
41
|
return {
|
|
42
42
|
channelId: message.channelId,
|
|
43
43
|
cumulativeAmount: message.cumulativeAmount,
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
function getVoucherDigest(
|
|
47
|
+
function getVoucherDigest(
|
|
48
|
+
escrowContract: Address.Address,
|
|
49
|
+
chainId: number,
|
|
50
|
+
message: LegacyVoucher,
|
|
51
|
+
) {
|
|
48
52
|
return hashTypedData({
|
|
49
53
|
domain: getVoucherDomain(escrowContract, chainId),
|
|
50
54
|
types: voucherTypes,
|
|
@@ -56,7 +60,7 @@ function getVoucherDigest(escrowContract: Address.Address, chainId: number, mess
|
|
|
56
60
|
async function signVoucherTypedData(
|
|
57
61
|
client: Client,
|
|
58
62
|
account: Account,
|
|
59
|
-
message:
|
|
63
|
+
message: LegacyVoucher,
|
|
60
64
|
escrowContract: Address.Address,
|
|
61
65
|
chainId: number,
|
|
62
66
|
): Promise<Hex> {
|
|
@@ -106,7 +110,7 @@ function assertSupportedVoucherEnvelope(envelope: SignatureEnvelope.SignatureEnv
|
|
|
106
110
|
export async function signVoucher(
|
|
107
111
|
client: Client,
|
|
108
112
|
account: Account,
|
|
109
|
-
message:
|
|
113
|
+
message: LegacyVoucher,
|
|
110
114
|
escrowContract: Address.Address,
|
|
111
115
|
chainId: number,
|
|
112
116
|
voucherSigner?: Account | undefined,
|
|
@@ -143,7 +147,7 @@ export async function signVoucher(
|
|
|
143
147
|
export async function verifyVoucher(
|
|
144
148
|
escrowContract: Address.Address,
|
|
145
149
|
chainId: number,
|
|
146
|
-
voucher:
|
|
150
|
+
voucher: LegacySignedVoucher,
|
|
147
151
|
expectedSigner: Address.Address,
|
|
148
152
|
): Promise<boolean> {
|
|
149
153
|
try {
|
|
@@ -170,7 +174,7 @@ export function parseVoucherFromPayload(
|
|
|
170
174
|
channelId: Hex,
|
|
171
175
|
cumulativeAmount: string,
|
|
172
176
|
signature: Hex,
|
|
173
|
-
):
|
|
177
|
+
): LegacySignedVoucher {
|
|
174
178
|
return {
|
|
175
179
|
channelId,
|
|
176
180
|
cumulativeAmount: BigInt(cumulativeAmount),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Legacy contract-backed channel chain helpers. */
|
|
2
|
+
export * as Chain from './Chain.js'
|
|
3
|
+
/** Legacy contract-backed channel ID helpers. */
|
|
4
|
+
export * as Channel from './Channel.js'
|
|
5
|
+
/** Legacy contract-backed session protocol types. */
|
|
6
|
+
export * as Types from './Types.js'
|
|
7
|
+
/** Legacy contract-backed voucher helpers. */
|
|
8
|
+
export * as Voucher from './Voucher.js'
|
|
@@ -2,6 +2,7 @@ import { expectTypeOf, test } from 'vp/test'
|
|
|
2
2
|
|
|
3
3
|
import { tempo } from '../../server/index.js'
|
|
4
4
|
import * as Store from '../../Store.js'
|
|
5
|
+
import * as Tempo from '../index.js'
|
|
5
6
|
|
|
6
7
|
test('tempo.charge store parameter requires AtomicStore', () => {
|
|
7
8
|
type ChargeParameters = NonNullable<Parameters<typeof tempo.charge>[0]>
|
|
@@ -18,17 +19,6 @@ test('tempo.charge store parameter requires AtomicStore', () => {
|
|
|
18
19
|
tempo.charge({ store: Store.memory() })
|
|
19
20
|
})
|
|
20
21
|
|
|
21
|
-
test('tempo.charge validateSender exposes only sender context', () => {
|
|
22
|
-
tempo.charge({
|
|
23
|
-
validateSender({ expectedSender, sender, source }) {
|
|
24
|
-
expectTypeOf(expectedSender).toEqualTypeOf<`0x${string}`>()
|
|
25
|
-
expectTypeOf(sender).toEqualTypeOf<`0x${string}`>()
|
|
26
|
-
expectTypeOf(source).toEqualTypeOf<{ address: `0x${string}`; chainId: number } | undefined>()
|
|
27
|
-
return true
|
|
28
|
-
},
|
|
29
|
-
})
|
|
30
|
-
})
|
|
31
|
-
|
|
32
22
|
test('tempo.session store parameter requires AtomicStore', () => {
|
|
33
23
|
type SessionParameters = NonNullable<Parameters<typeof tempo.session>[0]>
|
|
34
24
|
expectTypeOf<SessionParameters['store']>().toEqualTypeOf<Store.AtomicStore | undefined>()
|
|
@@ -43,3 +33,18 @@ test('tempo.session store parameter requires AtomicStore', () => {
|
|
|
43
33
|
tempo.session({ store: nonAtomic })
|
|
44
34
|
tempo.session({ store: Store.memory() })
|
|
45
35
|
})
|
|
36
|
+
|
|
37
|
+
test('tempo Session server session store parameter requires AtomicStore', () => {
|
|
38
|
+
type SessionParameters = NonNullable<Parameters<typeof Tempo.Session.Server.session>[0]>
|
|
39
|
+
expectTypeOf<SessionParameters['store']>().toEqualTypeOf<Store.AtomicStore | undefined>()
|
|
40
|
+
|
|
41
|
+
const nonAtomic = Store.from({
|
|
42
|
+
get: async () => null,
|
|
43
|
+
put: async () => {},
|
|
44
|
+
delete: async () => {},
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// @ts-expect-error — session state updates require AtomicStore
|
|
48
|
+
Tempo.Session.Server.session({ store: nonAtomic })
|
|
49
|
+
Tempo.Session.Server.session({ store: Store.memory() })
|
|
50
|
+
})
|