mppx 0.7.0 → 0.8.1
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 +41 -0
- package/README.md +20 -11
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +18 -6
- package/dist/Challenge.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/PaymentRequest.d.ts +10 -10
- package/dist/PaymentRequest.js +8 -8
- package/dist/cli/internal.d.ts +1 -0
- package/dist/cli/internal.d.ts.map +1 -1
- package/dist/cli/internal.js +1 -15
- package/dist/cli/internal.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 -75
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +46 -7
- 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/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/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 +1 -1
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +9 -0
- package/dist/server/Mppx.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 +1 -1
- package/dist/server/Transport.js.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/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 +13 -1
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +38 -25
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +5 -3
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Methods.js +4 -2
- 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/internal/fee-payer.d.ts +26 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +83 -30
- 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/legacy/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/legacy/client/SessionManager.js +10 -3
- package/dist/tempo/legacy/client/SessionManager.js.map +1 -1
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +46 -18
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +4 -2
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +4 -2
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +10 -0
- 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/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/session/client/ChannelOps.d.ts +2 -3
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/session/client/ChannelOps.js +7 -10
- package/dist/tempo/session/client/ChannelOps.js.map +1 -1
- 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 +7 -24
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -1
- package/dist/tempo/session/client/CredentialState.js +51 -49
- package/dist/tempo/session/client/CredentialState.js.map +1 -1
- package/dist/tempo/session/client/Session.d.ts +8 -2
- package/dist/tempo/session/client/Session.d.ts.map +1 -1
- package/dist/tempo/session/client/Session.js +22 -8
- package/dist/tempo/session/client/Session.js.map +1 -1
- package/dist/tempo/session/client/SessionManager.d.ts +4 -40
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/session/client/SessionManager.js +124 -174
- package/dist/tempo/session/client/SessionManager.js.map +1 -1
- package/dist/tempo/session/client/index.d.ts +3 -4
- package/dist/tempo/session/client/index.d.ts.map +1 -1
- package/dist/tempo/session/client/index.js +1 -0
- package/dist/tempo/session/client/index.js.map +1 -1
- package/dist/tempo/session/precompile/Voucher.d.ts +3 -3
- package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Voucher.js +24 -25
- package/dist/tempo/session/precompile/Voucher.js.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.d.ts +6 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.js +13 -0
- package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
- package/dist/tempo/session/server/Settlement.d.ts.map +1 -1
- package/dist/tempo/session/server/Settlement.js +4 -2
- package/dist/tempo/session/server/Settlement.js.map +1 -1
- package/dist/tempo/session/server/Sse.d.ts.map +1 -1
- package/dist/tempo/session/server/Sse.js.map +1 -1
- package/dist/tempo/session/server/Ws.d.ts.map +1 -1
- package/dist/tempo/session/server/Ws.js.map +1 -1
- 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 +21 -10
- package/src/Challenge.test.ts +40 -0
- package/src/Challenge.ts +19 -6
- package/src/Mcp.ts +4 -0
- package/src/PaymentRequest.ts +10 -10
- package/src/cli/cli.test.ts +15 -15
- package/src/cli/config.test.ts +13 -7
- package/src/cli/internal.ts +1 -16
- package/src/client/Mppx.test-d.ts +21 -1
- package/src/client/Mppx.test.ts +1 -1
- package/src/client/Mppx.ts +2 -2
- package/src/client/Transport.test.ts +225 -178
- package/src/client/Transport.ts +77 -83
- package/src/client/index.ts +14 -0
- package/src/client/internal/Fetch.test.ts +207 -2
- package/src/client/internal/Fetch.ts +52 -6
- 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/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/{mcp-sdk → mcp}/client/McpClient.integration.test.ts +10 -4
- package/src/{mcp-sdk → mcp}/client/McpClient.test-d.ts +45 -18
- package/src/{mcp-sdk → mcp}/client/McpClient.test.ts +211 -5
- package/src/mcp/client/McpClient.ts +307 -0
- package/src/{mcp-sdk → mcp}/client/McpClient.unit.test.ts +9 -5
- package/src/middlewares/elysia.test.ts +1 -1
- package/src/middlewares/express.test.ts +1 -1
- package/src/middlewares/hono.test.ts +1 -1
- package/src/middlewares/internal/mppx.test.ts +1 -1
- package/src/middlewares/nextjs.test.ts +1 -1
- package/src/proxy/Proxy.test.ts +1 -1
- 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 +1 -1
- package/src/server/Mppx.test.ts +20 -2
- package/src/server/Mppx.ts +14 -1
- package/src/server/Transport.test.ts +6 -6
- package/src/server/Transport.ts +1 -1
- package/src/stripe/Charge.integration.test.ts +1 -1
- package/src/stripe/client/Charge.test.ts +1 -1
- package/src/stripe/server/Charge.test.ts +1 -1
- package/src/stripe/server/internal/html/package.json +1 -1
- package/src/stripe/server/internal/html.gen.ts +1 -1
- 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/Subscription.integration.test.ts +1 -1
- package/src/tempo/client/Charge.test.ts +173 -0
- package/src/tempo/client/Charge.ts +65 -36
- package/src/tempo/client/Methods.ts +4 -2
- package/src/tempo/client/ResolveAccount.ts +46 -0
- package/src/tempo/internal/fee-payer.test.ts +89 -10
- package/src/tempo/internal/fee-payer.ts +128 -41
- package/src/tempo/internal/proof.test.ts +12 -4
- package/src/tempo/internal/proof.ts +55 -6
- package/src/tempo/legacy/client/SessionManager.ts +11 -3
- package/src/tempo/legacy/server/Session.test.ts +91 -26
- package/src/tempo/server/Charge.test.ts +388 -17
- package/src/tempo/server/Charge.ts +50 -24
- package/src/tempo/server/Methods.ts +4 -2
- package/src/tempo/server/Subscription.test.ts +465 -3
- package/src/tempo/server/Subscription.ts +174 -19
- package/src/tempo/server/internal/html/package.json +2 -2
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/session/client/ChannelOps.ts +5 -19
- package/src/tempo/session/client/ChannelStore.ts +111 -0
- package/src/tempo/session/client/CredentialState.test.ts +206 -62
- package/src/tempo/session/client/CredentialState.ts +58 -73
- package/src/tempo/session/client/Session.test.ts +41 -1
- package/src/tempo/session/client/Session.ts +36 -10
- package/src/tempo/session/client/SessionManager.test.ts +154 -65
- package/src/tempo/session/client/SessionManager.ts +141 -235
- package/src/tempo/session/client/index.ts +8 -5
- package/src/tempo/session/precompile/Voucher.test.ts +45 -7
- package/src/tempo/session/precompile/Voucher.ts +27 -25
- package/src/tempo/session/server/CredentialVerification.test.ts +36 -0
- package/src/tempo/session/server/CredentialVerification.ts +18 -0
- package/src/tempo/session/server/Session.test.ts +4 -4
- package/src/tempo/session/server/Settlement.test.ts +88 -1
- package/src/tempo/session/server/Settlement.ts +2 -1
- package/src/tempo/session/server/Sse.ts +0 -2
- package/src/tempo/session/server/Ws.ts +0 -4
- 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 -85
- package/dist/mcp-sdk/client/McpClient.d.ts.map +0 -1
- package/dist/mcp-sdk/client/McpClient.js +0 -118
- 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/src/mcp-sdk/client/McpClient.ts +0 -228
- /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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.gen.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/html.gen.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"html.gen.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/html.gen.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,i9ooBAAi9ooB,CAAA"}
|
|
@@ -30,8 +30,8 @@ export type ChannelEntry = {
|
|
|
30
30
|
/** Whether the client considers the channel reusable for new vouchers. */
|
|
31
31
|
opened: boolean;
|
|
32
32
|
};
|
|
33
|
-
/** Resolves the voucher
|
|
34
|
-
export declare function resolveAuthorizedSigner(account: Account
|
|
33
|
+
/** Resolves the voucher authority address for a client account. */
|
|
34
|
+
export declare function resolveAuthorizedSigner(account: Account): Address;
|
|
35
35
|
/** Resolves the escrow precompile from local override, challenge hints, or canonical default. */
|
|
36
36
|
export declare function resolveEscrow(challenge: {
|
|
37
37
|
request: {
|
|
@@ -63,7 +63,6 @@ export declare function createClosePayload(client: Client, account: Account, des
|
|
|
63
63
|
* @see https://tips.sh/1034-1#channel-identity-and-packed-state
|
|
64
64
|
*/
|
|
65
65
|
export declare function createOpenPayload(client: Client, account: Account, parameters: {
|
|
66
|
-
authorizedSigner?: Address | undefined;
|
|
67
66
|
chainId: number;
|
|
68
67
|
deposit: bigint;
|
|
69
68
|
escrow?: Address | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelOps.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelOps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"ChannelOps.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @see https://tips.sh/1034-1
|
|
10
10
|
*/
|
|
11
11
|
import { Hex } from 'ox';
|
|
12
|
-
import { encodeFunctionData, isAddress
|
|
12
|
+
import { encodeFunctionData, isAddress } from 'viem';
|
|
13
13
|
import { prepareTransactionRequest, signTransaction } from 'viem/actions';
|
|
14
14
|
import { Transaction } from 'viem/tempo';
|
|
15
15
|
import * as Credential from '../../../Credential.js';
|
|
@@ -18,9 +18,6 @@ import { escrowAbi } from '../precompile/escrow.abi.js';
|
|
|
18
18
|
import { tip20ChannelEscrow } from '../precompile/Protocol.js';
|
|
19
19
|
import { uint96 } from '../precompile/Protocol.js';
|
|
20
20
|
import * as Voucher from '../precompile/Voucher.js';
|
|
21
|
-
function voucherAuthorizedSigner(address) {
|
|
22
|
-
return address.toLowerCase() === zeroAddress ? undefined : address;
|
|
23
|
-
}
|
|
24
21
|
function isObject(value) {
|
|
25
22
|
return typeof value === 'object' && value !== null;
|
|
26
23
|
}
|
|
@@ -30,9 +27,9 @@ function readOptionalAddress(value) {
|
|
|
30
27
|
function readAccessKeyAddress(account) {
|
|
31
28
|
return readOptionalAddress(account.accessKeyAddress);
|
|
32
29
|
}
|
|
33
|
-
/** Resolves the voucher
|
|
34
|
-
export function resolveAuthorizedSigner(account
|
|
35
|
-
return
|
|
30
|
+
/** Resolves the voucher authority address for a client account. */
|
|
31
|
+
export function resolveAuthorizedSigner(account) {
|
|
32
|
+
return readAccessKeyAddress(account) ?? account.address;
|
|
36
33
|
}
|
|
37
34
|
async function prepareTempoChannelTransaction(client, parameters) {
|
|
38
35
|
const { account, calls, feePayer, feeToken } = parameters;
|
|
@@ -82,7 +79,7 @@ export async function createVoucherPayload(client, account, descriptor, cumulati
|
|
|
82
79
|
escrow,
|
|
83
80
|
});
|
|
84
81
|
const amount = uint96(cumulativeAmount);
|
|
85
|
-
const signature = await Voucher.signVoucher(client, account, { channelId, cumulativeAmount: amount }, escrow, chainId
|
|
82
|
+
const signature = await Voucher.signVoucher(client, account, { channelId, cumulativeAmount: amount }, escrow, chainId);
|
|
86
83
|
return {
|
|
87
84
|
action: 'voucher',
|
|
88
85
|
channelId,
|
|
@@ -115,7 +112,7 @@ export async function createClosePayload(client, account, descriptor, cumulative
|
|
|
115
112
|
* @see https://tips.sh/1034-1#channel-identity-and-packed-state
|
|
116
113
|
*/
|
|
117
114
|
export async function createOpenPayload(client, account, parameters) {
|
|
118
|
-
const authorizedSigner = resolveAuthorizedSigner(account
|
|
115
|
+
const authorizedSigner = resolveAuthorizedSigner(account);
|
|
119
116
|
const escrow = parameters.escrow ?? tip20ChannelEscrow;
|
|
120
117
|
const operator = parameters.operator ?? '0x0000000000000000000000000000000000000000';
|
|
121
118
|
const salt = Hex.random(32);
|
|
@@ -152,7 +149,7 @@ export async function createOpenPayload(client, account, parameters) {
|
|
|
152
149
|
chainId: parameters.chainId,
|
|
153
150
|
escrow,
|
|
154
151
|
});
|
|
155
|
-
const signature = await Voucher.signVoucher(client, account, { channelId, cumulativeAmount: initialAmount }, escrow, parameters.chainId
|
|
152
|
+
const signature = await Voucher.signVoucher(client, account, { channelId, cumulativeAmount: initialAmount }, escrow, parameters.chainId);
|
|
156
153
|
return {
|
|
157
154
|
action: 'open',
|
|
158
155
|
type: 'transaction',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelOps.js","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelOps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"ChannelOps.js","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { MaybePromise } from '../../../internal/types.js';
|
|
3
|
+
import type { ChannelEntry } from './ChannelOps.js';
|
|
4
|
+
/** Store of reusable payer session channels keyed by payment scope. */
|
|
5
|
+
export type ChannelStore = {
|
|
6
|
+
/** Returns the channel cached for `key`, when present. */
|
|
7
|
+
get(key: string): MaybePromise<ChannelEntry | undefined>;
|
|
8
|
+
/** Inserts or replaces a channel entry. */
|
|
9
|
+
set(entry: ChannelEntry): MaybePromise<void>;
|
|
10
|
+
/** Removes the channel cached for `key`. */
|
|
11
|
+
delete(key: string): MaybePromise<void>;
|
|
12
|
+
};
|
|
13
|
+
/** Channel persistence and update notification for credential results. */
|
|
14
|
+
export type ChannelSink = {
|
|
15
|
+
store: ChannelStore;
|
|
16
|
+
notifyUpdate: (entry: ChannelEntry) => void;
|
|
17
|
+
};
|
|
18
|
+
/** Returns the scope key for a reusable payer session channel. */
|
|
19
|
+
export declare function channelKey(scope: {
|
|
20
|
+
payee: Address;
|
|
21
|
+
token: Address;
|
|
22
|
+
escrow: Address;
|
|
23
|
+
chainId: number;
|
|
24
|
+
}): string;
|
|
25
|
+
/** Returns the scope key for a stored channel entry. */
|
|
26
|
+
export declare function entryKey(entry: ChannelEntry): string;
|
|
27
|
+
/** Creates the default in-memory {@link ChannelStore}. */
|
|
28
|
+
export declare function createChannelStore(): ChannelStore;
|
|
29
|
+
/** JSON-safe projection of a {@link ChannelEntry}, with bigint amounts as decimal strings. */
|
|
30
|
+
export type StoredChannel = Omit<ChannelEntry, 'cumulativeAmount' | 'deposit'> & {
|
|
31
|
+
/** Cumulative voucher authorization in raw token units, as a decimal string. */
|
|
32
|
+
cumulativeAmount: string;
|
|
33
|
+
/** Channel deposit in raw token units, as a decimal string. */
|
|
34
|
+
deposit: string;
|
|
35
|
+
};
|
|
36
|
+
/** Converts a channel entry into its JSON-safe stored form. */
|
|
37
|
+
export declare function serializeEntry(entry: ChannelEntry): StoredChannel;
|
|
38
|
+
/** Restores a channel entry from its JSON-safe stored form. */
|
|
39
|
+
export declare function deserializeEntry(stored: StoredChannel): ChannelEntry;
|
|
40
|
+
/** Plain string key-value backend a {@link createJsonChannelStore} persists into. */
|
|
41
|
+
export type JsonChannelKv = {
|
|
42
|
+
/** Returns the value stored at `key`, when present. */
|
|
43
|
+
get(key: string): MaybePromise<string | undefined>;
|
|
44
|
+
/** Persists a `value` at `key`. */
|
|
45
|
+
set(key: string, value: string): MaybePromise<void>;
|
|
46
|
+
/** Removes the value stored at `key`. */
|
|
47
|
+
delete(key: string): MaybePromise<void>;
|
|
48
|
+
};
|
|
49
|
+
/** Wraps a string KV backend as a bigint-safe channel store. */
|
|
50
|
+
export declare function createJsonChannelStore(kv: JsonChannelKv): ChannelStore;
|
|
51
|
+
//# sourceMappingURL=ChannelStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG;IACzB,0DAA0D;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IACxD,2CAA2C;IAC3C,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5C,4CAA4C;IAC5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACxC,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,YAAY,CAAA;IACnB,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;CAC5C,CAAA;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,MAAM,CAGT;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAOpD;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,IAAI,YAAY,CAWjD;AAED,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAC,GAAG;IAC/E,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAA;IACxB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAMjE;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAMpE;AAKD,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAClD,mCAAmC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACnD,yCAAyC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACxC,CAAA;AAED,gEAAgE;AAChE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,YAAY,CActE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Returns the scope key for a reusable payer session channel. */
|
|
2
|
+
export function channelKey(scope) {
|
|
3
|
+
const { payee, token, escrow, chainId } = scope;
|
|
4
|
+
return `${payee.toLowerCase()}:${token.toLowerCase()}:${escrow.toLowerCase()}:${chainId}`;
|
|
5
|
+
}
|
|
6
|
+
/** Returns the scope key for a stored channel entry. */
|
|
7
|
+
export function entryKey(entry) {
|
|
8
|
+
return channelKey({
|
|
9
|
+
payee: entry.descriptor.payee,
|
|
10
|
+
token: entry.descriptor.token,
|
|
11
|
+
escrow: entry.escrow,
|
|
12
|
+
chainId: entry.chainId,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/** Creates the default in-memory {@link ChannelStore}. */
|
|
16
|
+
export function createChannelStore() {
|
|
17
|
+
const channels = new Map();
|
|
18
|
+
return {
|
|
19
|
+
get: (key) => channels.get(key),
|
|
20
|
+
set(entry) {
|
|
21
|
+
channels.set(entryKey(entry), entry);
|
|
22
|
+
},
|
|
23
|
+
delete(key) {
|
|
24
|
+
channels.delete(key);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Converts a channel entry into its JSON-safe stored form. */
|
|
29
|
+
export function serializeEntry(entry) {
|
|
30
|
+
return {
|
|
31
|
+
...entry,
|
|
32
|
+
cumulativeAmount: entry.cumulativeAmount.toString(),
|
|
33
|
+
deposit: entry.deposit.toString(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Restores a channel entry from its JSON-safe stored form. */
|
|
37
|
+
export function deserializeEntry(stored) {
|
|
38
|
+
return {
|
|
39
|
+
...stored,
|
|
40
|
+
cumulativeAmount: BigInt(stored.cumulativeAmount),
|
|
41
|
+
deposit: BigInt(stored.deposit),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Prefix for serialized channel entries persisted by {@link createJsonChannelStore}. */
|
|
45
|
+
const channelPrefix = 'chan:';
|
|
46
|
+
/** Wraps a string KV backend as a bigint-safe channel store. */
|
|
47
|
+
export function createJsonChannelStore(kv) {
|
|
48
|
+
return {
|
|
49
|
+
async get(key) {
|
|
50
|
+
const value = await kv.get(channelPrefix + key);
|
|
51
|
+
if (value === undefined)
|
|
52
|
+
return undefined;
|
|
53
|
+
return deserializeEntry(JSON.parse(value));
|
|
54
|
+
},
|
|
55
|
+
async set(entry) {
|
|
56
|
+
await kv.set(channelPrefix + entryKey(entry), JSON.stringify(serializeEntry(entry)));
|
|
57
|
+
},
|
|
58
|
+
async delete(key) {
|
|
59
|
+
await kv.delete(channelPrefix + key);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ChannelStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../../src/tempo/session/client/ChannelStore.ts"],"names":[],"mappings":"AAqBA,kEAAkE;AAClE,MAAM,UAAU,UAAU,CAAC,KAK1B;IACC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAC/C,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,CAAA;AAC3F,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,QAAQ,CAAC,KAAmB;IAC1C,OAAO,UAAU,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;QAC7B,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAA;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;IAChD,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/B,GAAG,CAAC,KAAK;YACP,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;QACtC,CAAC;QACD,MAAM,CAAC,GAAG;YACR,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;KACqB,CAAA;AAC1B,CAAC;AAUD,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QACnD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;KAClC,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO;QACL,GAAG,MAAM;QACT,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACjD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;KAChC,CAAA;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,aAAa,GAAG,OAAO,CAAA;AAY7B,gEAAgE;AAChE,MAAM,UAAU,sBAAsB,CAAC,EAAiB;IACtD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC,CAAA;YAC/C,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAA;YACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAkB,CAAC,CAAA;QAC7D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,KAAK;YACb,MAAM,EAAE,CAAC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACtF,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAA;QACtC,CAAC;KACqB,CAAA;AAC1B,CAAC"}
|
|
@@ -7,31 +7,15 @@ import * as Channel from '../precompile/Channel.js';
|
|
|
7
7
|
import type { SessionCredentialPayload } from '../precompile/Protocol.js';
|
|
8
8
|
import type { SessionSnapshot } from '../Snapshot.js';
|
|
9
9
|
import { type ChannelEntry } from './ChannelOps.js';
|
|
10
|
+
import { type ChannelSink } from './ChannelStore.js';
|
|
10
11
|
/** Credential payload variants that carry cumulative voucher authorization. */
|
|
11
12
|
export type CumulativeCredentialPayload = Extract<SessionCredentialPayload, {
|
|
12
13
|
cumulativeAmount: string;
|
|
13
14
|
}>;
|
|
14
|
-
/** In-memory client channel cache used by automatic precompile session credential planning. */
|
|
15
|
-
export type ChannelCache = {
|
|
16
|
-
/** Maps reusable channel keys to cached channel metadata. */
|
|
17
|
-
channels: Map<string, ChannelEntry>;
|
|
18
|
-
/** Maps channel IDs back to reusable channel keys for manual credential cache updates. */
|
|
19
|
-
channelIdToKey: Map<string, string>;
|
|
20
|
-
/** Emits cache updates to the public `onChannelUpdate` callback. */
|
|
21
|
-
notifyUpdate(entry: ChannelEntry): void;
|
|
22
|
-
};
|
|
23
|
-
/** Creates an empty client channel cache with an optional update callback. */
|
|
24
|
-
export declare function createChannelCache(onUpdate?: ((entry: ChannelEntry) => void) | undefined): ChannelCache;
|
|
25
|
-
/** Returns the cache key for a reusable payer session channel. */
|
|
26
|
-
export declare function channelKey(payee: Address, token: Address, escrow: Address): string;
|
|
27
|
-
/** Stores a channel entry and notifies observers. */
|
|
28
|
-
export declare function storeChannelEntry(cache: ChannelCache, key: string, entry: ChannelEntry): void;
|
|
29
15
|
/** Returns whether a credential payload carries cumulative voucher authorization. */
|
|
30
16
|
export declare function hasCredentialCumulativeAmount(payload: SessionCredentialPayload): payload is CumulativeCredentialPayload;
|
|
31
17
|
/** Reads cumulative authorization from a credential payload when the action carries one. */
|
|
32
18
|
export declare function readCredentialCumulativeAmount(payload: SessionCredentialPayload): bigint | undefined;
|
|
33
|
-
/** Applies a credential payload's cumulative amount to an existing cached channel. */
|
|
34
|
-
export declare function updateCachedCumulative(cache: ChannelCache, channelId: Hex, payload: SessionCredentialPayload): void;
|
|
35
19
|
/** Runtime schema for low-level TIP-1034 session credential context. */
|
|
36
20
|
export declare const sessionContextSchema: z.ZodMiniObject<{
|
|
37
21
|
account: z.ZodMiniOptional<z.ZodMiniCustom<`0x${string}` | Account.Account | undefined, `0x${string}` | Account.Account | undefined>>;
|
|
@@ -138,7 +122,7 @@ export type ReusableChannelExpectation = {
|
|
|
138
122
|
payee: Address;
|
|
139
123
|
/** Payer address controlled by the local account. */
|
|
140
124
|
payer: Address;
|
|
141
|
-
/** Voucher
|
|
125
|
+
/** Voucher authority resolved from the local account. */
|
|
142
126
|
authorizedSigner: Address;
|
|
143
127
|
/** Token expected by the current challenge. */
|
|
144
128
|
token: Address;
|
|
@@ -182,8 +166,8 @@ export type ChallengeContext = {
|
|
|
182
166
|
/** Inputs used to choose the next client-side session credential operation. */
|
|
183
167
|
export type PlanCredentialParameters = {
|
|
184
168
|
account: ViemAccount;
|
|
185
|
-
|
|
186
|
-
|
|
169
|
+
/** Channel previously stored for this challenge scope, fetched by the caller. */
|
|
170
|
+
entry: ChannelEntry | undefined;
|
|
187
171
|
context?: SessionContext | undefined;
|
|
188
172
|
decimals: number;
|
|
189
173
|
maxDeposit?: bigint | undefined;
|
|
@@ -215,7 +199,6 @@ export type CredentialPlan =
|
|
|
215
199
|
{
|
|
216
200
|
type: 'open';
|
|
217
201
|
account: ViemAccount;
|
|
218
|
-
authorizedSigner?: Address | undefined;
|
|
219
202
|
context?: SessionContext | undefined;
|
|
220
203
|
maxDeposit?: bigint | undefined;
|
|
221
204
|
resolved: ChallengeContext;
|
|
@@ -224,7 +207,6 @@ export type CredentialPlan =
|
|
|
224
207
|
| {
|
|
225
208
|
type: 'recover';
|
|
226
209
|
account: ViemAccount;
|
|
227
|
-
authorizedSigner?: Address | undefined;
|
|
228
210
|
context: DescriptorSessionContext;
|
|
229
211
|
decimals: number;
|
|
230
212
|
maxDeposit?: bigint | undefined;
|
|
@@ -242,7 +224,6 @@ export type CredentialPlan =
|
|
|
242
224
|
| {
|
|
243
225
|
type: 'manual';
|
|
244
226
|
account: ViemAccount;
|
|
245
|
-
authorizedSigner?: Address | undefined;
|
|
246
227
|
context: ManualSessionDescriptorContext;
|
|
247
228
|
decimals: number;
|
|
248
229
|
resolved: ChallengeContext;
|
|
@@ -255,8 +236,10 @@ export declare function resolveReusableChannel(parameters: ResolveReusableChanne
|
|
|
255
236
|
export declare function resolveRecoverContext(parameters: ResolveRecoverContextParameters): DescriptorSessionContext | undefined;
|
|
256
237
|
/** Resolves a voucher boundary that can satisfy the resumed request. */
|
|
257
238
|
export declare function resolveRecoveredCumulative(parameters: ResolveRecoveredCumulativeParameters): bigint;
|
|
239
|
+
/** Returns whether `account` can satisfy the descriptor's voucher authority. */
|
|
240
|
+
export declare function canSignDescriptor(account: ViemAccount, descriptor: Channel.ChannelDescriptor): boolean;
|
|
258
241
|
/** Chooses the next credential plan from local channel cache and optional caller context. */
|
|
259
242
|
export declare function planCredential(parameters: PlanCredentialParameters): CredentialPlan;
|
|
260
243
|
/** Executes a credential plan and returns the concrete session credential payload. */
|
|
261
|
-
export declare function executeCredentialPlan(plan: CredentialPlan,
|
|
244
|
+
export declare function executeCredentialPlan(plan: CredentialPlan, sink: ChannelSink): Promise<SessionCredentialPayload>;
|
|
262
245
|
//# sourceMappingURL=CredentialState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialState.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/CredentialState.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,GAAG,EACT,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAEvD,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"CredentialState.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/CredentialState.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,25 +4,8 @@ import * as z from '../../../zod.js';
|
|
|
4
4
|
import * as Chain from '../precompile/Chain.js';
|
|
5
5
|
import * as Channel from '../precompile/Channel.js';
|
|
6
6
|
import { createClosePayload, createOpenPayload, createTopUpPayload, createVoucherPayload, isSameAddress, resolveAuthorizedSigner, resolveEscrow, } from './ChannelOps.js';
|
|
7
|
+
import { channelKey, entryKey } from './ChannelStore.js';
|
|
7
8
|
import { assertWithinMaxDeposit, resolveOpeningDeposit } from './Runtime.js';
|
|
8
|
-
/** Creates an empty client channel cache with an optional update callback. */
|
|
9
|
-
export function createChannelCache(onUpdate) {
|
|
10
|
-
return {
|
|
11
|
-
channels: new Map(),
|
|
12
|
-
channelIdToKey: new Map(),
|
|
13
|
-
notifyUpdate: (entry) => onUpdate?.(entry),
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
/** Returns the cache key for a reusable payer session channel. */
|
|
17
|
-
export function channelKey(payee, token, escrow) {
|
|
18
|
-
return `${payee.toLowerCase()}:${token.toLowerCase()}:${escrow.toLowerCase()}`;
|
|
19
|
-
}
|
|
20
|
-
/** Stores a channel entry and notifies observers. */
|
|
21
|
-
export function storeChannelEntry(cache, key, entry) {
|
|
22
|
-
cache.channels.set(key, entry);
|
|
23
|
-
cache.channelIdToKey.set(entry.channelId, key);
|
|
24
|
-
cache.notifyUpdate(entry);
|
|
25
|
-
}
|
|
26
9
|
/** Returns whether a credential payload carries cumulative voucher authorization. */
|
|
27
10
|
export function hasCredentialCumulativeAmount(payload) {
|
|
28
11
|
return 'cumulativeAmount' in payload;
|
|
@@ -33,20 +16,33 @@ export function readCredentialCumulativeAmount(payload) {
|
|
|
33
16
|
return undefined;
|
|
34
17
|
return BigInt(payload.cumulativeAmount);
|
|
35
18
|
}
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Persists a channel entry through the sink and notifies observers. Closed
|
|
21
|
+
* channels are removed from the store but still reported to observers so callers
|
|
22
|
+
* can react to the close.
|
|
23
|
+
*/
|
|
24
|
+
async function storeChannelEntry(sink, entry) {
|
|
25
|
+
if (entry.opened)
|
|
26
|
+
await sink.store.set(entry);
|
|
27
|
+
else
|
|
28
|
+
await sink.store.delete(entryKey(entry));
|
|
29
|
+
sink.notifyUpdate(entry);
|
|
30
|
+
}
|
|
31
|
+
/** Applies a credential payload's cumulative amount to the stored channel at `key`. */
|
|
32
|
+
async function applyCumulative(sink, key, payload) {
|
|
39
33
|
const cumulativeAmount = readCredentialCumulativeAmount(payload);
|
|
40
|
-
if (
|
|
34
|
+
if (cumulativeAmount === undefined)
|
|
41
35
|
return;
|
|
42
|
-
const entry =
|
|
36
|
+
const entry = await sink.store.get(key);
|
|
43
37
|
if (!entry)
|
|
44
38
|
return;
|
|
39
|
+
if (entry.channelId.toLowerCase() !== payload.channelId.toLowerCase())
|
|
40
|
+
return;
|
|
45
41
|
entry.cumulativeAmount =
|
|
46
42
|
entry.cumulativeAmount > cumulativeAmount ? entry.cumulativeAmount : cumulativeAmount;
|
|
47
43
|
if (payload.action === 'close')
|
|
48
44
|
entry.opened = false;
|
|
49
|
-
|
|
45
|
+
await storeChannelEntry(sink, entry);
|
|
50
46
|
}
|
|
51
47
|
const hexSchema = z.custom((value) => typeof value === 'string' && /^0x[0-9a-fA-F]*$/.test(value));
|
|
52
48
|
const hashSchema = z.custom((value) => typeof value === 'string' && /^0x[0-9a-fA-F]{64}$/.test(value));
|
|
@@ -142,7 +138,7 @@ export async function resolveChallengeContext(parameters) {
|
|
|
142
138
|
client,
|
|
143
139
|
escrow,
|
|
144
140
|
feePayer: methodDetails.feePayer,
|
|
145
|
-
key: channelKey(payee, token, escrow),
|
|
141
|
+
key: channelKey({ payee, token, escrow, chainId }),
|
|
146
142
|
operator: methodDetails.operator,
|
|
147
143
|
payee,
|
|
148
144
|
snapshot: methodDetails.sessionSnapshot,
|
|
@@ -210,55 +206,62 @@ export function resolveRecoveredCumulative(parameters) {
|
|
|
210
206
|
return contextCumulative + requestAmount;
|
|
211
207
|
return settled + requestAmount;
|
|
212
208
|
}
|
|
209
|
+
/** Returns whether `account` can satisfy the descriptor's voucher authority. */
|
|
210
|
+
export function canSignDescriptor(account, descriptor) {
|
|
211
|
+
// Only the payer can deposit into and voucher against its own channel.
|
|
212
|
+
if (!isSameAddress(account.address, descriptor.payer))
|
|
213
|
+
return false;
|
|
214
|
+
const authority = descriptor.authorizedSigner;
|
|
215
|
+
if (BigInt(authority) === 0n || isSameAddress(authority, descriptor.payer))
|
|
216
|
+
return true;
|
|
217
|
+
return isSameAddress(resolveAuthorizedSigner(account), authority);
|
|
218
|
+
}
|
|
213
219
|
/** Chooses the next credential plan from local channel cache and optional caller context. */
|
|
214
220
|
export function planCredential(parameters) {
|
|
215
|
-
const { account,
|
|
221
|
+
const { account, entry, context, decimals, maxDeposit, resolved } = parameters;
|
|
216
222
|
if (hasSessionAction(context)) {
|
|
217
223
|
if (!hasManualSessionDescriptor(context))
|
|
218
224
|
throw new Error('descriptor required for TIP-1034 session action');
|
|
219
225
|
return {
|
|
220
226
|
type: 'manual',
|
|
221
227
|
account,
|
|
222
|
-
authorizedSigner,
|
|
223
228
|
context,
|
|
224
229
|
decimals,
|
|
225
230
|
resolved,
|
|
226
231
|
};
|
|
227
232
|
}
|
|
228
|
-
const entry = cache.channels.get(resolved.key);
|
|
229
233
|
if (!entry && context?.channelId && !context.descriptor)
|
|
230
234
|
throw new Error('descriptor required to reuse TIP-1034 channel');
|
|
231
235
|
const recoverContext = resolveRecoverContext({ context, snapshot: resolved.snapshot });
|
|
232
|
-
if (!entry && recoverContext) {
|
|
236
|
+
if (!entry && recoverContext && canSignDescriptor(account, recoverContext.descriptor)) {
|
|
233
237
|
return {
|
|
234
238
|
type: 'recover',
|
|
235
239
|
account,
|
|
236
|
-
authorizedSigner,
|
|
237
240
|
context: recoverContext,
|
|
238
241
|
decimals,
|
|
239
242
|
maxDeposit,
|
|
240
243
|
resolved,
|
|
241
244
|
};
|
|
242
245
|
}
|
|
243
|
-
if (entry?.opened)
|
|
246
|
+
if (entry?.opened && canSignDescriptor(account, entry.descriptor))
|
|
244
247
|
return { type: 'voucher', account, entry, maxDeposit, resolved };
|
|
245
|
-
return { type: 'open', account,
|
|
248
|
+
return { type: 'open', account, context, maxDeposit, resolved };
|
|
246
249
|
}
|
|
247
250
|
/** Executes a credential plan and returns the concrete session credential payload. */
|
|
248
|
-
export async function executeCredentialPlan(plan,
|
|
251
|
+
export async function executeCredentialPlan(plan, sink) {
|
|
249
252
|
switch (plan.type) {
|
|
250
253
|
case 'open':
|
|
251
|
-
return open(plan,
|
|
254
|
+
return open(plan, sink);
|
|
252
255
|
case 'recover':
|
|
253
|
-
return recover(plan,
|
|
256
|
+
return recover(plan, sink);
|
|
254
257
|
case 'voucher':
|
|
255
|
-
return voucher(plan,
|
|
258
|
+
return voucher(plan, sink);
|
|
256
259
|
case 'manual':
|
|
257
|
-
return manual(plan,
|
|
260
|
+
return manual(plan, sink);
|
|
258
261
|
}
|
|
259
262
|
}
|
|
260
|
-
async function open(plan,
|
|
261
|
-
const { account,
|
|
263
|
+
async function open(plan, sink) {
|
|
264
|
+
const { account, resolved } = plan;
|
|
262
265
|
const deposit = resolveOpeningDeposit({
|
|
263
266
|
contextDepositRaw: plan.context?.depositRaw,
|
|
264
267
|
maxDeposit: plan.maxDeposit,
|
|
@@ -266,7 +269,6 @@ async function open(plan, cache) {
|
|
|
266
269
|
suggestedDepositRaw: resolved.suggestedDepositRaw,
|
|
267
270
|
});
|
|
268
271
|
const payload = await createOpenPayload(resolved.client, account, {
|
|
269
|
-
authorizedSigner,
|
|
270
272
|
chainId: resolved.chainId,
|
|
271
273
|
deposit,
|
|
272
274
|
escrow: resolved.escrow,
|
|
@@ -276,7 +278,7 @@ async function open(plan, cache) {
|
|
|
276
278
|
payee: resolved.payee,
|
|
277
279
|
token: resolved.token,
|
|
278
280
|
});
|
|
279
|
-
storeChannelEntry(
|
|
281
|
+
await storeChannelEntry(sink, {
|
|
280
282
|
channelId: payload.channelId,
|
|
281
283
|
cumulativeAmount: resolved.amount,
|
|
282
284
|
deposit,
|
|
@@ -287,7 +289,7 @@ async function open(plan, cache) {
|
|
|
287
289
|
});
|
|
288
290
|
return payload;
|
|
289
291
|
}
|
|
290
|
-
async function recover(plan,
|
|
292
|
+
async function recover(plan, sink) {
|
|
291
293
|
const { account, context, decimals, maxDeposit, resolved } = plan;
|
|
292
294
|
const { descriptor } = context;
|
|
293
295
|
const reusable = await resolveReusableChannel({
|
|
@@ -299,7 +301,7 @@ async function recover(plan, cache) {
|
|
|
299
301
|
escrow: resolved.escrow,
|
|
300
302
|
payee: resolved.payee,
|
|
301
303
|
payer: account.address,
|
|
302
|
-
authorizedSigner: resolveAuthorizedSigner(account
|
|
304
|
+
authorizedSigner: resolveAuthorizedSigner(account),
|
|
303
305
|
token: resolved.token,
|
|
304
306
|
},
|
|
305
307
|
});
|
|
@@ -314,7 +316,7 @@ async function recover(plan, cache) {
|
|
|
314
316
|
throw new Error('recovered voucher amount exceeds on-chain channel deposit');
|
|
315
317
|
assertWithinMaxDeposit(cumulativeAmount, maxDeposit);
|
|
316
318
|
const payload = await createVoucherPayload(resolved.client, account, descriptor, cumulativeAmount, resolved.chainId, resolved.escrow);
|
|
317
|
-
storeChannelEntry(
|
|
319
|
+
await storeChannelEntry(sink, {
|
|
318
320
|
channelId: reusable.channelId,
|
|
319
321
|
cumulativeAmount,
|
|
320
322
|
deposit: reusable.state.deposit,
|
|
@@ -325,16 +327,16 @@ async function recover(plan, cache) {
|
|
|
325
327
|
});
|
|
326
328
|
return payload;
|
|
327
329
|
}
|
|
328
|
-
async function voucher(plan,
|
|
330
|
+
async function voucher(plan, sink) {
|
|
329
331
|
const { account, entry, resolved } = plan;
|
|
330
332
|
const cumulativeAmount = entry.cumulativeAmount + resolved.amount;
|
|
331
333
|
assertWithinMaxDeposit(cumulativeAmount, plan.maxDeposit);
|
|
332
334
|
const payload = await createVoucherPayload(resolved.client, account, entry.descriptor, cumulativeAmount, resolved.chainId, resolved.escrow);
|
|
333
335
|
entry.cumulativeAmount = cumulativeAmount;
|
|
334
|
-
|
|
336
|
+
await storeChannelEntry(sink, entry);
|
|
335
337
|
return payload;
|
|
336
338
|
}
|
|
337
|
-
async function manual(plan,
|
|
339
|
+
async function manual(plan, sink) {
|
|
338
340
|
const { account, context, decimals, resolved } = plan;
|
|
339
341
|
const { descriptor } = context;
|
|
340
342
|
const channelId = Channel.computeId({
|
|
@@ -348,7 +350,7 @@ async function manual(plan, cache) {
|
|
|
348
350
|
expectedChannelId: channelId,
|
|
349
351
|
payee: resolved.payee,
|
|
350
352
|
payer: account.address,
|
|
351
|
-
authorizedSigner: resolveAuthorizedSigner(account
|
|
353
|
+
authorizedSigner: resolveAuthorizedSigner(account),
|
|
352
354
|
token: resolved.token,
|
|
353
355
|
});
|
|
354
356
|
const payload = await executeManualCredential({
|
|
@@ -359,7 +361,7 @@ async function manual(plan, cache) {
|
|
|
359
361
|
descriptor,
|
|
360
362
|
resolved,
|
|
361
363
|
});
|
|
362
|
-
|
|
364
|
+
await applyCumulative(sink, resolved.key, payload);
|
|
363
365
|
return payload;
|
|
364
366
|
}
|
|
365
367
|
async function executeManualCredential(parameters) {
|