mppx 0.6.31 → 0.8.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 +50 -0
- package/README.md +20 -11
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +27 -13
- 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/Mcp.d.ts +3 -0
- package/dist/Mcp.d.ts.map +1 -1
- package/dist/Mcp.js +2 -0
- package/dist/Mcp.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/PaymentRequest.d.ts +10 -10
- package/dist/PaymentRequest.js +8 -8
- 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/Mppx.js +2 -2
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/Transport.d.ts +11 -16
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +55 -76
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +5 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -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 +60 -13
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/client/internal/protocols/Mcp.d.ts +7 -0
- package/dist/client/internal/protocols/Mcp.d.ts.map +1 -0
- package/dist/client/internal/protocols/Mcp.js +159 -0
- package/dist/client/internal/protocols/Mcp.js.map +1 -0
- package/dist/client/internal/protocols/Mpp.d.ts +4 -0
- package/dist/client/internal/protocols/Mpp.d.ts.map +1 -0
- package/dist/client/internal/protocols/Mpp.js +18 -0
- package/dist/client/internal/protocols/Mpp.js.map +1 -0
- package/dist/client/internal/protocols/Protocol.d.ts +10 -0
- package/dist/client/internal/protocols/Protocol.d.ts.map +1 -0
- package/dist/client/internal/protocols/Protocol.js +2 -0
- package/dist/client/internal/protocols/Protocol.js.map +1 -0
- package/dist/client/internal/protocols/Shared.d.ts +5 -0
- package/dist/client/internal/protocols/Shared.d.ts.map +1 -0
- package/dist/client/internal/protocols/Shared.js +20 -0
- package/dist/client/internal/protocols/Shared.js.map +1 -0
- package/dist/client/internal/protocols/X402.d.ts +8 -0
- package/dist/client/internal/protocols/X402.d.ts.map +1 -0
- package/dist/client/internal/protocols/X402.js +39 -0
- package/dist/client/internal/protocols/X402.js.map +1 -0
- package/dist/evm/client/index.d.ts +1 -0
- package/dist/evm/client/index.d.ts.map +1 -1
- package/dist/evm/client/index.js +1 -0
- package/dist/evm/client/index.js.map +1 -1
- package/dist/evm/index.d.ts +2 -0
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +2 -0
- package/dist/evm/index.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/evm/server/index.d.ts +1 -0
- package/dist/evm/server/index.d.ts.map +1 -1
- package/dist/evm/server/index.js +1 -0
- package/dist/evm/server/index.js.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/client/McpClient.d.ts +101 -0
- package/dist/mcp/client/McpClient.d.ts.map +1 -0
- package/dist/mcp/client/McpClient.js +162 -0
- package/dist/mcp/client/McpClient.js.map +1 -0
- package/dist/mcp/client/index.d.ts.map +1 -0
- package/dist/mcp/client/index.js.map +1 -0
- package/dist/mcp/server/Transport.d.ts.map +1 -0
- package/dist/mcp/server/Transport.js.map +1 -0
- package/dist/mcp/server/index.d.ts.map +1 -0
- package/dist/mcp/server/index.js.map +1 -0
- package/dist/server/Mppx.d.ts +12 -4
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +85 -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 +1 -1
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +5 -4
- 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/Proof.d.ts +85 -1
- package/dist/tempo/Proof.d.ts.map +1 -1
- package/dist/tempo/Proof.js +35 -0
- package/dist/tempo/Proof.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts +19 -1
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +47 -27
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +41 -10
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Methods.js +16 -7
- package/dist/tempo/client/Methods.js.map +1 -1
- package/dist/tempo/client/ResolveAccount.d.ts +40 -0
- package/dist/tempo/client/ResolveAccount.d.ts.map +1 -0
- package/dist/tempo/client/ResolveAccount.js +2 -0
- package/dist/tempo/client/ResolveAccount.js.map +1 -0
- 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 +29 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +138 -4
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/internal/proof.d.ts +71 -5
- package/dist/tempo/internal/proof.d.ts.map +1 -1
- package/dist/tempo/internal/proof.js +42 -6
- package/dist/tempo/internal/proof.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 +30 -19
- 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 +51 -30
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +67 -8
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +40 -10
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +11 -1
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/Subscription.js +135 -23
- package/dist/tempo/server/Subscription.js.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 +81 -0
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/session/client/ChannelOps.js +201 -0
- package/dist/tempo/session/client/ChannelOps.js.map +1 -0
- package/dist/tempo/session/client/ChannelStore.d.ts +51 -0
- package/dist/tempo/session/client/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/session/client/ChannelStore.js +63 -0
- package/dist/tempo/session/client/ChannelStore.js.map +1 -0
- package/dist/tempo/session/client/CredentialState.d.ts +245 -0
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
- package/dist/tempo/session/client/CredentialState.js +419 -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 +138 -0
- package/dist/tempo/session/client/Session.d.ts.map +1 -0
- package/dist/tempo/session/client/Session.js +69 -0
- package/dist/tempo/session/client/Session.js.map +1 -0
- package/dist/tempo/session/client/SessionManager.d.ts +84 -0
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
- package/dist/tempo/session/client/SessionManager.js +577 -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 +11 -0
- package/dist/tempo/session/client/index.d.ts.map +1 -0
- package/dist/tempo/session/client/index.js +6 -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 +125 -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 +252 -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/dist/tempo/subscription/KeyAuthorization.d.ts +712 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/subscription/Store.d.ts +2 -0
- package/dist/tempo/subscription/Store.d.ts.map +1 -1
- package/dist/tempo/subscription/Store.js +16 -1
- package/dist/tempo/subscription/Store.js.map +1 -1
- package/dist/x402/index.d.ts +1 -0
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +1 -0
- package/dist/x402/index.js.map +1 -1
- package/package.json +25 -9
- package/src/Challenge.test.ts +40 -0
- package/src/Challenge.ts +28 -13
- package/src/Constants.ts +58 -0
- package/src/Credential.ts +5 -4
- package/src/Mcp.ts +4 -0
- package/src/Method.ts +46 -5
- package/src/PaymentRequest.ts +10 -10
- package/src/Receipt.ts +3 -2
- package/src/cli/cli.test.ts +38 -43
- 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 +31 -1
- package/src/client/Mppx.test.ts +76 -1
- package/src/client/Mppx.ts +2 -2
- package/src/client/Transport.test.ts +225 -178
- package/src/client/Transport.ts +77 -84
- package/src/client/index.ts +25 -1
- package/src/client/internal/Fetch.test.ts +236 -6
- package/src/client/internal/Fetch.ts +69 -11
- package/src/client/internal/protocols/Mcp.test.ts +220 -0
- package/src/client/internal/protocols/Mcp.ts +162 -0
- package/src/client/internal/protocols/Mpp.ts +21 -0
- package/src/client/internal/protocols/Protocol.ts +10 -0
- package/src/client/internal/protocols/Shared.ts +25 -0
- package/src/client/internal/protocols/X402.ts +42 -0
- package/src/discovery/OpenApi.test.ts +1 -1
- package/src/env.d.ts +1 -1
- package/src/evm/PublicInterface.test-d.ts +1 -1
- package/src/evm/client/index.ts +1 -0
- package/src/evm/index.ts +2 -0
- package/src/evm/server/Charge.test.ts +1 -1
- package/src/evm/server/index.ts +1 -0
- 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 → mcp}/client/McpClient.integration.test.ts +18 -11
- package/src/{mcp-sdk → mcp}/client/McpClient.test-d.ts +45 -11
- package/src/{mcp-sdk → mcp}/client/McpClient.test.ts +211 -5
- package/src/mcp/client/McpClient.ts +307 -0
- package/src/mcp/client/McpClient.unit.test.ts +135 -0
- package/src/middlewares/elysia.test.ts +9 -5
- package/src/middlewares/express.test.ts +9 -5
- package/src/middlewares/hono.test.ts +5 -5
- package/src/middlewares/internal/mppx.test.ts +1 -1
- package/src/middlewares/nextjs.test.ts +9 -5
- package/src/proxy/Proxy.test.ts +9 -9
- package/src/proxy/services/anthropic.test.ts +1 -1
- package/src/proxy/services/openai.test.ts +1 -1
- package/src/proxy/services/stripe.test.ts +1 -1
- package/src/server/Mppx.authorize.test.ts +1 -1
- package/src/server/Mppx.test-d.ts +55 -1
- package/src/server/Mppx.test.ts +220 -9
- package/src/server/Mppx.ts +501 -407
- package/src/server/Response.ts +2 -1
- package/src/server/Transport.test.ts +6 -6
- package/src/server/Transport.ts +5 -4
- package/src/server/index.ts +1 -0
- package/src/stripe/Charge.integration.test.ts +1 -1
- package/src/stripe/client/Charge.test.ts +21 -6
- package/src/stripe/client/Charge.ts +6 -2
- package/src/stripe/server/Charge.test.ts +115 -2
- package/src/stripe/server/Charge.ts +13 -2
- package/src/stripe/server/internal/html/package.json +1 -1
- 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/Proof.conformance.test.ts +146 -0
- package/src/tempo/Proof.test-d.ts +15 -0
- package/src/tempo/Proof.ts +52 -1
- package/src/tempo/PublicExports.test-d.ts +105 -0
- package/src/tempo/Subscription.integration.test.ts +1 -1
- package/src/tempo/client/Charge.test.ts +258 -0
- package/src/tempo/client/Charge.ts +84 -38
- package/src/tempo/client/Methods.ts +22 -8
- package/src/tempo/client/ResolveAccount.ts +46 -0
- package/src/tempo/client/index.ts +15 -4
- package/src/tempo/index.ts +1 -0
- package/src/tempo/internal/fee-payer.test.ts +296 -17
- package/src/tempo/internal/fee-payer.ts +186 -4
- package/src/tempo/internal/fee-token.test.ts +14 -9
- package/src/tempo/internal/proof.test.ts +12 -4
- package/src/tempo/internal/proof.ts +55 -6
- 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 +52 -23
- 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 +136 -71
- 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 +480 -31
- package/src/tempo/server/Charge.ts +54 -30
- package/src/tempo/server/Methods.ts +58 -10
- package/src/tempo/server/Sse.test.ts +2 -2
- package/src/tempo/server/Subscription.test.ts +465 -3
- package/src/tempo/server/Subscription.ts +174 -19
- package/src/tempo/server/index.ts +6 -5
- package/src/tempo/server/internal/html/package.json +2 -2
- 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 +330 -0
- package/src/tempo/session/client/ChannelStore.ts +111 -0
- package/src/tempo/session/client/CredentialState.test.ts +789 -0
- package/src/tempo/session/client/CredentialState.ts +799 -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 +774 -0
- package/src/tempo/session/client/Session.ts +123 -0
- package/src/tempo/session/client/SessionManager.test.ts +1397 -0
- package/src/tempo/session/client/SessionManager.ts +751 -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 +40 -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 +354 -0
- package/src/tempo/session/precompile/Voucher.ts +162 -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 +329 -0
- package/src/tempo/session/server/Settlement.ts +471 -0
- package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
- package/src/tempo/session/server/Sse.ts +254 -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 +380 -0
- package/src/tempo/session/server/index.ts +8 -0
- package/src/tempo/subscription/Store.ts +27 -9
- package/src/x402/Exact.e2e.test.ts +1 -1
- package/src/x402/PublicInterface.test-d.ts +1 -1
- package/src/x402/index.ts +1 -0
- package/dist/mcp-sdk/client/McpClient.d.ts +0 -78
- package/dist/mcp-sdk/client/McpClient.d.ts.map +0 -1
- package/dist/mcp-sdk/client/McpClient.js +0 -105
- package/dist/mcp-sdk/client/McpClient.js.map +0 -1
- package/dist/mcp-sdk/client/index.d.ts.map +0 -1
- package/dist/mcp-sdk/client/index.js.map +0 -1
- package/dist/mcp-sdk/server/Transport.d.ts.map +0 -1
- package/dist/mcp-sdk/server/Transport.js.map +0 -1
- package/dist/mcp-sdk/server/index.d.ts.map +0 -1
- package/dist/mcp-sdk/server/index.js.map +0 -1
- 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/mcp-sdk/client/McpClient.ts +0 -196
- 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/{mcp-sdk → mcp}/client/index.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/client/index.js +0 -0
- /package/dist/{mcp-sdk → mcp}/server/Transport.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/server/Transport.js +0 -0
- /package/dist/{mcp-sdk → mcp}/server/index.d.ts +0 -0
- /package/dist/{mcp-sdk → mcp}/server/index.js +0 -0
- /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
- /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
- /package/src/{mcp-sdk → mcp}/client/index.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/Transport.test.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/Transport.ts +0 -0
- /package/src/{mcp-sdk → mcp}/server/index.ts +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
|
@@ -6,16 +6,12 @@ import {
|
|
|
6
6
|
Secp256k1,
|
|
7
7
|
Transaction,
|
|
8
8
|
} from 'viem/tempo'
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { deployEscrow, openChannel } from '~test/tempo/session.js'
|
|
9
|
+
import { describe, expect, test } from 'vp/test'
|
|
10
|
+
import { tempoNetwork } from '~test/config.js'
|
|
12
11
|
import { asset as currency, chain, http } from '~test/tempo/viem.js'
|
|
13
12
|
|
|
14
|
-
import { createOpenPayload } from './client/ChannelOps.js'
|
|
15
13
|
import { charge } from './client/Charge.js'
|
|
16
14
|
import * as Methods from './Methods.js'
|
|
17
|
-
import { closeOnChain, settleOnChain } from './session/Chain.js'
|
|
18
|
-
import { signVoucher } from './session/Voucher.js'
|
|
19
15
|
|
|
20
16
|
type ChargeCredentialPayload =
|
|
21
17
|
| { hash: Hex; type: 'hash' }
|
|
@@ -25,6 +21,7 @@ const rootAccount = TempoAccount.fromSecp256k1(
|
|
|
25
21
|
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
|
|
26
22
|
)
|
|
27
23
|
const recipient = '0x2222222222222222222222222222222222222222' as Address
|
|
24
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
28
25
|
|
|
29
26
|
type ChargeRequest = ReturnType<typeof Methods.charge.schema.request.parse>
|
|
30
27
|
|
|
@@ -100,35 +97,7 @@ function expectTransactionKeyAuthorization(
|
|
|
100
97
|
expect(transaction.keyAuthorization).toEqual(keyAuthorization)
|
|
101
98
|
}
|
|
102
99
|
|
|
103
|
-
|
|
104
|
-
const payer = rootAccount
|
|
105
|
-
const { channelId } = await openChannel({
|
|
106
|
-
deposit: 10_000_000n,
|
|
107
|
-
escrow: escrowContract,
|
|
108
|
-
payee,
|
|
109
|
-
payer,
|
|
110
|
-
salt: Secp256k1.randomPrivateKey(),
|
|
111
|
-
token: currency,
|
|
112
|
-
})
|
|
113
|
-
const cumulativeAmount = 1_000_000n
|
|
114
|
-
const signature = await signVoucher(
|
|
115
|
-
createClient({ account: payer, chain, transport: http() }),
|
|
116
|
-
payer,
|
|
117
|
-
{ channelId, cumulativeAmount },
|
|
118
|
-
escrowContract,
|
|
119
|
-
chain.id,
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
return { channelId, cumulativeAmount, escrowContract, signature }
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
describe.runIf(nodeEnv === 'localnet')('Tempo access-key authorization attachment', () => {
|
|
126
|
-
let escrowContract: Address
|
|
127
|
-
|
|
128
|
-
beforeAll(async () => {
|
|
129
|
-
escrowContract = await deployEscrow()
|
|
130
|
-
})
|
|
131
|
-
|
|
100
|
+
describe.runIf(isLocalnet)('Tempo access-key authorization attachment', () => {
|
|
132
101
|
test('tempo.charge pull signs a prepared transaction with keyAuthorization', async () => {
|
|
133
102
|
const { accessKey, client, keyAuthorization } = await createAccessKeyClient()
|
|
134
103
|
const method = charge({
|
|
@@ -169,63 +138,4 @@ describe.runIf(nodeEnv === 'localnet')('Tempo access-key authorization attachmen
|
|
|
169
138
|
expect(signedTransactions).toHaveLength(1)
|
|
170
139
|
expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
|
|
171
140
|
})
|
|
172
|
-
|
|
173
|
-
test('tempo.session open signs a prepared transaction with keyAuthorization', async () => {
|
|
174
|
-
const { accessKey, client, keyAuthorization } = await createAccessKeyClient()
|
|
175
|
-
|
|
176
|
-
const { payload } = await createOpenPayload(client, accessKey, {
|
|
177
|
-
chainId: chain.id,
|
|
178
|
-
currency,
|
|
179
|
-
deposit: 5_000_000n,
|
|
180
|
-
escrowContract,
|
|
181
|
-
initialAmount: 1_000_000n,
|
|
182
|
-
payee: recipient,
|
|
183
|
-
})
|
|
184
|
-
|
|
185
|
-
expect(payload.action).toBe('open')
|
|
186
|
-
if (payload.action !== 'open') throw new Error('unexpected payload action')
|
|
187
|
-
expectTransactionKeyAuthorization(payload.transaction, keyAuthorization)
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
test('tempo.session settle sends a prepared transaction with keyAuthorization', async () => {
|
|
191
|
-
const { accessKey, client, keyAuthorization, signedTransactions } =
|
|
192
|
-
await createAccessKeyClient()
|
|
193
|
-
const channel = await createChannelForPayee(rootAccount.address, escrowContract)
|
|
194
|
-
|
|
195
|
-
const hash = await settleOnChain(
|
|
196
|
-
client,
|
|
197
|
-
channel.escrowContract,
|
|
198
|
-
{
|
|
199
|
-
channelId: channel.channelId,
|
|
200
|
-
cumulativeAmount: channel.cumulativeAmount,
|
|
201
|
-
signature: channel.signature,
|
|
202
|
-
},
|
|
203
|
-
{ account: accessKey },
|
|
204
|
-
)
|
|
205
|
-
|
|
206
|
-
expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
|
|
207
|
-
expect(signedTransactions).toHaveLength(1)
|
|
208
|
-
expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
test('tempo.session close sends a prepared transaction with keyAuthorization', async () => {
|
|
212
|
-
const { accessKey, client, keyAuthorization, signedTransactions } =
|
|
213
|
-
await createAccessKeyClient()
|
|
214
|
-
const channel = await createChannelForPayee(rootAccount.address, escrowContract)
|
|
215
|
-
|
|
216
|
-
const hash = await closeOnChain(
|
|
217
|
-
client,
|
|
218
|
-
channel.escrowContract,
|
|
219
|
-
{
|
|
220
|
-
channelId: channel.channelId,
|
|
221
|
-
cumulativeAmount: channel.cumulativeAmount,
|
|
222
|
-
signature: channel.signature,
|
|
223
|
-
},
|
|
224
|
-
{ account: accessKey },
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
|
|
228
|
-
expect(signedTransactions).toHaveLength(1)
|
|
229
|
-
expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
|
|
230
|
-
})
|
|
231
141
|
})
|
|
@@ -248,6 +248,51 @@ describe('session', () => {
|
|
|
248
248
|
expect(request.amount).toBe('1000000')
|
|
249
249
|
expect(request.methodDetails?.minVoucherDelta).toBe('100000')
|
|
250
250
|
})
|
|
251
|
+
|
|
252
|
+
test('schema: preserves precompile session snapshots in method details', () => {
|
|
253
|
+
const sessionSnapshot = {
|
|
254
|
+
acceptedCumulative: '2',
|
|
255
|
+
channelId: `0x${'11'.repeat(32)}` as const,
|
|
256
|
+
deposit: '5',
|
|
257
|
+
descriptor: {
|
|
258
|
+
authorizedSigner: '0x0000000000000000000000000000000000000006',
|
|
259
|
+
expiringNonceHash: `0x${'22'.repeat(32)}` as const,
|
|
260
|
+
operator: '0x0000000000000000000000000000000000000000',
|
|
261
|
+
payee: '0x0000000000000000000000000000000000000002',
|
|
262
|
+
payer: '0x0000000000000000000000000000000000000001',
|
|
263
|
+
salt: `0x${'33'.repeat(32)}` as const,
|
|
264
|
+
token: '0x0000000000000000000000000000000000000003',
|
|
265
|
+
},
|
|
266
|
+
requiredCumulative: '3',
|
|
267
|
+
settled: '0',
|
|
268
|
+
spent: '2',
|
|
269
|
+
units: 2,
|
|
270
|
+
}
|
|
271
|
+
const request = Methods.session.schema.request.parse({
|
|
272
|
+
amount: '1',
|
|
273
|
+
currency: '0x20c0000000000000000000000000000000000001',
|
|
274
|
+
decimals: 6,
|
|
275
|
+
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
276
|
+
sessionSnapshot,
|
|
277
|
+
unitType: 'token',
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
expect(request.methodDetails?.sessionSnapshot).toEqual(sessionSnapshot)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
test('schema: advertises precompile session operator in method details', () => {
|
|
284
|
+
const operator = '0x0000000000000000000000000000000000000006'
|
|
285
|
+
const request = Methods.session.schema.request.parse({
|
|
286
|
+
amount: '1',
|
|
287
|
+
currency: '0x20c0000000000000000000000000000000000001',
|
|
288
|
+
decimals: 6,
|
|
289
|
+
operator,
|
|
290
|
+
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
291
|
+
unitType: 'token',
|
|
292
|
+
})
|
|
293
|
+
|
|
294
|
+
expect(request.methodDetails?.operator).toBe(operator)
|
|
295
|
+
})
|
|
251
296
|
})
|
|
252
297
|
|
|
253
298
|
describe('subscription', () => {
|
|
@@ -313,23 +358,6 @@ describe('subscription', () => {
|
|
|
313
358
|
expect(request.periodCount).toBe(expected)
|
|
314
359
|
})
|
|
315
360
|
|
|
316
|
-
test.each(['dev_second'] as const)(
|
|
317
|
-
'schema: accepts %s subscription periods for development and tests',
|
|
318
|
-
(periodUnit) => {
|
|
319
|
-
const request = Methods.subscription.schema.request.parse({
|
|
320
|
-
amount: '10',
|
|
321
|
-
currency: '0x20c0000000000000000000000000000000000001',
|
|
322
|
-
decimals: 6,
|
|
323
|
-
periodCount: '5',
|
|
324
|
-
periodUnit,
|
|
325
|
-
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
326
|
-
subscriptionExpires: '2026-01-01T00:00:00Z',
|
|
327
|
-
})
|
|
328
|
-
|
|
329
|
-
expect(request.periodUnit).toBe(periodUnit)
|
|
330
|
-
},
|
|
331
|
-
)
|
|
332
|
-
|
|
333
361
|
test('schema: rejects non-numeric periodCount', () => {
|
|
334
362
|
const result = Methods.subscription.schema.request.safeParse({
|
|
335
363
|
amount: '10',
|
package/src/tempo/Methods.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { Account, Address } from 'viem'
|
|
2
2
|
import { parseUnits } from 'viem'
|
|
3
3
|
|
|
4
|
+
import * as Constants from '../Constants.js'
|
|
4
5
|
import * as Method from '../Method.js'
|
|
5
6
|
import * as z from '../zod.js'
|
|
7
|
+
import type { SessionSnapshot } from './session/client/Runtime.js'
|
|
8
|
+
import type * as PrecompileChannel from './session/precompile/Channel.js'
|
|
6
9
|
import type { SubscriptionPeriodUnit } from './subscription/Types.js'
|
|
7
10
|
|
|
8
11
|
export const chargeModes = ['push', 'pull'] as const
|
|
@@ -196,6 +199,7 @@ export const session = Method.from({
|
|
|
196
199
|
authorizedSigner: z.optional(z.string()),
|
|
197
200
|
channelId: z.hash(),
|
|
198
201
|
cumulativeAmount: z.amount(),
|
|
202
|
+
descriptor: z.optional(z.custom<PrecompileChannel.ChannelDescriptor>()),
|
|
199
203
|
signature: z.signature(),
|
|
200
204
|
transaction: z.signature(),
|
|
201
205
|
type: z.literal('transaction'),
|
|
@@ -204,6 +208,7 @@ export const session = Method.from({
|
|
|
204
208
|
action: z.literal('topUp'),
|
|
205
209
|
additionalDeposit: z.amount(),
|
|
206
210
|
channelId: z.hash(),
|
|
211
|
+
descriptor: z.optional(z.custom<PrecompileChannel.ChannelDescriptor>()),
|
|
207
212
|
transaction: z.signature(),
|
|
208
213
|
type: z.literal('transaction'),
|
|
209
214
|
}),
|
|
@@ -211,12 +216,14 @@ export const session = Method.from({
|
|
|
211
216
|
action: z.literal('voucher'),
|
|
212
217
|
channelId: z.hash(),
|
|
213
218
|
cumulativeAmount: z.amount(),
|
|
219
|
+
descriptor: z.optional(z.custom<PrecompileChannel.ChannelDescriptor>()),
|
|
214
220
|
signature: z.signature(),
|
|
215
221
|
}),
|
|
216
222
|
z.object({
|
|
217
223
|
action: z.literal('close'),
|
|
218
224
|
channelId: z.hash(),
|
|
219
225
|
cumulativeAmount: z.amount(),
|
|
226
|
+
descriptor: z.optional(z.custom<PrecompileChannel.ChannelDescriptor>()),
|
|
220
227
|
signature: z.signature(),
|
|
221
228
|
}),
|
|
222
229
|
]),
|
|
@@ -237,7 +244,12 @@ export const session = Method.from({
|
|
|
237
244
|
),
|
|
238
245
|
),
|
|
239
246
|
minVoucherDelta: z.optional(z.amount()),
|
|
247
|
+
operator: z.optional(z.address()),
|
|
240
248
|
recipient: z.optional(z.string()),
|
|
249
|
+
sessionProtocol: z.optional(
|
|
250
|
+
z.enum([Constants.SessionProtocols.v2, Constants.SessionProtocols.v1]),
|
|
251
|
+
),
|
|
252
|
+
sessionSnapshot: z.optional(z.custom<SessionSnapshot>()),
|
|
241
253
|
suggestedDeposit: z.optional(z.amount()),
|
|
242
254
|
unitType: z.string(),
|
|
243
255
|
})
|
|
@@ -256,6 +268,9 @@ export const session = Method.from({
|
|
|
256
268
|
escrowContract,
|
|
257
269
|
feePayer,
|
|
258
270
|
minVoucherDelta,
|
|
271
|
+
operator,
|
|
272
|
+
sessionProtocol,
|
|
273
|
+
sessionSnapshot,
|
|
259
274
|
suggestedDeposit,
|
|
260
275
|
...rest
|
|
261
276
|
}) => ({
|
|
@@ -274,6 +289,13 @@ export const session = Method.from({
|
|
|
274
289
|
}),
|
|
275
290
|
...(chainId !== undefined && { chainId }),
|
|
276
291
|
...(feePayer !== undefined && { feePayer }),
|
|
292
|
+
...(operator !== undefined && { operator }),
|
|
293
|
+
...(sessionProtocol !== undefined && {
|
|
294
|
+
[Constants.MethodDetailKeys.sessionProtocol]: sessionProtocol,
|
|
295
|
+
}),
|
|
296
|
+
...(sessionSnapshot !== undefined && {
|
|
297
|
+
[Constants.MethodDetailKeys.sessionSnapshot]: sessionSnapshot,
|
|
298
|
+
}),
|
|
277
299
|
},
|
|
278
300
|
}),
|
|
279
301
|
),
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { recoverTypedDataAddress } from 'viem'
|
|
2
|
+
import { privateKeyToAccount } from 'viem/accounts'
|
|
3
|
+
import { describe, expect, test } from 'vp/test'
|
|
4
|
+
|
|
5
|
+
import * as Proof from './Proof.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Deterministic conformance vector for the wallet-bound Tempo proof contract
|
|
9
|
+
* (EIP-712 domain `MPP` version `3`). These values pin the on-the-wire
|
|
10
|
+
* signing payload so any change to the proof ABI is caught here.
|
|
11
|
+
*/
|
|
12
|
+
const vector = {
|
|
13
|
+
account: '0x1a642f0E3c3aF545E7AcBD38b07251B3990914F1',
|
|
14
|
+
chainId: 42431,
|
|
15
|
+
challengeId: 'kM9xPqWvT2nJrHsY4aDfEb',
|
|
16
|
+
digest: '0x3860a700a55e02ad3c2dc047e92489feceecbdb0a801d948e1d9f0b61ea9bc3f',
|
|
17
|
+
privateKey: `0x${'01'.repeat(32)}`,
|
|
18
|
+
realm: 'api.example.com',
|
|
19
|
+
signature:
|
|
20
|
+
'0x53f5d64d9f995e841b4212639b2e17e508e96752e10316df3814a16443dcbdb626c082190a4c3ecc3148101eb443d15bd83b579380b1be735a9c99f0df36c9fe1b',
|
|
21
|
+
} as const
|
|
22
|
+
|
|
23
|
+
const params = {
|
|
24
|
+
account: vector.account,
|
|
25
|
+
chainId: vector.chainId,
|
|
26
|
+
challengeId: vector.challengeId,
|
|
27
|
+
realm: vector.realm,
|
|
28
|
+
} as const
|
|
29
|
+
|
|
30
|
+
describe('tempo.Proof conformance (wallet binding)', () => {
|
|
31
|
+
test('typedData is the canonical wallet-bound MPP v3 proof contract', () => {
|
|
32
|
+
expect(Proof.typedData(params)).toEqual({
|
|
33
|
+
domain: { name: 'MPP', version: '3', chainId: vector.chainId },
|
|
34
|
+
types: {
|
|
35
|
+
Proof: [
|
|
36
|
+
{ name: 'account', type: 'address' },
|
|
37
|
+
{ name: 'challengeId', type: 'string' },
|
|
38
|
+
{ name: 'realm', type: 'string' },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
primaryType: 'Proof',
|
|
42
|
+
message: {
|
|
43
|
+
account: vector.account,
|
|
44
|
+
challengeId: vector.challengeId,
|
|
45
|
+
realm: vector.realm,
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
test('hash matches the deterministic EIP-712 digest vector', () => {
|
|
51
|
+
expect(Proof.hash(params)).toBe(vector.digest)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('the wallet produces the deterministic signature vector', async () => {
|
|
55
|
+
const account = privateKeyToAccount(vector.privateKey)
|
|
56
|
+
expect(account.address).toBe(vector.account)
|
|
57
|
+
const signature = await account.signTypedData(Proof.typedData(params))
|
|
58
|
+
expect(signature).toBe(vector.signature)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('the signature vector recovers to the bound wallet', async () => {
|
|
62
|
+
const recovered = await recoverTypedDataAddress({
|
|
63
|
+
...Proof.typedData(params),
|
|
64
|
+
signature: vector.signature,
|
|
65
|
+
})
|
|
66
|
+
expect(recovered).toBe(vector.account)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('the digest is bound to the wallet: a different account changes the digest', () => {
|
|
70
|
+
const other = '0x000000000000000000000000000000000000dEaD'
|
|
71
|
+
expect(Proof.hash({ ...params, account: other })).not.toBe(vector.digest)
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
test('a proof cannot be replayed against a different wallet for the same challenge', async () => {
|
|
75
|
+
const account = privateKeyToAccount(vector.privateKey)
|
|
76
|
+
const signature = await account.signTypedData(Proof.typedData(params))
|
|
77
|
+
|
|
78
|
+
// An attacker swaps the bound `account` to a wallet they want to impersonate
|
|
79
|
+
// while keeping the same challenge. Because `account` is a signed field, the
|
|
80
|
+
// recovered signer no longer matches the swapped wallet, so verification
|
|
81
|
+
// (and the access-key delegation check, which rebuilds the message from the
|
|
82
|
+
// claimed source) fails.
|
|
83
|
+
const swapped = '0x000000000000000000000000000000000000dEaD'
|
|
84
|
+
const recovered = await recoverTypedDataAddress({
|
|
85
|
+
...Proof.typedData({ ...params, account: swapped }),
|
|
86
|
+
signature,
|
|
87
|
+
})
|
|
88
|
+
expect(recovered).not.toBe(swapped)
|
|
89
|
+
expect(recovered).not.toBe(vector.account)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
test('models the access-key delegation path: swapping the source breaks signer recovery', async () => {
|
|
93
|
+
// An access key K signs a proof bound to root account A. The server's
|
|
94
|
+
// delegation check recovers the signer from the message it rebuilds using
|
|
95
|
+
// the *claimed* source, then requires `isActiveAccessKey(signer, source)`.
|
|
96
|
+
// Distinct access key (signer) and root account (the bound payer / source).
|
|
97
|
+
const accessKey = privateKeyToAccount(`0x${'02'.repeat(32)}`)
|
|
98
|
+
const rootA = vector.account // proof is signed bound to account = A
|
|
99
|
+
const signature = await accessKey.signTypedData(Proof.typedData({ ...params, account: rootA }))
|
|
100
|
+
expect(accessKey.address).not.toBe(rootA)
|
|
101
|
+
|
|
102
|
+
// Honest submission (source = A): server recovers exactly K, so
|
|
103
|
+
// isActiveAccessKey(K, A) — the key actually authorized for A — is checked.
|
|
104
|
+
const recoveredForA = await recoverTypedDataAddress({
|
|
105
|
+
...Proof.typedData({ ...params, account: rootA }),
|
|
106
|
+
signature,
|
|
107
|
+
})
|
|
108
|
+
expect(recoveredForA).toBe(accessKey.address)
|
|
109
|
+
|
|
110
|
+
// Replay against a different root B (attacker swaps source to B): server
|
|
111
|
+
// rebuilds the message with account = B, recovering some K' != K. Even if K
|
|
112
|
+
// is an active access key of B, the server checks isActiveAccessKey(K', B),
|
|
113
|
+
// which cannot match the authorized key. Replay is rejected.
|
|
114
|
+
const rootB = '0x000000000000000000000000000000000000bEEF'
|
|
115
|
+
const recoveredForB = await recoverTypedDataAddress({
|
|
116
|
+
...Proof.typedData({ ...params, account: rootB }),
|
|
117
|
+
signature,
|
|
118
|
+
})
|
|
119
|
+
expect(recoveredForB).not.toBe(accessKey.address)
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
test('a legacy v2 proof (no account field) does not verify under the v3 contract', async () => {
|
|
123
|
+
// The pre-binding contract: domain version "2", message without `account`.
|
|
124
|
+
const account = privateKeyToAccount(vector.privateKey)
|
|
125
|
+
const legacyTypedData = {
|
|
126
|
+
domain: { name: 'MPP', version: '2', chainId: vector.chainId },
|
|
127
|
+
types: {
|
|
128
|
+
Proof: [
|
|
129
|
+
{ name: 'challengeId', type: 'string' },
|
|
130
|
+
{ name: 'realm', type: 'string' },
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
primaryType: 'Proof',
|
|
134
|
+
message: { challengeId: vector.challengeId, realm: vector.realm },
|
|
135
|
+
} as const
|
|
136
|
+
const legacySignature = await account.signTypedData(legacyTypedData)
|
|
137
|
+
|
|
138
|
+
// Verified against the current wallet-bound v3 contract, recovery yields a
|
|
139
|
+
// different address, so the server rejects stale v2 proofs.
|
|
140
|
+
const recovered = await recoverTypedDataAddress({
|
|
141
|
+
...Proof.typedData(params),
|
|
142
|
+
signature: legacySignature,
|
|
143
|
+
})
|
|
144
|
+
expect(recovered).not.toBe(account.address)
|
|
145
|
+
})
|
|
146
|
+
})
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem'
|
|
1
2
|
import { expectTypeOf, test } from 'vp/test'
|
|
2
3
|
|
|
3
4
|
import { Proof } from './index.js'
|
|
4
5
|
|
|
6
|
+
test('Proof exports the wallet-bound typed-data contract helpers', () => {
|
|
7
|
+
expectTypeOf(Proof.message).toEqualTypeOf<
|
|
8
|
+
(parameters: { account: Address; challengeId: string; realm: string }) => {
|
|
9
|
+
readonly account: Address
|
|
10
|
+
readonly challengeId: string
|
|
11
|
+
readonly realm: string
|
|
12
|
+
}
|
|
13
|
+
>()
|
|
14
|
+
|
|
15
|
+
expectTypeOf(Proof.hash).toEqualTypeOf<
|
|
16
|
+
(parameters: { account: Address; chainId: number; challengeId: string; realm: string }) => Hex
|
|
17
|
+
>()
|
|
18
|
+
})
|
|
19
|
+
|
|
5
20
|
test('Proof exports public proof source helpers', () => {
|
|
6
21
|
expectTypeOf(Proof.proofSource).toEqualTypeOf<
|
|
7
22
|
(parameters: { address: string; chainId: number }) => string
|
package/src/tempo/Proof.ts
CHANGED
|
@@ -1,7 +1,58 @@
|
|
|
1
|
-
import type { Address } from 'viem'
|
|
1
|
+
import type { Address, Hex } from 'viem'
|
|
2
2
|
|
|
3
3
|
import * as Proof_internal from './internal/proof.js'
|
|
4
4
|
|
|
5
|
+
/** EIP-712 primary type for Tempo proof credentials. */
|
|
6
|
+
export const primaryType = Proof_internal.primaryType
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* EIP-712 typed-data field definitions for Tempo zero-amount proof credentials.
|
|
10
|
+
*
|
|
11
|
+
* The `account` field cryptographically binds the signature to the payer
|
|
12
|
+
* wallet, so a proof signed for one account cannot be replayed against another.
|
|
13
|
+
*/
|
|
14
|
+
export const types = Proof_internal.types
|
|
15
|
+
|
|
16
|
+
/** Constructs the EIP-712 domain for a Tempo proof credential. */
|
|
17
|
+
export function domain(chainId: number) {
|
|
18
|
+
return Proof_internal.domain(chainId)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Constructs the EIP-712 message for a Tempo proof credential.
|
|
23
|
+
*
|
|
24
|
+
* @param parameters - Proof message parameters.
|
|
25
|
+
* @param parameters.account - Payer wallet address the proof is bound to.
|
|
26
|
+
* @param parameters.challengeId - Challenge `id` being proven.
|
|
27
|
+
* @param parameters.realm - Challenge `realm` being proven.
|
|
28
|
+
*/
|
|
29
|
+
export function message(parameters: { account: Address; challengeId: string; realm: string }) {
|
|
30
|
+
return Proof_internal.message(parameters)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Constructs the complete EIP-712 typed-data payload for a Tempo proof
|
|
35
|
+
* credential — the canonical, wallet-bound proof contract.
|
|
36
|
+
*/
|
|
37
|
+
export function typedData(parameters: {
|
|
38
|
+
account: Address
|
|
39
|
+
chainId: number
|
|
40
|
+
challengeId: string
|
|
41
|
+
realm: string
|
|
42
|
+
}) {
|
|
43
|
+
return Proof_internal.typedData(parameters)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Computes the EIP-712 digest (signing payload) for a Tempo proof credential. */
|
|
47
|
+
export function hash(parameters: {
|
|
48
|
+
account: Address
|
|
49
|
+
chainId: number
|
|
50
|
+
challengeId: string
|
|
51
|
+
realm: string
|
|
52
|
+
}): Hex {
|
|
53
|
+
return Proof_internal.hash(parameters)
|
|
54
|
+
}
|
|
55
|
+
|
|
5
56
|
/** Constructs the canonical `did:pkh:eip155` source DID for Tempo proof credentials. */
|
|
6
57
|
export function proofSource(parameters: { address: string; chainId: number }): string {
|
|
7
58
|
return Proof_internal.proofSource(parameters)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
PaymentResponse as ClientPaymentResponse,
|
|
5
|
+
SessionManager as ClientSessionManager,
|
|
6
|
+
SessionManagerSseOptions as ClientSessionManagerSseOptions,
|
|
7
|
+
SessionManagerWebSocketOptions as ClientSessionManagerWebSocketOptions,
|
|
8
|
+
} from './client/index.js'
|
|
9
|
+
import * as Tempo from './index.js'
|
|
10
|
+
import type { SettlementSchedule as ServerSettlementSchedule } from './server/index.js'
|
|
11
|
+
import type {
|
|
12
|
+
ActiveSessionState,
|
|
13
|
+
ClosedSessionState,
|
|
14
|
+
PaymentResponse as SessionPaymentResponse,
|
|
15
|
+
SessionManager,
|
|
16
|
+
SessionManagerSseOptions,
|
|
17
|
+
SessionManagerWebSocketOptions,
|
|
18
|
+
SessionTransition,
|
|
19
|
+
VoucherNeededSessionState,
|
|
20
|
+
} from './session/client/index.js'
|
|
21
|
+
import type { SessionTransition as MachineSessionTransition } from './session/client/index.js'
|
|
22
|
+
import type { ChannelTransactionOptions } from './session/precompile/Chain.js'
|
|
23
|
+
import type { RawAmountString } from './session/precompile/index.js'
|
|
24
|
+
import type { SettlementSchedule as SessionSettlementSchedule } from './session/server/index.js'
|
|
25
|
+
|
|
26
|
+
test('tempo session public barrels expose manager and schedule interfaces', () => {
|
|
27
|
+
expectTypeOf(Tempo.Session).toBeObject()
|
|
28
|
+
expectTypeOf(Tempo.Session.Client).toBeObject()
|
|
29
|
+
expectTypeOf(Tempo.Session.Precompile).toBeObject()
|
|
30
|
+
expectTypeOf(Tempo.Session.Server).toBeObject()
|
|
31
|
+
expectTypeOf<typeof Tempo>().not.toHaveProperty('Precompile')
|
|
32
|
+
|
|
33
|
+
expectTypeOf<ClientPaymentResponse>().toEqualTypeOf<SessionPaymentResponse>()
|
|
34
|
+
expectTypeOf<ClientSessionManager>().toEqualTypeOf<SessionManager>()
|
|
35
|
+
expectTypeOf<ClientSessionManagerSseOptions>().toEqualTypeOf<SessionManagerSseOptions>()
|
|
36
|
+
expectTypeOf<ClientSessionManagerWebSocketOptions>().toEqualTypeOf<SessionManagerWebSocketOptions>()
|
|
37
|
+
|
|
38
|
+
expectTypeOf<ServerSettlementSchedule>().toEqualTypeOf<SessionSettlementSchedule>()
|
|
39
|
+
expectTypeOf<MachineSessionTransition>().toEqualTypeOf<SessionTransition>()
|
|
40
|
+
expectTypeOf<ServerSettlementSchedule>().toEqualTypeOf<{
|
|
41
|
+
amount?: string | bigint | undefined
|
|
42
|
+
intervalMs?: number | undefined
|
|
43
|
+
units?: number | undefined
|
|
44
|
+
}>()
|
|
45
|
+
expectTypeOf<RawAmountString>().toEqualTypeOf<string>()
|
|
46
|
+
expectTypeOf<ActiveSessionState['status']>().toEqualTypeOf<'active'>()
|
|
47
|
+
expectTypeOf<VoucherNeededSessionState['status']>().toEqualTypeOf<'voucherNeeded'>()
|
|
48
|
+
expectTypeOf<ClosedSessionState['status']>().toEqualTypeOf<'closed'>()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('tempo session chain exports canonical transaction options', () => {
|
|
52
|
+
expectTypeOf<ChannelTransactionOptions>().toEqualTypeOf<{
|
|
53
|
+
account?: import('viem').Account | undefined
|
|
54
|
+
candidateFeeTokens?: readonly import('viem').Address[] | undefined
|
|
55
|
+
feePayer?: import('viem').Account | undefined
|
|
56
|
+
feePayerPolicy?: Partial<import('./internal/fee-payer.js').Policy> | undefined
|
|
57
|
+
feeToken?: import('viem').Address | undefined
|
|
58
|
+
}>()
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('tempo session public barrel hides internal session drivers', () => {
|
|
62
|
+
type SessionNamespacePublic = typeof import('./session/index.js')
|
|
63
|
+
type SessionPublic = typeof import('./session/precompile/index.js')
|
|
64
|
+
type SessionClientPublic = typeof import('./session/client/index.js')
|
|
65
|
+
type SessionServerPublic = typeof import('./session/server/index.js')
|
|
66
|
+
|
|
67
|
+
expectTypeOf<SessionNamespacePublic>().toHaveProperty('Precompile')
|
|
68
|
+
expectTypeOf<SessionNamespacePublic>().toHaveProperty('Client')
|
|
69
|
+
expectTypeOf<SessionNamespacePublic>().toHaveProperty('Server')
|
|
70
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('ChannelStore')
|
|
71
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('Receipt')
|
|
72
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('Sse')
|
|
73
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('Types')
|
|
74
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('Ws')
|
|
75
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('session')
|
|
76
|
+
expectTypeOf<SessionNamespacePublic>().not.toHaveProperty('sessionManager')
|
|
77
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('openSseSession')
|
|
78
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('openWebSocketSession')
|
|
79
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('Client')
|
|
80
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('Server')
|
|
81
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('session')
|
|
82
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('sessionManager')
|
|
83
|
+
expectTypeOf<SessionPublic>().not.toHaveProperty('settle')
|
|
84
|
+
expectTypeOf<SessionClientPublic>().not.toHaveProperty('ChannelOps')
|
|
85
|
+
expectTypeOf<SessionClientPublic>().not.toHaveProperty('Chain')
|
|
86
|
+
expectTypeOf<SessionServerPublic>().not.toHaveProperty('ChannelOps')
|
|
87
|
+
expectTypeOf<SessionServerPublic>().not.toHaveProperty('Chain')
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
test('tempo legacy namespace keeps client, server, and channel primitives isolated', () => {
|
|
91
|
+
type LegacySessionPublic = typeof import('./legacy/session/index.js')
|
|
92
|
+
|
|
93
|
+
expectTypeOf(Tempo.SessionLegacy.Client.session).toBeFunction()
|
|
94
|
+
expectTypeOf(Tempo.SessionLegacy.Client.sessionManager).toBeFunction()
|
|
95
|
+
expectTypeOf(Tempo.SessionLegacy.Server.session).toBeFunction()
|
|
96
|
+
expectTypeOf(Tempo.SessionLegacy.Server.settle).toBeFunction()
|
|
97
|
+
expectTypeOf(Tempo.SessionLegacy.Session.Chain).toBeObject()
|
|
98
|
+
expectTypeOf(Tempo.SessionLegacy.Session.Channel).toBeObject()
|
|
99
|
+
expectTypeOf(Tempo.SessionLegacy.Session.Voucher).toBeObject()
|
|
100
|
+
|
|
101
|
+
expectTypeOf<LegacySessionPublic>().not.toHaveProperty('ChannelStore')
|
|
102
|
+
expectTypeOf<LegacySessionPublic>().not.toHaveProperty('Receipt')
|
|
103
|
+
expectTypeOf<LegacySessionPublic>().not.toHaveProperty('Sse')
|
|
104
|
+
expectTypeOf<LegacySessionPublic>().not.toHaveProperty('Ws')
|
|
105
|
+
})
|
|
@@ -10,7 +10,7 @@ import * as SubscriptionStore from './subscription/Store.js'
|
|
|
10
10
|
import type { SubscriptionAccessKey, SubscriptionRecord } from './subscription/Types.js'
|
|
11
11
|
|
|
12
12
|
const realm = 'news.example.com'
|
|
13
|
-
const secretKey = 'subscription-lifecycle-secret'
|
|
13
|
+
const secretKey = 'subscription-lifecycle-secret-key-32'
|
|
14
14
|
const currency = '0x20c0000000000000000000000000000000000001'
|
|
15
15
|
const recipient = '0x1234567890abcdef1234567890abcdef12345678'
|
|
16
16
|
const periodCount = '30'
|