@ftptech/canton-agent-wallet 0.3.2 → 0.4.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/README.md +39 -15
- package/dist/cli-args.d.ts +10 -0
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +26 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +51 -5
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/merge.d.ts +93 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +198 -0
- package/dist/merge.js.map +1 -0
- package/dist/relay-client.d.ts +45 -0
- package/dist/relay-client.d.ts.map +1 -1
- package/dist/relay-client.js +48 -1
- package/dist/relay-client.js.map +1 -1
- package/dist/relay-signer.d.ts +1 -1
- package/dist/tx.d.ts +15 -5
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +2 -3
- package/dist/tx.js.map +1 -1
- package/dist/verify-prepared.d.ts +4 -5
- package/dist/verify-prepared.d.ts.map +1 -1
- package/dist/verify-prepared.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A self-custody Canton wallet + x402 autopay for AI agents. The agent holds its
|
|
4
4
|
own Ed25519 key and pays for x402-gated resources on the Canton Network on its
|
|
5
|
-
own
|
|
5
|
+
own. The hard parts of Canton (a party must be hosted on a validator, and its
|
|
6
6
|
API is authed) are hidden behind a facilitator **relay** the agent talks to over
|
|
7
7
|
plain HTTP. The relay can *prepare* and *submit* on the agent's behalf but never
|
|
8
8
|
*signs*, so it has no custody.
|
|
@@ -26,6 +26,7 @@ canton-agent-wallet create --relay-url <url> # generate + onboard a self-
|
|
|
26
26
|
canton-agent-wallet address # print the party id (fund this)
|
|
27
27
|
canton-agent-wallet balance # print CC balance
|
|
28
28
|
canton-agent-wallet claim # accept incoming transfers (e.g. the initial funding)
|
|
29
|
+
canton-agent-wallet merge [--target <n>] [--batch <n>] [--max-rounds <n>] [--dry-run] # consolidate dust amulets so a busy wallet can be enumerated + spent again
|
|
29
30
|
canton-agent-wallet merchant-onboard --facilitator <party> --synchronizer <id> # EXTERNAL-PARTY merchant: sign this wallet's once-total MerchantConsent (allocation-direct)
|
|
30
31
|
canton-agent-wallet merchant-onboard-hosted --party <merchantParty> --facilitator <party> --participant-url <url> --synchronizer <id> --user-id <id> # HOSTED-PARTY merchant: create its once-total MerchantConsent via its own node's Ledger API
|
|
31
32
|
canton-agent-wallet pay --relay-url <url> <url> # fetch a URL, auto-paying any x402 402 challenge
|
|
@@ -34,7 +35,7 @@ canton-agent-wallet reclaim --allocation-cid <cid> [--receiver <merchantParty>]
|
|
|
34
35
|
canton-agent-wallet export # print the private key (backup; guard it)
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
`create` and `pay` **require** a relay (facilitator) URL
|
|
38
|
+
`create` and `pay` **require** a relay (facilitator) URL: pass `--relay-url
|
|
38
39
|
<url>` or set `CANTON_AGENT_RELAY_URL`. There is no default: a stale built-in
|
|
39
40
|
default would silently send payments to a dead host, so the CLI fails fast when
|
|
40
41
|
none is given. `address`, `balance`, `claim`, `withdraw` and `export` reuse the
|
|
@@ -47,25 +48,48 @@ To be paid via the allocation-direct (Design B) path, a merchant signs a
|
|
|
47
48
|
once-total `MerchantConsent` naming the facilitator. There are two onboarding
|
|
48
49
|
commands depending on where the merchant party lives:
|
|
49
50
|
|
|
50
|
-
- **`merchant-onboard
|
|
51
|
+
- **`merchant-onboard`**: the merchant is an **external party** held in *this*
|
|
51
52
|
agent-wallet (an Ed25519 self-custody key). It onboards through the relay's
|
|
52
53
|
interactive prepare → sign-the-hash-locally → execute flow, gated by
|
|
53
54
|
verify-before-sign. Needs a wallet (and a relay).
|
|
54
|
-
- **`merchant-onboard-hosted
|
|
55
|
+
- **`merchant-onboard-hosted`**: the merchant is a **hosted party** that lives
|
|
55
56
|
on its **own Canton node** (a validator it operates), with no Ed25519 key. It
|
|
56
57
|
authorizes the consent directly on its own participant's JSON Ledger API
|
|
57
58
|
(`actAs: [merchant]`); there is **no wallet, no relay, and no Ed25519 key**, so
|
|
58
59
|
this command loads none. The create shape is fixed
|
|
59
|
-
(`MerchantConsent {merchant, facilitator}`) and moves no funds
|
|
60
|
+
(`MerchantConsent {merchant, facilitator}`) and moves no funds; there is no
|
|
60
61
|
untrusted relay in the loop, so no verify-before-sign is required. Node
|
|
61
62
|
connection comes from `--participant-url` / `--synchronizer` / `--user-id`
|
|
62
63
|
(falling back to `CANTON_PARTICIPANT_URL` / `CANTON_SYNCHRONIZER_ID` /
|
|
63
64
|
`CANTON_USER_ID`); flags override env. **OIDC credentials are read from env
|
|
64
65
|
ONLY** (never accepted as flags): `OIDC_TOKEN_ENDPOINT`, `OIDC_CLIENT_ID`,
|
|
65
66
|
`OIDC_CLIENT_SECRET`, `LEDGER_API_AUDIENCE`, and optional `OIDC_SCOPE`. The
|
|
66
|
-
command is idempotent
|
|
67
|
+
command is idempotent: if the consent already exists it prints "already
|
|
67
68
|
onboarded" and submits nothing.
|
|
68
69
|
|
|
70
|
+
### Consolidating dust (`merge`)
|
|
71
|
+
|
|
72
|
+
Every incoming CC transfer the wallet accepts creates a **fresh Amulet contract**,
|
|
73
|
+
so a busy wallet steadily accumulates thousands of tiny "dust" amulets. Past the
|
|
74
|
+
participant's JSON-API result cap the wallet can no longer be enumerated on-ledger
|
|
75
|
+
at all — `balance` then reports it holds too many contracts, and `pay` (which
|
|
76
|
+
selects inputs from that same enumeration) stops working. `merge` fixes both by
|
|
77
|
+
self-transferring the amulets back to the wallet's own party in batches; each
|
|
78
|
+
batch collapses ~`--batch` amulets into ~2, restoring a spendable wallet:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
canton-agent-wallet merge --dry-run # show the plan (counts + batches), change nothing
|
|
82
|
+
canton-agent-wallet merge # consolidate (defaults: --batch 90, --target 2, --max-rounds 30)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
For a wallet already too large to enumerate on-ledger, `merge` reads the holdings
|
|
86
|
+
from the public SV Scan ACS snapshot (paginated, no node cap) and does one sweep
|
|
87
|
+
over them, then finishes the tail against the live balance. It is safe to re-run:
|
|
88
|
+
each amulet is consumed at most once, and every merge transfer is a **self-transfer
|
|
89
|
+
pinned to your own party and gated by verify-before-sign** — the relay can never
|
|
90
|
+
turn a merge into an outbound payment. If a wallet is so large that one run cannot
|
|
91
|
+
finish, `merge` says so; just run it again.
|
|
92
|
+
|
|
69
93
|
On Canton, incoming CC arrives as a **pending transfer** the agent must accept,
|
|
70
94
|
so the first-run flow is:
|
|
71
95
|
`create --relay-url https://facilitator.ftptech.xyz` → tell your human to send CC to
|
|
@@ -94,29 +118,29 @@ then retries the request with the on-ledger proof.
|
|
|
94
118
|
|
|
95
119
|
## Config (env)
|
|
96
120
|
|
|
97
|
-
- `CANTON_AGENT_RELAY_URL
|
|
121
|
+
- `CANTON_AGENT_RELAY_URL`: facilitator relay base URL. **Required** for the
|
|
98
122
|
commands that talk to a relay (`create`, `pay`); there is intentionally no
|
|
99
123
|
built-in default (a stale default would silently send payments to a dead
|
|
100
124
|
host). Supply it here or via `--relay-url <url>`. The current FTP facilitator
|
|
101
125
|
is `https://facilitator.ftptech.xyz`.
|
|
102
|
-
- `CANTON_AGENT_NETWORK
|
|
126
|
+
- `CANTON_AGENT_NETWORK`: `canton:testnet` (default) or `canton:mainnet`; also
|
|
103
127
|
settable via `--network <net>`.
|
|
104
|
-
- `CANTON_AGENT_API_KEY
|
|
128
|
+
- `CANTON_AGENT_API_KEY`: only if the relay requires one (sent as the
|
|
105
129
|
`X-Agent-Key` header).
|
|
106
|
-
- `HTTPS_PROXY` / `HTTP_PROXY` (or `ALL_PROXY`)
|
|
130
|
+
- `HTTPS_PROXY` / `HTTP_PROXY` (or `ALL_PROXY`): if set, the CLI routes all
|
|
107
131
|
relay calls through that proxy. Node's `fetch` does NOT honor these on its
|
|
108
132
|
own, so behind a corporate/regional proxy you must set one of them or every
|
|
109
133
|
call fails with `fetch failed`. Credentials are supported
|
|
110
134
|
(`http://user:pass@host:port`) and never logged.
|
|
111
|
-
- `CANTON_AGENT_HOME
|
|
135
|
+
- `CANTON_AGENT_HOME`: override the wallet directory (default `~/.canton-agent`;
|
|
112
136
|
used by tests and power users).
|
|
113
137
|
|
|
114
138
|
## Your wallet is YOURS (self-custody)
|
|
115
139
|
|
|
116
140
|
The wallet lives at `~/.canton-agent/wallet.json` (mode `0600`). **This file IS
|
|
117
|
-
your money
|
|
141
|
+
your money, so back it up.** Losing it loses the funds. The agent reuses the same
|
|
118
142
|
wallet forever and never silently creates a second one. The validator only
|
|
119
|
-
*hosts* your party; it can never spend your CC
|
|
143
|
+
*hosts* your party; it can never spend your CC. Only your signature authorizes a
|
|
120
144
|
transfer. `canton-agent-wallet export` prints the private key for backup or
|
|
121
145
|
import.
|
|
122
146
|
|
|
@@ -141,7 +165,7 @@ The relay is treated as untrusted. Before signing any transfer that moves funds,
|
|
|
141
165
|
the agent structurally decodes the relay-prepared transaction and checks the
|
|
142
166
|
sender / receiver / amount / instrument against its own intent (rejecting
|
|
143
167
|
ambiguous encodings that a spec-conformant parser would read differently). It
|
|
144
|
-
then **binds** the hash it signs to those validated bytes
|
|
168
|
+
then **binds** the hash it signs to those validated bytes, because the Canton
|
|
145
169
|
Ledger API is explicit that "clients MUST recompute the hash from the raw
|
|
146
170
|
transaction if the preparing participant is not trusted". A compromised relay
|
|
147
171
|
that returns honest bytes paired with the hash of a different (tampered)
|
|
@@ -159,7 +183,7 @@ Binding requires one of:
|
|
|
159
183
|
|
|
160
184
|
With neither configured, a value-moving transfer **refuses to sign** (fail-closed)
|
|
161
185
|
rather than blind-sign a relay-chosen hash. Accepting incoming transfers
|
|
162
|
-
(`claim`) needs no binding
|
|
186
|
+
(`claim`) needs no binding, since no funds leave.
|
|
163
187
|
|
|
164
188
|
## License
|
|
165
189
|
|
package/dist/cli-args.d.ts
CHANGED
|
@@ -10,6 +10,16 @@ export declare const DEFAULT_NETWORK = "canton:testnet";
|
|
|
10
10
|
export declare const VALUE_FLAGS: ReadonlySet<string>;
|
|
11
11
|
/** First value following `--<name>` in `args`, or undefined. */
|
|
12
12
|
export declare function flag(args: readonly string[], name: string): string | undefined;
|
|
13
|
+
/** True when the boolean switch `--<name>` is present anywhere in `args` (it takes
|
|
14
|
+
* no value). Used by `merge --dry-run`. */
|
|
15
|
+
export declare function boolFlag(args: readonly string[], name: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Parse a positive-integer `--<name> <n>` flag. Returns undefined when the flag
|
|
18
|
+
* is absent; THROWS on a present-but-invalid value (non-integer, ≤ 0) so a
|
|
19
|
+
* fat-fingered `--batch abc` fails fast with a clear message instead of silently
|
|
20
|
+
* falling back to a default. Pure (no process.exit) so it is unit-testable.
|
|
21
|
+
*/
|
|
22
|
+
export declare function intFlag(args: readonly string[], name: string): number | undefined;
|
|
13
23
|
/**
|
|
14
24
|
* Positional args with any known `--flag <value>` pairs removed, so a command
|
|
15
25
|
* can read its positional (e.g. `pay <url>`) regardless of where the flags
|
package/dist/cli-args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAqB1C,CAAC;AAEH,gEAAgE;AAChE,wBAAgB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED;4CAC4C;AAC5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAQpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAW7D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAEpB;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,QAEkD,CAAC"}
|
package/dist/cli-args.js
CHANGED
|
@@ -17,6 +17,11 @@ export const VALUE_FLAGS = new Set([
|
|
|
17
17
|
"--key-file",
|
|
18
18
|
"--facilitator",
|
|
19
19
|
"--synchronizer",
|
|
20
|
+
// merge: consolidate dust amulets. `--dry-run` is a BOOLEAN flag (no value), so
|
|
21
|
+
// it is intentionally NOT listed here — only the value-taking merge flags are.
|
|
22
|
+
"--target",
|
|
23
|
+
"--batch",
|
|
24
|
+
"--max-rounds",
|
|
20
25
|
// merchant-onboard-hosted (hosted-party merchant onboards via its OWN node's
|
|
21
26
|
// Ledger API — no wallet, no relay): node connection flags. Secrets are NEVER
|
|
22
27
|
// accepted as flags (OIDC config comes from env only), so none appear here.
|
|
@@ -29,6 +34,27 @@ export function flag(args, name) {
|
|
|
29
34
|
const i = args.indexOf(name);
|
|
30
35
|
return i >= 0 && i + 1 < args.length ? args[i + 1] : undefined;
|
|
31
36
|
}
|
|
37
|
+
/** True when the boolean switch `--<name>` is present anywhere in `args` (it takes
|
|
38
|
+
* no value). Used by `merge --dry-run`. */
|
|
39
|
+
export function boolFlag(args, name) {
|
|
40
|
+
return args.includes(name);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parse a positive-integer `--<name> <n>` flag. Returns undefined when the flag
|
|
44
|
+
* is absent; THROWS on a present-but-invalid value (non-integer, ≤ 0) so a
|
|
45
|
+
* fat-fingered `--batch abc` fails fast with a clear message instead of silently
|
|
46
|
+
* falling back to a default. Pure (no process.exit) so it is unit-testable.
|
|
47
|
+
*/
|
|
48
|
+
export function intFlag(args, name) {
|
|
49
|
+
const raw = flag(args, name);
|
|
50
|
+
if (raw === undefined)
|
|
51
|
+
return undefined;
|
|
52
|
+
const n = Number(raw);
|
|
53
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
54
|
+
throw new Error(`${name} must be a positive integer (got ${JSON.stringify(raw)})`);
|
|
55
|
+
}
|
|
56
|
+
return n;
|
|
57
|
+
}
|
|
32
58
|
/**
|
|
33
59
|
* Positional args with any known `--flag <value>` pairs removed, so a command
|
|
34
60
|
* can read its positional (e.g. `pay <url>`) regardless of where the flags
|
package/dist/cli-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC;IACtD,aAAa;IACb,WAAW;IACX,MAAM;IACN,UAAU;IACV,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,6EAA6E;IAC7E,8EAA8E;IAC9E,4EAA4E;IAC5E,SAAS;IACT,mBAAmB;IACnB,WAAW;CACZ,CAAC,CAAC;AAEH,gEAAgE;AAChE,MAAM,UAAU,IAAI,CAAC,IAAuB,EAAE,IAAY;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;YACjC,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAuB,EACvB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,IAAI,SAAS,CAAC;AAC9E,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,oBAAoB,IAAI,eAAe,CAAC;AAChF,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,wEAAwE;IACxE,+EAA+E,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC;IACtD,aAAa;IACb,WAAW;IACX,MAAM;IACN,UAAU;IACV,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,gFAAgF;IAChF,+EAA+E;IAC/E,UAAU;IACV,SAAS;IACT,cAAc;IACd,6EAA6E;IAC7E,8EAA8E;IAC9E,4EAA4E;IAC5E,SAAS;IACT,mBAAmB;IACnB,WAAW;CACZ,CAAC,CAAC;AAEH,gEAAgE;AAChE,MAAM,UAAU,IAAI,CAAC,IAAuB,EAAE,IAAY;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,QAAQ,CAAC,IAAuB,EAAE,IAAY;IAC5D,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACrB,IAAuB,EACvB,IAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oCAAoC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;YACjC,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAuB,EACvB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,IAAI,SAAS,CAAC;AAC9E,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,oBAAoB,IAAI,eAAe,CAAC;AAChF,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,wEAAwE;IACxE,+EAA+E,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* address print the party id (fund this)
|
|
7
7
|
* balance print CC balance
|
|
8
8
|
* claim accept incoming transfers (e.g. the initial funding)
|
|
9
|
+
* merge [--target <n>] [--batch <n>] [--max-rounds <n>] [--dry-run]
|
|
10
|
+
* consolidate dust amulets (self-transfer in batches)
|
|
11
|
+
* so a wallet with thousands of holdings can be
|
|
12
|
+
* enumerated + spent again. --dry-run prints the plan.
|
|
9
13
|
* reclaim --allocation-cid <c> [--receiver <merchantParty>]
|
|
10
14
|
* reclaim a locked allocation back to this wallet
|
|
11
15
|
* (Allocation_Withdraw; funds return to the sender).
|
|
@@ -50,12 +54,13 @@ import { ensureWallet } from "./onboard.js";
|
|
|
50
54
|
import { loadWallet } from "./store.js";
|
|
51
55
|
import { agentKeyFromPrivatePem } from "./keys.js";
|
|
52
56
|
import { makePayingFetch } from "./pay.js";
|
|
53
|
-
import { RelayClient } from "./relay-client.js";
|
|
57
|
+
import { RelayClient, isHoldingsExceedNodeLimitError } from "./relay-client.js";
|
|
54
58
|
import { claimAll, reclaimAllocation, createMerchantConsent } from "./tx.js";
|
|
59
|
+
import { mergeHoldings } from "./merge.js";
|
|
55
60
|
import { createMerchantConsentHosted } from "./hosted-onboard.js";
|
|
56
61
|
import { withdraw } from "./withdraw.js";
|
|
57
62
|
import { installProxyFromEnv } from "./proxy.js";
|
|
58
|
-
import { flag, positionals, resolveNetwork, resolveRelayUrl, MISSING_RELAY_HELP, } from "./cli-args.js";
|
|
63
|
+
import { flag, boolFlag, intFlag, positionals, resolveNetwork, resolveRelayUrl, MISSING_RELAY_HELP, } from "./cli-args.js";
|
|
59
64
|
const API_KEY = process.env.CANTON_AGENT_API_KEY;
|
|
60
65
|
function fail(msg) {
|
|
61
66
|
console.error(msg);
|
|
@@ -108,8 +113,49 @@ async function main() {
|
|
|
108
113
|
const w = loadWallet();
|
|
109
114
|
if (!w)
|
|
110
115
|
return fail("no wallet yet — run: canton-agent-wallet create");
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
try {
|
|
117
|
+
const b = await new RelayClient({ relayUrl: w.relayUrl, apiKey: API_KEY }).balance(w.party);
|
|
118
|
+
console.log(`${b.cc} CC (${b.amulet} holding${b.amulet === 1 ? "" : "s"})`);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
// A whale wallet holds more amulet contracts than the participant's
|
|
122
|
+
// JSON-API element cap can enumerate — balance 413s. Print an actionable
|
|
123
|
+
// next step (consolidate) instead of a raw relay-error stack.
|
|
124
|
+
if (isHoldingsExceedNodeLimitError(err)) {
|
|
125
|
+
return fail("balance unavailable: this wallet holds too many amulet contracts to " +
|
|
126
|
+
"enumerate on-ledger (the participant's element cap). Consolidate them " +
|
|
127
|
+
"first with: canton-agent-wallet merge");
|
|
128
|
+
}
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case "merge": {
|
|
134
|
+
// Consolidate dust amulets by self-transferring them in batches (receiver ==
|
|
135
|
+
// this wallet, enforced by verify-before-sign). Restores `balance`/`pay` for
|
|
136
|
+
// a wallet whose amulet count outgrew the participant's ACS element cap.
|
|
137
|
+
const w = loadWallet();
|
|
138
|
+
if (!w)
|
|
139
|
+
return fail("no wallet yet — run: canton-agent-wallet create");
|
|
140
|
+
const target = intFlag(args, "--target");
|
|
141
|
+
const batch = intFlag(args, "--batch");
|
|
142
|
+
const maxRounds = intFlag(args, "--max-rounds");
|
|
143
|
+
const dryRun = boolFlag(args, "--dry-run");
|
|
144
|
+
const relay = new RelayClient({ relayUrl: w.relayUrl, apiKey: API_KEY });
|
|
145
|
+
const res = await mergeHoldings(relay, w, {
|
|
146
|
+
...(target !== undefined ? { target } : {}),
|
|
147
|
+
...(batch !== undefined ? { batch } : {}),
|
|
148
|
+
...(maxRounds !== undefined ? { maxRounds } : {}),
|
|
149
|
+
dryRun,
|
|
150
|
+
onProgress: (line) => console.log(line),
|
|
151
|
+
});
|
|
152
|
+
if (!dryRun) {
|
|
153
|
+
console.log(`merge complete: ${res.rounds} batch transfer(s), ` +
|
|
154
|
+
`${res.merged.length} amulet(s) consumed` +
|
|
155
|
+
(res.finalHoldings === null
|
|
156
|
+
? " (still large — run `merge` again to continue)"
|
|
157
|
+
: ` → ${res.finalHoldings} holding(s) remain`));
|
|
158
|
+
}
|
|
113
159
|
break;
|
|
114
160
|
}
|
|
115
161
|
case "claim": {
|
|
@@ -284,7 +330,7 @@ async function main() {
|
|
|
284
330
|
break;
|
|
285
331
|
}
|
|
286
332
|
default:
|
|
287
|
-
console.error("canton-agent-wallet: create | address | balance | claim | reclaim --allocation-cid <cid> [--receiver <merchantParty>] | merchant-onboard --facilitator <party> --synchronizer <id> | merchant-onboard-hosted --party <merchantParty> --facilitator <party> --participant-url <url> --synchronizer <id> --user-id <id> | pay <url> | withdraw --to <party> | export | import\n" +
|
|
333
|
+
console.error("canton-agent-wallet: create | address | balance | claim | merge [--target <n>] [--batch <n>] [--max-rounds <n>] [--dry-run] | reclaim --allocation-cid <cid> [--receiver <merchantParty>] | merchant-onboard --facilitator <party> --synchronizer <id> | merchant-onboard-hosted --party <merchantParty> --facilitator <party> --participant-url <url> --synchronizer <id> --user-id <id> | pay <url> | withdraw --to <party> | export | import\n" +
|
|
288
334
|
" relay required for create/pay/import: --relay-url <url> or CANTON_AGENT_RELAY_URL\n" +
|
|
289
335
|
" merchant-onboard = EXTERNAL-PARTY merchant (this Ed25519 wallet, via the relay).\n" +
|
|
290
336
|
" merchant-onboard-hosted = HOSTED-PARTY merchant (party on its OWN Canton node, via that node's Ledger API; OIDC config from env: OIDC_TOKEN_ENDPOINT/OIDC_CLIENT_ID/OIDC_CLIENT_SECRET/LEDGER_API_AUDIENCE/[OIDC_SCOPE]).");
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,GACnC,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,GACnC,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,GAKhC,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,GAKhC,MAAM,sBAAsB,CAAC"}
|
package/dist/merge.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amulet merge / consolidate — collapse a wallet's dust Amulet UTXOs into a
|
|
3
|
+
* couple of holdings by self-transferring them in batches.
|
|
4
|
+
*
|
|
5
|
+
* WHY: every accepted incoming Canton transfer creates a fresh Amulet contract,
|
|
6
|
+
* so an active wallet accumulates thousands of dust amulets. The participant's
|
|
7
|
+
* JSON API caps /v2/state/active-contracts result size, so past that cap the
|
|
8
|
+
* wallet can no longer even be ENUMERATED through the ledger (balance → 413
|
|
9
|
+
* holdings_exceed_node_limit) and therefore can no longer PAY (the pay path
|
|
10
|
+
* selects inputHoldingCids from that same enumeration). Merging restores both.
|
|
11
|
+
*
|
|
12
|
+
* HOW: each batch executes ONE self-transfer (sender = receiver = the wallet's
|
|
13
|
+
* OWN party) of 1 atomic ("0.0000000001") consuming the whole batch as inputs.
|
|
14
|
+
* The TransferFactory returns everything else as ONE change amulet to the sender,
|
|
15
|
+
* so a batch of N dust amulets collapses to ~2 amulets. Using 1 atomic sidesteps
|
|
16
|
+
* ALL fee math (the change amulet absorbs the remainder).
|
|
17
|
+
*
|
|
18
|
+
* The transfer itself reuses the EXISTING outbound `transfer()` machinery — same
|
|
19
|
+
* relay resolve → build → verify-before-sign → local sign → relay execute — so
|
|
20
|
+
* there is no second signing path to audit. mergeHoldings only orchestrates
|
|
21
|
+
* batching + the whale-wallet enumeration fallback.
|
|
22
|
+
*
|
|
23
|
+
* SECURITY INVARIANT (non-negotiable): every merge transfer pins
|
|
24
|
+
* `receiver === wallet.party` BEFORE signing, and the verify-before-sign arm
|
|
25
|
+
* (`assertPreparedTransferMatches`, via `transfer()`'s `kind:"cip56"` spec, which
|
|
26
|
+
* pins `expect.receiver`) refuses to sign unless the prepared tx's receiver
|
|
27
|
+
* equals it. A compromised relay therefore cannot turn a "merge" into an outbound
|
|
28
|
+
* drain — the self-transfer receiver is caller intent, never the relay's value.
|
|
29
|
+
*/
|
|
30
|
+
import { transfer } from "./tx.js";
|
|
31
|
+
import { type RelayClient } from "./relay-client.js";
|
|
32
|
+
import type { AgentWallet } from "./store.js";
|
|
33
|
+
import type { HashBindingOptions } from "./verify-prepared.js";
|
|
34
|
+
export interface MergeOptions {
|
|
35
|
+
/** Stop once the LIVE holding count is at or below this (default 2 — the two
|
|
36
|
+
* amulets a single self-transfer already collapses a batch into). */
|
|
37
|
+
target?: number;
|
|
38
|
+
/** Input amulets consumed per self-transfer (default 90). Bounded well under
|
|
39
|
+
* the participant's per-tx input limit; each batch → ~2 amulets. */
|
|
40
|
+
batch?: number;
|
|
41
|
+
/** Max live-phase rounds after the whale pass (default 30). A hard stop so a
|
|
42
|
+
* pathological wallet can never loop unbounded. */
|
|
43
|
+
maxRounds?: number;
|
|
44
|
+
/** Enumerate + report the plan only; execute NO transfers. */
|
|
45
|
+
dryRun?: boolean;
|
|
46
|
+
/** Hash-binding policy for the self-transfers; defaults to the env-resolved
|
|
47
|
+
* binding (real V2 recompute unless CANTON_AGENT_TRUST_RELAY_HASH). */
|
|
48
|
+
hashBinding?: HashBindingOptions;
|
|
49
|
+
/** Independently-trusted Amulet DSO (instrument admin) to pin on each transfer,
|
|
50
|
+
* exactly like `withdraw`. Defaults to CANTON_AGENT_DSO_PARTY / the network
|
|
51
|
+
* constant; without it a self-transfer carrying the DSO in its consequences
|
|
52
|
+
* fails closed (see trusted-dso.ts). */
|
|
53
|
+
instrumentAdmin?: string;
|
|
54
|
+
/** @internal Injected transfer executor (defaults to the real `transfer`). Lets
|
|
55
|
+
* unit tests mock the outbound seam and assert receiver === wallet.party on
|
|
56
|
+
* every call without stubbing the whole relay/prepare/sign chain. */
|
|
57
|
+
transferFn?: typeof transfer;
|
|
58
|
+
/** @internal Progress sink (defaults to no-op). The CLI passes a logger. */
|
|
59
|
+
onProgress?: (line: string) => void;
|
|
60
|
+
}
|
|
61
|
+
export interface MergeResult {
|
|
62
|
+
/** Number of batch self-transfers that were EXECUTED (0 for a dry run). */
|
|
63
|
+
rounds: number;
|
|
64
|
+
/** Every input amulet cid consumed across all executed batches. */
|
|
65
|
+
merged: string[];
|
|
66
|
+
/** The updateId of each executed batch self-transfer. */
|
|
67
|
+
updateIds: string[];
|
|
68
|
+
/** The final LIVE holding count, or null when the wallet still 413s on balance
|
|
69
|
+
* (i.e. it is STILL a whale — extremely large; another `merge` run continues). */
|
|
70
|
+
finalHoldings: number | null;
|
|
71
|
+
/** True when enumeration used the Scan-snapshot whale path (balance 413'd). */
|
|
72
|
+
usedScan: boolean;
|
|
73
|
+
/** For a dry run: the planned batch count over the enumerated holdings. */
|
|
74
|
+
plannedBatches?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Consolidate the wallet's dust Amulet holdings.
|
|
78
|
+
*
|
|
79
|
+
* Phases:
|
|
80
|
+
* 1. ENUMERATE — `balance` if it works, else the Scan snapshot (whale).
|
|
81
|
+
* 2. WHALE PASS (only when enumeration used Scan) — ONE pass over the snapshot
|
|
82
|
+
* list in batches of `batch`; each batch is one self-transfer. The snapshot
|
|
83
|
+
* lags but is safe here: an idle wallet's amulets don't move and each cid is
|
|
84
|
+
* consumed at most once. A batch that fails on a stale/archived input cid is
|
|
85
|
+
* SKIPPED (logged) and the pass continues; any other failure aborts.
|
|
86
|
+
* 3. LIVE PHASE — loop reading the LIVE `balance`; stop when holdings ≤ target
|
|
87
|
+
* or `maxRounds` is hit; otherwise self-transfer the next `batch` of live
|
|
88
|
+
* cids. (Small wallets go straight here — step 2 is skipped.)
|
|
89
|
+
*
|
|
90
|
+
* Every self-transfer pins receiver = wallet.party (verify-before-sign enforced).
|
|
91
|
+
*/
|
|
92
|
+
export declare function mergeHoldings(relay: RelayClient, wallet: AgentWallet, opts?: MergeOptions): Promise<MergeResult>;
|
|
93
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ/D,MAAM,WAAW,YAAY;IAC3B;0EACsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;yEACqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;wDACoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;4EACwE;IACxE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;;6CAGyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;0EAEsE;IACtE,UAAU,CAAC,EAAE,OAAO,QAAQ,CAAC;IAC7B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;uFACmF;IACnF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA2BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,CAuItB"}
|