mppx 0.6.31 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +9 -7
- package/dist/Challenge.js.map +1 -1
- package/dist/Constants.d.ts +46 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +46 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Credential.d.ts.map +1 -1
- package/dist/Credential.js +5 -4
- package/dist/Credential.js.map +1 -1
- package/dist/Method.d.ts +32 -4
- package/dist/Method.d.ts.map +1 -1
- package/dist/Method.js +5 -2
- package/dist/Method.js.map +1 -1
- package/dist/Receipt.d.ts.map +1 -1
- package/dist/Receipt.js +3 -2
- package/dist/Receipt.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +19 -11
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/plugins/tempo.d.ts.map +1 -1
- package/dist/cli/plugins/tempo.js +17 -6
- package/dist/cli/plugins/tempo.js.map +1 -1
- package/dist/cli/utils.d.ts +5 -0
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js +10 -0
- package/dist/cli/utils.js.map +1 -1
- package/dist/client/Methods.d.ts +5 -2
- package/dist/client/Methods.d.ts.map +1 -1
- package/dist/client/Methods.js +5 -2
- package/dist/client/Methods.js.map +1 -1
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +4 -5
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +14 -6
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/evm/server/Methods.d.ts +1 -1
- package/dist/evm/server/Methods.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/AcceptPayment.d.ts +3 -0
- package/dist/internal/AcceptPayment.d.ts.map +1 -1
- package/dist/internal/AcceptPayment.js +15 -11
- package/dist/internal/AcceptPayment.js.map +1 -1
- package/dist/mcp-sdk/client/McpClient.d.ts +12 -5
- package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -1
- package/dist/mcp-sdk/client/McpClient.js +55 -42
- package/dist/mcp-sdk/client/McpClient.js.map +1 -1
- package/dist/server/Mppx.d.ts +11 -3
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +76 -27
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/Response.d.ts.map +1 -1
- package/dist/server/Response.js +2 -1
- package/dist/server/Response.js.map +1 -1
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +4 -3
- package/dist/server/Transport.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/stripe/client/Charge.d.ts +1 -1
- package/dist/stripe/client/Charge.d.ts.map +1 -1
- package/dist/stripe/client/Charge.js +3 -1
- package/dist/stripe/client/Charge.js.map +1 -1
- package/dist/stripe/server/Charge.d.ts +1 -1
- package/dist/stripe/server/Charge.d.ts.map +1 -1
- package/dist/stripe/server/Charge.js +9 -2
- package/dist/stripe/server/Charge.js.map +1 -1
- package/dist/stripe/server/Methods.d.ts +1 -1
- package/dist/stripe/server/Methods.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/Methods.d.ts +18 -0
- package/dist/tempo/Methods.d.ts.map +1 -1
- package/dist/tempo/Methods.js +16 -1
- package/dist/tempo/Methods.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts +6 -0
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +9 -2
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +36 -7
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Methods.js +12 -5
- package/dist/tempo/client/Methods.js.map +1 -1
- package/dist/tempo/client/index.d.ts +7 -4
- package/dist/tempo/client/index.d.ts.map +1 -1
- package/dist/tempo/client/index.js +5 -3
- package/dist/tempo/client/index.js.map +1 -1
- package/dist/tempo/index.d.ts +1 -0
- package/dist/tempo/index.d.ts.map +1 -1
- package/dist/tempo/index.js +1 -0
- package/dist/tempo/index.js.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts +21 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +109 -4
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/{client → legacy/client}/ChannelOps.d.ts +19 -6
- package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/ChannelOps.js +9 -3
- package/dist/tempo/legacy/client/ChannelOps.js.map +1 -0
- package/dist/tempo/{client → legacy/client}/Session.d.ts +23 -4
- package/dist/tempo/legacy/client/Session.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/Session.js +14 -7
- package/dist/tempo/legacy/client/Session.js.map +1 -0
- package/dist/tempo/{client → legacy/client}/SessionManager.d.ts +20 -5
- package/dist/tempo/legacy/client/SessionManager.d.ts.map +1 -0
- package/dist/tempo/{client → legacy/client}/SessionManager.js +20 -16
- package/dist/tempo/legacy/client/SessionManager.js.map +1 -0
- package/dist/tempo/legacy/client/index.d.ts +7 -0
- package/dist/tempo/legacy/client/index.d.ts.map +1 -0
- package/dist/tempo/legacy/client/index.js +5 -0
- package/dist/tempo/legacy/client/index.js.map +1 -0
- package/dist/tempo/legacy/index.d.ts +7 -0
- package/dist/tempo/legacy/index.d.ts.map +1 -0
- package/dist/tempo/legacy/index.js +7 -0
- package/dist/tempo/legacy/index.js.map +1 -0
- package/dist/tempo/{server → legacy/server}/Session.d.ts +28 -11
- package/dist/tempo/legacy/server/Session.d.ts.map +1 -0
- package/dist/tempo/{server → legacy/server}/Session.js +12 -10
- package/dist/tempo/legacy/server/Session.js.map +1 -0
- package/dist/tempo/legacy/server/index.d.ts +5 -0
- package/dist/tempo/legacy/server/index.d.ts.map +1 -0
- package/dist/tempo/legacy/server/index.js +5 -0
- package/dist/tempo/legacy/server/index.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Chain.d.ts +30 -23
- package/dist/tempo/legacy/session/Chain.d.ts.map +1 -0
- package/dist/tempo/{session → legacy/session}/Chain.js +12 -11
- package/dist/tempo/legacy/session/Chain.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Channel.d.ts +1 -0
- package/dist/tempo/legacy/session/Channel.d.ts.map +1 -0
- package/dist/tempo/legacy/session/Channel.js.map +1 -0
- package/dist/tempo/legacy/session/ChannelStore.d.ts +22 -0
- package/dist/tempo/legacy/session/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/legacy/session/ChannelStore.js +6 -0
- package/dist/tempo/legacy/session/ChannelStore.js.map +1 -0
- package/dist/tempo/legacy/session/Types.d.ts +73 -0
- package/dist/tempo/legacy/session/Types.d.ts.map +1 -0
- package/dist/tempo/legacy/session/Types.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/Voucher.d.ts +4 -4
- package/dist/tempo/legacy/session/Voucher.d.ts.map +1 -0
- package/dist/tempo/{session → legacy/session}/Voucher.js +1 -1
- package/dist/tempo/legacy/session/Voucher.js.map +1 -0
- package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts +1 -0
- package/dist/tempo/{session → legacy/session}/escrow.abi.d.ts.map +1 -1
- package/dist/tempo/{session → legacy/session}/escrow.abi.js +1 -0
- package/dist/tempo/legacy/session/escrow.abi.js.map +1 -0
- package/dist/tempo/legacy/session/index.d.ts +9 -0
- package/dist/tempo/legacy/session/index.d.ts.map +1 -0
- package/dist/tempo/legacy/session/index.js +9 -0
- package/dist/tempo/legacy/session/index.js.map +1 -0
- package/dist/tempo/server/Charge.d.ts +1 -1
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +13 -16
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +63 -6
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +36 -8
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +1 -1
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/index.d.ts +6 -5
- package/dist/tempo/server/index.d.ts.map +1 -1
- package/dist/tempo/server/index.js +5 -5
- package/dist/tempo/server/index.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/server/internal/request-body.d.ts +7 -2
- package/dist/tempo/server/internal/request-body.d.ts.map +1 -1
- package/dist/tempo/server/internal/request-body.js +20 -3
- package/dist/tempo/server/internal/request-body.js.map +1 -1
- package/dist/tempo/server/internal/transport.d.ts +8 -4
- package/dist/tempo/server/internal/transport.d.ts.map +1 -1
- package/dist/tempo/server/internal/transport.js +8 -7
- package/dist/tempo/server/internal/transport.js.map +1 -1
- package/dist/tempo/session/Snapshot.d.ts +32 -0
- package/dist/tempo/session/Snapshot.d.ts.map +1 -0
- package/dist/tempo/session/Snapshot.js +37 -0
- package/dist/tempo/session/Snapshot.js.map +1 -0
- package/dist/tempo/session/client/ChannelOps.d.ts +82 -0
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/session/client/ChannelOps.js +204 -0
- package/dist/tempo/session/client/ChannelOps.js.map +1 -0
- package/dist/tempo/session/client/CredentialState.d.ts +262 -0
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -0
- package/dist/tempo/session/client/CredentialState.js +417 -0
- package/dist/tempo/session/client/CredentialState.js.map +1 -0
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts +26 -0
- package/dist/tempo/session/client/ReceiptCoordinator.d.ts.map +1 -0
- package/dist/tempo/session/client/ReceiptCoordinator.js +61 -0
- package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -0
- package/dist/tempo/session/client/Runtime.d.ts +464 -0
- package/dist/tempo/session/client/Runtime.d.ts.map +1 -0
- package/dist/tempo/session/client/Runtime.js +499 -0
- package/dist/tempo/session/client/Runtime.js.map +1 -0
- package/dist/tempo/session/client/Session.d.ts +132 -0
- package/dist/tempo/session/client/Session.d.ts.map +1 -0
- package/dist/tempo/session/client/Session.js +55 -0
- package/dist/tempo/session/client/Session.js.map +1 -0
- package/dist/tempo/session/client/SessionManager.d.ts +120 -0
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -0
- package/dist/tempo/session/client/SessionManager.js +627 -0
- package/dist/tempo/session/client/SessionManager.js.map +1 -0
- package/dist/tempo/session/client/Transports.d.ts +449 -0
- package/dist/tempo/session/client/Transports.d.ts.map +1 -0
- package/dist/tempo/session/client/Transports.js +721 -0
- package/dist/tempo/session/client/Transports.js.map +1 -0
- package/dist/tempo/session/client/index.d.ts +12 -0
- package/dist/tempo/session/client/index.d.ts.map +1 -0
- package/dist/tempo/session/client/index.js +5 -0
- package/dist/tempo/session/client/index.js.map +1 -0
- package/dist/tempo/session/index.d.ts +7 -8
- package/dist/tempo/session/index.d.ts.map +1 -1
- package/dist/tempo/session/index.js +7 -8
- package/dist/tempo/session/index.js.map +1 -1
- package/dist/tempo/session/precompile/Chain.d.ts +319 -0
- package/dist/tempo/session/precompile/Chain.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Chain.js +492 -0
- package/dist/tempo/session/precompile/Chain.js.map +1 -0
- package/dist/tempo/session/precompile/Channel.d.ts +46 -0
- package/dist/tempo/session/precompile/Channel.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Channel.js +56 -0
- package/dist/tempo/session/precompile/Channel.js.map +1 -0
- package/dist/tempo/session/precompile/Protocol.d.ts +308 -0
- package/dist/tempo/session/precompile/Protocol.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Protocol.js +264 -0
- package/dist/tempo/session/precompile/Protocol.js.map +1 -0
- package/dist/tempo/session/precompile/Voucher.d.ts +40 -0
- package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -0
- package/dist/tempo/session/precompile/Voucher.js +126 -0
- package/dist/tempo/session/precompile/Voucher.js.map +1 -0
- package/dist/tempo/session/precompile/escrow.abi.d.ts +522 -0
- package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -0
- package/dist/tempo/session/precompile/escrow.abi.js +224 -0
- package/dist/tempo/session/precompile/escrow.abi.js.map +1 -0
- package/dist/tempo/session/precompile/index.d.ts +24 -0
- package/dist/tempo/session/precompile/index.d.ts.map +1 -0
- package/dist/tempo/session/precompile/index.js +22 -0
- package/dist/tempo/session/precompile/index.js.map +1 -0
- package/dist/tempo/session/server/ChannelOps.d.ts +56 -0
- package/dist/tempo/session/server/ChannelOps.d.ts.map +1 -0
- package/dist/tempo/session/server/ChannelOps.js +91 -0
- package/dist/tempo/session/server/ChannelOps.js.map +1 -0
- package/dist/tempo/session/server/ChannelStore.d.ts +347 -0
- package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -0
- package/dist/tempo/session/server/ChannelStore.js +404 -0
- package/dist/tempo/session/server/ChannelStore.js.map +1 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts +85 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -0
- package/dist/tempo/session/server/CredentialVerification.js +494 -0
- package/dist/tempo/session/server/CredentialVerification.js.map +1 -0
- package/dist/tempo/session/server/MeteredStream.d.ts +40 -0
- package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -0
- package/dist/tempo/session/server/MeteredStream.js +42 -0
- package/dist/tempo/session/server/MeteredStream.js.map +1 -0
- package/dist/tempo/session/server/RequestState.d.ts +208 -0
- package/dist/tempo/session/server/RequestState.d.ts.map +1 -0
- package/dist/tempo/session/server/RequestState.js +252 -0
- package/dist/tempo/session/server/RequestState.js.map +1 -0
- package/dist/tempo/session/server/Session.d.ts +169 -0
- package/dist/tempo/session/server/Session.d.ts.map +1 -0
- package/dist/tempo/session/server/Session.js +351 -0
- package/dist/tempo/session/server/Session.js.map +1 -0
- package/dist/tempo/session/server/Settlement.d.ts +185 -0
- package/dist/tempo/session/server/Settlement.d.ts.map +1 -0
- package/dist/tempo/session/server/Settlement.js +250 -0
- package/dist/tempo/session/server/Settlement.js.map +1 -0
- package/dist/tempo/session/{Sse.d.ts → server/Sse.d.ts} +9 -56
- package/dist/tempo/session/server/Sse.d.ts.map +1 -0
- package/dist/tempo/session/server/Sse.js +184 -0
- package/dist/tempo/session/server/Sse.js.map +1 -0
- package/dist/tempo/session/server/Transports.d.ts +89 -0
- package/dist/tempo/session/server/Transports.d.ts.map +1 -0
- package/dist/tempo/session/server/Transports.js +149 -0
- package/dist/tempo/session/server/Transports.js.map +1 -0
- package/dist/tempo/session/server/Ws.d.ts +48 -0
- package/dist/tempo/session/server/Ws.d.ts.map +1 -0
- package/dist/tempo/session/server/Ws.js +244 -0
- package/dist/tempo/session/server/Ws.js.map +1 -0
- package/dist/tempo/session/server/index.d.ts +4 -0
- package/dist/tempo/session/server/index.d.ts.map +1 -0
- package/dist/tempo/session/server/index.js +2 -0
- package/dist/tempo/session/server/index.js.map +1 -0
- package/package.json +6 -1
- package/src/Challenge.ts +9 -7
- package/src/Constants.ts +58 -0
- package/src/Credential.ts +5 -4
- package/src/Method.ts +46 -5
- package/src/Receipt.ts +3 -2
- package/src/cli/cli.test.ts +23 -28
- package/src/cli/cli.ts +23 -10
- package/src/cli/mcp.test.ts +21 -7
- package/src/cli/plugins/tempo.ts +21 -8
- package/src/cli/utils.test.ts +25 -1
- package/src/cli/utils.ts +10 -0
- package/src/client/Methods.ts +5 -2
- package/src/client/Mppx.test-d.ts +10 -0
- package/src/client/Mppx.test.ts +75 -0
- package/src/client/Transport.ts +4 -5
- package/src/client/index.ts +11 -1
- package/src/client/internal/Fetch.test.ts +29 -4
- package/src/client/internal/Fetch.ts +17 -5
- package/src/env.d.ts +1 -1
- package/src/index.ts +1 -0
- package/src/internal/AcceptPayment.test.ts +61 -0
- package/src/internal/AcceptPayment.ts +21 -14
- package/src/mcp-sdk/client/McpClient.integration.test.ts +8 -7
- package/src/mcp-sdk/client/McpClient.test-d.ts +7 -0
- package/src/mcp-sdk/client/McpClient.ts +99 -67
- package/src/mcp-sdk/client/McpClient.unit.test.ts +131 -0
- package/src/middlewares/elysia.test.ts +8 -4
- package/src/middlewares/express.test.ts +8 -4
- package/src/middlewares/hono.test.ts +4 -4
- package/src/middlewares/nextjs.test.ts +8 -4
- package/src/proxy/Proxy.test.ts +8 -8
- package/src/server/Mppx.test-d.ts +54 -0
- package/src/server/Mppx.test.ts +200 -7
- package/src/server/Mppx.ts +487 -406
- package/src/server/Response.ts +2 -1
- package/src/server/Transport.ts +4 -3
- package/src/server/index.ts +1 -0
- package/src/stripe/client/Charge.test.ts +20 -5
- package/src/stripe/client/Charge.ts +6 -2
- package/src/stripe/server/Charge.test.ts +114 -1
- package/src/stripe/server/Charge.ts +13 -2
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/AccessKeyAuthorization.test.ts +4 -94
- package/src/tempo/Methods.test.ts +45 -17
- package/src/tempo/Methods.ts +22 -0
- package/src/tempo/PublicExports.test-d.ts +105 -0
- package/src/tempo/client/Charge.test.ts +85 -0
- package/src/tempo/client/Charge.ts +19 -2
- package/src/tempo/client/Methods.ts +18 -6
- package/src/tempo/client/index.ts +15 -4
- package/src/tempo/index.ts +1 -0
- package/src/tempo/internal/fee-payer.test.ts +241 -17
- package/src/tempo/internal/fee-payer.ts +150 -4
- package/src/tempo/internal/fee-token.test.ts +14 -9
- package/src/tempo/legacy/AccessKeyAuthorization.test.ts +162 -0
- package/src/tempo/legacy/README.md +9 -0
- package/src/tempo/{client → legacy/client}/ChannelOps.test.ts +6 -7
- package/src/tempo/{client → legacy/client}/ChannelOps.ts +22 -9
- package/src/tempo/{client → legacy/client}/Session.test.ts +51 -9
- package/src/tempo/{client → legacy/client}/Session.ts +25 -11
- package/src/tempo/{client → legacy/client}/SessionManager.test.ts +81 -9
- package/src/tempo/{client → legacy/client}/SessionManager.ts +41 -20
- package/src/tempo/legacy/client/index.ts +6 -0
- package/src/tempo/legacy/index.ts +6 -0
- package/src/tempo/{server → legacy/server}/Session.test.ts +45 -45
- package/src/tempo/{server → legacy/server}/Session.ts +32 -23
- package/src/tempo/legacy/server/index.ts +4 -0
- package/src/tempo/{session → legacy/session}/Chain.test.ts +3 -4
- package/src/tempo/{session → legacy/session}/Chain.ts +94 -63
- package/src/tempo/{session → legacy/session}/Channel.ts +1 -0
- package/src/tempo/legacy/session/ChannelStore.test.ts +58 -0
- package/src/tempo/legacy/session/ChannelStore.ts +39 -0
- package/src/tempo/legacy/session/Types.ts +91 -0
- package/src/tempo/{session → legacy/session}/Voucher.ts +12 -8
- package/src/tempo/{session → legacy/session}/escrow.abi.ts +1 -0
- package/src/tempo/legacy/session/index.ts +8 -0
- package/src/tempo/server/AtomicStore.test-d.ts +16 -11
- package/src/tempo/server/Charge.test.ts +92 -14
- package/src/tempo/server/Charge.ts +18 -16
- package/src/tempo/server/Methods.ts +54 -8
- package/src/tempo/server/Sse.test.ts +2 -2
- package/src/tempo/server/index.ts +6 -5
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/server/internal/request-body.test.ts +37 -4
- package/src/tempo/server/internal/request-body.ts +25 -6
- package/src/tempo/server/internal/transport.test.ts +4 -4
- package/src/tempo/server/internal/transport.ts +19 -10
- package/src/tempo/session/Snapshot.test.ts +41 -0
- package/src/tempo/session/Snapshot.ts +74 -0
- package/src/tempo/session/client/ChannelOps.test.ts +163 -0
- package/src/tempo/session/client/ChannelOps.ts +344 -0
- package/src/tempo/session/client/CredentialState.test.ts +645 -0
- package/src/tempo/session/client/CredentialState.ts +814 -0
- package/src/tempo/session/client/ReceiptCoordinator.ts +95 -0
- package/src/tempo/session/client/Runtime.test.ts +1092 -0
- package/src/tempo/session/client/Runtime.ts +986 -0
- package/src/tempo/session/client/Session.test.ts +734 -0
- package/src/tempo/session/client/Session.ts +97 -0
- package/src/tempo/session/client/SessionManager.test.ts +1308 -0
- package/src/tempo/session/client/SessionManager.ts +845 -0
- package/src/tempo/session/client/Transports.test.ts +837 -0
- package/src/tempo/session/client/Transports.ts +1292 -0
- package/src/tempo/session/client/index.ts +37 -0
- package/src/tempo/session/index.ts +7 -8
- package/src/tempo/session/precompile/Chain.integration.test.ts +321 -0
- package/src/tempo/session/precompile/Chain.test.ts +1258 -0
- package/src/tempo/session/precompile/Chain.ts +979 -0
- package/src/tempo/session/precompile/Channel.test.ts +138 -0
- package/src/tempo/session/precompile/Channel.ts +103 -0
- package/src/tempo/session/precompile/Protocol.test.ts +358 -0
- package/src/tempo/session/precompile/Protocol.ts +520 -0
- package/src/tempo/session/precompile/Voucher.test.ts +316 -0
- package/src/tempo/session/precompile/Voucher.ts +160 -0
- package/src/tempo/session/precompile/escrow.abi.ts +226 -0
- package/src/tempo/session/precompile/index.ts +33 -0
- package/src/tempo/session/server/ChannelOps.test.ts +129 -0
- package/src/tempo/session/server/ChannelOps.ts +157 -0
- package/src/tempo/session/{ChannelStore.test.ts → server/ChannelStore.test.ts} +536 -29
- package/src/tempo/session/server/ChannelStore.ts +835 -0
- package/src/tempo/session/server/CredentialVerification.test.ts +146 -0
- package/src/tempo/session/server/CredentialVerification.ts +710 -0
- package/src/tempo/session/server/MeteredStream.ts +88 -0
- package/src/tempo/session/server/RequestState.test.ts +531 -0
- package/src/tempo/session/server/RequestState.ts +499 -0
- package/src/tempo/session/server/Session.integration.test.ts +444 -0
- package/src/tempo/session/server/Session.test.ts +3253 -0
- package/src/tempo/session/server/Session.ts +543 -0
- package/src/tempo/session/server/Settlement.test.ts +242 -0
- package/src/tempo/session/server/Settlement.ts +470 -0
- package/src/tempo/session/{Sse.test.ts → server/Sse.test.ts} +37 -3
- package/src/tempo/session/server/Sse.ts +256 -0
- package/src/tempo/session/server/Transports.test.ts +346 -0
- package/src/tempo/session/server/Transports.ts +255 -0
- package/src/tempo/session/{Ws.test.ts → server/Ws.test.ts} +4 -4
- package/src/tempo/session/server/Ws.ts +384 -0
- package/src/tempo/session/server/index.ts +8 -0
- package/dist/tempo/client/ChannelOps.d.ts.map +0 -1
- package/dist/tempo/client/ChannelOps.js.map +0 -1
- package/dist/tempo/client/Session.d.ts.map +0 -1
- package/dist/tempo/client/Session.js.map +0 -1
- package/dist/tempo/client/SessionManager.d.ts.map +0 -1
- package/dist/tempo/client/SessionManager.js.map +0 -1
- package/dist/tempo/server/Session.d.ts.map +0 -1
- package/dist/tempo/server/Session.js.map +0 -1
- package/dist/tempo/session/Chain.d.ts.map +0 -1
- package/dist/tempo/session/Chain.js.map +0 -1
- package/dist/tempo/session/Channel.d.ts.map +0 -1
- package/dist/tempo/session/Channel.js.map +0 -1
- package/dist/tempo/session/ChannelStore.d.ts +0 -117
- package/dist/tempo/session/ChannelStore.d.ts.map +0 -1
- package/dist/tempo/session/ChannelStore.js +0 -172
- package/dist/tempo/session/ChannelStore.js.map +0 -1
- package/dist/tempo/session/Receipt.d.ts +0 -22
- package/dist/tempo/session/Receipt.d.ts.map +0 -1
- package/dist/tempo/session/Receipt.js +0 -34
- package/dist/tempo/session/Receipt.js.map +0 -1
- package/dist/tempo/session/Sse.d.ts.map +0 -1
- package/dist/tempo/session/Sse.js +0 -363
- package/dist/tempo/session/Sse.js.map +0 -1
- package/dist/tempo/session/Types.d.ts +0 -78
- package/dist/tempo/session/Types.d.ts.map +0 -1
- package/dist/tempo/session/Types.js.map +0 -1
- package/dist/tempo/session/Voucher.d.ts.map +0 -1
- package/dist/tempo/session/Voucher.js.map +0 -1
- package/dist/tempo/session/Ws.d.ts +0 -87
- package/dist/tempo/session/Ws.d.ts.map +0 -1
- package/dist/tempo/session/Ws.js +0 -443
- package/dist/tempo/session/Ws.js.map +0 -1
- package/dist/tempo/session/escrow.abi.js.map +0 -1
- package/src/tempo/session/ChannelStore.ts +0 -308
- package/src/tempo/session/Receipt.test.ts +0 -89
- package/src/tempo/session/Receipt.ts +0 -46
- package/src/tempo/session/Sse.ts +0 -462
- package/src/tempo/session/Types.ts +0 -86
- package/src/tempo/session/Ws.ts +0 -576
- /package/dist/tempo/{session → legacy/session}/Channel.js +0 -0
- /package/dist/tempo/{session → legacy/session}/Types.js +0 -0
- /package/src/tempo/{session → legacy/session}/Channel.test.ts +0 -0
- /package/src/tempo/{session → legacy/session}/Voucher.test.ts +0 -0
- /package/src/tempo/session/{Sse.fuzz.test.ts → server/Sse.fuzz.test.ts} +0 -0
|
@@ -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>) {
|
|
@@ -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) {
|
|
@@ -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) {
|
|
@@ -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
|
],
|
|
@@ -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) {
|
|
@@ -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
|
],
|
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
18
|
const secretKey = 'test-secret-key'
|
|
19
|
-
const isLocalnet =
|
|
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',
|
|
@@ -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,6 +72,29 @@ const betaMethod = Method.toServer(mockChargeB, {
|
|
|
56
72
|
},
|
|
57
73
|
})
|
|
58
74
|
|
|
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
|
+
|
|
59
98
|
const secretKey = 'test-secret'
|
|
60
99
|
const realm = 'api.example.com'
|
|
61
100
|
|
|
@@ -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,7 +3,7 @@ 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'
|
|
@@ -12,10 +12,10 @@ import { Header as x402_Header, Types as x402_Types, type PaymentPayload } from
|
|
|
12
12
|
import { getTransactionReceipt } from 'viem/actions'
|
|
13
13
|
import { describe, expect, test } 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'
|
|
@@ -1837,6 +1837,22 @@ describe('compose', () => {
|
|
|
1837
1837
|
},
|
|
1838
1838
|
})
|
|
1839
1839
|
|
|
1840
|
+
const mockSession = Method.from({
|
|
1841
|
+
name: 'tempo',
|
|
1842
|
+
intent: 'session',
|
|
1843
|
+
schema: {
|
|
1844
|
+
credential: {
|
|
1845
|
+
payload: z.object({ token: z.string() }),
|
|
1846
|
+
},
|
|
1847
|
+
request: z.object({
|
|
1848
|
+
amount: z.string(),
|
|
1849
|
+
currency: z.string(),
|
|
1850
|
+
methodDetails: z.object({ sessionProtocol: z.optional(z.string()) }),
|
|
1851
|
+
unitType: z.string(),
|
|
1852
|
+
}),
|
|
1853
|
+
},
|
|
1854
|
+
})
|
|
1855
|
+
|
|
1840
1856
|
function mockReceipt(name: string) {
|
|
1841
1857
|
return {
|
|
1842
1858
|
method: name,
|
|
@@ -1858,6 +1874,19 @@ describe('compose', () => {
|
|
|
1858
1874
|
},
|
|
1859
1875
|
})
|
|
1860
1876
|
|
|
1877
|
+
const tip1034SessionMethod = Method.toServer(mockSession, {
|
|
1878
|
+
async verify() {
|
|
1879
|
+
return mockReceipt('v2')
|
|
1880
|
+
},
|
|
1881
|
+
})
|
|
1882
|
+
|
|
1883
|
+
const legacySessionMethod = Method.toServer(mockSession, {
|
|
1884
|
+
alias: 'sessionLegacy',
|
|
1885
|
+
async verify() {
|
|
1886
|
+
return mockReceipt('v1')
|
|
1887
|
+
},
|
|
1888
|
+
})
|
|
1889
|
+
|
|
1861
1890
|
const x402Method = evm.charge({
|
|
1862
1891
|
currency: evm.assets.baseSepolia.USDC,
|
|
1863
1892
|
recipient: accounts[0].address,
|
|
@@ -1889,6 +1918,19 @@ describe('compose', () => {
|
|
|
1889
1918
|
recipient: '0x0000000000000000000000000000000000000002',
|
|
1890
1919
|
}
|
|
1891
1920
|
|
|
1921
|
+
const sessionChallengeOpts = {
|
|
1922
|
+
amount: '100',
|
|
1923
|
+
currency: asset,
|
|
1924
|
+
expires: new Date(Date.now() + 60_000),
|
|
1925
|
+
methodDetails: { sessionProtocol: 'v2' },
|
|
1926
|
+
unitType: 'request',
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
const legacySessionChallengeOpts = {
|
|
1930
|
+
...sessionChallengeOpts,
|
|
1931
|
+
methodDetails: { sessionProtocol: 'v1' },
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1892
1934
|
test('returns 402 with multiple WWW-Authenticate headers when no credential', async () => {
|
|
1893
1935
|
const mppx = Mppx.create({ methods: [alphaMethod, betaMethod], realm, secretKey })
|
|
1894
1936
|
|
|
@@ -1905,6 +1947,157 @@ describe('compose', () => {
|
|
|
1905
1947
|
expect(wwwAuth).toContain('method="beta"')
|
|
1906
1948
|
})
|
|
1907
1949
|
|
|
1950
|
+
test('broadcasts duplicate tempo/session variants in compose order', async () => {
|
|
1951
|
+
const mppx = Mppx.create({
|
|
1952
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
1953
|
+
realm,
|
|
1954
|
+
secretKey,
|
|
1955
|
+
})
|
|
1956
|
+
|
|
1957
|
+
const result = await mppx.compose(
|
|
1958
|
+
[mppx.tempo.session, sessionChallengeOpts],
|
|
1959
|
+
[mppx.tempo.sessionLegacy, legacySessionChallengeOpts],
|
|
1960
|
+
)(new Request('https://example.com/resource'))
|
|
1961
|
+
|
|
1962
|
+
expect(result.status).toBe(402)
|
|
1963
|
+
if (result.status !== 402) throw new Error()
|
|
1964
|
+
|
|
1965
|
+
const challenges = Challenge.fromResponseList(result.challenge)
|
|
1966
|
+
expect(challenges.map((challenge) => challenge.request.methodDetails)).toEqual([
|
|
1967
|
+
{ sessionProtocol: 'v2' },
|
|
1968
|
+
{ sessionProtocol: 'v1' },
|
|
1969
|
+
])
|
|
1970
|
+
})
|
|
1971
|
+
|
|
1972
|
+
test('keeps duplicate tempo/session variants when Accept-Payment allows tempo/session', async () => {
|
|
1973
|
+
const mppx = Mppx.create({
|
|
1974
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
1975
|
+
realm,
|
|
1976
|
+
secretKey,
|
|
1977
|
+
})
|
|
1978
|
+
|
|
1979
|
+
const result = await mppx.compose(
|
|
1980
|
+
[mppx.tempo.session, sessionChallengeOpts],
|
|
1981
|
+
[mppx.tempo.sessionLegacy, legacySessionChallengeOpts],
|
|
1982
|
+
)(
|
|
1983
|
+
new Request('https://example.com/resource', {
|
|
1984
|
+
headers: { 'Accept-Payment': 'tempo/session' },
|
|
1985
|
+
}),
|
|
1986
|
+
)
|
|
1987
|
+
|
|
1988
|
+
expect(result.status).toBe(402)
|
|
1989
|
+
if (result.status !== 402) throw new Error()
|
|
1990
|
+
|
|
1991
|
+
expect(Challenge.fromResponseList(result.challenge)).toHaveLength(2)
|
|
1992
|
+
})
|
|
1993
|
+
|
|
1994
|
+
test('uses TIP-1034 as the bare tempo/session handler regardless of registration order', async () => {
|
|
1995
|
+
const mppx = Mppx.create({
|
|
1996
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
1997
|
+
realm,
|
|
1998
|
+
secretKey,
|
|
1999
|
+
})
|
|
2000
|
+
|
|
2001
|
+
const result = await mppx.compose([mppx.tempo.session, sessionChallengeOpts])(
|
|
2002
|
+
new Request('https://example.com/resource'),
|
|
2003
|
+
)
|
|
2004
|
+
|
|
2005
|
+
expect(result.status).toBe(402)
|
|
2006
|
+
if (result.status !== 402) throw new Error()
|
|
2007
|
+
expect(Challenge.fromResponse(result.challenge).request.methodDetails).toEqual({
|
|
2008
|
+
sessionProtocol: 'v2',
|
|
2009
|
+
})
|
|
2010
|
+
})
|
|
2011
|
+
|
|
2012
|
+
test('rejects cross-protocol tempo/session credential replay', async () => {
|
|
2013
|
+
const mppx = Mppx.create({
|
|
2014
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
2015
|
+
realm,
|
|
2016
|
+
secretKey,
|
|
2017
|
+
})
|
|
2018
|
+
const tip1034ChallengeResponse = await mppx.compose([mppx.tempo.session, sessionChallengeOpts])(
|
|
2019
|
+
new Request('https://example.com/resource'),
|
|
2020
|
+
)
|
|
2021
|
+
expect(tip1034ChallengeResponse.status).toBe(402)
|
|
2022
|
+
if (tip1034ChallengeResponse.status !== 402) throw new Error()
|
|
2023
|
+
const tip1034Challenge = Challenge.fromResponse(tip1034ChallengeResponse.challenge)
|
|
2024
|
+
|
|
2025
|
+
const credential = Credential.serialize({
|
|
2026
|
+
challenge: tip1034Challenge,
|
|
2027
|
+
payload: { token: 'valid' },
|
|
2028
|
+
})
|
|
2029
|
+
const legacyResult = await mppx.compose([mppx.tempo.sessionLegacy, legacySessionChallengeOpts])(
|
|
2030
|
+
new Request('https://example.com/resource', {
|
|
2031
|
+
headers: { Authorization: credential },
|
|
2032
|
+
}),
|
|
2033
|
+
)
|
|
2034
|
+
|
|
2035
|
+
expect(legacyResult.status).toBe(402)
|
|
2036
|
+
})
|
|
2037
|
+
|
|
2038
|
+
test('verifyCredential dispatches duplicate tempo/session variants by sessionProtocol', async () => {
|
|
2039
|
+
const mppx = Mppx.create({
|
|
2040
|
+
methods: [tip1034SessionMethod, legacySessionMethod],
|
|
2041
|
+
realm,
|
|
2042
|
+
secretKey,
|
|
2043
|
+
})
|
|
2044
|
+
const tip1034Challenge = await mppx.challenge.tempo.session(sessionChallengeOpts)
|
|
2045
|
+
const legacyChallenge = await mppx.challenge.tempo.sessionLegacy(legacySessionChallengeOpts)
|
|
2046
|
+
|
|
2047
|
+
const tip1034Receipt = await mppx.verifyCredential(
|
|
2048
|
+
Credential.serialize({
|
|
2049
|
+
challenge: tip1034Challenge,
|
|
2050
|
+
payload: { token: 'valid' },
|
|
2051
|
+
}),
|
|
2052
|
+
)
|
|
2053
|
+
const legacyReceipt = await mppx.verifyCredential(
|
|
2054
|
+
Credential.serialize({
|
|
2055
|
+
challenge: legacyChallenge,
|
|
2056
|
+
payload: { token: 'valid' },
|
|
2057
|
+
}),
|
|
2058
|
+
)
|
|
2059
|
+
|
|
2060
|
+
expect(tip1034Receipt.reference).toBe('tx-v2')
|
|
2061
|
+
expect(legacyReceipt.reference).toBe('tx-v1')
|
|
2062
|
+
})
|
|
2063
|
+
|
|
2064
|
+
test('verifyCredential routes unmarked tempo/session challenges to legacy v1', async () => {
|
|
2065
|
+
const mppx = Mppx.create({
|
|
2066
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
2067
|
+
realm,
|
|
2068
|
+
secretKey,
|
|
2069
|
+
})
|
|
2070
|
+
const unmarkedLegacyChallenge = await mppx.challenge.tempo.sessionLegacy({
|
|
2071
|
+
...legacySessionChallengeOpts,
|
|
2072
|
+
methodDetails: {},
|
|
2073
|
+
})
|
|
2074
|
+
|
|
2075
|
+
await expect(
|
|
2076
|
+
mppx.verifyCredential(
|
|
2077
|
+
Credential.serialize({
|
|
2078
|
+
challenge: unmarkedLegacyChallenge,
|
|
2079
|
+
payload: { token: 'valid' },
|
|
2080
|
+
}),
|
|
2081
|
+
),
|
|
2082
|
+
).resolves.toMatchObject({ reference: 'tx-v1' })
|
|
2083
|
+
})
|
|
2084
|
+
|
|
2085
|
+
test('verifyCredential rejects unknown tempo/session protocol markers', async () => {
|
|
2086
|
+
const mppx = Mppx.create({
|
|
2087
|
+
methods: [legacySessionMethod, tip1034SessionMethod],
|
|
2088
|
+
realm,
|
|
2089
|
+
secretKey,
|
|
2090
|
+
})
|
|
2091
|
+
const challenge = await mppx.challenge.tempo.session({
|
|
2092
|
+
...sessionChallengeOpts,
|
|
2093
|
+
methodDetails: { sessionProtocol: 'future' },
|
|
2094
|
+
})
|
|
2095
|
+
|
|
2096
|
+
await expect(
|
|
2097
|
+
mppx.verifyCredential(Credential.serialize({ challenge, payload: { token: 'valid' } })),
|
|
2098
|
+
).rejects.toThrow('no registered method for tempo/session')
|
|
2099
|
+
})
|
|
2100
|
+
|
|
1908
2101
|
test('returns composed x402 challenge headers when no credential', async () => {
|
|
1909
2102
|
const mppx = Mppx.create({ methods: [x402Method], realm, secretKey })
|
|
1910
2103
|
|
|
@@ -5178,7 +5371,7 @@ describe('verifyCredential', () => {
|
|
|
5178
5371
|
const escrowContract = await deployEscrow()
|
|
5179
5372
|
const server = Mppx.create({
|
|
5180
5373
|
methods: [
|
|
5181
|
-
tempo.
|
|
5374
|
+
tempo.sessionLegacy({
|
|
5182
5375
|
store: Store.memory(),
|
|
5183
5376
|
getClient: () => client,
|
|
5184
5377
|
account: accounts[0],
|
|
@@ -5195,7 +5388,7 @@ describe('verifyCredential', () => {
|
|
|
5195
5388
|
methods: [
|
|
5196
5389
|
tempo_session_client({
|
|
5197
5390
|
account: accounts[1],
|
|
5198
|
-
|
|
5391
|
+
maxDeposit: '10',
|
|
5199
5392
|
getClient: () => client,
|
|
5200
5393
|
}),
|
|
5201
5394
|
],
|
|
@@ -5241,7 +5434,7 @@ describe('verifyCredential', () => {
|
|
|
5241
5434
|
const escrowContract = await deployEscrow()
|
|
5242
5435
|
const server = Mppx.create({
|
|
5243
5436
|
methods: [
|
|
5244
|
-
tempo.
|
|
5437
|
+
tempo.sessionLegacy({
|
|
5245
5438
|
store: Store.memory(),
|
|
5246
5439
|
getClient: () => client,
|
|
5247
5440
|
account: accounts[0],
|
|
@@ -5259,7 +5452,7 @@ describe('verifyCredential', () => {
|
|
|
5259
5452
|
methods: [
|
|
5260
5453
|
tempo_session_client({
|
|
5261
5454
|
account: accounts[1],
|
|
5262
|
-
|
|
5455
|
+
maxDeposit: '10',
|
|
5263
5456
|
getClient: () => client,
|
|
5264
5457
|
}),
|
|
5265
5458
|
],
|