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
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Account } from 'viem'
|
|
2
2
|
import { createClient } from 'viem'
|
|
3
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
|
|
3
4
|
import { Actions, Addresses } from 'viem/tempo'
|
|
4
5
|
import { describe, expect, test } from 'vp/test'
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { tempoNetwork } from '~test/config.js'
|
|
7
|
+
import { asset, chain, fundAccount, http } from '~test/tempo/viem.js'
|
|
7
8
|
|
|
8
9
|
import { resolveFeeToken } from './fee-token.js'
|
|
9
10
|
|
|
10
|
-
const isLocalnet =
|
|
11
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
11
12
|
|
|
12
13
|
function clientFor(account: Account) {
|
|
13
14
|
return createClient({
|
|
@@ -21,9 +22,13 @@ function expectAddress(actual: string | undefined, expected: string) {
|
|
|
21
22
|
expect(actual?.toLowerCase()).toBe(expected.toLowerCase())
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
function testAccount() {
|
|
26
|
+
return privateKeyToAccount(generatePrivateKey())
|
|
27
|
+
}
|
|
28
|
+
|
|
24
29
|
describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
25
30
|
test('uses the funded account fee preference first', async () => {
|
|
26
|
-
const account =
|
|
31
|
+
const account = testAccount()
|
|
27
32
|
const client = clientFor(account)
|
|
28
33
|
await fundAccount({ address: account.address, token: asset })
|
|
29
34
|
await Actions.fee.setUserTokenSync(client, {
|
|
@@ -41,7 +46,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
|
41
46
|
})
|
|
42
47
|
|
|
43
48
|
test('falls through to the first funded candidate token', async () => {
|
|
44
|
-
const account =
|
|
49
|
+
const account = testAccount()
|
|
45
50
|
const client = clientFor(account)
|
|
46
51
|
await fundAccount({ address: account.address, token: asset })
|
|
47
52
|
|
|
@@ -55,7 +60,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
|
55
60
|
})
|
|
56
61
|
|
|
57
62
|
test('falls through from an unfunded account fee preference', async () => {
|
|
58
|
-
const account =
|
|
63
|
+
const account = testAccount()
|
|
59
64
|
const client = clientFor(account)
|
|
60
65
|
await fundAccount({ address: account.address, token: asset })
|
|
61
66
|
await Actions.fee.setUserTokenSync(client, {
|
|
@@ -73,7 +78,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
|
73
78
|
})
|
|
74
79
|
|
|
75
80
|
test('uses a funded chain fee token when configured', async () => {
|
|
76
|
-
const account =
|
|
81
|
+
const account = testAccount()
|
|
77
82
|
const client = createClient({
|
|
78
83
|
account,
|
|
79
84
|
chain: { ...chain, feeToken: asset },
|
|
@@ -91,7 +96,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
|
91
96
|
})
|
|
92
97
|
|
|
93
98
|
test('falls through from an unfunded chain fee token', async () => {
|
|
94
|
-
const account =
|
|
99
|
+
const account = testAccount()
|
|
95
100
|
const client = createClient({
|
|
96
101
|
account,
|
|
97
102
|
chain: { ...chain, feeToken: Addresses.pathUsd },
|
|
@@ -109,7 +114,7 @@ describe.runIf(isLocalnet)('resolveFeeToken', () => {
|
|
|
109
114
|
})
|
|
110
115
|
|
|
111
116
|
test('falls back to the first known token when none are funded', async () => {
|
|
112
|
-
const account =
|
|
117
|
+
const account = testAccount()
|
|
113
118
|
const client = clientFor(account)
|
|
114
119
|
|
|
115
120
|
const feeToken = await resolveFeeToken({
|
|
@@ -44,9 +44,10 @@ const parsePkhSourceCases = [
|
|
|
44
44
|
] as const
|
|
45
45
|
|
|
46
46
|
describe('Proof', () => {
|
|
47
|
-
test('types has Proof with challengeId and realm fields', () => {
|
|
47
|
+
test('types has Proof with account, challengeId and realm fields', () => {
|
|
48
48
|
expect(Proof.types).toEqual({
|
|
49
49
|
Proof: [
|
|
50
|
+
{ name: 'account', type: 'address' },
|
|
50
51
|
{ name: 'challengeId', type: 'string' },
|
|
51
52
|
{ name: 'realm', type: 'string' },
|
|
52
53
|
],
|
|
@@ -55,7 +56,7 @@ describe('Proof', () => {
|
|
|
55
56
|
|
|
56
57
|
test('domain returns EIP-712 domain with name, version, chainId', () => {
|
|
57
58
|
const d = Proof.domain(42431)
|
|
58
|
-
expect(d).toEqual({ name: 'MPP', version: '
|
|
59
|
+
expect(d).toEqual({ name: 'MPP', version: '3', chainId: 42431 })
|
|
59
60
|
})
|
|
60
61
|
|
|
61
62
|
test('domain uses provided chainId', () => {
|
|
@@ -63,8 +64,15 @@ describe('Proof', () => {
|
|
|
63
64
|
expect(Proof.domain(99999).chainId).toBe(99999)
|
|
64
65
|
})
|
|
65
66
|
|
|
66
|
-
test('message wraps challengeId and realm', () => {
|
|
67
|
-
expect(
|
|
67
|
+
test('message wraps account, challengeId and realm', () => {
|
|
68
|
+
expect(
|
|
69
|
+
Proof.message({
|
|
70
|
+
account: '0xAbCdEf1234567890AbCdEf1234567890AbCdEf12',
|
|
71
|
+
challengeId: 'abc123',
|
|
72
|
+
realm: 'api.example.com',
|
|
73
|
+
}),
|
|
74
|
+
).toEqual({
|
|
75
|
+
account: '0xAbCdEf1234567890AbCdEf1234567890AbCdEf12',
|
|
68
76
|
challengeId: 'abc123',
|
|
69
77
|
realm: 'api.example.com',
|
|
70
78
|
})
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
import { isAddress, type Address } from 'viem'
|
|
1
|
+
import { hashTypedData, isAddress, type Address, type Hex } from 'viem'
|
|
2
2
|
|
|
3
|
-
/** EIP-712
|
|
3
|
+
/** EIP-712 primary type for proof credentials. */
|
|
4
|
+
export const primaryType = 'Proof' as const
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* EIP-712 typed-data field definitions for Tempo zero-amount proof credentials.
|
|
8
|
+
*
|
|
9
|
+
* The `account` field cryptographically binds the signature to the payer
|
|
10
|
+
* wallet, so a proof signed for one account cannot be replayed against another
|
|
11
|
+
* — including across an access key that is authorized for multiple accounts.
|
|
12
|
+
*/
|
|
4
13
|
export const types = {
|
|
5
14
|
Proof: [
|
|
15
|
+
{ name: 'account', type: 'address' },
|
|
6
16
|
{ name: 'challengeId', type: 'string' },
|
|
7
17
|
{ name: 'realm', type: 'string' },
|
|
8
18
|
],
|
|
@@ -10,12 +20,51 @@ export const types = {
|
|
|
10
20
|
|
|
11
21
|
/** Constructs the EIP-712 domain for a proof credential. */
|
|
12
22
|
export function domain(chainId: number) {
|
|
13
|
-
return { name: 'MPP', version: '
|
|
23
|
+
return { name: 'MPP', version: '3', chainId } as const
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Constructs the EIP-712 message for a proof credential.
|
|
28
|
+
*
|
|
29
|
+
* @param parameters - Proof message parameters.
|
|
30
|
+
* @param parameters.account - Payer wallet address the proof is bound to.
|
|
31
|
+
* @param parameters.challengeId - Challenge `id` being proven.
|
|
32
|
+
* @param parameters.realm - Challenge `realm` being proven.
|
|
33
|
+
*/
|
|
34
|
+
export function message(parameters: { account: Address; challengeId: string; realm: string }) {
|
|
35
|
+
const { account, challengeId, realm } = parameters
|
|
36
|
+
return { account, challengeId, realm } as const
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Constructs the complete EIP-712 typed-data payload for a proof credential.
|
|
41
|
+
*
|
|
42
|
+
* This is the canonical, wallet-bound proof contract: signing this payload
|
|
43
|
+
* commits the signer to a specific `account`, `challengeId`, and `realm`.
|
|
44
|
+
*/
|
|
45
|
+
export function typedData(parameters: {
|
|
46
|
+
account: Address
|
|
47
|
+
chainId: number
|
|
48
|
+
challengeId: string
|
|
49
|
+
realm: string
|
|
50
|
+
}) {
|
|
51
|
+
const { account, chainId, challengeId, realm } = parameters
|
|
52
|
+
return {
|
|
53
|
+
domain: domain(chainId),
|
|
54
|
+
types,
|
|
55
|
+
primaryType,
|
|
56
|
+
message: message({ account, challengeId, realm }),
|
|
57
|
+
} as const
|
|
14
58
|
}
|
|
15
59
|
|
|
16
|
-
/**
|
|
17
|
-
export function
|
|
18
|
-
|
|
60
|
+
/** Computes the EIP-712 digest (signing payload) for a proof credential. */
|
|
61
|
+
export function hash(parameters: {
|
|
62
|
+
account: Address
|
|
63
|
+
chainId: number
|
|
64
|
+
challengeId: string
|
|
65
|
+
realm: string
|
|
66
|
+
}): Hex {
|
|
67
|
+
return hashTypedData(typedData(parameters))
|
|
19
68
|
}
|
|
20
69
|
|
|
21
70
|
/** Constructs the expected `did:pkh` source DID for a proof credential. */
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { type Address, createClient, custom, type Hex } from 'viem'
|
|
2
|
+
import {
|
|
3
|
+
Account as TempoAccount,
|
|
4
|
+
KeyAuthorizationManager,
|
|
5
|
+
Secp256k1,
|
|
6
|
+
Transaction,
|
|
7
|
+
} from 'viem/tempo'
|
|
8
|
+
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
9
|
+
import { tempoNetwork } from '~test/config.js'
|
|
10
|
+
import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
|
|
11
|
+
import { asset as currency, chain, http } from '~test/tempo/viem.js'
|
|
12
|
+
|
|
13
|
+
import { createOpenPayload } from './client/ChannelOps.js'
|
|
14
|
+
import { closeOnChain, settleOnChain } from './session/Chain.js'
|
|
15
|
+
import { signVoucher } from './session/Voucher.js'
|
|
16
|
+
|
|
17
|
+
const rootAccount = TempoAccount.fromSecp256k1(
|
|
18
|
+
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
|
|
19
|
+
)
|
|
20
|
+
const recipient = '0x2222222222222222222222222222222222222222' as Address
|
|
21
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
22
|
+
|
|
23
|
+
async function createAccessKeyClient() {
|
|
24
|
+
const keyAuthorizationManager = KeyAuthorizationManager.memory()
|
|
25
|
+
const accessKey = TempoAccount.fromSecp256k1(Secp256k1.randomPrivateKey(), {
|
|
26
|
+
access: rootAccount,
|
|
27
|
+
keyAuthorizationManager,
|
|
28
|
+
})
|
|
29
|
+
const keyAuthorization = await rootAccount.signKeyAuthorization(
|
|
30
|
+
{
|
|
31
|
+
accessKeyAddress: accessKey.accessKeyAddress,
|
|
32
|
+
keyType: accessKey.keyType,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
chainId: BigInt(chain.id),
|
|
36
|
+
},
|
|
37
|
+
)
|
|
38
|
+
await keyAuthorizationManager.set(
|
|
39
|
+
{
|
|
40
|
+
accessKey: accessKey.accessKeyAddress,
|
|
41
|
+
address: rootAccount.address,
|
|
42
|
+
chainId: chain.id,
|
|
43
|
+
},
|
|
44
|
+
keyAuthorization,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
const signedTransactions: Transaction.TransactionSerializedTempo[] = []
|
|
48
|
+
const rpcClient = createClient({ chain, transport: http() })
|
|
49
|
+
|
|
50
|
+
const client = createClient({
|
|
51
|
+
account: accessKey,
|
|
52
|
+
chain,
|
|
53
|
+
transport: custom({
|
|
54
|
+
async request({ method, params }: { method: string; params?: readonly unknown[] }) {
|
|
55
|
+
if (method === 'eth_sendRawTransaction' || method === 'eth_sendRawTransactionSync')
|
|
56
|
+
signedTransactions.push(params?.[0] as Transaction.TransactionSerializedTempo)
|
|
57
|
+
return rpcClient.request({ method, params } as never)
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
return { accessKey, client, keyAuthorization, signedTransactions }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function expectTransactionKeyAuthorization(
|
|
66
|
+
serializedTransaction: Hex,
|
|
67
|
+
keyAuthorization: Awaited<ReturnType<typeof rootAccount.signKeyAuthorization>>,
|
|
68
|
+
) {
|
|
69
|
+
const transaction = Transaction.deserialize(
|
|
70
|
+
serializedTransaction as Transaction.TransactionSerializedTempo,
|
|
71
|
+
)
|
|
72
|
+
expect(transaction.keyAuthorization).toEqual(keyAuthorization)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function createChannelForPayee(payee: Address, escrowContract: Address) {
|
|
76
|
+
const payer = rootAccount
|
|
77
|
+
const { channelId } = await openChannel({
|
|
78
|
+
deposit: 10_000_000n,
|
|
79
|
+
escrow: escrowContract,
|
|
80
|
+
payee,
|
|
81
|
+
payer,
|
|
82
|
+
salt: Secp256k1.randomPrivateKey(),
|
|
83
|
+
token: currency,
|
|
84
|
+
})
|
|
85
|
+
const cumulativeAmount = 1_000_000n
|
|
86
|
+
const signature = await signVoucher(
|
|
87
|
+
createClient({ account: payer, chain, transport: http() }),
|
|
88
|
+
payer,
|
|
89
|
+
{ channelId, cumulativeAmount },
|
|
90
|
+
escrowContract,
|
|
91
|
+
chain.id,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
return { channelId, cumulativeAmount, escrowContract, signature }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
describe.runIf(isLocalnet)('legacy Tempo session access-key authorization attachment', () => {
|
|
98
|
+
let escrowContract: Address
|
|
99
|
+
|
|
100
|
+
beforeAll(async () => {
|
|
101
|
+
escrowContract = await deployEscrow()
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
test('open signs a prepared transaction with keyAuthorization', async () => {
|
|
105
|
+
const { accessKey, client, keyAuthorization } = await createAccessKeyClient()
|
|
106
|
+
|
|
107
|
+
const { payload } = await createOpenPayload(client, accessKey, {
|
|
108
|
+
chainId: chain.id,
|
|
109
|
+
currency,
|
|
110
|
+
deposit: 5_000_000n,
|
|
111
|
+
escrowContract,
|
|
112
|
+
initialAmount: 1_000_000n,
|
|
113
|
+
payee: recipient,
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
expect(payload.action).toBe('open')
|
|
117
|
+
if (payload.action !== 'open') throw new Error('unexpected payload action')
|
|
118
|
+
expectTransactionKeyAuthorization(payload.transaction, keyAuthorization)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
test('settle sends a prepared transaction with keyAuthorization', async () => {
|
|
122
|
+
const { accessKey, client, keyAuthorization, signedTransactions } =
|
|
123
|
+
await createAccessKeyClient()
|
|
124
|
+
const channel = await createChannelForPayee(rootAccount.address, escrowContract)
|
|
125
|
+
|
|
126
|
+
const hash = await settleOnChain(
|
|
127
|
+
client,
|
|
128
|
+
channel.escrowContract,
|
|
129
|
+
{
|
|
130
|
+
channelId: channel.channelId,
|
|
131
|
+
cumulativeAmount: channel.cumulativeAmount,
|
|
132
|
+
signature: channel.signature,
|
|
133
|
+
},
|
|
134
|
+
{ account: accessKey },
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
|
|
138
|
+
expect(signedTransactions).toHaveLength(1)
|
|
139
|
+
expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
test('close sends a prepared transaction with keyAuthorization', async () => {
|
|
143
|
+
const { accessKey, client, keyAuthorization, signedTransactions } =
|
|
144
|
+
await createAccessKeyClient()
|
|
145
|
+
const channel = await createChannelForPayee(rootAccount.address, escrowContract)
|
|
146
|
+
|
|
147
|
+
const hash = await closeOnChain(
|
|
148
|
+
client,
|
|
149
|
+
channel.escrowContract,
|
|
150
|
+
{
|
|
151
|
+
channelId: channel.channelId,
|
|
152
|
+
cumulativeAmount: channel.cumulativeAmount,
|
|
153
|
+
signature: channel.signature,
|
|
154
|
+
},
|
|
155
|
+
{ account: accessKey },
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
expect(hash).toMatch(/^0x[0-9a-f]{64}$/)
|
|
159
|
+
expect(signedTransactions).toHaveLength(1)
|
|
160
|
+
expectTransactionKeyAuthorization(signedTransactions[0]!, keyAuthorization)
|
|
161
|
+
})
|
|
162
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Tempo Legacy Session
|
|
2
|
+
|
|
3
|
+
This directory contains the legacy smart-contract-backed `tempo/session`
|
|
4
|
+
implementation.
|
|
5
|
+
|
|
6
|
+
The default `tempo.session` implementation is TIP-1034 precompile-backed and
|
|
7
|
+
lives under `src/tempo/session/precompile`. Legacy code may import shared transport and
|
|
8
|
+
accounting helpers from `src/tempo/session`, but legacy chain, channel, voucher,
|
|
9
|
+
client, and server implementations should stay inside this directory.
|
|
@@ -4,18 +4,16 @@ import { type Address, createClient, decodeFunctionData } from 'viem'
|
|
|
4
4
|
import { privateKeyToAccount } from 'viem/accounts'
|
|
5
5
|
import { Account as TempoAccount, Addresses, Transaction } from 'viem/tempo'
|
|
6
6
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
7
|
-
import {
|
|
8
|
-
import { deployEscrow, openChannel } from '~test/tempo/session.js'
|
|
7
|
+
import { tempoNetwork } from '~test/config.js'
|
|
8
|
+
import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
|
|
9
9
|
import { accounts, asset, chain, client, fundAccount, http } from '~test/tempo/viem.js'
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import type { Challenge } from '../../Challenge.js'
|
|
14
|
-
import * as Credential from '../../Credential.js'
|
|
11
|
+
import type { Challenge } from '../../../Challenge.js'
|
|
12
|
+
import * as Credential from '../../../Credential.js'
|
|
15
13
|
import {
|
|
16
14
|
chainId as chainIdDefaults,
|
|
17
15
|
escrowContract as escrowContractDefaults,
|
|
18
|
-
} from '
|
|
16
|
+
} from '../../internal/defaults.js'
|
|
19
17
|
import { escrowAbi } from '../session/Chain.js'
|
|
20
18
|
import { verifyVoucher } from '../session/Voucher.js'
|
|
21
19
|
import {
|
|
@@ -40,6 +38,7 @@ const localClient = createClient({
|
|
|
40
38
|
const channelId = '0x0000000000000000000000000000000000000000000000000000000000000001' as Hex.Hex
|
|
41
39
|
const escrowContract = '0x1234567890abcdef1234567890abcdef12345678' as Address
|
|
42
40
|
const chainId = 42431
|
|
41
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
43
42
|
|
|
44
43
|
function makeChallenge(overrides?: Partial<Challenge>): Challenge {
|
|
45
44
|
return {
|
|
@@ -16,21 +16,28 @@ import {
|
|
|
16
16
|
import { prepareTransactionRequest, signTransaction } from 'viem/actions'
|
|
17
17
|
import { Abis } from 'viem/tempo'
|
|
18
18
|
|
|
19
|
-
import type { Challenge } from '
|
|
20
|
-
import * as Credential from '
|
|
21
|
-
import { getAccountSignerAddress } from '
|
|
22
|
-
import * as defaults from '
|
|
19
|
+
import type { Challenge } from '../../../Challenge.js'
|
|
20
|
+
import * as Credential from '../../../Credential.js'
|
|
21
|
+
import { getAccountSignerAddress } from '../../internal/account.js'
|
|
22
|
+
import * as defaults from '../../internal/defaults.js'
|
|
23
23
|
import { escrowAbi, getOnChainChannel } from '../session/Chain.js'
|
|
24
24
|
import * as Channel from '../session/Channel.js'
|
|
25
|
-
import type {
|
|
25
|
+
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
26
26
|
import { signVoucher } from '../session/Voucher.js'
|
|
27
27
|
|
|
28
|
+
/** Cached channel metadata used by the legacy auto-driving session client. */
|
|
28
29
|
export type ChannelEntry = {
|
|
30
|
+
/** Legacy contract-backed channel ID. */
|
|
29
31
|
channelId: Hex.Hex
|
|
32
|
+
/** Salt used to derive the channel ID. */
|
|
30
33
|
salt: Hex.Hex
|
|
34
|
+
/** Highest cumulative voucher amount locally authorized. */
|
|
31
35
|
cumulativeAmount: bigint
|
|
36
|
+
/** Escrow contract backing this channel. */
|
|
32
37
|
escrowContract: Address
|
|
38
|
+
/** Chain ID used for channel ID and voucher domain separation. */
|
|
33
39
|
chainId: number
|
|
40
|
+
/** Whether the client considers the channel reusable. */
|
|
34
41
|
opened: boolean
|
|
35
42
|
}
|
|
36
43
|
|
|
@@ -41,11 +48,13 @@ function resolveVoucherSigner(
|
|
|
41
48
|
return voucherSigner ?? account
|
|
42
49
|
}
|
|
43
50
|
|
|
51
|
+
/** Resolves the chain ID embedded in a legacy session challenge. */
|
|
44
52
|
export function resolveChainId(challenge: Challenge): number {
|
|
45
53
|
const md = challenge.request.methodDetails as { chainId?: number } | undefined
|
|
46
54
|
return md?.chainId ?? 0
|
|
47
55
|
}
|
|
48
56
|
|
|
57
|
+
/** Resolves the legacy escrow contract from local override, challenge hint, or defaults. */
|
|
49
58
|
export function resolveEscrow(
|
|
50
59
|
challenge: { request: { methodDetails?: unknown } },
|
|
51
60
|
chainId: number,
|
|
@@ -64,9 +73,10 @@ export function resolveEscrow(
|
|
|
64
73
|
return escrow
|
|
65
74
|
}
|
|
66
75
|
|
|
76
|
+
/** Serializes a legacy session credential with a payer DID source. */
|
|
67
77
|
export function serializeCredential(
|
|
68
78
|
challenge: Challenge,
|
|
69
|
-
payload:
|
|
79
|
+
payload: LegacySessionCredentialPayload,
|
|
70
80
|
chainId: number,
|
|
71
81
|
account: viem_Account,
|
|
72
82
|
): string {
|
|
@@ -77,6 +87,7 @@ export function serializeCredential(
|
|
|
77
87
|
})
|
|
78
88
|
}
|
|
79
89
|
|
|
90
|
+
/** Creates a legacy cumulative voucher credential payload. */
|
|
80
91
|
export async function createVoucherPayload(
|
|
81
92
|
client: viem_Client,
|
|
82
93
|
account: viem_Account,
|
|
@@ -85,7 +96,7 @@ export async function createVoucherPayload(
|
|
|
85
96
|
escrowContract: Address,
|
|
86
97
|
chainId: number,
|
|
87
98
|
voucherSigner?: viem_Account | undefined,
|
|
88
|
-
): Promise<
|
|
99
|
+
): Promise<LegacySessionCredentialPayload> {
|
|
89
100
|
const signer = resolveVoucherSigner(account, voucherSigner)
|
|
90
101
|
const signature = await signVoucher(
|
|
91
102
|
client,
|
|
@@ -103,6 +114,7 @@ export async function createVoucherPayload(
|
|
|
103
114
|
}
|
|
104
115
|
}
|
|
105
116
|
|
|
117
|
+
/** Creates a legacy cooperative close credential payload. */
|
|
106
118
|
export async function createClosePayload(
|
|
107
119
|
client: viem_Client,
|
|
108
120
|
account: viem_Account,
|
|
@@ -111,7 +123,7 @@ export async function createClosePayload(
|
|
|
111
123
|
escrowContract: Address,
|
|
112
124
|
chainId: number,
|
|
113
125
|
voucherSigner?: viem_Account | undefined,
|
|
114
|
-
): Promise<
|
|
126
|
+
): Promise<LegacySessionCredentialPayload> {
|
|
115
127
|
const signer = resolveVoucherSigner(account, voucherSigner)
|
|
116
128
|
const signature = await signVoucher(
|
|
117
129
|
client,
|
|
@@ -129,6 +141,7 @@ export async function createClosePayload(
|
|
|
129
141
|
}
|
|
130
142
|
}
|
|
131
143
|
|
|
144
|
+
/** Creates a legacy open transaction credential payload and local channel entry. */
|
|
132
145
|
export async function createOpenPayload(
|
|
133
146
|
client: viem_Client,
|
|
134
147
|
account: viem_Account,
|
|
@@ -142,7 +155,7 @@ export async function createOpenPayload(
|
|
|
142
155
|
chainId: number
|
|
143
156
|
feePayer?: boolean | undefined
|
|
144
157
|
},
|
|
145
|
-
): Promise<{ entry: ChannelEntry; payload:
|
|
158
|
+
): Promise<{ entry: ChannelEntry; payload: LegacySessionCredentialPayload }> {
|
|
146
159
|
const { escrowContract, payee, currency, deposit, initialAmount, chainId, feePayer } = options
|
|
147
160
|
const voucherSigner = resolveVoucherSigner(account, options.voucherSigner)
|
|
148
161
|
const authorizedSigner = getAccountSignerAddress(voucherSigner)
|
|
@@ -3,22 +3,21 @@ import { type Address, createClient, decodeFunctionData, erc20Abi, type Hex, htt
|
|
|
3
3
|
import { privateKeyToAccount } from 'viem/accounts'
|
|
4
4
|
import { Account as TempoAccount, Addresses, Transaction, WebCryptoP256 } from 'viem/tempo'
|
|
5
5
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
6
|
-
import {
|
|
7
|
-
import { deployEscrow, openChannel } from '~test/tempo/session.js'
|
|
6
|
+
import { tempoNetwork } from '~test/config.js'
|
|
7
|
+
import { deployEscrow, openChannel } from '~test/tempo/legacy/session.js'
|
|
8
8
|
import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import * as
|
|
13
|
-
import
|
|
14
|
-
import { chainId, escrowContract as escrowContractDefaults } from '../internal/defaults.js'
|
|
10
|
+
import * as Challenge from '../../../Challenge.js'
|
|
11
|
+
import * as Constants from '../../../Constants.js'
|
|
12
|
+
import * as Credential from '../../../Credential.js'
|
|
13
|
+
import { chainId, escrowContract as escrowContractDefaults } from '../../internal/defaults.js'
|
|
15
14
|
import { escrowAbi } from '../session/Chain.js'
|
|
16
|
-
import type {
|
|
15
|
+
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
17
16
|
import { verifyVoucher } from '../session/Voucher.js'
|
|
18
17
|
import { session } from './Session.js'
|
|
19
18
|
|
|
20
19
|
function deserializePayload(result: string) {
|
|
21
|
-
const cred = Credential.deserialize<
|
|
20
|
+
const cred = Credential.deserialize<LegacySessionCredentialPayload>(result)
|
|
22
21
|
return cred
|
|
23
22
|
}
|
|
24
23
|
|
|
@@ -33,6 +32,7 @@ const pureClient = createClient({
|
|
|
33
32
|
const escrowAddress = escrowContractDefaults[chainId.testnet] as Address
|
|
34
33
|
const recipient = '0x2222222222222222222222222222222222222222' as Address
|
|
35
34
|
const currency = '0x3333333333333333333333333333333333333333' as Address
|
|
35
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
36
36
|
|
|
37
37
|
function makeChallenge(overrides?: Record<string, unknown>) {
|
|
38
38
|
return Challenge.from({
|
|
@@ -55,6 +55,48 @@ function makeChallenge(overrides?: Record<string, unknown>) {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
describe('session (pure)', () => {
|
|
58
|
+
test('handles legacy and unmarked session challenges', () => {
|
|
59
|
+
const method = session({
|
|
60
|
+
getClient: () => pureClient,
|
|
61
|
+
account: pureAccount,
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
expect(method.canHandleChallenge?.({ challenge: makeChallenge() })).toBe(true)
|
|
65
|
+
expect(
|
|
66
|
+
method.canHandleChallenge?.({
|
|
67
|
+
challenge: makeChallenge({
|
|
68
|
+
methodDetails: {
|
|
69
|
+
chainId: 42431,
|
|
70
|
+
escrowContract: escrowAddress,
|
|
71
|
+
sessionProtocol: Constants.SessionProtocols.v1,
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
}),
|
|
75
|
+
).toBe(true)
|
|
76
|
+
expect(
|
|
77
|
+
method.canHandleChallenge?.({
|
|
78
|
+
challenge: makeChallenge({
|
|
79
|
+
methodDetails: {
|
|
80
|
+
chainId: 42431,
|
|
81
|
+
escrowContract: escrowAddress,
|
|
82
|
+
sessionProtocol: Constants.SessionProtocols.v2,
|
|
83
|
+
},
|
|
84
|
+
}),
|
|
85
|
+
}),
|
|
86
|
+
).toBe(false)
|
|
87
|
+
expect(
|
|
88
|
+
method.canHandleChallenge?.({
|
|
89
|
+
challenge: makeChallenge({
|
|
90
|
+
methodDetails: {
|
|
91
|
+
chainId: 42431,
|
|
92
|
+
escrowContract: escrowAddress,
|
|
93
|
+
sessionProtocol: 'future' as never,
|
|
94
|
+
},
|
|
95
|
+
}),
|
|
96
|
+
}),
|
|
97
|
+
).toBe(false)
|
|
98
|
+
})
|
|
99
|
+
|
|
58
100
|
describe('error: no action and no deposit/maxDeposit', () => {
|
|
59
101
|
test('throws when neither configured', async () => {
|
|
60
102
|
const method = session({
|
|
@@ -2,15 +2,16 @@ import type { Hex } from 'ox'
|
|
|
2
2
|
import { type Address, parseUnits, type Account as viem_Account } from 'viem'
|
|
3
3
|
import { tempo as tempo_chain } from 'viem/tempo/chains'
|
|
4
4
|
|
|
5
|
-
import type * as Challenge from '
|
|
6
|
-
import * as
|
|
7
|
-
import * as
|
|
8
|
-
import * as
|
|
9
|
-
import * as
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import * as
|
|
13
|
-
import
|
|
5
|
+
import type * as Challenge from '../../../Challenge.js'
|
|
6
|
+
import * as Constants from '../../../Constants.js'
|
|
7
|
+
import * as Method from '../../../Method.js'
|
|
8
|
+
import * as Account from '../../../viem/Account.js'
|
|
9
|
+
import * as Client from '../../../viem/Client.js'
|
|
10
|
+
import * as z from '../../../zod.js'
|
|
11
|
+
import { getAccountSignerAddress } from '../../internal/account.js'
|
|
12
|
+
import * as defaults from '../../internal/defaults.js'
|
|
13
|
+
import * as Methods from '../../Methods.js'
|
|
14
|
+
import type { LegacySessionCredentialPayload } from '../session/Types.js'
|
|
14
15
|
import { signVoucher } from '../session/Voucher.js'
|
|
15
16
|
import {
|
|
16
17
|
type ChannelEntry,
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
tryRecoverChannel,
|
|
22
23
|
} from './ChannelOps.js'
|
|
23
24
|
|
|
25
|
+
/** Runtime schema for legacy low-level session credential context. */
|
|
24
26
|
export const sessionContextSchema = z.object({
|
|
25
27
|
account: z.optional(z.custom<Account.getResolver.Parameters['account']>()),
|
|
26
28
|
action: z.optional(z.enum(['open', 'topUp', 'voucher', 'close'])),
|
|
@@ -33,6 +35,7 @@ export const sessionContextSchema = z.object({
|
|
|
33
35
|
depositRaw: z.optional(z.string()),
|
|
34
36
|
})
|
|
35
37
|
|
|
38
|
+
/** Context accepted by the legacy low-level session client method. */
|
|
36
39
|
export type SessionContext = z.infer<typeof sessionContextSchema>
|
|
37
40
|
|
|
38
41
|
/**
|
|
@@ -172,7 +175,7 @@ export function session(parameters: session.Parameters = {}) {
|
|
|
172
175
|
}
|
|
173
176
|
}
|
|
174
177
|
|
|
175
|
-
let payload:
|
|
178
|
+
let payload: LegacySessionCredentialPayload
|
|
176
179
|
|
|
177
180
|
if (entry?.opened) {
|
|
178
181
|
entry.cumulativeAmount += amount
|
|
@@ -236,7 +239,7 @@ export function session(parameters: session.Parameters = {}) {
|
|
|
236
239
|
const escrowContract = resolveEscrowCached(challenge, chainId, channelId)
|
|
237
240
|
escrowContractMap.set(channelId, escrowContract)
|
|
238
241
|
|
|
239
|
-
let payload:
|
|
242
|
+
let payload: LegacySessionCredentialPayload
|
|
240
243
|
|
|
241
244
|
switch (action) {
|
|
242
245
|
case 'open': {
|
|
@@ -335,6 +338,16 @@ export function session(parameters: session.Parameters = {}) {
|
|
|
335
338
|
}
|
|
336
339
|
|
|
337
340
|
return Method.toClient(Methods.session, {
|
|
341
|
+
canHandleChallenge({ challenge }) {
|
|
342
|
+
const sessionProtocolMarker = Constants.getMethodDetail(
|
|
343
|
+
challenge.request.methodDetails,
|
|
344
|
+
Constants.MethodDetailKeys.sessionProtocol,
|
|
345
|
+
)
|
|
346
|
+
return (
|
|
347
|
+
sessionProtocolMarker === undefined ||
|
|
348
|
+
sessionProtocolMarker === Constants.SessionProtocols.v1
|
|
349
|
+
)
|
|
350
|
+
},
|
|
338
351
|
context: sessionContextSchema,
|
|
339
352
|
|
|
340
353
|
async createCredential({ challenge, context }) {
|
|
@@ -354,6 +367,7 @@ export function session(parameters: session.Parameters = {}) {
|
|
|
354
367
|
})
|
|
355
368
|
}
|
|
356
369
|
|
|
370
|
+
/** Type helpers for the legacy low-level session client method. */
|
|
357
371
|
export declare namespace session {
|
|
358
372
|
type Parameters = Account.getResolver.Parameters &
|
|
359
373
|
Client.getResolver.Parameters & {
|