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
|
@@ -3,8 +3,8 @@ 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 { P256, type Hex, WebAuthnP256 } from 'ox'
|
|
5
5
|
import { SignatureEnvelope, TxEnvelopeTempo } from 'ox/tempo'
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { createClient, custom, encodeFunctionData, parseSignature, parseUnits } from 'viem'
|
|
7
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
|
|
8
8
|
import {
|
|
9
9
|
getTransactionReceipt,
|
|
10
10
|
prepareTransactionRequest,
|
|
@@ -15,16 +15,36 @@ import {
|
|
|
15
15
|
import { Abis, Account, Actions, Addresses, Secp256k1, Tick, Transaction } from 'viem/tempo'
|
|
16
16
|
import { beforeAll, describe, expect, test } from 'vp/test'
|
|
17
17
|
import * as Http from '~test/Http.js'
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
closeChannelOnChain,
|
|
20
|
+
deployEscrow,
|
|
21
|
+
openChannel,
|
|
22
|
+
signVoucher,
|
|
23
|
+
} from '~test/tempo/legacy/session.js'
|
|
19
24
|
import { accounts, asset, chain, client, fundAccount, http } from '~test/tempo/viem.js'
|
|
20
25
|
|
|
21
26
|
import * as Store from '../../Store.js'
|
|
22
27
|
import * as Attribution from '../Attribution.js'
|
|
28
|
+
import * as defaults from '../internal/defaults.js'
|
|
23
29
|
import * as Proof from '../internal/proof.js'
|
|
24
|
-
import { signVoucher } from '../session/Voucher.js'
|
|
25
30
|
|
|
26
31
|
const realm = 'api.example.com'
|
|
27
|
-
const secretKey = 'test-secret-key'
|
|
32
|
+
const secretKey = 'test-secret-key-test-secret-key-32'
|
|
33
|
+
|
|
34
|
+
function isPairAlreadyExistsError(error: unknown) {
|
|
35
|
+
if (typeof error !== 'object' || error === null) return false
|
|
36
|
+
const candidate = error as {
|
|
37
|
+
details?: string | undefined
|
|
38
|
+
shortMessage?: string | undefined
|
|
39
|
+
}
|
|
40
|
+
return [candidate.details, candidate.shortMessage].some((message) =>
|
|
41
|
+
message?.includes('PairAlreadyExists'),
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function testAccount() {
|
|
46
|
+
return privateKeyToAccount(generatePrivateKey())
|
|
47
|
+
}
|
|
28
48
|
|
|
29
49
|
type ProofAccessKeyContext = {
|
|
30
50
|
accessKey: ReturnType<typeof Account.fromSecp256k1>
|
|
@@ -1584,6 +1604,228 @@ describe('tempo', () => {
|
|
|
1584
1604
|
httpServer.close()
|
|
1585
1605
|
})
|
|
1586
1606
|
|
|
1607
|
+
test('behavior: fee payer pre-broadcast simulation targets the co-signed transaction', async () => {
|
|
1608
|
+
// The pre-broadcast simulation must reflect the FINAL co-signed envelope
|
|
1609
|
+
// (concrete sponsor fee payer), not the pre-cosign 0x78 (`feePayer: true`).
|
|
1610
|
+
const callRequests: any[] = []
|
|
1611
|
+
const interceptingClient = createClient({
|
|
1612
|
+
account: accounts[0],
|
|
1613
|
+
chain: client.chain,
|
|
1614
|
+
transport: custom({
|
|
1615
|
+
async request(args: any) {
|
|
1616
|
+
if (args.method === 'eth_call') callRequests.push(args.params?.[0])
|
|
1617
|
+
return client.transport.request(args)
|
|
1618
|
+
},
|
|
1619
|
+
}),
|
|
1620
|
+
})
|
|
1621
|
+
|
|
1622
|
+
const serverWithTrace = Mppx_server.create({
|
|
1623
|
+
methods: [
|
|
1624
|
+
tempo_server.charge({
|
|
1625
|
+
getClient() {
|
|
1626
|
+
return interceptingClient
|
|
1627
|
+
},
|
|
1628
|
+
currency: asset,
|
|
1629
|
+
account: accounts[0],
|
|
1630
|
+
}),
|
|
1631
|
+
],
|
|
1632
|
+
realm,
|
|
1633
|
+
secretKey,
|
|
1634
|
+
})
|
|
1635
|
+
|
|
1636
|
+
const mppx = Mppx_client.create({
|
|
1637
|
+
polyfill: false,
|
|
1638
|
+
methods: [
|
|
1639
|
+
tempo_client({
|
|
1640
|
+
account: accounts[1],
|
|
1641
|
+
getClient() {
|
|
1642
|
+
return client
|
|
1643
|
+
},
|
|
1644
|
+
}),
|
|
1645
|
+
],
|
|
1646
|
+
})
|
|
1647
|
+
|
|
1648
|
+
const httpServer = await Http.createServer(async (req, res) => {
|
|
1649
|
+
const result = await Mppx_server.toNodeListener(
|
|
1650
|
+
serverWithTrace.charge({
|
|
1651
|
+
feePayer: accounts[0],
|
|
1652
|
+
amount: '1',
|
|
1653
|
+
currency: asset,
|
|
1654
|
+
recipient: accounts[0].address,
|
|
1655
|
+
}),
|
|
1656
|
+
)(req, res)
|
|
1657
|
+
if (result.status === 402) return
|
|
1658
|
+
res.end('OK')
|
|
1659
|
+
})
|
|
1660
|
+
|
|
1661
|
+
const challengeResponse = await fetch(httpServer.url)
|
|
1662
|
+
const credential = await mppx.createCredential(challengeResponse)
|
|
1663
|
+
callRequests.length = 0
|
|
1664
|
+
|
|
1665
|
+
const authResponse = await fetch(httpServer.url, {
|
|
1666
|
+
headers: { Authorization: credential },
|
|
1667
|
+
})
|
|
1668
|
+
expect(authResponse.status).toBe(200)
|
|
1669
|
+
|
|
1670
|
+
expect(callRequests.length).toBeGreaterThan(0)
|
|
1671
|
+
const simRequest = callRequests[0]
|
|
1672
|
+
// The co-signed envelope names a concrete sponsor as fee payer. The
|
|
1673
|
+
// pre-cosign 0x78 instead carries `feePayer: true`; asserting the address
|
|
1674
|
+
// proves we simulate the transaction the sponsor actually broadcasts.
|
|
1675
|
+
expect(simRequest.feePayer).not.toBe(true)
|
|
1676
|
+
expect(typeof simRequest.feePayer).toBe('string')
|
|
1677
|
+
expect((simRequest.feePayer as string).toLowerCase()).toBe(accounts[0].address.toLowerCase())
|
|
1678
|
+
// Execution runs as the sender, not the sponsor.
|
|
1679
|
+
expect((simRequest.from as string).toLowerCase()).toBe(accounts[1].address.toLowerCase())
|
|
1680
|
+
expect(simRequest.calls?.length).toBeGreaterThan(0)
|
|
1681
|
+
|
|
1682
|
+
httpServer.close()
|
|
1683
|
+
})
|
|
1684
|
+
|
|
1685
|
+
test('behavior: fee payer fails closed when pre-broadcast simulation reverts', async () => {
|
|
1686
|
+
// A reverting pre-broadcast simulation must abort before broadcast so the
|
|
1687
|
+
// sponsor never pays gas for a transaction that would revert.
|
|
1688
|
+
const rpcMethods: string[] = []
|
|
1689
|
+
const interceptingClient = createClient({
|
|
1690
|
+
account: accounts[0],
|
|
1691
|
+
chain: client.chain,
|
|
1692
|
+
transport: custom({
|
|
1693
|
+
async request(args: any) {
|
|
1694
|
+
rpcMethods.push(args.method)
|
|
1695
|
+
if (args.method === 'eth_call')
|
|
1696
|
+
throw new Error('execution reverted: simulation fixture')
|
|
1697
|
+
return client.transport.request(args)
|
|
1698
|
+
},
|
|
1699
|
+
}),
|
|
1700
|
+
})
|
|
1701
|
+
|
|
1702
|
+
const serverWithRevert = Mppx_server.create({
|
|
1703
|
+
methods: [
|
|
1704
|
+
tempo_server.charge({
|
|
1705
|
+
getClient() {
|
|
1706
|
+
return interceptingClient
|
|
1707
|
+
},
|
|
1708
|
+
currency: asset,
|
|
1709
|
+
account: accounts[0],
|
|
1710
|
+
}),
|
|
1711
|
+
],
|
|
1712
|
+
realm,
|
|
1713
|
+
secretKey,
|
|
1714
|
+
})
|
|
1715
|
+
|
|
1716
|
+
const mppx = Mppx_client.create({
|
|
1717
|
+
polyfill: false,
|
|
1718
|
+
methods: [
|
|
1719
|
+
tempo_client({
|
|
1720
|
+
account: accounts[1],
|
|
1721
|
+
getClient() {
|
|
1722
|
+
return client
|
|
1723
|
+
},
|
|
1724
|
+
}),
|
|
1725
|
+
],
|
|
1726
|
+
})
|
|
1727
|
+
|
|
1728
|
+
const httpServer = await Http.createServer(async (req, res) => {
|
|
1729
|
+
const result = await Mppx_server.toNodeListener(
|
|
1730
|
+
serverWithRevert.charge({
|
|
1731
|
+
feePayer: accounts[0],
|
|
1732
|
+
amount: '1',
|
|
1733
|
+
currency: asset,
|
|
1734
|
+
recipient: accounts[0].address,
|
|
1735
|
+
}),
|
|
1736
|
+
)(req, res)
|
|
1737
|
+
if (result.status === 402) return
|
|
1738
|
+
res.end('OK')
|
|
1739
|
+
})
|
|
1740
|
+
|
|
1741
|
+
const challengeResponse = await fetch(httpServer.url)
|
|
1742
|
+
const credential = await mppx.createCredential(challengeResponse)
|
|
1743
|
+
rpcMethods.length = 0
|
|
1744
|
+
|
|
1745
|
+
const authResponse = await fetch(httpServer.url, {
|
|
1746
|
+
headers: { Authorization: credential },
|
|
1747
|
+
})
|
|
1748
|
+
|
|
1749
|
+
// Fails closed: not successful, and the transaction is never broadcast.
|
|
1750
|
+
expect(authResponse.status).not.toBe(200)
|
|
1751
|
+
expect(rpcMethods).toContain('eth_call')
|
|
1752
|
+
expect(rpcMethods).not.toContain('eth_sendRawTransactionSync')
|
|
1753
|
+
expect(rpcMethods).not.toContain('eth_sendRawTransaction')
|
|
1754
|
+
|
|
1755
|
+
httpServer.close()
|
|
1756
|
+
})
|
|
1757
|
+
|
|
1758
|
+
test('behavior: fee payer fails closed when simulation reverts (optimistic mode)', async () => {
|
|
1759
|
+
const rpcMethods: string[] = []
|
|
1760
|
+
const interceptingClient = createClient({
|
|
1761
|
+
account: accounts[0],
|
|
1762
|
+
chain: client.chain,
|
|
1763
|
+
transport: custom({
|
|
1764
|
+
async request(args: any) {
|
|
1765
|
+
rpcMethods.push(args.method)
|
|
1766
|
+
if (args.method === 'eth_call')
|
|
1767
|
+
throw new Error('execution reverted: simulation fixture')
|
|
1768
|
+
return client.transport.request(args)
|
|
1769
|
+
},
|
|
1770
|
+
}),
|
|
1771
|
+
})
|
|
1772
|
+
|
|
1773
|
+
const serverNoWait = Mppx_server.create({
|
|
1774
|
+
methods: [
|
|
1775
|
+
tempo_server.charge({
|
|
1776
|
+
getClient() {
|
|
1777
|
+
return interceptingClient
|
|
1778
|
+
},
|
|
1779
|
+
currency: asset,
|
|
1780
|
+
account: accounts[0],
|
|
1781
|
+
waitForConfirmation: false,
|
|
1782
|
+
}),
|
|
1783
|
+
],
|
|
1784
|
+
realm,
|
|
1785
|
+
secretKey,
|
|
1786
|
+
})
|
|
1787
|
+
|
|
1788
|
+
const mppx = Mppx_client.create({
|
|
1789
|
+
polyfill: false,
|
|
1790
|
+
methods: [
|
|
1791
|
+
tempo_client({
|
|
1792
|
+
account: accounts[1],
|
|
1793
|
+
getClient() {
|
|
1794
|
+
return client
|
|
1795
|
+
},
|
|
1796
|
+
}),
|
|
1797
|
+
],
|
|
1798
|
+
})
|
|
1799
|
+
|
|
1800
|
+
const httpServer = await Http.createServer(async (req, res) => {
|
|
1801
|
+
const result = await Mppx_server.toNodeListener(
|
|
1802
|
+
serverNoWait.charge({
|
|
1803
|
+
feePayer: accounts[0],
|
|
1804
|
+
amount: '1',
|
|
1805
|
+
currency: asset,
|
|
1806
|
+
recipient: accounts[0].address,
|
|
1807
|
+
}),
|
|
1808
|
+
)(req, res)
|
|
1809
|
+
if (result.status === 402) return
|
|
1810
|
+
res.end('OK')
|
|
1811
|
+
})
|
|
1812
|
+
|
|
1813
|
+
const challengeResponse = await fetch(httpServer.url)
|
|
1814
|
+
const credential = await mppx.createCredential(challengeResponse)
|
|
1815
|
+
rpcMethods.length = 0
|
|
1816
|
+
|
|
1817
|
+
const authResponse = await fetch(httpServer.url, {
|
|
1818
|
+
headers: { Authorization: credential },
|
|
1819
|
+
})
|
|
1820
|
+
|
|
1821
|
+
expect(authResponse.status).not.toBe(200)
|
|
1822
|
+
expect(rpcMethods).toContain('eth_call')
|
|
1823
|
+
expect(rpcMethods).not.toContain('eth_sendRawTransaction')
|
|
1824
|
+
expect(rpcMethods).not.toContain('eth_sendRawTransactionSync')
|
|
1825
|
+
|
|
1826
|
+
httpServer.close()
|
|
1827
|
+
})
|
|
1828
|
+
|
|
1587
1829
|
test('behavior: fee payer rejects concurrent in-flight transactions from one sender', async () => {
|
|
1588
1830
|
let releaseSimulation!: () => void
|
|
1589
1831
|
let resolveSimulationStarted!: () => void
|
|
@@ -1796,11 +2038,64 @@ describe('tempo', () => {
|
|
|
1796
2038
|
})
|
|
1797
2039
|
|
|
1798
2040
|
test('behavior: fee payer URL (withFeePayer transport)', async () => {
|
|
1799
|
-
const
|
|
1800
|
-
|
|
1801
|
-
|
|
2041
|
+
const feePayerRequests: any[] = []
|
|
2042
|
+
const feePayerServer = await Http.createServer(async (req, res) => {
|
|
2043
|
+
let requestBody = ''
|
|
2044
|
+
for await (const chunk of req) requestBody += chunk
|
|
2045
|
+
const request = JSON.parse(requestBody)
|
|
2046
|
+
feePayerRequests.push(request)
|
|
2047
|
+
|
|
2048
|
+
const transaction = request.params[0]
|
|
2049
|
+
const quantity = (value: unknown) =>
|
|
2050
|
+
value === undefined ? undefined : BigInt(value as string | number | bigint | boolean)
|
|
2051
|
+
const envelope = TxEnvelopeTempo.from({
|
|
2052
|
+
accessList: transaction.accessList,
|
|
2053
|
+
calls: transaction.calls.map(({ value, ...call }: any) => ({
|
|
2054
|
+
...call,
|
|
2055
|
+
...(value && value !== '0x' ? { value: BigInt(value) } : {}),
|
|
2056
|
+
})),
|
|
2057
|
+
chainId: chain.id,
|
|
2058
|
+
feeToken: defaults.tokens.pathUsd,
|
|
2059
|
+
from: transaction.from,
|
|
2060
|
+
...(quantity(transaction.gas) !== undefined ? { gas: quantity(transaction.gas) } : {}),
|
|
2061
|
+
...(quantity(transaction.maxFeePerGas) !== undefined
|
|
2062
|
+
? { maxFeePerGas: quantity(transaction.maxFeePerGas) }
|
|
2063
|
+
: {}),
|
|
2064
|
+
...(quantity(transaction.maxPriorityFeePerGas) !== undefined
|
|
2065
|
+
? { maxPriorityFeePerGas: quantity(transaction.maxPriorityFeePerGas) }
|
|
2066
|
+
: {}),
|
|
2067
|
+
...(quantity(transaction.nonce) !== undefined
|
|
2068
|
+
? { nonce: quantity(transaction.nonce) }
|
|
2069
|
+
: {}),
|
|
2070
|
+
...(quantity(transaction.nonceKey) !== undefined
|
|
2071
|
+
? { nonceKey: quantity(transaction.nonceKey) }
|
|
2072
|
+
: {}),
|
|
2073
|
+
type: 'tempo',
|
|
2074
|
+
...(transaction.validAfter ? { validAfter: Number(BigInt(transaction.validAfter)) } : {}),
|
|
2075
|
+
...(transaction.validBefore
|
|
2076
|
+
? { validBefore: Number(BigInt(transaction.validBefore)) }
|
|
2077
|
+
: {}),
|
|
2078
|
+
})
|
|
2079
|
+
const hash = TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
|
|
2080
|
+
sender: transaction.from,
|
|
2081
|
+
})
|
|
2082
|
+
const { r, s, yParity } = parseSignature(await accounts[0].sign!({ hash }))
|
|
2083
|
+
const feePayerSignature = { r, s, yParity }
|
|
2084
|
+
|
|
2085
|
+
res.setHeader('content-type', 'application/json')
|
|
2086
|
+
res.end(
|
|
2087
|
+
JSON.stringify({
|
|
2088
|
+
id: request.id,
|
|
2089
|
+
jsonrpc: '2.0',
|
|
2090
|
+
result: {
|
|
2091
|
+
tx: {
|
|
2092
|
+
feePayerSignature,
|
|
2093
|
+
feeToken: defaults.tokens.pathUsd,
|
|
2094
|
+
},
|
|
2095
|
+
},
|
|
2096
|
+
}),
|
|
2097
|
+
)
|
|
1802
2098
|
})
|
|
1803
|
-
const feePayerServer = await Http.createServer(feePayerHandler.listener)
|
|
1804
2099
|
|
|
1805
2100
|
const serverWithFeePayer = Mppx_server.create({
|
|
1806
2101
|
methods: [
|
|
@@ -1838,6 +2133,7 @@ describe('tempo', () => {
|
|
|
1838
2133
|
|
|
1839
2134
|
const response = await mppx.fetch(httpServer.url)
|
|
1840
2135
|
expect(response.status).toBe(200)
|
|
2136
|
+
expect(feePayerRequests.map(({ method }) => method)).toEqual(['eth_fillTransaction'])
|
|
1841
2137
|
|
|
1842
2138
|
const receipt = Receipt.fromResponse(response)
|
|
1843
2139
|
expect(receipt.status).toBe('success')
|
|
@@ -2410,7 +2706,11 @@ describe('tempo', () => {
|
|
|
2410
2706
|
domain: Proof.domain(chain.id),
|
|
2411
2707
|
types: Proof.types,
|
|
2412
2708
|
primaryType: 'Proof',
|
|
2413
|
-
message: Proof.message(
|
|
2709
|
+
message: Proof.message({
|
|
2710
|
+
account: accounts[1].address,
|
|
2711
|
+
challengeId: challenge.id,
|
|
2712
|
+
realm: challenge.realm,
|
|
2713
|
+
}),
|
|
2414
2714
|
})
|
|
2415
2715
|
|
|
2416
2716
|
const credential = Credential.from({
|
|
@@ -2448,7 +2748,11 @@ describe('tempo', () => {
|
|
|
2448
2748
|
domain: Proof.domain(chain.id),
|
|
2449
2749
|
types: Proof.types,
|
|
2450
2750
|
primaryType: 'Proof',
|
|
2451
|
-
message: Proof.message(
|
|
2751
|
+
message: Proof.message({
|
|
2752
|
+
account: accounts[1].address,
|
|
2753
|
+
challengeId: challenge.id,
|
|
2754
|
+
realm: challenge.realm,
|
|
2755
|
+
}),
|
|
2452
2756
|
})
|
|
2453
2757
|
|
|
2454
2758
|
const credential = Credential.from({
|
|
@@ -2563,7 +2867,11 @@ describe('tempo', () => {
|
|
|
2563
2867
|
domain: Proof.domain(chain.id),
|
|
2564
2868
|
types: Proof.types,
|
|
2565
2869
|
primaryType: 'Proof',
|
|
2566
|
-
message: Proof.message(
|
|
2870
|
+
message: Proof.message({
|
|
2871
|
+
account: accounts[1].address,
|
|
2872
|
+
challengeId: challenge.id,
|
|
2873
|
+
realm: challenge.realm,
|
|
2874
|
+
}),
|
|
2567
2875
|
})
|
|
2568
2876
|
|
|
2569
2877
|
const credential = Credential.from({
|
|
@@ -2687,6 +2995,91 @@ describe('tempo', () => {
|
|
|
2687
2995
|
},
|
|
2688
2996
|
)
|
|
2689
2997
|
|
|
2998
|
+
test('behavior: rejects access-key proof replayed across a co-authorized account', async () => {
|
|
2999
|
+
// The same access key is authorized by two roots (`payer` and `other`),
|
|
3000
|
+
// so a proof bound to `payer` must not be claimable as `other` even
|
|
3001
|
+
// though `other` independently authorized the key.
|
|
3002
|
+
const payer = accounts[1]
|
|
3003
|
+
const other = accounts[2]
|
|
3004
|
+
const accessKey = Account.fromSecp256k1(Secp256k1.randomPrivateKey(), {
|
|
3005
|
+
access: payer,
|
|
3006
|
+
})
|
|
3007
|
+
|
|
3008
|
+
await fundAccount({ address: other.address, token: asset })
|
|
3009
|
+
await Actions.accessKey.authorizeSync(client, {
|
|
3010
|
+
account: payer,
|
|
3011
|
+
accessKey,
|
|
3012
|
+
feeToken: asset,
|
|
3013
|
+
})
|
|
3014
|
+
await Actions.accessKey.authorizeSync(client, {
|
|
3015
|
+
account: other,
|
|
3016
|
+
accessKey,
|
|
3017
|
+
feeToken: asset,
|
|
3018
|
+
})
|
|
3019
|
+
|
|
3020
|
+
const httpServer = await Http.createServer(async (req, res) => {
|
|
3021
|
+
const result = await Mppx_server.toNodeListener(
|
|
3022
|
+
server.charge({ amount: '0', decimals: 6 }),
|
|
3023
|
+
)(req, res)
|
|
3024
|
+
if (result.status === 402) return
|
|
3025
|
+
res.end('OK')
|
|
3026
|
+
})
|
|
3027
|
+
|
|
3028
|
+
try {
|
|
3029
|
+
const response1 = await fetch(httpServer.url)
|
|
3030
|
+
expect(response1.status).toBe(402)
|
|
3031
|
+
|
|
3032
|
+
const challenge = Challenge.fromResponse(response1, {
|
|
3033
|
+
methods: [tempo_client.charge()],
|
|
3034
|
+
})
|
|
3035
|
+
|
|
3036
|
+
// Access key signs a proof bound to `payer` (the `account` field).
|
|
3037
|
+
const signature = await signTypedData(client, {
|
|
3038
|
+
account: accessKey,
|
|
3039
|
+
domain: Proof.domain(chain.id),
|
|
3040
|
+
types: Proof.types,
|
|
3041
|
+
primaryType: 'Proof',
|
|
3042
|
+
message: Proof.message({
|
|
3043
|
+
account: payer.address,
|
|
3044
|
+
challengeId: challenge.id,
|
|
3045
|
+
realm: challenge.realm,
|
|
3046
|
+
}),
|
|
3047
|
+
})
|
|
3048
|
+
|
|
3049
|
+
// The bound payer accepts the proof.
|
|
3050
|
+
const accepted = await fetch(httpServer.url, {
|
|
3051
|
+
headers: {
|
|
3052
|
+
Authorization: Credential.serialize(
|
|
3053
|
+
Credential.from({
|
|
3054
|
+
challenge,
|
|
3055
|
+
payload: { signature, type: 'proof' as const },
|
|
3056
|
+
source: `did:pkh:eip155:${chain.id}:${payer.address}`,
|
|
3057
|
+
}),
|
|
3058
|
+
),
|
|
3059
|
+
},
|
|
3060
|
+
})
|
|
3061
|
+
expect(accepted.status).toBe(200)
|
|
3062
|
+
|
|
3063
|
+
// Replaying the same proof as `other` is rejected by the wallet binding.
|
|
3064
|
+
const replay = await fetch(httpServer.url, {
|
|
3065
|
+
headers: {
|
|
3066
|
+
Authorization: Credential.serialize(
|
|
3067
|
+
Credential.from({
|
|
3068
|
+
challenge,
|
|
3069
|
+
payload: { signature, type: 'proof' as const },
|
|
3070
|
+
source: `did:pkh:eip155:${chain.id}:${other.address}`,
|
|
3071
|
+
}),
|
|
3072
|
+
),
|
|
3073
|
+
},
|
|
3074
|
+
})
|
|
3075
|
+
expect(replay.status).toBe(402)
|
|
3076
|
+
const body = (await replay.json()) as { detail: string }
|
|
3077
|
+
expect(body.detail).toContain('Proof signature does not match source.')
|
|
3078
|
+
} finally {
|
|
3079
|
+
httpServer.close()
|
|
3080
|
+
}
|
|
3081
|
+
})
|
|
3082
|
+
|
|
2690
3083
|
test('behavior: rejects replayed proof credential when store is configured', async () => {
|
|
2691
3084
|
const replayStore = Store.memory()
|
|
2692
3085
|
const server_ = Mppx_server.create({
|
|
@@ -2724,7 +3117,11 @@ describe('tempo', () => {
|
|
|
2724
3117
|
domain: Proof.domain(chain.id),
|
|
2725
3118
|
types: Proof.types,
|
|
2726
3119
|
primaryType: 'Proof',
|
|
2727
|
-
message: Proof.message(
|
|
3120
|
+
message: Proof.message({
|
|
3121
|
+
account: accounts[1].address,
|
|
3122
|
+
challengeId: challenge.id,
|
|
3123
|
+
realm: challenge.realm,
|
|
3124
|
+
}),
|
|
2728
3125
|
})
|
|
2729
3126
|
|
|
2730
3127
|
const credential = Credential.from({
|
|
@@ -2785,7 +3182,11 @@ describe('tempo', () => {
|
|
|
2785
3182
|
domain: Proof.domain(chain.id),
|
|
2786
3183
|
types: Proof.types,
|
|
2787
3184
|
primaryType: 'Proof',
|
|
2788
|
-
message: Proof.message(
|
|
3185
|
+
message: Proof.message({
|
|
3186
|
+
account: accounts[1].address,
|
|
3187
|
+
challengeId: challenge.id,
|
|
3188
|
+
realm: challenge.realm,
|
|
3189
|
+
}),
|
|
2789
3190
|
})
|
|
2790
3191
|
|
|
2791
3192
|
const credential = Credential.serialize(
|
|
@@ -2859,7 +3260,11 @@ describe('tempo', () => {
|
|
|
2859
3260
|
domain: Proof.domain(chain.id),
|
|
2860
3261
|
types: Proof.types,
|
|
2861
3262
|
primaryType: 'Proof',
|
|
2862
|
-
message: Proof.message(
|
|
3263
|
+
message: Proof.message({
|
|
3264
|
+
account: accounts[1].address,
|
|
3265
|
+
challengeId: challenge.id,
|
|
3266
|
+
realm: challenge.realm,
|
|
3267
|
+
}),
|
|
2863
3268
|
})
|
|
2864
3269
|
|
|
2865
3270
|
const credential = Credential.from({
|
|
@@ -2922,7 +3327,11 @@ describe('tempo', () => {
|
|
|
2922
3327
|
domain: Proof.domain(chain.id),
|
|
2923
3328
|
types: Proof.types,
|
|
2924
3329
|
primaryType: 'Proof',
|
|
2925
|
-
message: Proof.message(
|
|
3330
|
+
message: Proof.message({
|
|
3331
|
+
account: accounts[1].address,
|
|
3332
|
+
challengeId: challenge1.id,
|
|
3333
|
+
realm: challenge1.realm,
|
|
3334
|
+
}),
|
|
2926
3335
|
})
|
|
2927
3336
|
|
|
2928
3337
|
const credential1 = Credential.from({
|
|
@@ -2953,7 +3362,11 @@ describe('tempo', () => {
|
|
|
2953
3362
|
domain: Proof.domain(chain.id),
|
|
2954
3363
|
types: Proof.types,
|
|
2955
3364
|
primaryType: 'Proof',
|
|
2956
|
-
message: Proof.message(
|
|
3365
|
+
message: Proof.message({
|
|
3366
|
+
account: accounts[1].address,
|
|
3367
|
+
challengeId: challenge2.id,
|
|
3368
|
+
realm: challenge2.realm,
|
|
3369
|
+
}),
|
|
2957
3370
|
})
|
|
2958
3371
|
|
|
2959
3372
|
const credential2 = Credential.from({
|
|
@@ -2990,7 +3403,11 @@ describe('tempo', () => {
|
|
|
2990
3403
|
domain: Proof.domain(chain.id),
|
|
2991
3404
|
types: Proof.types,
|
|
2992
3405
|
primaryType: 'Proof',
|
|
2993
|
-
message: Proof.message(
|
|
3406
|
+
message: Proof.message({
|
|
3407
|
+
account: accounts[1].address,
|
|
3408
|
+
challengeId: challenge.id,
|
|
3409
|
+
realm: challenge.realm,
|
|
3410
|
+
}),
|
|
2994
3411
|
})
|
|
2995
3412
|
|
|
2996
3413
|
const credential = Credential.from({
|
|
@@ -3026,7 +3443,11 @@ describe('tempo', () => {
|
|
|
3026
3443
|
domain: Proof.domain(chain.id),
|
|
3027
3444
|
types: Proof.types,
|
|
3028
3445
|
primaryType: 'Proof',
|
|
3029
|
-
message: Proof.message(
|
|
3446
|
+
message: Proof.message({
|
|
3447
|
+
account: accounts[1].address,
|
|
3448
|
+
challengeId: challenge.id,
|
|
3449
|
+
realm: challenge.realm,
|
|
3450
|
+
}),
|
|
3030
3451
|
})
|
|
3031
3452
|
|
|
3032
3453
|
const credential = Credential.from({
|
|
@@ -3125,7 +3546,11 @@ describe('tempo', () => {
|
|
|
3125
3546
|
domain: Proof.domain(chain.id),
|
|
3126
3547
|
types: Proof.types,
|
|
3127
3548
|
primaryType: 'Proof',
|
|
3128
|
-
message: Proof.message(
|
|
3549
|
+
message: Proof.message({
|
|
3550
|
+
account: accounts[1].address,
|
|
3551
|
+
challengeId: challenge.id,
|
|
3552
|
+
realm: challenge.realm,
|
|
3553
|
+
}),
|
|
3129
3554
|
})
|
|
3130
3555
|
|
|
3131
3556
|
const credential = Credential.from({
|
|
@@ -3163,7 +3588,11 @@ describe('tempo', () => {
|
|
|
3163
3588
|
domain: Proof.domain(chain.id),
|
|
3164
3589
|
types: Proof.types,
|
|
3165
3590
|
primaryType: 'Proof',
|
|
3166
|
-
message: Proof.message(
|
|
3591
|
+
message: Proof.message({
|
|
3592
|
+
account: accounts[1].address,
|
|
3593
|
+
challengeId: challenge.id,
|
|
3594
|
+
realm: challenge.realm,
|
|
3595
|
+
}),
|
|
3167
3596
|
})
|
|
3168
3597
|
|
|
3169
3598
|
const credential = Credential.from({
|
|
@@ -3202,7 +3631,11 @@ describe('tempo', () => {
|
|
|
3202
3631
|
domain: Proof.domain(99999),
|
|
3203
3632
|
types: Proof.types,
|
|
3204
3633
|
primaryType: 'Proof',
|
|
3205
|
-
message: Proof.message(
|
|
3634
|
+
message: Proof.message({
|
|
3635
|
+
account: accounts[1].address,
|
|
3636
|
+
challengeId: challenge.id,
|
|
3637
|
+
realm: challenge.realm,
|
|
3638
|
+
}),
|
|
3206
3639
|
})
|
|
3207
3640
|
|
|
3208
3641
|
const credential = Credential.from({
|
|
@@ -3238,7 +3671,11 @@ describe('tempo', () => {
|
|
|
3238
3671
|
domain: Proof.domain(chain.id),
|
|
3239
3672
|
types: Proof.types,
|
|
3240
3673
|
primaryType: 'Proof',
|
|
3241
|
-
message: Proof.message(
|
|
3674
|
+
message: Proof.message({
|
|
3675
|
+
account: accounts[1].address,
|
|
3676
|
+
challengeId: challenge.id,
|
|
3677
|
+
realm: 'evil.example.com',
|
|
3678
|
+
}),
|
|
3242
3679
|
})
|
|
3243
3680
|
|
|
3244
3681
|
const credential = Credential.from({
|
|
@@ -3274,7 +3711,11 @@ describe('tempo', () => {
|
|
|
3274
3711
|
domain: Proof.domain(chain.id),
|
|
3275
3712
|
types: Proof.types,
|
|
3276
3713
|
primaryType: 'Proof',
|
|
3277
|
-
message: Proof.message(
|
|
3714
|
+
message: Proof.message({
|
|
3715
|
+
account: accounts[1].address,
|
|
3716
|
+
challengeId: challenge.id,
|
|
3717
|
+
realm: challenge.realm,
|
|
3718
|
+
}),
|
|
3278
3719
|
})
|
|
3279
3720
|
|
|
3280
3721
|
const credential = Credential.from({
|
|
@@ -3310,7 +3751,11 @@ describe('tempo', () => {
|
|
|
3310
3751
|
domain: Proof.domain(chain.id),
|
|
3311
3752
|
types: Proof.types,
|
|
3312
3753
|
primaryType: 'Proof',
|
|
3313
|
-
message: Proof.message(
|
|
3754
|
+
message: Proof.message({
|
|
3755
|
+
account: accounts[1].address,
|
|
3756
|
+
challengeId: challenge.id,
|
|
3757
|
+
realm: challenge.realm,
|
|
3758
|
+
}),
|
|
3314
3759
|
})
|
|
3315
3760
|
|
|
3316
3761
|
const credential = Credential.from({
|
|
@@ -4931,19 +5376,21 @@ describe('tempo', () => {
|
|
|
4931
5376
|
|
|
4932
5377
|
describe('auto-swap', () => {
|
|
4933
5378
|
// Use accounts[3] as payer with pathUsd only (no asset).
|
|
4934
|
-
// Use accounts[4] as payer with zero balance.
|
|
4935
5379
|
const swapPayer = accounts[3]!
|
|
4936
|
-
const brokePayer = accounts[4]!
|
|
4937
5380
|
|
|
4938
5381
|
beforeAll(async () => {
|
|
4939
5382
|
// Fund swap payer with pathUsd only
|
|
4940
5383
|
await fundAccount({ address: swapPayer.address, token: Addresses.pathUsd as Hex.Hex })
|
|
4941
5384
|
|
|
4942
5385
|
// Seed DEX liquidity: create pair, then place a sell order for `asset`.
|
|
4943
|
-
await Actions.dex
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
5386
|
+
await Actions.dex
|
|
5387
|
+
.createPair(client, {
|
|
5388
|
+
account: accounts[0]!,
|
|
5389
|
+
base: asset,
|
|
5390
|
+
})
|
|
5391
|
+
.catch((error) => {
|
|
5392
|
+
if (!isPairAlreadyExistsError(error)) throw error
|
|
5393
|
+
})
|
|
4947
5394
|
await fundAccount({ address: accounts[0]!.address, token: asset })
|
|
4948
5395
|
await Actions.token.approveSync(client, {
|
|
4949
5396
|
account: accounts[0]!,
|
|
@@ -5171,6 +5618,7 @@ describe('tempo', () => {
|
|
|
5171
5618
|
})
|
|
5172
5619
|
|
|
5173
5620
|
test('error: throws when no fallback currency has sufficient balance', async () => {
|
|
5621
|
+
const brokePayer = testAccount()
|
|
5174
5622
|
const mppx = Mppx_client.create({
|
|
5175
5623
|
polyfill: false,
|
|
5176
5624
|
methods: [
|
|
@@ -5234,6 +5682,7 @@ describe('tempo', () => {
|
|
|
5234
5682
|
|
|
5235
5683
|
test('error: throws when tokenIn list has no viable candidates', async () => {
|
|
5236
5684
|
const bogusToken = '0x0000000000000000000000000000000000099999' as const
|
|
5685
|
+
const brokePayer = testAccount()
|
|
5237
5686
|
|
|
5238
5687
|
const mppx = Mppx_client.create({
|
|
5239
5688
|
polyfill: false,
|