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
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
|
+
import type { McpError } from '@modelcontextprotocol/sdk/types.js'
|
|
3
|
+
|
|
4
|
+
import * as Challenge from '../../Challenge.js'
|
|
5
|
+
import * as Credential from '../../Credential.js'
|
|
6
|
+
import * as Expires from '../../Expires.js'
|
|
7
|
+
import * as AcceptPayment from '../../internal/AcceptPayment.js'
|
|
8
|
+
import * as core_Mcp from '../../Mcp.js'
|
|
9
|
+
import type * as Method from '../../Method.js'
|
|
10
|
+
import * as z from '../../zod.js'
|
|
11
|
+
|
|
12
|
+
type AnyClient = Method.Client<any, any>
|
|
13
|
+
type Methods = readonly (Method.AnyClient | readonly Method.AnyClient[])[]
|
|
14
|
+
type DefaultMethods = readonly [Method.AnyClient | readonly Method.AnyClient[]]
|
|
15
|
+
type CallToolParams = Parameters<Client['callTool']>[0]
|
|
16
|
+
type CallToolResultSchema = Parameters<Client['callTool']>[1]
|
|
17
|
+
type CallToolRequestOptions = Parameters<Client['callTool']>[2]
|
|
18
|
+
type PaymentRequiredData = NonNullable<core_Mcp.ErrorObject['data']>
|
|
19
|
+
|
|
20
|
+
const MPPX_MCP_CLIENT_WRAPPER = Symbol.for('mppx.mcp.client.wrapper')
|
|
21
|
+
|
|
22
|
+
export type OnPaymentRequired = (challenge: Challenge.Challenge) => boolean | Promise<boolean>
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Result of a tool call with payment handling.
|
|
26
|
+
* Extends the SDK's callTool return type with an optional payment receipt.
|
|
27
|
+
*/
|
|
28
|
+
export type CallToolResult = Awaited<ReturnType<Client['callTool']>> & {
|
|
29
|
+
/** Payment receipt if payment was made. */
|
|
30
|
+
receipt: core_Mcp.Receipt | undefined
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Adds automatic payment handling to an MCP SDK client.
|
|
35
|
+
*
|
|
36
|
+
* The client's `callTool` method is replaced in place and the same reference
|
|
37
|
+
* is returned, so surfaces that keep using the original client become
|
|
38
|
+
* payment-aware — including when another SDK owns the client reference (e.g.
|
|
39
|
+
* Cloudflare Agents). The MCP SDK `callTool(params, resultSchema?, options?)`
|
|
40
|
+
* signature is preserved; pass a method's `context` or a per-call
|
|
41
|
+
* `onPaymentRequired` approval hook via the options argument, where they are
|
|
42
|
+
* stripped before the remaining request options are forwarded to the SDK.
|
|
43
|
+
* Payment challenges are handled whether they arrive as payment-required
|
|
44
|
+
* errors or as tool results carrying payment-required metadata. Calling
|
|
45
|
+
* `wrap()` again replaces the payment configuration.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* import { Client } from '@modelcontextprotocol/sdk/client'
|
|
50
|
+
* import { tempo } from 'mppx/client'
|
|
51
|
+
* import { McpClient } from 'mppx/mcp/client'
|
|
52
|
+
* import { privateKeyToAccount } from 'viem/accounts'
|
|
53
|
+
*
|
|
54
|
+
* const client = new Client({ name: 'my-client', version: '1.0.0' })
|
|
55
|
+
* await client.connect(transport)
|
|
56
|
+
*
|
|
57
|
+
* McpClient.wrap(client, {
|
|
58
|
+
* methods: [
|
|
59
|
+
* tempo({
|
|
60
|
+
* account: privateKeyToAccount('0x...'),
|
|
61
|
+
* }),
|
|
62
|
+
* ],
|
|
63
|
+
* })
|
|
64
|
+
*
|
|
65
|
+
* // Automatically handles payment challenges
|
|
66
|
+
* const result = await client.callTool({ name: 'premium_tool', arguments: {} })
|
|
67
|
+
* console.log(result.content, result.receipt)
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function wrap<const client extends Pick<Client, 'callTool'>, const methods extends Methods>(
|
|
71
|
+
client: client,
|
|
72
|
+
config: wrap.Config<methods>,
|
|
73
|
+
): wrap.McpClient<client, methods> {
|
|
74
|
+
const target = client as client & { [MPPX_MCP_CLIENT_WRAPPER]?: Client['callTool'] }
|
|
75
|
+
const originalCallTool = target[MPPX_MCP_CLIENT_WRAPPER] ?? target.callTool
|
|
76
|
+
const callTool = createPaymentAwareCallTool(originalCallTool.bind(client), config)
|
|
77
|
+
|
|
78
|
+
Object.defineProperty(target, MPPX_MCP_CLIENT_WRAPPER, {
|
|
79
|
+
configurable: true,
|
|
80
|
+
value: originalCallTool,
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
Object.defineProperty(target, 'callTool', {
|
|
84
|
+
configurable: true,
|
|
85
|
+
enumerable: false,
|
|
86
|
+
value: (
|
|
87
|
+
params: CallToolParams,
|
|
88
|
+
resultSchema?: CallToolResultSchema,
|
|
89
|
+
options?: wrap.CallToolOptions<methods>,
|
|
90
|
+
) => {
|
|
91
|
+
const { context, onPaymentRequired, ...requestOptions } =
|
|
92
|
+
options ?? ({} as wrap.CallToolOptions<methods>)
|
|
93
|
+
return callTool(params, {
|
|
94
|
+
context,
|
|
95
|
+
onPaymentRequired:
|
|
96
|
+
onPaymentRequired === null ? undefined : (onPaymentRequired ?? config.onPaymentRequired),
|
|
97
|
+
requestOptions: Object.keys(requestOptions).length
|
|
98
|
+
? (requestOptions as CallToolRequestOptions)
|
|
99
|
+
: undefined,
|
|
100
|
+
resultSchema,
|
|
101
|
+
})
|
|
102
|
+
},
|
|
103
|
+
writable: true,
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
return target as unknown as wrap.McpClient<client, methods>
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export declare namespace wrap {
|
|
110
|
+
type Config<methods extends Methods = Methods> = {
|
|
111
|
+
/** Optional approval hook called before creating a payment credential. */
|
|
112
|
+
onPaymentRequired?: OnPaymentRequired
|
|
113
|
+
/** Filters and sorts supported Challenges before Credential creation. */
|
|
114
|
+
orderChallenges?: AcceptPayment.OrderChallenges<FlattenMethods<methods>> | undefined
|
|
115
|
+
/** Client-declared supported payment methods, keyed by typed `method/intent` strings. */
|
|
116
|
+
paymentPreferences?: AcceptPayment.Config<FlattenMethods<methods>> | undefined
|
|
117
|
+
/** Array of methods to use. Accepts individual clients or tuples (e.g. from `tempo()`). */
|
|
118
|
+
methods: methods
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
type McpClient<
|
|
122
|
+
client extends Pick<Client, 'callTool'> = Pick<Client, 'callTool'>,
|
|
123
|
+
methods extends Methods = DefaultMethods,
|
|
124
|
+
> = Omit<client, 'callTool'> & {
|
|
125
|
+
/** Call a tool with automatic payment handling. Preserves the MCP SDK signature. */
|
|
126
|
+
callTool: (
|
|
127
|
+
params: CallToolParams,
|
|
128
|
+
resultSchema?: CallToolResultSchema,
|
|
129
|
+
options?: CallToolOptions<methods>,
|
|
130
|
+
) => Promise<CallToolResult>
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
type CallToolOptions<methods extends Methods = DefaultMethods> = CallToolRequestOptions & {
|
|
134
|
+
/** Context to pass to the method intent's createCredential. */
|
|
135
|
+
context?: AnyContextForMethods<methods>
|
|
136
|
+
/** Per-call approval hook; overrides the configured hook. Pass `null` to bypass it. */
|
|
137
|
+
onPaymentRequired?: OnPaymentRequired | null
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Minimal wire shape of payment-required data; challenges are validated, extra fields pass through. */
|
|
142
|
+
const PaymentRequiredSchema = z.object({
|
|
143
|
+
challenges: z.array(Challenge.Schema).check(z.minLength(1)),
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Checks if an error is a payment required error.
|
|
148
|
+
*/
|
|
149
|
+
export function isPaymentRequiredError(
|
|
150
|
+
error: unknown,
|
|
151
|
+
): error is McpError & { data: PaymentRequiredData } {
|
|
152
|
+
if (typeof error !== 'object' || error === null) return false
|
|
153
|
+
if (!('code' in error) || !('message' in error)) return false
|
|
154
|
+
if ((error as { code: unknown }).code !== core_Mcp.paymentRequiredCode) return false
|
|
155
|
+
return isPaymentRequiredData((error as { data?: unknown }).data)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** @internal */
|
|
159
|
+
async function createCredential<methods extends readonly Method.AnyClient[]>(
|
|
160
|
+
challenge: Challenge.Challenge,
|
|
161
|
+
config: {
|
|
162
|
+
context?: unknown
|
|
163
|
+
methods: methods
|
|
164
|
+
},
|
|
165
|
+
): Promise<string> {
|
|
166
|
+
const { context, methods } = config
|
|
167
|
+
|
|
168
|
+
const mi = methods.find((m) => m.name === challenge.method && m.intent === challenge.intent)
|
|
169
|
+
if (!mi)
|
|
170
|
+
throw new Error(
|
|
171
|
+
`No method found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.name}.${m.intent}`).join(', ')}`,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
if (challenge.expires) Expires.assert(challenge.expires, challenge.id)
|
|
175
|
+
|
|
176
|
+
const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined
|
|
177
|
+
return mi.createCredential(
|
|
178
|
+
parsedContext !== undefined ? { challenge, context: parsedContext } : ({ challenge } as never),
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Normalized per-call inputs for the payment-aware adapter. @internal */
|
|
183
|
+
type CallToolCall = {
|
|
184
|
+
context?: unknown
|
|
185
|
+
onPaymentRequired?: OnPaymentRequired | undefined
|
|
186
|
+
requestOptions?: CallToolRequestOptions | undefined
|
|
187
|
+
resultSchema?: CallToolResultSchema | undefined
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function createPaymentAwareCallTool<methods extends Methods>(
|
|
191
|
+
callTool: Client['callTool'],
|
|
192
|
+
config: wrap.Config<methods>,
|
|
193
|
+
): (params: CallToolParams, call: CallToolCall) => Promise<CallToolResult> {
|
|
194
|
+
const methods = config.methods.flat() as unknown as FlattenMethods<methods>
|
|
195
|
+
const paymentPreferences = AcceptPayment.resolve(methods, config.paymentPreferences)
|
|
196
|
+
|
|
197
|
+
const retryWithPayment = async (
|
|
198
|
+
params: CallToolParams,
|
|
199
|
+
call: CallToolCall,
|
|
200
|
+
paymentRequired: PaymentRequiredData,
|
|
201
|
+
cause: unknown,
|
|
202
|
+
) => {
|
|
203
|
+
const challenges = paymentRequired.challenges
|
|
204
|
+
const candidates = AcceptPayment.selectChallengeCandidates(
|
|
205
|
+
challenges,
|
|
206
|
+
methods,
|
|
207
|
+
paymentPreferences.entries,
|
|
208
|
+
)
|
|
209
|
+
const orderedCandidates = config.orderChallenges
|
|
210
|
+
? await config.orderChallenges(candidates)
|
|
211
|
+
: candidates
|
|
212
|
+
const selected = orderedCandidates[0]
|
|
213
|
+
|
|
214
|
+
if (!selected) {
|
|
215
|
+
const available = challenges.map((challenge) => `${challenge.method}.${challenge.intent}`)
|
|
216
|
+
const installed = methods.map((method) => `${method.name}.${method.intent}`)
|
|
217
|
+
throw new Error(
|
|
218
|
+
`No compatible payment method. Server offers: ${available.join(', ')}. Client has: ${installed.join(', ')}`,
|
|
219
|
+
{ cause },
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (selected.challenge.expires)
|
|
224
|
+
Expires.assert(selected.challenge.expires, selected.challenge.id)
|
|
225
|
+
|
|
226
|
+
if (call.onPaymentRequired) {
|
|
227
|
+
const approved = await call.onPaymentRequired(selected.challenge)
|
|
228
|
+
if (!approved) throw new Error('Payment declined.', { cause })
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const credential = await createCredential(selected.challenge, {
|
|
232
|
+
context: call.context,
|
|
233
|
+
methods,
|
|
234
|
+
})
|
|
235
|
+
const parsed = Credential.deserialize(credential)
|
|
236
|
+
|
|
237
|
+
const retryResult = await callTool(
|
|
238
|
+
{
|
|
239
|
+
...params,
|
|
240
|
+
_meta: {
|
|
241
|
+
...params._meta,
|
|
242
|
+
[core_Mcp.credentialMetaKey]: parsed,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
call.resultSchema,
|
|
246
|
+
call.requestOptions,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
return withReceipt(retryResult)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return async (params, call) => {
|
|
253
|
+
try {
|
|
254
|
+
const result = await callTool(params, call.resultSchema, call.requestOptions)
|
|
255
|
+
const paymentRequired = getPaymentRequiredMeta(result)
|
|
256
|
+
if (paymentRequired) return retryWithPayment(params, call, paymentRequired, result)
|
|
257
|
+
return withReceipt(result)
|
|
258
|
+
} catch (error) {
|
|
259
|
+
if (!isPaymentRequiredError(error)) throw error
|
|
260
|
+
return retryWithPayment(params, call, error.data, error)
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function getPaymentRequiredMeta(
|
|
266
|
+
result: Awaited<ReturnType<Client['callTool']>>,
|
|
267
|
+
): PaymentRequiredData | undefined {
|
|
268
|
+
const data = result._meta?.[core_Mcp.paymentRequiredMetaKey]
|
|
269
|
+
return isPaymentRequiredData(data) ? data : undefined
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
function isPaymentRequiredData(value: unknown): value is PaymentRequiredData {
|
|
273
|
+
return PaymentRequiredSchema.safeParse(value).success
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function withReceipt(result: Awaited<ReturnType<Client['callTool']>>): CallToolResult {
|
|
277
|
+
return {
|
|
278
|
+
...result,
|
|
279
|
+
receipt: result._meta?.[core_Mcp.receiptMetaKey] as core_Mcp.Receipt | undefined,
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** Union of all context types from all methods that have context schemas. */
|
|
284
|
+
type AnyContextFor<methods extends readonly AnyClient[]> = {
|
|
285
|
+
[key in keyof methods]: methods[key] extends Method.Client<any, infer context>
|
|
286
|
+
? context extends z.ZodMiniType
|
|
287
|
+
? z.input<context>
|
|
288
|
+
: undefined
|
|
289
|
+
: undefined
|
|
290
|
+
}[number]
|
|
291
|
+
|
|
292
|
+
/** Union of all context types across a methods config, flattening tuples. @internal */
|
|
293
|
+
type AnyContextForMethods<methods extends Methods> =
|
|
294
|
+
FlattenMethods<methods> extends infer flattened extends readonly AnyClient[]
|
|
295
|
+
? AnyContextFor<flattened>
|
|
296
|
+
: never
|
|
297
|
+
|
|
298
|
+
type FlattenMethods<methods extends Methods> = methods extends readonly [
|
|
299
|
+
infer head,
|
|
300
|
+
...infer tail extends Methods,
|
|
301
|
+
]
|
|
302
|
+
? head extends readonly Method.AnyClient[]
|
|
303
|
+
? readonly [...head, ...FlattenMethods<tail>]
|
|
304
|
+
: head extends Method.AnyClient
|
|
305
|
+
? readonly [head, ...FlattenMethods<tail>]
|
|
306
|
+
: never
|
|
307
|
+
: readonly []
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
|
+
import { McpError } from '@modelcontextprotocol/sdk/types.js'
|
|
3
|
+
import { Challenge, Credential, Mcp as core_Mcp, Method } from 'mppx'
|
|
4
|
+
import { Methods } from 'mppx/tempo'
|
|
5
|
+
import { describe, expect, test, vi } from 'vp/test'
|
|
6
|
+
|
|
7
|
+
import * as McpClient from './McpClient.js'
|
|
8
|
+
|
|
9
|
+
describe('MCP client payment approval', () => {
|
|
10
|
+
test('calls an approval hook before creating a credential', async () => {
|
|
11
|
+
const challenge = Challenge.from({
|
|
12
|
+
id: 'approval-test',
|
|
13
|
+
intent: 'charge',
|
|
14
|
+
method: 'tempo',
|
|
15
|
+
realm: 'api.example.com',
|
|
16
|
+
request: {},
|
|
17
|
+
})
|
|
18
|
+
const calls: unknown[] = []
|
|
19
|
+
const client = {
|
|
20
|
+
async callTool(params: unknown) {
|
|
21
|
+
calls.push(params)
|
|
22
|
+
if (calls.length === 1)
|
|
23
|
+
throw new McpError(core_Mcp.paymentRequiredCode, 'Payment Required', {
|
|
24
|
+
challenges: [challenge],
|
|
25
|
+
httpStatus: 402,
|
|
26
|
+
})
|
|
27
|
+
return {
|
|
28
|
+
_meta: {
|
|
29
|
+
[core_Mcp.receiptMetaKey]: {
|
|
30
|
+
method: 'tempo',
|
|
31
|
+
reference: 'test',
|
|
32
|
+
status: 'success',
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
const createCredential = vi.fn(async ({ challenge }: { challenge: Challenge.Challenge }) =>
|
|
41
|
+
Credential.serialize({
|
|
42
|
+
challenge,
|
|
43
|
+
payload: { signature: '0xsignature', type: 'transaction' },
|
|
44
|
+
}),
|
|
45
|
+
)
|
|
46
|
+
const onPaymentRequired = vi.fn(() => true)
|
|
47
|
+
const mcp = McpClient.wrap(client as unknown as Pick<Client, 'callTool'>, {
|
|
48
|
+
methods: [Method.toClient(Methods.charge, { createCredential })],
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
const result = await mcp.callTool({ name: 'paid_tool', arguments: {} }, undefined, {
|
|
52
|
+
onPaymentRequired,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
expect(result.content).toEqual([{ type: 'text', text: 'ok' }])
|
|
56
|
+
expect(onPaymentRequired).toHaveBeenCalledWith(challenge)
|
|
57
|
+
expect(createCredential).toHaveBeenCalledOnce()
|
|
58
|
+
expect(calls).toHaveLength(2)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('does not create a credential when approval is denied', async () => {
|
|
62
|
+
const challenge = Challenge.from({
|
|
63
|
+
id: 'denied-test',
|
|
64
|
+
intent: 'charge',
|
|
65
|
+
method: 'tempo',
|
|
66
|
+
realm: 'api.example.com',
|
|
67
|
+
request: {},
|
|
68
|
+
})
|
|
69
|
+
const client = {
|
|
70
|
+
async callTool() {
|
|
71
|
+
throw new McpError(core_Mcp.paymentRequiredCode, 'Payment Required', {
|
|
72
|
+
challenges: [challenge],
|
|
73
|
+
httpStatus: 402,
|
|
74
|
+
})
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
const createCredential = vi.fn(async ({ challenge }: { challenge: Challenge.Challenge }) =>
|
|
78
|
+
Credential.serialize({
|
|
79
|
+
challenge,
|
|
80
|
+
payload: { signature: '0xsignature', type: 'transaction' },
|
|
81
|
+
}),
|
|
82
|
+
)
|
|
83
|
+
const mcp = McpClient.wrap(client as unknown as Pick<Client, 'callTool'>, {
|
|
84
|
+
methods: [Method.toClient(Methods.charge, { createCredential })],
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
await expect(
|
|
88
|
+
mcp.callTool({ name: 'paid_tool' }, undefined, { onPaymentRequired: () => false }),
|
|
89
|
+
).rejects.toThrow('Payment declined.')
|
|
90
|
+
expect(createCredential).not.toHaveBeenCalled()
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
test('allows null to bypass a config approval hook', async () => {
|
|
94
|
+
const challenge = Challenge.from({
|
|
95
|
+
id: 'null-bypass-test',
|
|
96
|
+
intent: 'charge',
|
|
97
|
+
method: 'tempo',
|
|
98
|
+
realm: 'api.example.com',
|
|
99
|
+
request: {},
|
|
100
|
+
})
|
|
101
|
+
let calls = 0
|
|
102
|
+
const client = {
|
|
103
|
+
async callTool() {
|
|
104
|
+
calls += 1
|
|
105
|
+
if (calls === 1)
|
|
106
|
+
throw new McpError(core_Mcp.paymentRequiredCode, 'Payment Required', {
|
|
107
|
+
challenges: [challenge],
|
|
108
|
+
httpStatus: 402,
|
|
109
|
+
})
|
|
110
|
+
return {
|
|
111
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
}
|
|
115
|
+
const createCredential = vi.fn(async ({ challenge }: { challenge: Challenge.Challenge }) =>
|
|
116
|
+
Credential.serialize({
|
|
117
|
+
challenge,
|
|
118
|
+
payload: { signature: '0xsignature', type: 'transaction' },
|
|
119
|
+
}),
|
|
120
|
+
)
|
|
121
|
+
const onPaymentRequired = vi.fn(() => false)
|
|
122
|
+
const mcp = McpClient.wrap(client as unknown as Pick<Client, 'callTool'>, {
|
|
123
|
+
methods: [Method.toClient(Methods.charge, { createCredential })],
|
|
124
|
+
onPaymentRequired,
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
await expect(
|
|
128
|
+
mcp.callTool({ name: 'paid_tool' }, undefined, { onPaymentRequired: null }),
|
|
129
|
+
).resolves.toMatchObject({
|
|
130
|
+
content: [{ type: 'text', text: 'ok' }],
|
|
131
|
+
})
|
|
132
|
+
expect(onPaymentRequired).not.toHaveBeenCalled()
|
|
133
|
+
expect(createCredential).toHaveBeenCalledOnce()
|
|
134
|
+
})
|
|
135
|
+
})
|
|
@@ -2,14 +2,18 @@ import * as http from 'node:http'
|
|
|
2
2
|
|
|
3
3
|
import { Elysia } from 'elysia'
|
|
4
4
|
import { Receipt } from 'mppx'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
Mppx as Mppx_client,
|
|
7
|
+
sessionLegacy as sessionIntent,
|
|
8
|
+
tempo as tempo_client,
|
|
9
|
+
} from 'mppx/client'
|
|
6
10
|
import { Mppx, discovery, payment } from 'mppx/elysia'
|
|
7
11
|
import { tempo as tempo_server } from 'mppx/server'
|
|
8
12
|
import type { Address } from 'viem'
|
|
9
13
|
import { Addresses } from 'viem/tempo'
|
|
10
14
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
11
15
|
import * as TestHttp from '~test/Http.js'
|
|
12
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
16
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
13
17
|
import { accounts, asset, client, fundAccount } from '~test/tempo/viem.js'
|
|
14
18
|
|
|
15
19
|
function createServer(app: Elysia<any, any, any, any, any, any, any>) {
|
|
@@ -33,7 +37,7 @@ function createServer(app: Elysia<any, any, any, any, any, any, any>) {
|
|
|
33
37
|
})
|
|
34
38
|
}
|
|
35
39
|
|
|
36
|
-
const secretKey = 'test-secret-key'
|
|
40
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
37
41
|
|
|
38
42
|
describe('payment', () => {
|
|
39
43
|
test('short-circuits management responses', async () => {
|
|
@@ -202,7 +206,7 @@ describe('session', () => {
|
|
|
202
206
|
function createSessionHarness(feePayer: boolean) {
|
|
203
207
|
const mppx = Mppx.create({
|
|
204
208
|
methods: [
|
|
205
|
-
tempo_server.
|
|
209
|
+
tempo_server.sessionLegacy({
|
|
206
210
|
getClient: () => client,
|
|
207
211
|
account: accounts[0],
|
|
208
212
|
currency: asset,
|
|
@@ -218,7 +222,7 @@ describe('session', () => {
|
|
|
218
222
|
methods: [
|
|
219
223
|
sessionIntent({
|
|
220
224
|
account: accounts[2],
|
|
221
|
-
|
|
225
|
+
maxDeposit: '10',
|
|
222
226
|
getClient: () => client,
|
|
223
227
|
}),
|
|
224
228
|
],
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import express from 'express'
|
|
2
2
|
import { Receipt } from 'mppx'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Mppx as Mppx_client,
|
|
5
|
+
sessionLegacy as sessionIntent,
|
|
6
|
+
tempo as tempo_client,
|
|
7
|
+
} from 'mppx/client'
|
|
4
8
|
import { Mppx, discovery, payment } from 'mppx/express'
|
|
5
9
|
import { Mppx as Mppx_server, tempo as tempo_server } from 'mppx/server'
|
|
6
10
|
import type { Address } from 'viem'
|
|
7
11
|
import { Addresses } from 'viem/tempo'
|
|
8
12
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
9
13
|
import * as Http from '~test/Http.js'
|
|
10
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
14
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
11
15
|
import { accounts, asset, client, fundAccount } from '~test/tempo/viem.js'
|
|
12
16
|
|
|
13
17
|
function createServer(app: express.Express) {
|
|
@@ -19,7 +23,7 @@ function createServer(app: express.Express) {
|
|
|
19
23
|
})
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
const secretKey = 'test-secret-key'
|
|
26
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
23
27
|
|
|
24
28
|
function createChargeHarness(feePayer: boolean) {
|
|
25
29
|
const mppx = Mppx.create({
|
|
@@ -196,7 +200,7 @@ describe('session', () => {
|
|
|
196
200
|
function createSessionHarness(feePayer: boolean) {
|
|
197
201
|
const mppx = Mppx.create({
|
|
198
202
|
methods: [
|
|
199
|
-
tempo_server.
|
|
203
|
+
tempo_server.sessionLegacy({
|
|
200
204
|
getClient: () => client,
|
|
201
205
|
account: accounts[0],
|
|
202
206
|
currency: asset,
|
|
@@ -212,7 +216,7 @@ describe('session', () => {
|
|
|
212
216
|
methods: [
|
|
213
217
|
sessionIntent({
|
|
214
218
|
account: accounts[2],
|
|
215
|
-
|
|
219
|
+
maxDeposit: '10',
|
|
216
220
|
getClient: () => client,
|
|
217
221
|
}),
|
|
218
222
|
],
|
|
@@ -4,7 +4,7 @@ import { Challenge, Credential, Method, Receipt, z } from 'mppx'
|
|
|
4
4
|
import {
|
|
5
5
|
evm as evm_client,
|
|
6
6
|
Mppx as Mppx_client,
|
|
7
|
-
|
|
7
|
+
sessionLegacy as sessionIntent,
|
|
8
8
|
tempo as tempo_client,
|
|
9
9
|
} from 'mppx/client'
|
|
10
10
|
import { Mppx, discovery, payment } from 'mppx/hono'
|
|
@@ -19,7 +19,7 @@ import type { Address } from 'viem'
|
|
|
19
19
|
import { Addresses } from 'viem/tempo'
|
|
20
20
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
21
21
|
import * as Http from '~test/Http.js'
|
|
22
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
22
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
23
23
|
import { accounts, asset, client, fundAccount } from '~test/tempo/viem.js'
|
|
24
24
|
|
|
25
25
|
function createServer(app: Hono) {
|
|
@@ -35,7 +35,7 @@ function createServer(app: Hono) {
|
|
|
35
35
|
})
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const secretKey = 'test-secret-key'
|
|
38
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
39
39
|
|
|
40
40
|
describe('payment', () => {
|
|
41
41
|
test('short-circuits management responses', async () => {
|
|
@@ -391,7 +391,7 @@ describe('session', () => {
|
|
|
391
391
|
function createSessionHarness(feePayer: boolean) {
|
|
392
392
|
const mppx = Mppx.create({
|
|
393
393
|
methods: [
|
|
394
|
-
tempo_server.
|
|
394
|
+
tempo_server.sessionLegacy({
|
|
395
395
|
getClient: () => client,
|
|
396
396
|
account: accounts[0],
|
|
397
397
|
currency: asset,
|
|
@@ -407,7 +407,7 @@ describe('session', () => {
|
|
|
407
407
|
methods: [
|
|
408
408
|
sessionIntent({
|
|
409
409
|
account: accounts[2],
|
|
410
|
-
|
|
410
|
+
maxDeposit: '10',
|
|
411
411
|
getClient: () => client,
|
|
412
412
|
}),
|
|
413
413
|
],
|
|
@@ -5,7 +5,7 @@ import { describe, expect, test } from 'vp/test'
|
|
|
5
5
|
import { wrap } from './mppx.js'
|
|
6
6
|
|
|
7
7
|
const realm = 'api.example.com'
|
|
8
|
-
const secretKey = 'test-secret-key'
|
|
8
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
9
9
|
|
|
10
10
|
const mockChargeA = Method.from({
|
|
11
11
|
name: 'alpha',
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import * as http from 'node:http'
|
|
2
2
|
|
|
3
3
|
import { Challenge, Credential, Receipt } from 'mppx'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Mppx as Mppx_client,
|
|
6
|
+
sessionLegacy as sessionIntent,
|
|
7
|
+
tempo as tempo_client,
|
|
8
|
+
} from 'mppx/client'
|
|
5
9
|
import { Mppx, discovery, payment } from 'mppx/nextjs'
|
|
6
10
|
import { tempo as tempo_server } from 'mppx/server'
|
|
7
11
|
import type { Address } from 'viem'
|
|
8
12
|
import { Addresses } from 'viem/tempo'
|
|
9
13
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
10
14
|
import * as TestHttp from '~test/Http.js'
|
|
11
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
15
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
12
16
|
import { accounts, asset, chain, client, fundAccount } from '~test/tempo/viem.js'
|
|
13
17
|
|
|
14
18
|
function createServer(handler: (request: Request) => Promise<Response> | Response) {
|
|
@@ -32,7 +36,7 @@ function createServer(handler: (request: Request) => Promise<Response> | Respons
|
|
|
32
36
|
})
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
const secretKey = 'test-secret-key'
|
|
39
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
36
40
|
|
|
37
41
|
describe('payment', () => {
|
|
38
42
|
test('short-circuits management responses', async () => {
|
|
@@ -279,7 +283,7 @@ describe('session', () => {
|
|
|
279
283
|
function createSessionHarness(feePayer: boolean) {
|
|
280
284
|
const mppx = Mppx.create({
|
|
281
285
|
methods: [
|
|
282
|
-
tempo_server.
|
|
286
|
+
tempo_server.sessionLegacy({
|
|
283
287
|
getClient: () => client,
|
|
284
288
|
account: accounts[0],
|
|
285
289
|
currency: asset,
|
|
@@ -295,7 +299,7 @@ describe('session', () => {
|
|
|
295
299
|
methods: [
|
|
296
300
|
sessionIntent({
|
|
297
301
|
account: accounts[2],
|
|
298
|
-
|
|
302
|
+
maxDeposit: '10',
|
|
299
303
|
getClient: () => client,
|
|
300
304
|
}),
|
|
301
305
|
],
|