@dfm-fi/agent 0.2.1083 → 0.2.1085

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 CHANGED
@@ -17,7 +17,7 @@ full DFM v2 **launch → deposit → redeem** DTF flow against the **live API**
17
17
  (`https://n2-api.dfm.finance/api/v2`) programmatically — no web-UI clicking.
18
18
 
19
19
  This is a **test harness for the founder + partner**: point your own AI agent
20
- (Claude Desktop / Claude Code / any MCP client) at the live closed-mainnet API,
20
+ (Claude Desktop / Claude Code / any MCP client) at the live mainnet API,
21
21
  authenticate with your **own test-wallet keypair loaded locally**, and run the
22
22
  whole vault lifecycle — create a DTF, deposit USDC, redeem back to USDC — from
23
23
  the agent.
@@ -81,6 +81,10 @@ The WRITE flows then follow **prepare → sign locally → submit → (confirm/p
81
81
  `/zap-v2/status` until the backend orchestrator has cranked all swap legs →
82
82
  `/zap-…-v2/close/prepare` → sign → submit. The agent signs **only** the two
83
83
  user-side boundary transactions; the backend cranks the permissionless legs.
84
+ - **admin acceptance / policy**: acceptance signs one transaction and then calls
85
+ its verification endpoint; policy creates once or amends with ordered
86
+ propose → accept transactions. Both return success only after the API re-reads
87
+ chain state and reconciles its database shadow.
84
88
 
85
89
  ## Tools
86
90
 
@@ -96,12 +100,14 @@ The WRITE flows then follow **prepare → sign locally → submit → (confirm/p
96
100
  | `redeem` | **write (gated)** | `zap-out-v2 open/close` | Full zap-out lifecycle. RAW 6dp shares. Resumes an open escrow. |
97
101
  | `zap_v2_cancel` | **write (gated)** | `zap-v2/cancel/prepare` | Return a stalled escrow's holdings to the wallet, as-is. |
98
102
  | `zap_v2_update_envelope` | **write (gated)** | `zap-v2/update-envelope/prepare` | Loosen the pinned floors (auto-derived from the live escrow) to unstick a crank. |
99
- | `update_vault_assets` | **write (gated)** | `assets/prepare + confirm` | MANAGER: full-replace a vault's basket (sums to 10000, ≤10, no dupes; manual-mode + 24h timelock). Your own vault only. |
103
+ | `update_vault_assets` | **write (gated)** | `assets/prepare + confirm` | MANAGER: full-replace a vault's target basket (sums to 10000, ≤10, no dupes). A held asset must be drained before removal. Your own vault only. |
100
104
  | `transfer_admin` | **write (gated)** | `:address/transfer-admin` | ⚠️ MANAGER, HIGH-SENSITIVITY: initiate handing vault control to another key (the new admin must ACCEPT). Your own vault only. |
105
+ | `accept_admin_transfer` | **write (gated)** | `transfer-admin/accept/prepare + confirm` | ⚠️ Explicit-human-only. Local signer completes a pending handoff and reports success only after post-chain verification. Keyless can reconcile a supplied landed signature but cannot sign a new acceptance. |
106
+ | `update_vault_policy` | **write (gated)** | `policy/:vault/onchain/*` | ⚠️ Explicit-human-only. Create or propose → accept constitutional limits, with `maxAssets ≤ 10`; local and keyless paths reconcile from chain before completion. |
101
107
  | `init_rebalancer` | **write (gated)** | `POST /rebalance/:address/init/prepare` | MANAGER: enable rebalancing (create the vault's `RebalancerConfig`, creator pays rent). Bundled into `launch_vault` automatically — only needed for older/opt-out/oversized vaults. Your own vault only. |
102
- | `rebalance` | **write (gated)** | `POST /rebalance/:address/execute/prepare` | MANAGER: execute a rebalance swap (sell `amountIn` raw of `inputMint` `outputMint`, both basket assets) — one-signature approve→execute→revoke. On-chain guards (oracle-free): measured `min_out` floor + hardcoded velocity ceilings (50%/tx, 60s spacing, 48/day) + output-mint allowlist. Your own vault only. |
108
+ | `rebalance_to_targets` | **write (gated)** | `POST /rebalance/:address/to-targets/prepare` | MANAGER: derive and execute the swaps needed to converge holdings to the current target config. On-chain delegate guards include measured `min_out`, 50%/tx, ≥5s spacing, 48/day, and in-basket mints. Your own vault only. |
103
109
 
104
- > There is **no fee tool**: entry/exit fees are **factory-global** (0.75% entry / 0.75% exit, split 50/50 creator/platform), set by the protocol creators can't set or change any fee, and management/performance fees don't exist.
110
+ > There is **no fee tool**: entry/exit fees and their split are **factory-global**, set by the protocol and returned live by the read endpoints. Creators can't set or change them, and management/performance fees don't exist.
105
111
 
106
112
  ### Prompt-injection / safety model
107
113
 
@@ -110,8 +116,9 @@ The harness is **boxed in by design**, so a prompt-injected agent (tricked by ma
110
116
  - **Every write only touches a vault/wallet the signed-in test wallet OWNS or ADMINS** (the API enforces `vault.admin == caller`), and amounts/slippage are capped by the on-chain guards (≤10% slippage, per-leg `min_outs`, the drain-guard, ≤10 assets, factory-global fees no agent can change) plus the API-side $10 first-deposit floor.
111
117
  - **The keypair never enters the agent's context** (only the pubkey), so injection can't exfiltrate it; the write-gate (`DFM_AGENT_WRITE_ENABLED`) is a hard local kill-switch.
112
118
  - So the worst a hijacked agent can do is make *you* mis-spend *your own* money within the contract limits — **never the protocol, never other users, never key theft.** The two actions to watch — only ever invoke them from an explicit human ask, never inferred from a vault's name/description or other untrusted text:
113
- - `transfer_admin` hands away control of your own vault.
114
- - `update_vault_assets` — full-replaces your own vault's basket with arbitrary registered mints + weights (open universe: any non-freezable legacy-SPL mint qualifies for listing — no oracle feed required); on the next rebalance the vault's value migrates into them. Bounded (own vault, API-validated mints, ≤10 assets, manual-mode + 24h timelock) so it stays inside *your own money*, but it IS a basket-redirection an injected agent could trigger.
119
+ - `transfer_admin` / `accept_admin_transfer` initiate or complete a vault-control handoff.
120
+ - `update_vault_policy` — changes the enforced constitutional limits for a vault.
121
+ - `update_vault_assets` — full-replaces your own vault's target basket with eligible mints + weights (open universe; no oracle feed required); on the next rebalance the vault's value migrates into them. Bounded to your own vault and ≤10 assets, but it IS a basket-redirection an injected agent could trigger.
115
122
 
116
123
  ## Install
117
124
 
@@ -300,8 +307,8 @@ npx tsx src/examples/launch-deposit-redeem.ts
300
307
  → returns { vault: "<address>", signature, ... }. Note the vault address.
301
308
  (No fee fields: entry/exit fees are factory-global — 0.75%/0.75%, split
302
309
  50/50 creator/platform — and creators can't set them. These two mints are
303
- already registered on mainnet; listing is open + feed-free any registered
304
- non-freezable legacy-SPL mint qualifies.)
310
+ established mainnet mints; listing is open + feed-free. Live factory/fund-tier
311
+ rules decide eligibility, and freeze authority is surfaced as issuer-lock risk.)
305
312
 
306
313
  3. deposit
307
314
  { "vault": "<address from step 2>", "usdcAmount": "12000000" } // $12 raw (6dp)
@@ -362,7 +369,7 @@ Notes:
362
369
  | `DFM_API_URL` | No | `https://n2-api.dfm.finance` | API base (the `/api/v2` prefix is auto-appended). |
363
370
  | `DFM_AGENT_KEYPAIR_PATH` | For auth | — | Path to a Solana secret-key JSON file (preferred). Use a dedicated wallet funded with USDC + a little SOL. |
364
371
  | `DFM_AGENT_KEYPAIR_JSON` | For auth | — | The secret-key JSON array inline (alternative; e.g. injected from a secret manager). |
365
- | `DFM_AGENT_WRITE_ENABLED` | No | `false` | Master kill-switch for **all** write tools (launch/deposit/redeem/cancel/update-envelope). |
372
+ | `DFM_AGENT_WRITE_ENABLED` | No | `false` | Master kill-switch for all write tools. |
366
373
  | `HELIUS_RPC_URL` / `DFM_RPC_URL` | No (optional) | — | OPTIONAL override — submit through your OWN RPC instead of the backend broadcast (`POST /tx/submit`). Writes need NO client RPC by default; mainnet never uses the rate-limited public RPC. |
367
374
  | `SOLANA_CLUSTER` | No | `mainnet-beta` | `mainnet-beta` or `devnet`. |
368
375
 
@@ -394,7 +401,7 @@ does **not** crank legs and does **not** hold the protocol key.
394
401
 
395
402
  | File | Role |
396
403
  |------|------|
397
- | `src/mcp-server.ts` | MCP stdio server; registers the 14 tools (5 read + 9 write) + the write gate. |
404
+ | `src/mcp-server.ts` | MCP stdio server; registers the tools and enforces the write gate. |
398
405
  | `src/config.ts` | Env → `AgentConfig` (API URL, cluster, RPC, write flag, keypair source). |
399
406
  | `src/session.ts` | SIWS sign-in → Bearer session; in-flight dedup; transparent re-auth on 401. |
400
407
  | `src/signing.ts` | The signing boundary — loads the local keypair, signs SIWS + v0 txs. Refuses the protocol wallet; never logs key material. |
@@ -403,6 +410,7 @@ does **not** crank legs and does **not** hold the protocol key.
403
410
  | `src/create-flow.ts` | `launch_vault` driver: prepare → sign → submit → confirm (+ ghost-vault recovery). |
404
411
  | `src/zap-v2-flow.ts` | `deposit` / `redeem` lifecycle drivers (resume-aware, close-retry). |
405
412
  | `src/recovery-flow.ts` | `zap_v2_cancel` + `zap_v2_update_envelope` (floors auto-derived from the live escrow). |
413
+ | `src/manager-flow.ts` | Basket, rebalance, admin-transfer, and constitutional-policy control flows. |
406
414
  | `src/types.ts` | Response shapes mirrored against the live API. |
407
415
 
408
416
  ## What remains for the parent to review/enable
@@ -1,6 +1,6 @@
1
1
  import type { AgentConfig } from './config.js';
2
2
  import { SiwsSession } from './session.js';
3
- import type { VaultListResponse, VaultDetailResponse, ZapV2Status, ZapV2PrepareResponse, ZapV2SingleTxResponse, CreateAssetInput, CreatePrepareResponse, CreateConfirmResponse, RebalanceToTargetsResponse, ReconfigureResponse, ReconfigureTargetInput } from './types.js';
3
+ import type { VaultListResponse, VaultDetailResponse, ZapV2Status, ZapV2PrepareResponse, ZapV2SingleTxResponse, CreateAssetInput, CreatePrepareResponse, CreateConfirmResponse, RebalanceToTargetsResponse, ReconfigureResponse, ReconfigureTargetInput, OnchainPolicySnapshot, VaultPolicyInput } from './types.js';
4
4
  export declare class DfmApiClient {
5
5
  private readonly session;
6
6
  private readonly baseUrl;
@@ -13,15 +13,12 @@ export declare class DfmApiClient {
13
13
  *
14
14
  * ⚠️ The names here are load-bearing. The API validates this query with
15
15
  * `VaultListQueryDto` under a global `forbidNonWhitelisted` pipe, so an
16
- * unknown param is a hard 400, not an ignored hint. This client used to send
17
- * `dtfType` (the DTO field is `type`) and a STRING `category` (the DTO
18
- * coerces to a number and rejects NaN) — every filtered `list_dtfs` call
19
- * 400'd, and only the bare no-argument call ever worked. `sortBy` is an enum
16
+ * unknown param is a hard 400, not an ignored hint. `category` is coerced to a
17
+ * number and rejects NaN; `sortBy` is an enum
20
18
  * and `limit` is capped at 50 server-side; both are mirrored in the tool
21
19
  * schema so a bad value fails locally with a readable message.
22
20
  */
23
21
  listVaults(params?: {
24
- type?: string;
25
22
  category?: number;
26
23
  sortBy?: string;
27
24
  sortDir?: 'asc' | 'desc';
@@ -85,7 +82,7 @@ export declare class DfmApiClient {
85
82
  * applies and why it never falls back to local signing.
86
83
  */
87
84
  executeViaOperatingWallet(tool: string, args: Record<string, unknown>): Promise<{
88
- signature: string;
85
+ signature?: string;
89
86
  status: string;
90
87
  note?: string;
91
88
  }>;
@@ -149,7 +146,7 @@ export declare class DfmApiClient {
149
146
  prepareCreateVault(params: {
150
147
  name: string;
151
148
  symbol: string;
152
- dtfType: string;
149
+ dtfType: 'index';
153
150
  category: number;
154
151
  assets: CreateAssetInput[];
155
152
  description?: string;
@@ -166,8 +163,8 @@ export declare class DfmApiClient {
166
163
  /**
167
164
  * `POST /vaults/:address/assets/prepare` (vault admin) — build an
168
165
  * `update_vault_assets` FULL-REPLACE basket tx. The API enforces the same
169
- * guards as the chain (manual mode, 24h timelock, Σ bps == 10000, no dupes,
170
- * ≤15 on mainnet) → clean 4xx instead of a chain revert.
166
+ * guards as the chain (manual mode, config timing, Σ bps == 10000, no dupes,
167
+ * ≤10 in the current product) → clean 4xx instead of a chain revert.
171
168
  */
172
169
  prepareUpdateAssets(vaultAddress: string, assets: CreateAssetInput[]): Promise<ZapV2SingleTxResponse>;
173
170
  /** `POST /vaults/:address/assets/confirm` — record the basket change post-broadcast. */
@@ -188,6 +185,27 @@ export declare class DfmApiClient {
188
185
  * sensitivity — gates the agent's `transfer_admin` tool.
189
186
  */
190
187
  prepareTransferAdmin(vaultAddress: string, newAdmin: string): Promise<ZapV2SingleTxResponse>;
188
+ /** Build the transaction signed by the pending admin to complete a handoff. */
189
+ prepareAcceptAdminTransfer(vaultAddress: string): Promise<ZapV2SingleTxResponse>;
190
+ /** Verify a landed acceptance and reconcile the authoritative admin into Mongo. */
191
+ confirmAcceptAdminTransfer(vaultAddress: string, signature: string): Promise<{
192
+ status: string;
193
+ signature: string;
194
+ vaultAdmin: string;
195
+ }>;
196
+ /** Read the live on-chain policy; null means a legacy vault has no policy PDA. */
197
+ getOnchainPolicy(vaultAddress: string): Promise<OnchainPolicySnapshot | null>;
198
+ prepareCreateVaultPolicy(vaultAddress: string, policy: VaultPolicyInput): Promise<ZapV2SingleTxResponse>;
199
+ prepareProposeVaultPolicy(vaultAddress: string, policy: VaultPolicyInput & {
200
+ effectiveAt: number;
201
+ }): Promise<ZapV2SingleTxResponse>;
202
+ prepareAcceptVaultPolicy(vaultAddress: string, policy: VaultPolicyInput & {
203
+ effectiveAt: number;
204
+ }): Promise<ZapV2SingleTxResponse>;
205
+ /** Re-read chain state and reconcile the Mongo policy shadow. Safe to retry. */
206
+ confirmVaultPolicy(vaultAddress: string, signature: string): Promise<Record<string, unknown> & {
207
+ onChain: true;
208
+ }>;
191
209
  /**
192
210
  * `POST /rebalance/:vault/init/prepare` — prepare a creator-signed
193
211
  * `initialize_rebalancer` TX for a vault the test wallet ADMINS. Enables
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -111,17 +111,13 @@ export class DfmApiClient {
111
111
  *
112
112
  * ⚠️ The names here are load-bearing. The API validates this query with
113
113
  * `VaultListQueryDto` under a global `forbidNonWhitelisted` pipe, so an
114
- * unknown param is a hard 400, not an ignored hint. This client used to send
115
- * `dtfType` (the DTO field is `type`) and a STRING `category` (the DTO
116
- * coerces to a number and rejects NaN) — every filtered `list_dtfs` call
117
- * 400'd, and only the bare no-argument call ever worked. `sortBy` is an enum
114
+ * unknown param is a hard 400, not an ignored hint. `category` is coerced to a
115
+ * number and rejects NaN; `sortBy` is an enum
118
116
  * and `limit` is capped at 50 server-side; both are mirrored in the tool
119
117
  * schema so a bad value fails locally with a readable message.
120
118
  */
121
119
  async listVaults(params) {
122
120
  const q = new URLSearchParams();
123
- if (params?.type)
124
- q.set('type', params.type);
125
121
  if (params?.category !== undefined)
126
122
  q.set('category', String(params.category));
127
123
  if (params?.sortBy)
@@ -204,7 +200,7 @@ export class DfmApiClient {
204
200
  });
205
201
  // Finished inside the server's inline window — the shape this method has
206
202
  // always returned.
207
- if ('signature' in first)
203
+ if (!('jobId' in first))
208
204
  return first;
209
205
  // 202: the write outlives the gateway timeout and is still running. This is
210
206
  // the ONLY correct response to that — retrying the POST would execute the
@@ -227,9 +223,9 @@ export class DfmApiClient {
227
223
  const job = await this.authRequest(`/agent/operating/execute/${jobId}`);
228
224
  if (job.jobStatus === 'running')
229
225
  continue;
230
- if (job.jobStatus === 'done' && job.signature) {
226
+ if (job.jobStatus === 'done') {
231
227
  return {
232
- signature: job.signature,
228
+ ...(job.signature ? { signature: job.signature } : {}),
233
229
  status: job.execStatus ?? 'complete',
234
230
  ...(job.note ? { note: job.note } : {}),
235
231
  };
@@ -342,14 +338,12 @@ export class DfmApiClient {
342
338
  idempotencyKey: `createconfirm-${signature.slice(0, 60)}`,
343
339
  });
344
340
  }
345
- // ─── WRITE (vault MANAGER actions: rebalance / fees / transfer-admin) ───
346
- // Each requires the signed-in wallet to be the vault ADMIN (API-enforced).
347
- // Same prepare → sign → submit pattern. REVIEW: control path — parent reviews.
341
+ // ─── WRITE (vault manager actions) ─────────────────────────────────────
348
342
  /**
349
343
  * `POST /vaults/:address/assets/prepare` (vault admin) — build an
350
344
  * `update_vault_assets` FULL-REPLACE basket tx. The API enforces the same
351
- * guards as the chain (manual mode, 24h timelock, Σ bps == 10000, no dupes,
352
- * ≤15 on mainnet) → clean 4xx instead of a chain revert.
345
+ * guards as the chain (manual mode, config timing, Σ bps == 10000, no dupes,
346
+ * ≤10 in the current product) → clean 4xx instead of a chain revert.
353
347
  */
354
348
  async prepareUpdateAssets(vaultAddress, assets) {
355
349
  requireBase58(vaultAddress, 'vault address');
@@ -387,6 +381,46 @@ export class DfmApiClient {
387
381
  requireBase58(newAdmin, 'new admin wallet');
388
382
  return this.authRequest(`/vaults/${vaultAddress}/transfer-admin`, { method: 'POST', body: JSON.stringify({ newAdmin }) });
389
383
  }
384
+ /** Build the transaction signed by the pending admin to complete a handoff. */
385
+ async prepareAcceptAdminTransfer(vaultAddress) {
386
+ requireBase58(vaultAddress, 'vault address');
387
+ return this.authRequest(`/vaults/${vaultAddress}/transfer-admin/accept/prepare`, { method: 'POST', body: JSON.stringify({}) });
388
+ }
389
+ /** Verify a landed acceptance and reconcile the authoritative admin into Mongo. */
390
+ async confirmAcceptAdminTransfer(vaultAddress, signature) {
391
+ requireBase58(vaultAddress, 'vault address');
392
+ return this.authRequest(`/vaults/${vaultAddress}/transfer-admin/accept/confirm`, {
393
+ method: 'POST',
394
+ body: JSON.stringify({ signature }),
395
+ idempotencyKey: `adminacceptconfirm-${signature.slice(0, 60)}`,
396
+ });
397
+ }
398
+ /** Read the live on-chain policy; null means a legacy vault has no policy PDA. */
399
+ async getOnchainPolicy(vaultAddress) {
400
+ requireBase58(vaultAddress, 'vault address');
401
+ return this.authRequest(`/policy/${vaultAddress}/onchain`, { method: 'GET' });
402
+ }
403
+ async prepareCreateVaultPolicy(vaultAddress, policy) {
404
+ requireBase58(vaultAddress, 'vault address');
405
+ return this.authRequest(`/policy/${vaultAddress}/onchain/create/prepare`, { method: 'POST', body: JSON.stringify(policy) });
406
+ }
407
+ async prepareProposeVaultPolicy(vaultAddress, policy) {
408
+ requireBase58(vaultAddress, 'vault address');
409
+ return this.authRequest(`/policy/${vaultAddress}/onchain/amendment/propose/prepare`, { method: 'POST', body: JSON.stringify(policy) });
410
+ }
411
+ async prepareAcceptVaultPolicy(vaultAddress, policy) {
412
+ requireBase58(vaultAddress, 'vault address');
413
+ return this.authRequest(`/policy/${vaultAddress}/onchain/amendment/accept/prepare`, { method: 'POST', body: JSON.stringify(policy) });
414
+ }
415
+ /** Re-read chain state and reconcile the Mongo policy shadow. Safe to retry. */
416
+ async confirmVaultPolicy(vaultAddress, signature) {
417
+ requireBase58(vaultAddress, 'vault address');
418
+ return this.authRequest(`/policy/${vaultAddress}/onchain/confirm`, {
419
+ method: 'POST',
420
+ body: JSON.stringify({ signature }),
421
+ idempotencyKey: `policyconfirm-${signature.slice(0, 60)}`,
422
+ });
423
+ }
390
424
  /**
391
425
  * `POST /rebalance/:vault/init/prepare` — prepare a creator-signed
392
426
  * `initialize_rebalancer` TX for a vault the test wallet ADMINS. Enables
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=control-flow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-flow.test.d.ts","sourceRoot":"","sources":["../src/control-flow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,259 @@
1
+ import { runAcceptAdminTransfer, reconcileKeylessUpdateVaultPolicy, runUpdateVaultPolicy, validateVaultPolicy, } from './manager-flow.js';
2
+ let failures = 0;
3
+ function assert(condition, message) {
4
+ if (condition) {
5
+ console.log(` ✓ ${message}`);
6
+ }
7
+ else {
8
+ console.error(` ✗ ${message}`);
9
+ failures++;
10
+ }
11
+ }
12
+ async function expectReject(operation, expected, message) {
13
+ try {
14
+ await operation();
15
+ assert(false, `${message} (did not reject)`);
16
+ }
17
+ catch (thrownObject) {
18
+ const reason = thrownObject instanceof Error ? thrownObject.message : String(thrownObject);
19
+ assert(expected.test(reason), `${message} (${reason})`);
20
+ }
21
+ }
22
+ function expectValidationReject(policy, expected, message) {
23
+ try {
24
+ validateVaultPolicy(policy);
25
+ assert(false, `${message} (did not reject)`);
26
+ }
27
+ catch (thrownObject) {
28
+ const reason = thrownObject instanceof Error ? thrownObject.message : String(thrownObject);
29
+ assert(expected.test(reason), `${message} (${reason})`);
30
+ }
31
+ }
32
+ const config = {};
33
+ const vault = 'Vau1t1111111111111111111111111111111111111';
34
+ const signatureOne = '5'.repeat(88);
35
+ const signatureTwo = '6'.repeat(88);
36
+ const prepared = (transaction) => ({
37
+ transaction,
38
+ blockhash: `blockhash-${transaction}`,
39
+ lastValidBlockHeight: 123,
40
+ preparedTxId: `prepared-${transaction}`,
41
+ });
42
+ const policy = {
43
+ assetMode: 0,
44
+ maxAssetBps: 6_000,
45
+ minAssetBps: 500,
46
+ maxRebalanceBps: 2_000,
47
+ minRebalanceIntervalSecs: 300,
48
+ maxRebalancesPerDay: 5,
49
+ maxRebalancesPerWeek: 15,
50
+ launchBlackoutSecs: 3_600,
51
+ minAssets: 2,
52
+ maxAssets: 10,
53
+ };
54
+ const signingDependencies = (signatures, sequence) => ({
55
+ signBase64Transaction: (_config, transaction) => {
56
+ sequence.push(`sign:${transaction}`);
57
+ return `signed:${transaction}`;
58
+ },
59
+ submitSignedTx: async (_config, signedTransaction) => {
60
+ sequence.push(`submit:${signedTransaction}`);
61
+ const signature = signatures.shift();
62
+ if (!signature)
63
+ throw new Error('missing test signature');
64
+ return signature;
65
+ },
66
+ });
67
+ console.log('case: policy bounds reject every out-of-range integer and invalid relation');
68
+ validateVaultPolicy(policy);
69
+ const invalidPolicies = [
70
+ [{ ...policy, assetMode: 4 }, /assetMode/, 'assetMode > 3'],
71
+ [{ ...policy, maxAssetBps: 10_001 }, /maxAssetBps/, 'maxAssetBps > 10000'],
72
+ [{ ...policy, minAssetBps: -1 }, /minAssetBps/, 'minAssetBps < 0'],
73
+ [{ ...policy, maxRebalanceBps: 0.5 }, /maxRebalanceBps/, 'fractional maxRebalanceBps'],
74
+ [
75
+ { ...policy, minRebalanceIntervalSecs: Number.MAX_SAFE_INTEGER + 1 },
76
+ /minRebalanceIntervalSecs/,
77
+ 'unsafe minRebalanceIntervalSecs',
78
+ ],
79
+ [{ ...policy, maxRebalancesPerDay: 11 }, /maxRebalancesPerDay/, 'daily cap > 10'],
80
+ [{ ...policy, maxRebalancesPerWeek: 31 }, /maxRebalancesPerWeek/, 'weekly cap > 30'],
81
+ [{ ...policy, launchBlackoutSecs: 2_592_001 }, /launchBlackoutSecs/, 'blackout > 30d'],
82
+ [{ ...policy, minAssets: 11 }, /minAssets/, 'minAssets > product cap 10'],
83
+ [{ ...policy, maxAssets: 11 }, /maxAssets/, 'maxAssets > product cap 10'],
84
+ [
85
+ { ...policy, minAssetBps: 6_001, maxAssetBps: 6_000 },
86
+ /minAssetBps cannot exceed/,
87
+ 'minimum weight exceeds maximum',
88
+ ],
89
+ [
90
+ { ...policy, minAssets: 8, maxAssets: 7 },
91
+ /minAssets cannot exceed/,
92
+ 'minimum asset count exceeds maximum',
93
+ ],
94
+ ];
95
+ for (const [invalidPolicy, expected, message] of invalidPolicies) {
96
+ expectValidationReject(invalidPolicy, expected, message);
97
+ }
98
+ console.log('case: local admin acceptance signs, lands, then confirms before success');
99
+ {
100
+ const sequence = [];
101
+ const api = {
102
+ prepareAcceptAdminTransfer: async () => {
103
+ sequence.push('prepare');
104
+ return prepared('accept');
105
+ },
106
+ confirmAcceptAdminTransfer: async (_vault, signature) => {
107
+ sequence.push(`confirm:${signature}`);
108
+ return { status: 'confirmed', signature, vaultAdmin: 'NewAdmin11111111111111111111111111111111111' };
109
+ },
110
+ };
111
+ const result = await runAcceptAdminTransfer(config, api, vault, undefined, signingDependencies([signatureOne], sequence));
112
+ assert(result.reconciled === true, 'success is marked reconciled');
113
+ assert(sequence.join('|') ===
114
+ `prepare|sign:accept|submit:signed:accept|confirm:${signatureOne}`, 'post-chain confirm runs after submit');
115
+ }
116
+ console.log('case: local admin acceptance never reports success when confirm fails');
117
+ {
118
+ const api = {
119
+ prepareAcceptAdminTransfer: async () => prepared('accept'),
120
+ confirmAcceptAdminTransfer: async () => {
121
+ throw new Error('indexer unavailable');
122
+ },
123
+ };
124
+ await expectReject(() => runAcceptAdminTransfer(config, api, vault, undefined, signingDependencies([signatureOne], [])), new RegExp(`transaction ${signatureOne} landed.*Do not submit another`, 'i'), 'landed acceptance with failed reconciliation is an error with recovery guidance');
125
+ }
126
+ console.log('case: landed admin signature retries confirm only');
127
+ {
128
+ let prepareCalls = 0;
129
+ let confirmedSignature = '';
130
+ const api = {
131
+ prepareAcceptAdminTransfer: async () => {
132
+ prepareCalls++;
133
+ return prepared('must-not-run');
134
+ },
135
+ confirmAcceptAdminTransfer: async (_vault, signature) => {
136
+ confirmedSignature = signature;
137
+ return { status: 'confirmed', signature, vaultAdmin: 'NewAdmin11111111111111111111111111111111111' };
138
+ },
139
+ };
140
+ await runAcceptAdminTransfer(config, api, vault, signatureOne);
141
+ assert(prepareCalls === 0, 'recovery does not prepare or submit another acceptance');
142
+ assert(confirmedSignature === signatureOne, 'recovery confirms the supplied landed signature');
143
+ }
144
+ console.log('case: legacy policy creates one transaction and reconciles it');
145
+ {
146
+ const sequence = [];
147
+ const api = {
148
+ getOnchainPolicy: async () => null,
149
+ prepareCreateVaultPolicy: async () => {
150
+ sequence.push('prepare:create');
151
+ return prepared('create');
152
+ },
153
+ confirmVaultPolicy: async (_vault, signature) => {
154
+ sequence.push(`confirm:${signature}`);
155
+ return { onChain: true };
156
+ },
157
+ };
158
+ const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureOne], sequence));
159
+ assert(result.mode === 'create' && result.reconciled, 'legacy policy returns reconciled create');
160
+ assert(sequence.at(-1) === `confirm:${signatureOne}`, 'create is reconciled after landing');
161
+ }
162
+ console.log('case: existing policy proposes then accepts in order and confirms final signature');
163
+ {
164
+ const sequence = [];
165
+ let proposedEffectiveAt = 0;
166
+ let acceptedEffectiveAt = 0;
167
+ const api = {
168
+ getOnchainPolicy: async () => ({ pendingProposedAt: 0, pendingEffectiveAt: 0 }),
169
+ prepareProposeVaultPolicy: async (_vault, amendment) => {
170
+ proposedEffectiveAt = amendment.effectiveAt;
171
+ sequence.push('prepare:propose');
172
+ return prepared('propose');
173
+ },
174
+ prepareAcceptVaultPolicy: async (_vault, amendment) => {
175
+ acceptedEffectiveAt = amendment.effectiveAt;
176
+ sequence.push('prepare:accept');
177
+ return prepared('accept');
178
+ },
179
+ confirmVaultPolicy: async (_vault, signature) => {
180
+ sequence.push(`confirm:${signature}`);
181
+ return { onChain: true };
182
+ },
183
+ };
184
+ const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureOne, signatureTwo], sequence));
185
+ assert(result.mode === 'amend', 'existing policy chooses amendment mode');
186
+ assert(proposedEffectiveAt > 0 && proposedEffectiveAt === acceptedEffectiveAt, 'proposal and acceptance commit the same effectiveAt');
187
+ assert(sequence.join('|') ===
188
+ `prepare:propose|prepare:accept|sign:propose|submit:signed:propose|sign:accept|submit:signed:accept|confirm:${signatureTwo}`, 'ordered proposal and acceptance reconcile only after the final signature');
189
+ }
190
+ console.log('case: pending policy prepares only acceptance with chain-pinned effectiveAt');
191
+ {
192
+ let proposeCalls = 0;
193
+ let acceptedEffectiveAt = 0;
194
+ const api = {
195
+ getOnchainPolicy: async () => ({ pendingProposedAt: 99, pendingEffectiveAt: 123_456 }),
196
+ prepareProposeVaultPolicy: async () => {
197
+ proposeCalls++;
198
+ return prepared('must-not-run');
199
+ },
200
+ prepareAcceptVaultPolicy: async (_vault, amendment) => {
201
+ acceptedEffectiveAt = amendment.effectiveAt;
202
+ return prepared('accept');
203
+ },
204
+ confirmVaultPolicy: async () => ({ onChain: true }),
205
+ };
206
+ const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureTwo], []));
207
+ assert(result.mode === 'accept', 'pending proposal chooses accept mode');
208
+ assert(proposeCalls === 0, 'pending recovery never proposes a second policy');
209
+ assert(acceptedEffectiveAt === 123_456, 'acceptance uses chain-pinned effectiveAt');
210
+ }
211
+ console.log('case: partial amendment reports landed proposal and does not confirm');
212
+ {
213
+ let submitCalls = 0;
214
+ let confirmCalls = 0;
215
+ const api = {
216
+ getOnchainPolicy: async () => ({ pendingProposedAt: 0, pendingEffectiveAt: 0 }),
217
+ prepareProposeVaultPolicy: async () => prepared('propose'),
218
+ prepareAcceptVaultPolicy: async () => prepared('accept'),
219
+ confirmVaultPolicy: async () => {
220
+ confirmCalls++;
221
+ return { onChain: true };
222
+ },
223
+ };
224
+ await expectReject(() => runUpdateVaultPolicy(config, api, vault, policy, undefined, {
225
+ signBase64Transaction: (_config, transaction) => transaction,
226
+ submitSignedTx: async () => {
227
+ submitCalls++;
228
+ if (submitCalls === 1)
229
+ return signatureOne;
230
+ throw new Error('second transaction rejected');
231
+ },
232
+ }), new RegExp(`proposal ${signatureOne} landed.*exact same policy values`, 'i'), 'partial amendment cannot be mistaken for no change');
233
+ assert(confirmCalls === 0, 'a partial proposal is not reported as reconciled completion');
234
+ }
235
+ console.log('case: keyless policy confirms complete writes and preserves pending status');
236
+ {
237
+ let confirmCalls = 0;
238
+ const completeApi = {
239
+ confirmVaultPolicy: async () => {
240
+ confirmCalls++;
241
+ return { onChain: true };
242
+ },
243
+ };
244
+ const complete = await reconcileKeylessUpdateVaultPolicy(completeApi, vault, policy, { signature: signatureTwo, status: 'complete' });
245
+ assert(complete.reconciled && confirmCalls === 1, 'keyless completion is independently reconciled');
246
+ const pendingApi = {
247
+ confirmVaultPolicy: async () => {
248
+ throw new Error('must not report a partial proposal as complete');
249
+ },
250
+ };
251
+ const pending = await reconcileKeylessUpdateVaultPolicy(pendingApi, vault, policy, { signature: signatureOne, status: 'pending', note: 'proposal landed' });
252
+ assert(pending.status === 'pending' && pending.reconciled === false, 'keyless partial proposal remains pending and unreconciled');
253
+ }
254
+ if (failures > 0) {
255
+ console.error(`\n${failures} control-flow assertion(s) FAILED`);
256
+ process.exit(1);
257
+ }
258
+ console.log('\ncontrol-flow: all assertions passed');
259
+ //# sourceMappingURL=control-flow.test.js.map