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
package/src/proxy/Proxy.test.ts
CHANGED
|
@@ -3,20 +3,20 @@ import { Mppx as Mppx_client, tempo as tempo_client } from 'mppx/client'
|
|
|
3
3
|
import { Mppx as Mppx_server, tempo as tempo_server } from 'mppx/server'
|
|
4
4
|
import type { Address } from 'viem'
|
|
5
5
|
import { afterEach, beforeAll, describe, expect, test } from 'vp/test'
|
|
6
|
-
import {
|
|
6
|
+
import { tempoNetwork } from '~test/config.js'
|
|
7
7
|
import * as Http from '~test/Http.js'
|
|
8
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
8
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
9
9
|
import { accounts, asset, client } from '~test/tempo/viem.js'
|
|
10
10
|
|
|
11
|
-
import { sessionManager } from '../tempo/client/
|
|
12
|
-
import { deserializeSessionReceipt } from '../tempo/session/
|
|
11
|
+
import { sessionManager } from '../tempo/legacy/client/index.js'
|
|
12
|
+
import { deserializeSessionReceipt } from '../tempo/session/precompile/Protocol.js'
|
|
13
13
|
import * as ApiProxy from './Proxy.js'
|
|
14
14
|
import * as Service from './Service.js'
|
|
15
15
|
import { anthropic } from './services/anthropic.js'
|
|
16
16
|
import { openai } from './services/openai.js'
|
|
17
17
|
|
|
18
|
-
const secretKey = 'test-secret-key'
|
|
19
|
-
const isLocalnet =
|
|
18
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
19
|
+
const isLocalnet = tempoNetwork === 'localnet'
|
|
20
20
|
|
|
21
21
|
const mppx_server = Mppx_server.create({
|
|
22
22
|
methods: [
|
|
@@ -907,7 +907,7 @@ describe.runIf(isLocalnet)('plain HTTP session proxy', () => {
|
|
|
907
907
|
|
|
908
908
|
const sessionHandler = Mppx_server.create({
|
|
909
909
|
methods: [
|
|
910
|
-
tempo_server.
|
|
910
|
+
tempo_server.sessionLegacy({
|
|
911
911
|
account: accounts[0],
|
|
912
912
|
currency: asset,
|
|
913
913
|
escrowContract: sessionEscrow,
|
|
@@ -967,7 +967,7 @@ describe.runIf(isLocalnet)('plain HTTP session proxy', () => {
|
|
|
967
967
|
|
|
968
968
|
const sessionHandler = Mppx_server.create({
|
|
969
969
|
methods: [
|
|
970
|
-
tempo_server.
|
|
970
|
+
tempo_server.sessionLegacy({
|
|
971
971
|
account: accounts[0],
|
|
972
972
|
currency: asset,
|
|
973
973
|
escrowContract: sessionEscrow,
|
|
@@ -997,7 +997,7 @@ describe.runIf(isLocalnet)('plain HTTP session proxy', () => {
|
|
|
997
997
|
const sessionClient = Mppx_client.create({
|
|
998
998
|
polyfill: false,
|
|
999
999
|
methods: [
|
|
1000
|
-
tempo_client({
|
|
1000
|
+
tempo_client.sessionLegacy.method({
|
|
1001
1001
|
account: accounts[1],
|
|
1002
1002
|
getClient: () => client,
|
|
1003
1003
|
maxDeposit: '2',
|
|
@@ -9,7 +9,7 @@ import * as ApiProxy from '../Proxy.js'
|
|
|
9
9
|
import { anthropic } from './anthropic.js'
|
|
10
10
|
|
|
11
11
|
const apiKey = 'sk-ant-test-fake-anthropic-key'
|
|
12
|
-
const secretKey = 'test-secret-key'
|
|
12
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
13
13
|
|
|
14
14
|
const mppx_server = Mppx_server.create({
|
|
15
15
|
methods: [
|
|
@@ -11,7 +11,7 @@ import { openai } from './openai.js'
|
|
|
11
11
|
const apiKey = process.env.VITE_OPENAI_API_KEY
|
|
12
12
|
if (!apiKey) console.warn('OPENAI_API_KEY not set — openai proxy tests will be skipped')
|
|
13
13
|
|
|
14
|
-
const secretKey = 'test-secret-key'
|
|
14
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
15
15
|
|
|
16
16
|
const mppx_server = Mppx_server.create({
|
|
17
17
|
methods: [
|
|
@@ -9,7 +9,7 @@ import * as ApiProxy from '../Proxy.js'
|
|
|
9
9
|
import { stripe } from './stripe.js'
|
|
10
10
|
|
|
11
11
|
const apiKey = 'sk_test_fake_stripe_key'
|
|
12
|
-
const secretKey = 'test-secret-key'
|
|
12
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
13
13
|
|
|
14
14
|
const mppx_server = Mppx_server.create({
|
|
15
15
|
methods: [
|
|
@@ -4,7 +4,7 @@ import { describe, expect, test } from 'vp/test'
|
|
|
4
4
|
import * as Http from '~test/Http.js'
|
|
5
5
|
|
|
6
6
|
const realm = 'api.example.com'
|
|
7
|
-
const secretKey = 'test-secret-key'
|
|
7
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
8
8
|
|
|
9
9
|
function successReceipt(method = 'mock') {
|
|
10
10
|
return {
|
|
@@ -34,6 +34,22 @@ const mockChargeB = Method.from({
|
|
|
34
34
|
},
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
+
const mockSession = Method.from({
|
|
38
|
+
name: 'tempo',
|
|
39
|
+
intent: 'session',
|
|
40
|
+
schema: {
|
|
41
|
+
credential: {
|
|
42
|
+
payload: z.object({ token: z.string() }),
|
|
43
|
+
},
|
|
44
|
+
request: z.object({
|
|
45
|
+
amount: z.string(),
|
|
46
|
+
currency: z.string(),
|
|
47
|
+
methodDetails: z.object({ sessionProtocol: z.string() }),
|
|
48
|
+
unitType: z.string(),
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
})
|
|
52
|
+
|
|
37
53
|
const alphaMethod = Method.toServer(mockChargeA, {
|
|
38
54
|
async verify() {
|
|
39
55
|
return {
|
|
@@ -56,7 +72,30 @@ const betaMethod = Method.toServer(mockChargeB, {
|
|
|
56
72
|
},
|
|
57
73
|
})
|
|
58
74
|
|
|
59
|
-
const
|
|
75
|
+
const tip1034SessionMethod = Method.toServer(mockSession, {
|
|
76
|
+
async verify() {
|
|
77
|
+
return {
|
|
78
|
+
method: 'tempo',
|
|
79
|
+
reference: 'tx',
|
|
80
|
+
status: 'success' as const,
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const legacySessionMethod = Method.toServer(mockSession, {
|
|
87
|
+
alias: 'sessionLegacy',
|
|
88
|
+
async verify() {
|
|
89
|
+
return {
|
|
90
|
+
method: 'tempo',
|
|
91
|
+
reference: 'tx',
|
|
92
|
+
status: 'success' as const,
|
|
93
|
+
timestamp: new Date().toISOString(),
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
60
99
|
const realm = 'api.example.com'
|
|
61
100
|
|
|
62
101
|
describe('Mppx type tests', () => {
|
|
@@ -105,6 +144,21 @@ describe('Mppx type tests', () => {
|
|
|
105
144
|
expectTypeOf(mppx.beta.charge).toBeFunction()
|
|
106
145
|
})
|
|
107
146
|
|
|
147
|
+
test('aliased duplicate handlers are accessible by nested and slash keys', () => {
|
|
148
|
+
const mppx = Mppx.create({
|
|
149
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
150
|
+
realm,
|
|
151
|
+
secretKey,
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
expectTypeOf(mppx.tempo.session).toBeFunction()
|
|
155
|
+
expectTypeOf(mppx.tempo.sessionLegacy).toBeFunction()
|
|
156
|
+
expectTypeOf(mppx['tempo/session']).toBeFunction()
|
|
157
|
+
expectTypeOf(mppx['tempo/sessionLegacy']).toBeFunction()
|
|
158
|
+
expectTypeOf(mppx.challenge.tempo.session).toBeFunction()
|
|
159
|
+
expectTypeOf(mppx.challenge.tempo.sessionLegacy).toBeFunction()
|
|
160
|
+
})
|
|
161
|
+
|
|
108
162
|
test('slash key handlers are accessible', () => {
|
|
109
163
|
const mppx = Mppx.create({ methods: [alphaMethod, betaMethod], realm, secretKey })
|
|
110
164
|
|
package/src/server/Mppx.test.ts
CHANGED
|
@@ -3,23 +3,23 @@ import * as http from 'node:http'
|
|
|
3
3
|
import { Challenge, Credential, Errors, Method, Receipt, z } from 'mppx'
|
|
4
4
|
import {
|
|
5
5
|
Mppx as Mppx_client,
|
|
6
|
-
|
|
6
|
+
sessionLegacy as tempo_session_client,
|
|
7
7
|
tempo as tempo_client,
|
|
8
8
|
} from 'mppx/client'
|
|
9
9
|
import { Types as evm_Types } from 'mppx/evm'
|
|
10
10
|
import { evm, Mppx, stripe, Store, Transport, tempo } from 'mppx/server'
|
|
11
11
|
import { Header as x402_Header, Types as x402_Types, type PaymentPayload } from 'mppx/x402'
|
|
12
12
|
import { getTransactionReceipt } from 'viem/actions'
|
|
13
|
-
import { describe, expect, test } from 'vp/test'
|
|
13
|
+
import { describe, expect, test, vi } from 'vp/test'
|
|
14
14
|
import * as Http from '~test/Http.js'
|
|
15
|
-
import { deployEscrow } from '~test/tempo/session.js'
|
|
15
|
+
import { deployEscrow } from '~test/tempo/legacy/session.js'
|
|
16
16
|
import { accounts, asset, client } from '~test/tempo/viem.js'
|
|
17
17
|
|
|
18
|
-
import type { SessionReceipt } from '../tempo/session/
|
|
18
|
+
import type { SessionReceipt } from '../tempo/session/precompile/Protocol.js'
|
|
19
19
|
import * as x402_RouteBinding from '../x402/internal/RouteBinding.js'
|
|
20
20
|
|
|
21
21
|
const realm = 'api.example.com'
|
|
22
|
-
const secretKey = 'test-secret-key'
|
|
22
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
23
23
|
|
|
24
24
|
const method = tempo({
|
|
25
25
|
getClient: () => client,
|
|
@@ -40,6 +40,24 @@ describe('create', () => {
|
|
|
40
40
|
|
|
41
41
|
expect(handler.transport.name).toBe('mcp')
|
|
42
42
|
})
|
|
43
|
+
|
|
44
|
+
test('error: rejects short explicit secret key', () => {
|
|
45
|
+
expect(() => Mppx.create({ methods: [method], realm, secretKey: 'short' })).toThrow(
|
|
46
|
+
'Secret key must be at least 32 bytes.',
|
|
47
|
+
)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
test('error: rejects short MPP_SECRET_KEY secret key', () => {
|
|
51
|
+
vi.stubEnv('MPP_SECRET_KEY', 'short')
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
expect(() => Mppx.create({ methods: [method], realm })).toThrow(
|
|
55
|
+
'Secret key must be at least 32 bytes.',
|
|
56
|
+
)
|
|
57
|
+
} finally {
|
|
58
|
+
vi.unstubAllEnvs()
|
|
59
|
+
}
|
|
60
|
+
})
|
|
43
61
|
})
|
|
44
62
|
|
|
45
63
|
describe('request handler', () => {
|
|
@@ -1837,6 +1855,22 @@ describe('compose', () => {
|
|
|
1837
1855
|
},
|
|
1838
1856
|
})
|
|
1839
1857
|
|
|
1858
|
+
const mockSession = Method.from({
|
|
1859
|
+
name: 'tempo',
|
|
1860
|
+
intent: 'session',
|
|
1861
|
+
schema: {
|
|
1862
|
+
credential: {
|
|
1863
|
+
payload: z.object({ token: z.string() }),
|
|
1864
|
+
},
|
|
1865
|
+
request: z.object({
|
|
1866
|
+
amount: z.string(),
|
|
1867
|
+
currency: z.string(),
|
|
1868
|
+
methodDetails: z.object({ sessionProtocol: z.optional(z.string()) }),
|
|
1869
|
+
unitType: z.string(),
|
|
1870
|
+
}),
|
|
1871
|
+
},
|
|
1872
|
+
})
|
|
1873
|
+
|
|
1840
1874
|
function mockReceipt(name: string) {
|
|
1841
1875
|
return {
|
|
1842
1876
|
method: name,
|
|
@@ -1858,6 +1892,19 @@ describe('compose', () => {
|
|
|
1858
1892
|
},
|
|
1859
1893
|
})
|
|
1860
1894
|
|
|
1895
|
+
const tip1034SessionMethod = Method.toServer(mockSession, {
|
|
1896
|
+
async verify() {
|
|
1897
|
+
return mockReceipt('v2')
|
|
1898
|
+
},
|
|
1899
|
+
})
|
|
1900
|
+
|
|
1901
|
+
const legacySessionMethod = Method.toServer(mockSession, {
|
|
1902
|
+
alias: 'sessionLegacy',
|
|
1903
|
+
async verify() {
|
|
1904
|
+
return mockReceipt('v1')
|
|
1905
|
+
},
|
|
1906
|
+
})
|
|
1907
|
+
|
|
1861
1908
|
const x402Method = evm.charge({
|
|
1862
1909
|
currency: evm.assets.baseSepolia.USDC,
|
|
1863
1910
|
recipient: accounts[0].address,
|
|
@@ -1889,6 +1936,19 @@ describe('compose', () => {
|
|
|
1889
1936
|
recipient: '0x0000000000000000000000000000000000000002',
|
|
1890
1937
|
}
|
|
1891
1938
|
|
|
1939
|
+
const sessionChallengeOpts = {
|
|
1940
|
+
amount: '100',
|
|
1941
|
+
currency: asset,
|
|
1942
|
+
expires: new Date(Date.now() + 60_000),
|
|
1943
|
+
methodDetails: { sessionProtocol: 'v2' },
|
|
1944
|
+
unitType: 'request',
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
const legacySessionChallengeOpts = {
|
|
1948
|
+
...sessionChallengeOpts,
|
|
1949
|
+
methodDetails: { sessionProtocol: 'v1' },
|
|
1950
|
+
}
|
|
1951
|
+
|
|
1892
1952
|
test('returns 402 with multiple WWW-Authenticate headers when no credential', async () => {
|
|
1893
1953
|
const mppx = Mppx.create({ methods: [alphaMethod, betaMethod], realm, secretKey })
|
|
1894
1954
|
|
|
@@ -1905,6 +1965,157 @@ describe('compose', () => {
|
|
|
1905
1965
|
expect(wwwAuth).toContain('method="beta"')
|
|
1906
1966
|
})
|
|
1907
1967
|
|
|
1968
|
+
test('broadcasts duplicate tempo/session variants in compose order', async () => {
|
|
1969
|
+
const mppx = Mppx.create({
|
|
1970
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
1971
|
+
realm,
|
|
1972
|
+
secretKey,
|
|
1973
|
+
})
|
|
1974
|
+
|
|
1975
|
+
const result = await mppx.compose(
|
|
1976
|
+
[mppx.tempo.session, sessionChallengeOpts],
|
|
1977
|
+
[mppx.tempo.sessionLegacy, legacySessionChallengeOpts],
|
|
1978
|
+
)(new Request('https://example.com/resource'))
|
|
1979
|
+
|
|
1980
|
+
expect(result.status).toBe(402)
|
|
1981
|
+
if (result.status !== 402) throw new Error()
|
|
1982
|
+
|
|
1983
|
+
const challenges = Challenge.fromResponseList(result.challenge)
|
|
1984
|
+
expect(challenges.map((challenge) => challenge.request.methodDetails)).toEqual([
|
|
1985
|
+
{ sessionProtocol: 'v2' },
|
|
1986
|
+
{ sessionProtocol: 'v1' },
|
|
1987
|
+
])
|
|
1988
|
+
})
|
|
1989
|
+
|
|
1990
|
+
test('keeps duplicate tempo/session variants when Accept-Payment allows tempo/session', async () => {
|
|
1991
|
+
const mppx = Mppx.create({
|
|
1992
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
1993
|
+
realm,
|
|
1994
|
+
secretKey,
|
|
1995
|
+
})
|
|
1996
|
+
|
|
1997
|
+
const result = await mppx.compose(
|
|
1998
|
+
[mppx.tempo.session, sessionChallengeOpts],
|
|
1999
|
+
[mppx.tempo.sessionLegacy, legacySessionChallengeOpts],
|
|
2000
|
+
)(
|
|
2001
|
+
new Request('https://example.com/resource', {
|
|
2002
|
+
headers: { 'Accept-Payment': 'tempo/session' },
|
|
2003
|
+
}),
|
|
2004
|
+
)
|
|
2005
|
+
|
|
2006
|
+
expect(result.status).toBe(402)
|
|
2007
|
+
if (result.status !== 402) throw new Error()
|
|
2008
|
+
|
|
2009
|
+
expect(Challenge.fromResponseList(result.challenge)).toHaveLength(2)
|
|
2010
|
+
})
|
|
2011
|
+
|
|
2012
|
+
test('uses TIP-1034 as the bare tempo/session handler regardless of registration order', async () => {
|
|
2013
|
+
const mppx = Mppx.create({
|
|
2014
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
2015
|
+
realm,
|
|
2016
|
+
secretKey,
|
|
2017
|
+
})
|
|
2018
|
+
|
|
2019
|
+
const result = await mppx.compose([mppx.tempo.session, sessionChallengeOpts])(
|
|
2020
|
+
new Request('https://example.com/resource'),
|
|
2021
|
+
)
|
|
2022
|
+
|
|
2023
|
+
expect(result.status).toBe(402)
|
|
2024
|
+
if (result.status !== 402) throw new Error()
|
|
2025
|
+
expect(Challenge.fromResponse(result.challenge).request.methodDetails).toEqual({
|
|
2026
|
+
sessionProtocol: 'v2',
|
|
2027
|
+
})
|
|
2028
|
+
})
|
|
2029
|
+
|
|
2030
|
+
test('rejects cross-protocol tempo/session credential replay', async () => {
|
|
2031
|
+
const mppx = Mppx.create({
|
|
2032
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
2033
|
+
realm,
|
|
2034
|
+
secretKey,
|
|
2035
|
+
})
|
|
2036
|
+
const tip1034ChallengeResponse = await mppx.compose([mppx.tempo.session, sessionChallengeOpts])(
|
|
2037
|
+
new Request('https://example.com/resource'),
|
|
2038
|
+
)
|
|
2039
|
+
expect(tip1034ChallengeResponse.status).toBe(402)
|
|
2040
|
+
if (tip1034ChallengeResponse.status !== 402) throw new Error()
|
|
2041
|
+
const tip1034Challenge = Challenge.fromResponse(tip1034ChallengeResponse.challenge)
|
|
2042
|
+
|
|
2043
|
+
const credential = Credential.serialize({
|
|
2044
|
+
challenge: tip1034Challenge,
|
|
2045
|
+
payload: { token: 'valid' },
|
|
2046
|
+
})
|
|
2047
|
+
const legacyResult = await mppx.compose([mppx.tempo.sessionLegacy, legacySessionChallengeOpts])(
|
|
2048
|
+
new Request('https://example.com/resource', {
|
|
2049
|
+
headers: { Authorization: credential },
|
|
2050
|
+
}),
|
|
2051
|
+
)
|
|
2052
|
+
|
|
2053
|
+
expect(legacyResult.status).toBe(402)
|
|
2054
|
+
})
|
|
2055
|
+
|
|
2056
|
+
test('verifyCredential dispatches duplicate tempo/session variants by sessionProtocol', async () => {
|
|
2057
|
+
const mppx = Mppx.create({
|
|
2058
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
2059
|
+
realm,
|
|
2060
|
+
secretKey,
|
|
2061
|
+
})
|
|
2062
|
+
const tip1034Challenge = await mppx.challenge.tempo.session(sessionChallengeOpts)
|
|
2063
|
+
const legacyChallenge = await mppx.challenge.tempo.sessionLegacy(legacySessionChallengeOpts)
|
|
2064
|
+
|
|
2065
|
+
const tip1034Receipt = await mppx.verifyCredential(
|
|
2066
|
+
Credential.serialize({
|
|
2067
|
+
challenge: tip1034Challenge,
|
|
2068
|
+
payload: { token: 'valid' },
|
|
2069
|
+
}),
|
|
2070
|
+
)
|
|
2071
|
+
const legacyReceipt = await mppx.verifyCredential(
|
|
2072
|
+
Credential.serialize({
|
|
2073
|
+
challenge: legacyChallenge,
|
|
2074
|
+
payload: { token: 'valid' },
|
|
2075
|
+
}),
|
|
2076
|
+
)
|
|
2077
|
+
|
|
2078
|
+
expect(tip1034Receipt.reference).toBe('tx-v2')
|
|
2079
|
+
expect(legacyReceipt.reference).toBe('tx-v1')
|
|
2080
|
+
})
|
|
2081
|
+
|
|
2082
|
+
test('verifyCredential routes unmarked tempo/session challenges to legacy v1', async () => {
|
|
2083
|
+
const mppx = Mppx.create({
|
|
2084
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
2085
|
+
realm,
|
|
2086
|
+
secretKey,
|
|
2087
|
+
})
|
|
2088
|
+
const unmarkedLegacyChallenge = await mppx.challenge.tempo.sessionLegacy({
|
|
2089
|
+
...legacySessionChallengeOpts,
|
|
2090
|
+
methodDetails: {},
|
|
2091
|
+
})
|
|
2092
|
+
|
|
2093
|
+
await expect(
|
|
2094
|
+
mppx.verifyCredential(
|
|
2095
|
+
Credential.serialize({
|
|
2096
|
+
challenge: unmarkedLegacyChallenge,
|
|
2097
|
+
payload: { token: 'valid' },
|
|
2098
|
+
}),
|
|
2099
|
+
),
|
|
2100
|
+
).resolves.toMatchObject({ reference: 'tx-v1' })
|
|
2101
|
+
})
|
|
2102
|
+
|
|
2103
|
+
test('verifyCredential rejects unknown tempo/session protocol markers', async () => {
|
|
2104
|
+
const mppx = Mppx.create({
|
|
2105
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
2106
|
+
realm,
|
|
2107
|
+
secretKey,
|
|
2108
|
+
})
|
|
2109
|
+
const challenge = await mppx.challenge.tempo.session({
|
|
2110
|
+
...sessionChallengeOpts,
|
|
2111
|
+
methodDetails: { sessionProtocol: 'future' },
|
|
2112
|
+
})
|
|
2113
|
+
|
|
2114
|
+
await expect(
|
|
2115
|
+
mppx.verifyCredential(Credential.serialize({ challenge, payload: { token: 'valid' } })),
|
|
2116
|
+
).rejects.toThrow('no registered method for tempo/session')
|
|
2117
|
+
})
|
|
2118
|
+
|
|
1908
2119
|
test('returns composed x402 challenge headers when no credential', async () => {
|
|
1909
2120
|
const mppx = Mppx.create({ methods: [x402Method], realm, secretKey })
|
|
1910
2121
|
|
|
@@ -5178,7 +5389,7 @@ describe('verifyCredential', () => {
|
|
|
5178
5389
|
const escrowContract = await deployEscrow()
|
|
5179
5390
|
const server = Mppx.create({
|
|
5180
5391
|
methods: [
|
|
5181
|
-
tempo.
|
|
5392
|
+
tempo.sessionLegacy({
|
|
5182
5393
|
store: Store.memory(),
|
|
5183
5394
|
getClient: () => client,
|
|
5184
5395
|
account: accounts[0],
|
|
@@ -5195,7 +5406,7 @@ describe('verifyCredential', () => {
|
|
|
5195
5406
|
methods: [
|
|
5196
5407
|
tempo_session_client({
|
|
5197
5408
|
account: accounts[1],
|
|
5198
|
-
|
|
5409
|
+
maxDeposit: '10',
|
|
5199
5410
|
getClient: () => client,
|
|
5200
5411
|
}),
|
|
5201
5412
|
],
|
|
@@ -5241,7 +5452,7 @@ describe('verifyCredential', () => {
|
|
|
5241
5452
|
const escrowContract = await deployEscrow()
|
|
5242
5453
|
const server = Mppx.create({
|
|
5243
5454
|
methods: [
|
|
5244
|
-
tempo.
|
|
5455
|
+
tempo.sessionLegacy({
|
|
5245
5456
|
store: Store.memory(),
|
|
5246
5457
|
getClient: () => client,
|
|
5247
5458
|
account: accounts[0],
|
|
@@ -5259,7 +5470,7 @@ describe('verifyCredential', () => {
|
|
|
5259
5470
|
methods: [
|
|
5260
5471
|
tempo_session_client({
|
|
5261
5472
|
account: accounts[1],
|
|
5262
|
-
|
|
5473
|
+
maxDeposit: '10',
|
|
5263
5474
|
getClient: () => client,
|
|
5264
5475
|
}),
|
|
5265
5476
|
],
|