mppx 0.6.30 → 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 +25 -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/Request.js +24 -10
- package/dist/server/Request.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 +28 -23
- 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 +8 -3
- 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 +274 -7
- package/src/server/Mppx.ts +487 -406
- package/src/server/Request.test.ts +81 -0
- package/src/server/Request.ts +23 -9
- 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/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/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 +162 -63
- package/src/tempo/{server → legacy/server}/Session.ts +49 -37
- 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/package.json +1 -1
- 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
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
import { encodeFunctionData, isAddressEqual, parseEventLogs } from 'viem';
|
|
2
|
+
import { call, prepareTransactionRequest, readContract, sendRawTransaction, sendRawTransactionSync, sendTransaction as sendViemTransaction, signTransaction, waitForTransactionReceipt, } from 'viem/actions';
|
|
3
|
+
import { Transaction } from 'viem/tempo';
|
|
4
|
+
import { BadRequestError, VerificationFailedError } from '../../../Errors.js';
|
|
5
|
+
import * as FeePayer from '../../internal/fee-payer.js';
|
|
6
|
+
import { resolveFeeToken } from '../../internal/fee-token.js';
|
|
7
|
+
import * as ChannelOps from '../server/ChannelOps.js';
|
|
8
|
+
import * as ChannelUtils from './Channel.js';
|
|
9
|
+
import { escrowAbi } from './escrow.abi.js';
|
|
10
|
+
import { tip20ChannelEscrow } from './Protocol.js';
|
|
11
|
+
const uint96Max = 2n ** 96n - 1n;
|
|
12
|
+
function readBytes32(value, label) {
|
|
13
|
+
if (typeof value === 'string' && /^0x[0-9a-fA-F]{64}$/.test(value))
|
|
14
|
+
return value;
|
|
15
|
+
throw new VerificationFailedError({ reason: `${label} missing from receipt event` });
|
|
16
|
+
}
|
|
17
|
+
function readUint96(value, label) {
|
|
18
|
+
if (typeof value !== 'bigint')
|
|
19
|
+
throw new VerificationFailedError({ reason: `${label} missing from receipt event` });
|
|
20
|
+
if (value < 0n || value > uint96Max)
|
|
21
|
+
throw new VerificationFailedError({ reason: `${label} exceeds uint96 range` });
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
/** Reads and validates typed fields from a ChannelOpened receipt event. */
|
|
25
|
+
export function readChannelOpenedReceiptFields(event) {
|
|
26
|
+
return {
|
|
27
|
+
channelId: readBytes32(event.args.channelId, 'ChannelOpened channelId'),
|
|
28
|
+
deposit: readUint96(event.args.deposit, 'ChannelOpened deposit'),
|
|
29
|
+
expiringNonceHash: readBytes32(event.args.expiringNonceHash, 'ChannelOpened expiringNonceHash'),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Reads and validates typed fields from a TopUp receipt event. */
|
|
33
|
+
export function readTopUpReceiptFields(event) {
|
|
34
|
+
return {
|
|
35
|
+
channelId: readBytes32(event.args.channelId, 'TopUp channelId'),
|
|
36
|
+
newDeposit: readUint96(event.args.newDeposit, 'TopUp newDeposit'),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Reads and validates typed fields from a Settled receipt event. */
|
|
40
|
+
export function readSettledReceiptFields(event) {
|
|
41
|
+
return {
|
|
42
|
+
newSettled: readUint96(event.args.newSettled, 'Settled newSettled'),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Reads and validates typed fields from a ChannelClosed receipt event. */
|
|
46
|
+
export function readChannelClosedReceiptFields(event) {
|
|
47
|
+
return {
|
|
48
|
+
settledToPayee: readUint96(event.args.settledToPayee, 'ChannelClosed settledToPayee'),
|
|
49
|
+
refundedToPayer: readUint96(event.args.refundedToPayer, 'ChannelClosed refundedToPayer'),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Validates that ChannelOpened receipt fields match calldata, descriptor, and credential. */
|
|
53
|
+
export function validateChannelOpenedReceipt(parameters) {
|
|
54
|
+
const { chainId, descriptor, emittedChannelId, emittedDeposit, emittedExpiringNonceHash, escrow, expectedChannelId, openDeposit, } = parameters;
|
|
55
|
+
if (emittedChannelId.toLowerCase() !== expectedChannelId.toLowerCase())
|
|
56
|
+
throw new VerificationFailedError({
|
|
57
|
+
reason: 'ChannelOpened channelId does not match credential',
|
|
58
|
+
});
|
|
59
|
+
if (emittedExpiringNonceHash.toLowerCase() !== descriptor.expiringNonceHash.toLowerCase())
|
|
60
|
+
throw new VerificationFailedError({
|
|
61
|
+
reason: 'ChannelOpened expiringNonceHash does not match descriptor',
|
|
62
|
+
});
|
|
63
|
+
if (emittedDeposit !== openDeposit)
|
|
64
|
+
throw new VerificationFailedError({ reason: 'ChannelOpened deposit does not match calldata' });
|
|
65
|
+
const confirmedChannelId = ChannelUtils.computeId({ ...descriptor, chainId, escrow });
|
|
66
|
+
if (confirmedChannelId.toLowerCase() !== emittedChannelId.toLowerCase())
|
|
67
|
+
throw new VerificationFailedError({
|
|
68
|
+
reason: 'descriptor does not match ChannelOpened channelId',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/** Validates the state read back after a successful open transaction. */
|
|
72
|
+
export function validateOpenReadbackState(parameters) {
|
|
73
|
+
const { emittedDeposit, state } = parameters;
|
|
74
|
+
if (state.deposit !== emittedDeposit || state.settled !== 0n || state.closeRequestedAt !== 0)
|
|
75
|
+
throw new VerificationFailedError({
|
|
76
|
+
reason: 'on-chain channel state does not match open receipt',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Validates that a TopUp receipt belongs to the credential channel. */
|
|
80
|
+
export function validateTopUpReceipt(parameters) {
|
|
81
|
+
if (parameters.emittedChannelId.toLowerCase() !== parameters.expectedChannelId.toLowerCase())
|
|
82
|
+
throw new VerificationFailedError({ reason: 'TopUp channelId does not match credential' });
|
|
83
|
+
}
|
|
84
|
+
/** Validates the state read back after a successful top-up transaction. */
|
|
85
|
+
export function validateTopUpReadbackState(parameters) {
|
|
86
|
+
if (parameters.state.deposit !== parameters.newDeposit)
|
|
87
|
+
throw new VerificationFailedError({
|
|
88
|
+
reason: 'on-chain channel state does not match topUp receipt',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/** Enforces sponsor gas and fee limits before co-signing a direct precompile call. */
|
|
92
|
+
export function assertPrecompileFeePayerPolicy(parameters) {
|
|
93
|
+
const { policy, prepared } = parameters;
|
|
94
|
+
if (!policy)
|
|
95
|
+
return;
|
|
96
|
+
if (policy.maxGas !== undefined && (prepared.gas ?? 0n) > policy.maxGas)
|
|
97
|
+
throw new BadRequestError({ reason: 'fee-payer policy maxGas exceeded' });
|
|
98
|
+
if (policy.maxFeePerGas !== undefined && (prepared.maxFeePerGas ?? 0n) > policy.maxFeePerGas)
|
|
99
|
+
throw new BadRequestError({ reason: 'fee-payer policy maxFeePerGas exceeded' });
|
|
100
|
+
if (policy.maxPriorityFeePerGas !== undefined &&
|
|
101
|
+
(prepared.maxPriorityFeePerGas ?? 0n) > policy.maxPriorityFeePerGas)
|
|
102
|
+
throw new BadRequestError({ reason: 'fee-payer policy maxPriorityFeePerGas exceeded' });
|
|
103
|
+
if (policy.maxTotalFee !== undefined &&
|
|
104
|
+
(prepared.gas ?? 0n) * (prepared.maxFeePerGas ?? 0n) > policy.maxTotalFee)
|
|
105
|
+
throw new BadRequestError({ reason: 'fee-payer policy maxTotalFee exceeded' });
|
|
106
|
+
}
|
|
107
|
+
const UINT96_MAX = 2n ** 96n - 1n;
|
|
108
|
+
function assertUint96(amount) {
|
|
109
|
+
if (amount < 0n || amount > UINT96_MAX) {
|
|
110
|
+
throw new VerificationFailedError({ reason: 'amount exceeds uint96 range' });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Read channel descriptor and state from the TIP20EscrowChannel precompile.
|
|
115
|
+
*/
|
|
116
|
+
export async function getChannel(client, descriptor, escrow = tip20ChannelEscrow) {
|
|
117
|
+
const channel = await readContract(client, {
|
|
118
|
+
address: escrow,
|
|
119
|
+
abi: escrowAbi,
|
|
120
|
+
functionName: 'getChannel',
|
|
121
|
+
args: [descriptorTuple(descriptor)],
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
descriptor: channel.descriptor,
|
|
125
|
+
state: stateFromTuple(channel.state),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Read channel state from the TIP20EscrowChannel precompile.
|
|
130
|
+
*/
|
|
131
|
+
export async function getChannelState(client, channelId, escrow = tip20ChannelEscrow) {
|
|
132
|
+
const state = await readContract(client, {
|
|
133
|
+
address: escrow,
|
|
134
|
+
abi: escrowAbi,
|
|
135
|
+
functionName: 'getChannelState',
|
|
136
|
+
args: [channelId],
|
|
137
|
+
});
|
|
138
|
+
return stateFromTuple(state);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Read channel states from the TIP20EscrowChannel precompile.
|
|
142
|
+
*/
|
|
143
|
+
export async function getChannelStatesBatch(client, channelIds, escrow = tip20ChannelEscrow) {
|
|
144
|
+
const states = await readContract(client, {
|
|
145
|
+
address: escrow,
|
|
146
|
+
abi: escrowAbi,
|
|
147
|
+
functionName: 'getChannelStatesBatch',
|
|
148
|
+
args: [channelIds],
|
|
149
|
+
});
|
|
150
|
+
return states.map(stateFromTuple);
|
|
151
|
+
}
|
|
152
|
+
function parsePrecompileCredentialTransaction(parameters) {
|
|
153
|
+
const { escrowContract, feePayer, label, serializedTransaction } = parameters;
|
|
154
|
+
if (feePayer && !FeePayer.isTempoTransaction(serializedTransaction))
|
|
155
|
+
throw new BadRequestError({ reason: 'Only Tempo (0x76/0x78) transactions are supported' });
|
|
156
|
+
const transaction = Transaction.deserialize(serializedTransaction);
|
|
157
|
+
const calls = transaction.calls;
|
|
158
|
+
if (calls.length !== 1)
|
|
159
|
+
throw new VerificationFailedError({
|
|
160
|
+
reason: `TIP-1034 ${label} transaction must contain exactly one call`,
|
|
161
|
+
});
|
|
162
|
+
const call = calls[0];
|
|
163
|
+
if (!call.to || !isAddressEqual(call.to, escrowContract))
|
|
164
|
+
throw new VerificationFailedError({
|
|
165
|
+
reason: `TIP-1034 ${label} transaction targets the wrong address`,
|
|
166
|
+
});
|
|
167
|
+
if (!call.data)
|
|
168
|
+
throw new VerificationFailedError({
|
|
169
|
+
reason: `TIP-1034 ${label} transaction is missing calldata`,
|
|
170
|
+
});
|
|
171
|
+
return { transaction, call: { ...call, data: call.data, to: call.to } };
|
|
172
|
+
}
|
|
173
|
+
async function simulateTempoTransaction(client, transaction) {
|
|
174
|
+
// viem's public `call` type does not yet model Tempo's multi-call and
|
|
175
|
+
// fee-payer fields together. Keep that compatibility cast in one place.
|
|
176
|
+
await call(client, {
|
|
177
|
+
...transaction,
|
|
178
|
+
account: transaction.from,
|
|
179
|
+
calls: transaction.calls ?? [],
|
|
180
|
+
feePayerSignature: undefined,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
async function signTempoTransaction(client, transaction) {
|
|
184
|
+
return (await signTransaction(client, transaction));
|
|
185
|
+
}
|
|
186
|
+
async function prepareFeePayerCallTransaction(client, parameters) {
|
|
187
|
+
const { account, data, feeToken, to } = parameters;
|
|
188
|
+
// viem's stable request type does not expose Tempo fee-payer transaction
|
|
189
|
+
// fields for this call shape. Keep the cast at the boundary.
|
|
190
|
+
return prepareTransactionRequest(client, {
|
|
191
|
+
account,
|
|
192
|
+
calls: [{ to, data }],
|
|
193
|
+
feePayer: true,
|
|
194
|
+
...(feeToken ? { feeToken } : {}),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function sendPrecompileContractCall(client, parameters) {
|
|
198
|
+
const { account, data, feeToken, to } = parameters;
|
|
199
|
+
// `feeToken` is Tempo-specific and not represented on viem's base
|
|
200
|
+
// transaction request type.
|
|
201
|
+
return sendViemTransaction(client, {
|
|
202
|
+
...(account ? { account } : {}),
|
|
203
|
+
to,
|
|
204
|
+
data,
|
|
205
|
+
...(feeToken ? { feeToken } : {}),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Submit a settle transaction on-chain.
|
|
210
|
+
*/
|
|
211
|
+
export async function settleOnChain(client, descriptor, cumulativeAmount, signature, escrow = tip20ChannelEscrow, options) {
|
|
212
|
+
assertUint96(cumulativeAmount);
|
|
213
|
+
const args = [descriptorTuple(descriptor), cumulativeAmount, signature];
|
|
214
|
+
return sendPrecompileTransaction(client, escrow, encodeFunctionData({ abi: escrowAbi, functionName: 'settle', args }), 'settle', options);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Submit a top-up transaction on-chain.
|
|
218
|
+
*/
|
|
219
|
+
export async function topUpOnChain(client, descriptor, additionalDeposit, escrow = tip20ChannelEscrow, options) {
|
|
220
|
+
assertUint96(additionalDeposit);
|
|
221
|
+
const args = [descriptorTuple(descriptor), additionalDeposit];
|
|
222
|
+
return sendPrecompileTransaction(client, escrow, encodeFunctionData({ abi: escrowAbi, functionName: 'topUp', args }), 'topUp', options);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Submit a request-close transaction on-chain.
|
|
226
|
+
*/
|
|
227
|
+
export async function requestCloseOnChain(client, descriptor, escrow = tip20ChannelEscrow, options) {
|
|
228
|
+
const args = [descriptorTuple(descriptor)];
|
|
229
|
+
return sendPrecompileTransaction(client, escrow, encodeFunctionData({ abi: escrowAbi, functionName: 'requestClose', args }), 'requestClose', options);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Submit a withdraw transaction on-chain.
|
|
233
|
+
*/
|
|
234
|
+
export async function withdrawOnChain(client, descriptor, escrow = tip20ChannelEscrow, options) {
|
|
235
|
+
const args = [descriptorTuple(descriptor)];
|
|
236
|
+
return sendPrecompileTransaction(client, escrow, encodeFunctionData({ abi: escrowAbi, functionName: 'withdraw', args }), 'withdraw', options);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Submit a close transaction on-chain.
|
|
240
|
+
*/
|
|
241
|
+
export async function closeOnChain(client, descriptor, cumulativeAmount, captureAmount, signature, escrow = tip20ChannelEscrow, options) {
|
|
242
|
+
assertUint96(cumulativeAmount);
|
|
243
|
+
assertUint96(captureAmount);
|
|
244
|
+
const args = [descriptorTuple(descriptor), cumulativeAmount, captureAmount, signature];
|
|
245
|
+
return sendPrecompileTransaction(client, escrow, encodeFunctionData({ abi: escrowAbi, functionName: 'close', args }), 'close', options);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Asserts that a deserialized transaction has an existing sender signature.
|
|
249
|
+
*/
|
|
250
|
+
export function assertSenderSigned(transaction) {
|
|
251
|
+
if (!transaction.signature || !transaction.from)
|
|
252
|
+
throw new BadRequestError({
|
|
253
|
+
reason: 'Transaction must be signed by the sender before fee payer co-signing',
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/** Broadcast a raw serialized transaction. */
|
|
257
|
+
export async function sendTransaction(client, transaction) {
|
|
258
|
+
return sendRawTransaction(client, { serializedTransaction: transaction });
|
|
259
|
+
}
|
|
260
|
+
/** Wait for a receipt and reject reverted precompile transactions. */
|
|
261
|
+
export async function waitForSuccessfulReceipt(client, hash) {
|
|
262
|
+
const receipt = await waitForTransactionReceipt(client, { hash });
|
|
263
|
+
if (receipt.status !== 'success')
|
|
264
|
+
throw new VerificationFailedError({ reason: 'precompile transaction reverted' });
|
|
265
|
+
return receipt;
|
|
266
|
+
}
|
|
267
|
+
/** Extract exactly one channel event for a channel ID from a receipt. */
|
|
268
|
+
export function getChannelEvent(receipt, name, channelId) {
|
|
269
|
+
const logs = parseEventLogs({
|
|
270
|
+
abi: escrowAbi,
|
|
271
|
+
eventName: name,
|
|
272
|
+
logs: receipt.logs,
|
|
273
|
+
});
|
|
274
|
+
const matches = logs.filter((log) => log.args.channelId.toLowerCase() === channelId.toLowerCase());
|
|
275
|
+
if (matches.length !== 1)
|
|
276
|
+
throw new VerificationFailedError({
|
|
277
|
+
reason: `expected one ${name} event for credential channelId in receipt`,
|
|
278
|
+
});
|
|
279
|
+
return matches[0];
|
|
280
|
+
}
|
|
281
|
+
/** Broadcasts a client-signed management transaction, adding a fee-payer co-signature when requested. */
|
|
282
|
+
export async function sendCredentialTransaction(parameters) {
|
|
283
|
+
const { challengeExpires, chainId, client, allowedFeeTokens, details, feePayer, feePayerPolicy, label, serializedTransaction, transaction, } = parameters;
|
|
284
|
+
if (!feePayer) {
|
|
285
|
+
const txHash = await sendTransaction(client, serializedTransaction);
|
|
286
|
+
return waitForSuccessfulReceipt(client, txHash);
|
|
287
|
+
}
|
|
288
|
+
if (!FeePayer.isTempoTransaction(serializedTransaction))
|
|
289
|
+
throw new BadRequestError({ reason: 'Only Tempo (0x76/0x78) transactions are supported' });
|
|
290
|
+
assertSenderSigned(transaction);
|
|
291
|
+
await simulateTempoTransaction(client, transaction);
|
|
292
|
+
const sponsored = FeePayer.prepareSponsoredTransaction({
|
|
293
|
+
account: feePayer,
|
|
294
|
+
allowedFeeTokens,
|
|
295
|
+
challengeExpires,
|
|
296
|
+
chainId,
|
|
297
|
+
details,
|
|
298
|
+
policy: feePayerPolicy,
|
|
299
|
+
transaction: {
|
|
300
|
+
...transaction,
|
|
301
|
+
...(allowedFeeTokens?.[0] ? { feeToken: transaction.feeToken ?? allowedFeeTokens[0] } : {}),
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
const serialized = await signTempoTransaction(client, sponsored);
|
|
305
|
+
const receipt = await sendRawTransactionSync(client, {
|
|
306
|
+
serializedTransaction: serialized,
|
|
307
|
+
});
|
|
308
|
+
if (receipt.status !== 'success')
|
|
309
|
+
throw new VerificationFailedError({
|
|
310
|
+
reason: `${label} precompile transaction reverted: ${receipt.transactionHash}`,
|
|
311
|
+
});
|
|
312
|
+
return receipt;
|
|
313
|
+
}
|
|
314
|
+
/** Broadcast and validate a client-signed TIP-1034 open transaction. */
|
|
315
|
+
export async function broadcastOpenTransaction(parameters) {
|
|
316
|
+
const { transaction, call } = parsePrecompileCredentialTransaction({
|
|
317
|
+
escrowContract: parameters.escrowContract,
|
|
318
|
+
feePayer: parameters.feePayer,
|
|
319
|
+
label: 'open',
|
|
320
|
+
serializedTransaction: parameters.serializedTransaction,
|
|
321
|
+
});
|
|
322
|
+
const payer = transaction.from ?? parameters.expectedPayer;
|
|
323
|
+
const open = ChannelOps.parseOpenCall({
|
|
324
|
+
data: call.data,
|
|
325
|
+
expected: {
|
|
326
|
+
payee: parameters.expectedPayee,
|
|
327
|
+
token: parameters.expectedCurrency,
|
|
328
|
+
operator: parameters.expectedOperator,
|
|
329
|
+
authorizedSigner: parameters.expectedAuthorizedSigner,
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
const descriptor = ChannelOps.descriptorFromOpen({
|
|
333
|
+
chainId: parameters.chainId,
|
|
334
|
+
escrow: parameters.escrowContract,
|
|
335
|
+
payer,
|
|
336
|
+
open,
|
|
337
|
+
expiringNonceHash: parameters.expectedExpiringNonceHash,
|
|
338
|
+
channelId: parameters.expectedChannelId,
|
|
339
|
+
});
|
|
340
|
+
if (parameters.feePayer)
|
|
341
|
+
assertSenderSigned(transaction);
|
|
342
|
+
const expiringNonceHash = ChannelUtils.computeExpiringNonceHash(ChannelUtils.transactionForExpiringNonceHash({
|
|
343
|
+
feePayer: parameters.feePayer,
|
|
344
|
+
transaction,
|
|
345
|
+
}), { sender: payer });
|
|
346
|
+
if (expiringNonceHash.toLowerCase() !== descriptor.expiringNonceHash.toLowerCase())
|
|
347
|
+
throw new VerificationFailedError({
|
|
348
|
+
reason: 'credential expiringNonceHash does not match transaction',
|
|
349
|
+
});
|
|
350
|
+
await parameters.beforeBroadcast?.({
|
|
351
|
+
descriptor,
|
|
352
|
+
expiringNonceHash,
|
|
353
|
+
openDeposit: open.deposit,
|
|
354
|
+
});
|
|
355
|
+
const receipt = await sendCredentialTransaction({
|
|
356
|
+
challengeExpires: parameters.challengeExpires,
|
|
357
|
+
chainId: parameters.chainId,
|
|
358
|
+
client: parameters.client,
|
|
359
|
+
allowedFeeTokens: [parameters.expectedCurrency],
|
|
360
|
+
details: {
|
|
361
|
+
channelId: parameters.expectedChannelId,
|
|
362
|
+
currency: parameters.expectedCurrency,
|
|
363
|
+
recipient: parameters.expectedPayee,
|
|
364
|
+
},
|
|
365
|
+
feePayer: parameters.feePayer,
|
|
366
|
+
feePayerPolicy: parameters.feePayerPolicy,
|
|
367
|
+
label: 'open',
|
|
368
|
+
serializedTransaction: parameters.serializedTransaction,
|
|
369
|
+
transaction,
|
|
370
|
+
});
|
|
371
|
+
const opened = readChannelOpenedReceiptFields(getChannelEvent(receipt, 'ChannelOpened', parameters.expectedChannelId));
|
|
372
|
+
validateChannelOpenedReceipt({
|
|
373
|
+
chainId: parameters.chainId,
|
|
374
|
+
descriptor,
|
|
375
|
+
emittedChannelId: opened.channelId,
|
|
376
|
+
emittedDeposit: opened.deposit,
|
|
377
|
+
emittedExpiringNonceHash: opened.expiringNonceHash,
|
|
378
|
+
escrow: parameters.escrowContract,
|
|
379
|
+
expectedChannelId: parameters.expectedChannelId,
|
|
380
|
+
openDeposit: open.deposit,
|
|
381
|
+
});
|
|
382
|
+
const chainChannel = await getChannel(parameters.client, descriptor, parameters.escrowContract);
|
|
383
|
+
const state = chainChannel.state;
|
|
384
|
+
validateOpenReadbackState({ emittedDeposit: opened.deposit, state });
|
|
385
|
+
return {
|
|
386
|
+
txHash: receipt.transactionHash,
|
|
387
|
+
descriptor,
|
|
388
|
+
state,
|
|
389
|
+
expiringNonceHash: opened.expiringNonceHash,
|
|
390
|
+
openDeposit: open.deposit,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/** Broadcast and validate a client-signed TIP-1034 top-up transaction. */
|
|
394
|
+
export async function broadcastTopUpTransaction(parameters) {
|
|
395
|
+
const { transaction, call } = parsePrecompileCredentialTransaction({
|
|
396
|
+
escrowContract: parameters.escrowContract,
|
|
397
|
+
feePayer: parameters.feePayer,
|
|
398
|
+
label: 'topUp',
|
|
399
|
+
serializedTransaction: parameters.serializedTransaction,
|
|
400
|
+
});
|
|
401
|
+
ChannelOps.parseTopUpCall({
|
|
402
|
+
data: call.data,
|
|
403
|
+
expected: {
|
|
404
|
+
descriptor: parameters.descriptor,
|
|
405
|
+
additionalDeposit: parameters.additionalDeposit,
|
|
406
|
+
},
|
|
407
|
+
});
|
|
408
|
+
const receipt = await sendCredentialTransaction({
|
|
409
|
+
challengeExpires: parameters.challengeExpires,
|
|
410
|
+
chainId: parameters.chainId,
|
|
411
|
+
client: parameters.client,
|
|
412
|
+
allowedFeeTokens: [parameters.expectedCurrency],
|
|
413
|
+
details: {
|
|
414
|
+
additionalDeposit: parameters.additionalDeposit.toString(),
|
|
415
|
+
channelId: parameters.expectedChannelId,
|
|
416
|
+
currency: parameters.expectedCurrency,
|
|
417
|
+
},
|
|
418
|
+
feePayer: parameters.feePayer,
|
|
419
|
+
feePayerPolicy: parameters.feePayerPolicy,
|
|
420
|
+
label: 'topUp',
|
|
421
|
+
serializedTransaction: parameters.serializedTransaction,
|
|
422
|
+
transaction,
|
|
423
|
+
});
|
|
424
|
+
const toppedUp = readTopUpReceiptFields(getChannelEvent(receipt, 'TopUp', parameters.expectedChannelId));
|
|
425
|
+
validateTopUpReceipt({
|
|
426
|
+
emittedChannelId: toppedUp.channelId,
|
|
427
|
+
expectedChannelId: parameters.expectedChannelId,
|
|
428
|
+
});
|
|
429
|
+
const state = await getChannelState(parameters.client, toppedUp.channelId, parameters.escrowContract);
|
|
430
|
+
validateTopUpReadbackState({ newDeposit: toppedUp.newDeposit, state });
|
|
431
|
+
return { txHash: receipt.transactionHash, newDeposit: toppedUp.newDeposit, state };
|
|
432
|
+
}
|
|
433
|
+
function stateFromTuple(state) {
|
|
434
|
+
assertUint96(state.settled);
|
|
435
|
+
assertUint96(state.deposit);
|
|
436
|
+
return {
|
|
437
|
+
settled: state.settled,
|
|
438
|
+
deposit: state.deposit,
|
|
439
|
+
closeRequestedAt: state.closeRequestedAt,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
function descriptorTuple(descriptor) {
|
|
443
|
+
return {
|
|
444
|
+
payer: descriptor.payer,
|
|
445
|
+
payee: descriptor.payee,
|
|
446
|
+
operator: descriptor.operator,
|
|
447
|
+
token: descriptor.token,
|
|
448
|
+
salt: descriptor.salt,
|
|
449
|
+
authorizedSigner: descriptor.authorizedSigner,
|
|
450
|
+
expiringNonceHash: descriptor.expiringNonceHash,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
async function sendPrecompileTransaction(client, to, data, label, options) {
|
|
454
|
+
if (options?.feePayer) {
|
|
455
|
+
const account = options.account ?? client.account;
|
|
456
|
+
if (!account)
|
|
457
|
+
throw new Error(`Cannot ${label} precompile channel: no account available.`);
|
|
458
|
+
const feeToken = options.feeToken ??
|
|
459
|
+
(await resolveFeeToken({
|
|
460
|
+
account: options.feePayer.address,
|
|
461
|
+
candidateTokens: options.candidateFeeTokens,
|
|
462
|
+
client,
|
|
463
|
+
}));
|
|
464
|
+
const prepared = await prepareFeePayerCallTransaction(client, {
|
|
465
|
+
account,
|
|
466
|
+
data,
|
|
467
|
+
feeToken,
|
|
468
|
+
to,
|
|
469
|
+
});
|
|
470
|
+
assertPrecompileFeePayerPolicy({ prepared, policy: options.feePayerPolicy });
|
|
471
|
+
const serialized = await signTempoTransaction(client, {
|
|
472
|
+
...prepared,
|
|
473
|
+
account,
|
|
474
|
+
feePayer: options.feePayer,
|
|
475
|
+
});
|
|
476
|
+
const receipt = await sendRawTransactionSync(client, {
|
|
477
|
+
serializedTransaction: serialized,
|
|
478
|
+
});
|
|
479
|
+
if (receipt.status !== 'success')
|
|
480
|
+
throw new VerificationFailedError({
|
|
481
|
+
reason: `${label} precompile transaction reverted: ${receipt.transactionHash}`,
|
|
482
|
+
});
|
|
483
|
+
return receipt.transactionHash;
|
|
484
|
+
}
|
|
485
|
+
return sendPrecompileContractCall(client, {
|
|
486
|
+
account: options?.account,
|
|
487
|
+
to,
|
|
488
|
+
data,
|
|
489
|
+
feeToken: options?.feeToken,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=Chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../../../src/tempo/session/precompile/Chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Account, Address, Hex } from 'viem';
|
|
2
|
+
import type { z_TransactionRequestTempo, z_TransactionSerializableTempo } from 'viem/tempo';
|
|
3
|
+
import type { ChannelDescriptor } from './Protocol.js';
|
|
4
|
+
/** Re-export of the TIP-1034 channel descriptor shape. */
|
|
5
|
+
export type { ChannelDescriptor } from './Protocol.js';
|
|
6
|
+
/** Tempo transaction shape used to derive the TIP-1034 `expiringNonceHash`. */
|
|
7
|
+
export type ExpiringNonceTransaction = (z_TransactionSerializableTempo | z_TransactionRequestTempo) & {
|
|
8
|
+
/** Fee-payer metadata may be present on fee-sponsored open transactions. */
|
|
9
|
+
feePayer?: Account | true | undefined;
|
|
10
|
+
};
|
|
11
|
+
/** Computes the TIP-1034 channel ID for a precompile channel descriptor. */
|
|
12
|
+
export declare function computeId(parameters: computeId.Parameters): Hex;
|
|
13
|
+
/** Type helpers for `computeId()`. */
|
|
14
|
+
export declare namespace computeId {
|
|
15
|
+
/** Parameters that uniquely identify a TIP-1034 precompile channel. */
|
|
16
|
+
type Parameters = ChannelDescriptor & {
|
|
17
|
+
/** Chain ID included in the channel ID preimage. */
|
|
18
|
+
chainId: number;
|
|
19
|
+
/** Escrow contract/precompile address. Defaults to the canonical TIP-1034 address. */
|
|
20
|
+
escrow?: Address | undefined;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Input for deriving the transaction body used by TIP-1034 channel identity hashing. */
|
|
24
|
+
export type ExpiringNonceHashTransactionParameters = {
|
|
25
|
+
/** Deserialized Tempo transaction that opened the channel. */
|
|
26
|
+
transaction: ExpiringNonceTransaction;
|
|
27
|
+
/** Whether the transaction will receive a fee-payer co-signature after payer signing. */
|
|
28
|
+
feePayer?: Account | true | undefined;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Returns the sender-signed transaction body used for TIP-1034 `expiringNonceHash`.
|
|
32
|
+
*
|
|
33
|
+
* Fee-payer co-signing happens after payer signing and must not affect the channel ID preimage.
|
|
34
|
+
*/
|
|
35
|
+
export declare function transactionForExpiringNonceHash(parameters: ExpiringNonceHashTransactionParameters): ExpiringNonceTransaction;
|
|
36
|
+
/**
|
|
37
|
+
* Computes the TIP-1034 `expiringNonceHash` for a channel-opening Tempo transaction.
|
|
38
|
+
*
|
|
39
|
+
* This delegates to viem's Tempo sender-scoped hash helper, which matches the node's
|
|
40
|
+
* `keccak256(encodeForSigning || sender)` consensus preimage. mppx intentionally does
|
|
41
|
+
* not duplicate Tempo transaction encoding logic here.
|
|
42
|
+
*/
|
|
43
|
+
export declare function computeExpiringNonceHash(transaction: ExpiringNonceTransaction, parameters: {
|
|
44
|
+
sender: Address;
|
|
45
|
+
}): Hex;
|
|
46
|
+
//# sourceMappingURL=Channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/precompile/Channel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,KAAK,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAA;AAG3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,0DAA0D;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,+EAA+E;AAC/E,MAAM,MAAM,wBAAwB,GAAG,CACnC,8BAA8B,GAC9B,yBAAyB,CAC5B,GAAG;IACF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,GAAG,GAAG,CA0B/D;AAED,sCAAsC;AACtC,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,uEAAuE;IACvE,KAAK,UAAU,GAAG,iBAAiB,GAAG;QACpC,oDAAoD;QACpD,OAAO,EAAE,MAAM,CAAA;QACf,sFAAsF;QACtF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF;AASD,yFAAyF;AACzF,MAAM,MAAM,sCAAsC,GAAG;IACnD,8DAA8D;IAC9D,WAAW,EAAE,wBAAwB,CAAA;IACrC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CACtC,CAAA;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,sCAAsC,GACjD,wBAAwB,CAI1B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,wBAAwB,EACrC,UAAU,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAC9B,GAAG,CAIL"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AbiParameters, Hash, Hex as OxHex } from 'ox';
|
|
2
|
+
import { TxEnvelopeTempo } from 'ox/tempo';
|
|
3
|
+
import { tip20ChannelEscrow } from './Protocol.js';
|
|
4
|
+
/** Computes the TIP-1034 channel ID for a precompile channel descriptor. */
|
|
5
|
+
export function computeId(parameters) {
|
|
6
|
+
const encoded = AbiParameters.encode(AbiParameters.from([
|
|
7
|
+
'address payer',
|
|
8
|
+
'address payee',
|
|
9
|
+
'address operator',
|
|
10
|
+
'address token',
|
|
11
|
+
'bytes32 salt',
|
|
12
|
+
'address authorizedSigner',
|
|
13
|
+
'bytes32 expiringNonceHash',
|
|
14
|
+
'address escrow',
|
|
15
|
+
'uint256 chainId',
|
|
16
|
+
]), [
|
|
17
|
+
parameters.payer,
|
|
18
|
+
parameters.payee,
|
|
19
|
+
parameters.operator,
|
|
20
|
+
parameters.token,
|
|
21
|
+
parameters.salt,
|
|
22
|
+
parameters.authorizedSigner,
|
|
23
|
+
parameters.expiringNonceHash,
|
|
24
|
+
parameters.escrow ?? tip20ChannelEscrow,
|
|
25
|
+
BigInt(parameters.chainId),
|
|
26
|
+
]);
|
|
27
|
+
return Hash.keccak256(encoded);
|
|
28
|
+
}
|
|
29
|
+
function encodeTempoTransactionForSigning(transaction) {
|
|
30
|
+
// ox exposes the exact Tempo signing encoder we need, but its public type
|
|
31
|
+
// does not include viem's request-time fee-payer fields. Keep the bridge at
|
|
32
|
+
// the encoder boundary so channel ID derivation stays explicit.
|
|
33
|
+
return TxEnvelopeTempo.encodeForSigning(transaction);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the sender-signed transaction body used for TIP-1034 `expiringNonceHash`.
|
|
37
|
+
*
|
|
38
|
+
* Fee-payer co-signing happens after payer signing and must not affect the channel ID preimage.
|
|
39
|
+
*/
|
|
40
|
+
export function transactionForExpiringNonceHash(parameters) {
|
|
41
|
+
const { feePayer, transaction } = parameters;
|
|
42
|
+
if (!feePayer)
|
|
43
|
+
return transaction;
|
|
44
|
+
return { ...transaction, feePayerSignature: null };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Computes the TIP-1034 `expiringNonceHash` for a channel-opening Tempo transaction.
|
|
48
|
+
*
|
|
49
|
+
* This delegates to viem's Tempo sender-scoped hash helper, which matches the node's
|
|
50
|
+
* `keccak256(encodeForSigning || sender)` consensus preimage. mppx intentionally does
|
|
51
|
+
* not duplicate Tempo transaction encoding logic here.
|
|
52
|
+
*/
|
|
53
|
+
export function computeExpiringNonceHash(transaction, parameters) {
|
|
54
|
+
return Hash.keccak256(OxHex.concat(encodeTempoTransactionForSigning(transaction), parameters.sender));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=Channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/tempo/session/precompile/Channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,IAAI,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAelD,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,UAAgC;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAClC,aAAa,CAAC,IAAI,CAAC;QACjB,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,eAAe;QACf,cAAc;QACd,0BAA0B;QAC1B,2BAA2B;QAC3B,gBAAgB;QAChB,iBAAiB;KAClB,CAAC,EACF;QACE,UAAU,CAAC,KAAK;QAChB,UAAU,CAAC,KAAK;QAChB,UAAU,CAAC,QAAQ;QACnB,UAAU,CAAC,KAAK;QAChB,UAAU,CAAC,IAAI;QACf,UAAU,CAAC,gBAAgB;QAC3B,UAAU,CAAC,iBAAiB;QAC5B,UAAU,CAAC,MAAM,IAAI,kBAAkB;QACvC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;KAC3B,CACF,CAAA;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAaD,SAAS,gCAAgC,CAAC,WAAqC;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,gEAAgE;IAChE,OAAO,eAAe,CAAC,gBAAgB,CAAC,WAAoB,CAAC,CAAA;AAC/D,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,UAAkD;IAElD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,CAAA;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,WAAW,CAAA;IACjC,OAAO,EAAE,GAAG,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAA8B,CAAA;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAqC,EACrC,UAA+B;IAE/B,OAAO,IAAI,CAAC,SAAS,CACnB,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CACxE,CAAA;AACV,CAAC"}
|