@dfm-fi/agent 0.2.1846 → 0.2.1856
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 +77 -400
- package/dist/mcp-server.js +4 -4
- package/package.json +4 -6
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/control-flow.test.d.ts +0 -2
- package/dist/control-flow.test.d.ts.map +0 -1
- package/dist/control-flow.test.js +0 -259
- package/dist/control-flow.test.js.map +0 -1
- package/dist/create-flow.d.ts.map +0 -1
- package/dist/create-flow.js.map +0 -1
- package/dist/create-flow.metadata.test.d.ts +0 -2
- package/dist/create-flow.metadata.test.d.ts.map +0 -1
- package/dist/create-flow.metadata.test.js +0 -100
- package/dist/create-flow.metadata.test.js.map +0 -1
- package/dist/examples/fund-app-wallet.d.ts +0 -2
- package/dist/examples/fund-app-wallet.d.ts.map +0 -1
- package/dist/examples/fund-app-wallet.js +0 -39
- package/dist/examples/fund-app-wallet.js.map +0 -1
- package/dist/examples/launch-deposit-redeem.d.ts +0 -2
- package/dist/examples/launch-deposit-redeem.d.ts.map +0 -1
- package/dist/examples/launch-deposit-redeem.js +0 -150
- package/dist/examples/launch-deposit-redeem.js.map +0 -1
- package/dist/examples/list-and-status.d.ts +0 -2
- package/dist/examples/list-and-status.d.ts.map +0 -1
- package/dist/examples/list-and-status.js +0 -66
- package/dist/examples/list-and-status.js.map +0 -1
- package/dist/examples/rebalance-drill.d.ts +0 -2
- package/dist/examples/rebalance-drill.d.ts.map +0 -1
- package/dist/examples/rebalance-drill.js +0 -20
- package/dist/examples/rebalance-drill.js.map +0 -1
- package/dist/examples/recover-app-wallet-assets.d.ts +0 -2
- package/dist/examples/recover-app-wallet-assets.d.ts.map +0 -1
- package/dist/examples/recover-app-wallet-assets.js +0 -86
- package/dist/examples/recover-app-wallet-assets.js.map +0 -1
- package/dist/examples/zap-cycle.d.ts +0 -2
- package/dist/examples/zap-cycle.d.ts.map +0 -1
- package/dist/examples/zap-cycle.js +0 -56
- package/dist/examples/zap-cycle.js.map +0 -1
- package/dist/examples/zap-soak.d.ts +0 -2
- package/dist/examples/zap-soak.d.ts.map +0 -1
- package/dist/examples/zap-soak.js +0 -164
- package/dist/examples/zap-soak.js.map +0 -1
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/keyless.d.ts.map +0 -1
- package/dist/keyless.js.map +0 -1
- package/dist/manager-flow.d.ts.map +0 -1
- package/dist/manager-flow.js.map +0 -1
- package/dist/manager-flow.reconfigure.test.d.ts +0 -2
- package/dist/manager-flow.reconfigure.test.d.ts.map +0 -1
- package/dist/manager-flow.reconfigure.test.js +0 -210
- package/dist/manager-flow.reconfigure.test.js.map +0 -1
- package/dist/mcp-server.confirm-gate.test.d.ts +0 -2
- package/dist/mcp-server.confirm-gate.test.d.ts.map +0 -1
- package/dist/mcp-server.confirm-gate.test.js +0 -222
- package/dist/mcp-server.confirm-gate.test.js.map +0 -1
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js.map +0 -1
- package/dist/money-path.test.d.ts +0 -2
- package/dist/money-path.test.d.ts.map +0 -1
- package/dist/money-path.test.js +0 -193
- package/dist/money-path.test.js.map +0 -1
- package/dist/recovery-flow.d.ts.map +0 -1
- package/dist/recovery-flow.deadleg.test.d.ts +0 -2
- package/dist/recovery-flow.deadleg.test.d.ts.map +0 -1
- package/dist/recovery-flow.deadleg.test.js +0 -143
- package/dist/recovery-flow.deadleg.test.js.map +0 -1
- package/dist/recovery-flow.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/signing.d.ts.map +0 -1
- package/dist/signing.js.map +0 -1
- package/dist/submit.d.ts.map +0 -1
- package/dist/submit.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/wallet-identity.d.ts.map +0 -1
- package/dist/wallet-identity.js.map +0 -1
- package/dist/wallet-identity.test.d.ts +0 -2
- package/dist/wallet-identity.test.d.ts.map +0 -1
- package/dist/wallet-identity.test.js +0 -56
- package/dist/wallet-identity.test.js.map +0 -1
- package/dist/who-pays.test.d.ts +0 -2
- package/dist/who-pays.test.d.ts.map +0 -1
- package/dist/who-pays.test.js +0 -56
- package/dist/who-pays.test.js.map +0 -1
- package/dist/zap-v2-flow.d.ts.map +0 -1
- package/dist/zap-v2-flow.js.map +0 -1
- package/dist/zap-v2-flow.pending.test.d.ts +0 -2
- package/dist/zap-v2-flow.pending.test.d.ts.map +0 -1
- package/dist/zap-v2-flow.pending.test.js +0 -147
- package/dist/zap-v2-flow.pending.test.js.map +0 -1
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,SAAS,OAAO;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;mBACK,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC3B,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,0EAA0E;IAC1E,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC1C,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE1C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,OAAO;QACT,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvB,OAAO;QACT,KAAK,OAAO;YACV,MAAM,cAAc,EAAE,CAAC;YACvB,OAAO;QACT,KAAK,EAAE;YACL,yEAAyE;YACzE,wEAAwE;YACxE,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,8DAA8D;YAC9D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChD,SAAS,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,EAAE,CAAC;YACzB,CAAC;YACD,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;YAC3C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,GAAG,cAAc,CAAC;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,UAAU,IAAI,WAAW,CA2BxC"}
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACpF,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5D,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AA4BD,SAAS,YAAY,CAAC,GAAuB;IAC3C,OAAO,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;AAChG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,gFAAgF;IAChF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,yBAAyB,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEzD,0EAA0E;IAC1E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACnE,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,GAAG,+BAA+B,CAAC;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,CAAC;IAEpE,OAAO;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,WAAW,EAAE,kBAAkB,EAAE;QACjC,qBAAqB,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,QAAQ;eACxE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACzD,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-flow.test.d.ts","sourceRoot":"","sources":["../src/control-flow.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,259 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-flow.test.js","sourceRoot":"","sources":["../src/control-flow.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-flow.d.ts","sourceRoot":"","sources":["../src/create-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qHAAqH;IACrH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4GAA4G;IAC5G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,YAAY,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE;IACN,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACrD,yBAAyB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IAC7D,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;CACxC,GACA,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CjD;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAsBpE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAoG5B"}
|
package/dist/create-flow.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-flow.js","sourceRoot":"","sources":["../src/create-flow.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AA0BxE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAmB,EACnB,GAAiB,EACjB,YAAoB,EACpB,KAIC;IAED,MAAM,IAAI,GAAG,KAAK,EAAE,qBAAqB,IAAI,qBAAqB,CAAC;IACnE,MAAM,aAAa,GAAG,KAAK,EAAE,yBAAyB,IAAI,yBAAyB,CAAC;IACpF,MAAM,YAAY,GAAG,KAAK,EAAE,cAAc,IAAI,cAAc,CAAC;IAC7D,IAAI,SAA6B,CAAC;IAClC,IAAI,KAAyB,CAAC;IAC9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;oBAC/B,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CACvD,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,YAAY,EAAE,EAChD,UAAU,CACX,CAAC;gBACF,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,gCAAgC,CAAC,CAAC;gBACpF,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,MAAM,YAAY,CAC5B,MAAM,EACN,UAAU,EACV,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,oBAAoB,CAClC,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAI,CAAW,CAAC,OAAO,CAAC;YAC7B,6EAA6E;YAC7E,oEAAoE;YACpE,IAAI,qEAAqE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtF,KAAK,GAAG,SAAS,CAAC;gBAClB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,yEAAyE;AAEhG;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,cAAc,MAAM,CAAC,MAAM,CAAC,MAAM,gCAAgC,UAAU,GAAG;YAC7E,mDAAmD,CACtD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,yDAAyD,GAAG,IAAI;YAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzE,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,wBAAwB,CAAC,CAAC,OAAO,sBAAsB,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAmB,EACnB,GAAiB,EACjB,MAAyB;IAEzB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,yEAAyE;IACzE,+EAA+E;IAC/E,gFAAgF;IAChF,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,0EAA0E;QAC1E,8EAA8E;QAC9E,4EAA4E;QAC5E,yEAAyE;QACzE,6EAA6E;QAC7E,8EAA8E;QAC9E,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,0EAA0E;gBACxE,uGAAuG,CAC1G,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,yBAAyB,CACnE,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,EAC5C,MAAM,CACP,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,aAAa,GAAG,6DAA6D;gBAC3E,+EAA+E;gBAC/E,uEAAuE,CAC1E,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,8EAA8E;QAC9E,SAAS,GAAG,MAAM,cAAc,CAC9B,MAAM,EACN,MAAM,EACN,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,oBAAoB,CAC9B,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,0EAA0E;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,SAAS;YACT,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,YAAY,EAAG,CAAW,CAAC,OAAO;YAClC,OAAO,EACL,sCAAsC,QAAQ,CAAC,YAAY,wBAAwB;gBACnF,WAAY,CAAW,CAAC,OAAO,uDAAuD;gBACtF,uFAAuF;gBACvF,oCAAoC;SACvC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,gFAAgF;IAChF,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;IAEjC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,QAAQ,CAAC,YAAY;QAC5B,SAAS;QACT,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,iBAAiB;QACjB,aAAa;QACb,OAAO,EACL,UAAU,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,eAAe,QAAQ,CAAC,YAAY,GAAG;YAC/E,UAAU,QAAQ,CAAC,UAAU,eAAe;YAC5C,CAAC,iBAAiB;gBAChB,CAAC,CAAC,yCAAyC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;gBAC/E,CAAC,CAAC,sCAAsC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;oBACrF,0FAA0F;oBAC1F,yBAAyB,QAAQ,CAAC,YAAY,qBAAqB,CAAC;YACxE,uDAAuD;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-flow.metadata.test.d.ts","sourceRoot":"","sources":["../src/create-flow.metadata.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* #47 regression (runnable: `npx tsx agent/src/create-flow.metadata.test.ts`).
|
|
3
|
-
*
|
|
4
|
-
* THE BUG: a vault launched via the MCP shipped with NO share-mint metadata
|
|
5
|
-
* ("SPL Token", no name/ticker). Root cause: the metadata attach called
|
|
6
|
-
* `submitSignedTx` directly, which THROWS when `config.rpcUrl` is unset — and the
|
|
7
|
-
* MCP's DEFAULT is backend-broadcast mode (no RPC) — and the throw was swallowed.
|
|
8
|
-
* So in backend mode the metadata tx could NEVER be submitted.
|
|
9
|
-
*
|
|
10
|
-
* This locks the fix: with no client RPC, `attachShareMintMetadata` must submit via
|
|
11
|
-
* the BACKEND path (the `preparedTxId`), NOT `submitSignedTx`; it must surface a
|
|
12
|
-
* missing-preparedTxId as an error (not silently lose it); and an "already in use"
|
|
13
|
-
* revert is idempotent (treated as already-attached, no error). sign/submit are
|
|
14
|
-
* injected so no real keypair/RPC is needed.
|
|
15
|
-
*/
|
|
16
|
-
import { attachShareMintMetadata } from './create-flow.js';
|
|
17
|
-
let failures = 0;
|
|
18
|
-
function assert(cond, msg) {
|
|
19
|
-
if (!cond) {
|
|
20
|
-
console.error(` ✗ ${msg}`);
|
|
21
|
-
failures++;
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
console.log(` ✓ ${msg}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
const VAULT = 'Vau1t1111111111111111111111111111111111111';
|
|
28
|
-
const sign = (_c, t) => t; // no real keypair
|
|
29
|
-
async function caseBackendPath() {
|
|
30
|
-
console.log('case: no client RPC → backend-submit via preparedTxId (NOT submitSignedTx)');
|
|
31
|
-
let directCalled = 0;
|
|
32
|
-
let backendCalled = 0;
|
|
33
|
-
const api = {
|
|
34
|
-
prepareCreateVaultMetadata: async () => ({
|
|
35
|
-
transaction: 'BASE64TX',
|
|
36
|
-
blockhash: 'bh',
|
|
37
|
-
lastValidBlockHeight: 1,
|
|
38
|
-
preparedTxId: 'pid-123',
|
|
39
|
-
}),
|
|
40
|
-
};
|
|
41
|
-
const res = await attachShareMintMetadata({ rpcUrl: undefined }, api, VAULT, {
|
|
42
|
-
signBase64Transaction: sign,
|
|
43
|
-
submitViaBackendConfirmed: (async (opts) => {
|
|
44
|
-
backendCalled++;
|
|
45
|
-
assert(opts.preparedTxId === 'pid-123', 'backend got the preparedTxId');
|
|
46
|
-
return { signature: 'metaSig', confirmed: true };
|
|
47
|
-
}),
|
|
48
|
-
submitSignedTx: (async () => {
|
|
49
|
-
directCalled++;
|
|
50
|
-
throw new Error('submitSignedTx must NOT be called in backend mode (the old bug)');
|
|
51
|
-
}),
|
|
52
|
-
});
|
|
53
|
-
assert(res.signature === 'metaSig', `returns the metadata signature (got '${res.signature}')`);
|
|
54
|
-
assert(res.error === undefined, 'no error');
|
|
55
|
-
assert(backendCalled === 1, 'backend submit called once');
|
|
56
|
-
assert(directCalled === 0, 'submitSignedTx was NOT called');
|
|
57
|
-
}
|
|
58
|
-
async function caseNoPreparedTxId() {
|
|
59
|
-
console.log('case: no RPC + no preparedTxId → surfaced error, not a silent loss');
|
|
60
|
-
const api = {
|
|
61
|
-
prepareCreateVaultMetadata: async () => ({
|
|
62
|
-
transaction: 'BASE64TX',
|
|
63
|
-
blockhash: 'bh',
|
|
64
|
-
lastValidBlockHeight: 1,
|
|
65
|
-
// preparedTxId missing
|
|
66
|
-
}),
|
|
67
|
-
};
|
|
68
|
-
const res = await attachShareMintMetadata({ rpcUrl: undefined }, api, VAULT, { signBase64Transaction: sign });
|
|
69
|
-
assert(res.signature === undefined, 'no signature');
|
|
70
|
-
assert(!!res.error && /preparedTxId/i.test(res.error), `error mentions preparedTxId (got '${res.error}')`);
|
|
71
|
-
}
|
|
72
|
-
async function caseIdempotent() {
|
|
73
|
-
console.log('case: "already in use" revert → treated as already-attached (no error)');
|
|
74
|
-
const api = {
|
|
75
|
-
prepareCreateVaultMetadata: async () => ({
|
|
76
|
-
transaction: 'BASE64TX',
|
|
77
|
-
blockhash: 'bh',
|
|
78
|
-
lastValidBlockHeight: 1,
|
|
79
|
-
preparedTxId: 'pid-123',
|
|
80
|
-
}),
|
|
81
|
-
};
|
|
82
|
-
const res = await attachShareMintMetadata({ rpcUrl: undefined }, api, VAULT, {
|
|
83
|
-
signBase64Transaction: sign,
|
|
84
|
-
submitViaBackendConfirmed: (async () => {
|
|
85
|
-
throw new Error('Allocate: account Address already in use');
|
|
86
|
-
}),
|
|
87
|
-
});
|
|
88
|
-
assert(res.error === undefined, `idempotent revert cleared the error (got '${res.error}')`);
|
|
89
|
-
}
|
|
90
|
-
(async () => {
|
|
91
|
-
await caseBackendPath();
|
|
92
|
-
await caseNoPreparedTxId();
|
|
93
|
-
await caseIdempotent();
|
|
94
|
-
if (failures > 0) {
|
|
95
|
-
console.error(`\n#47 regression FAILED (${failures} assertion(s))`);
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
console.log('\n#47 regression PASSED');
|
|
99
|
-
})();
|
|
100
|
-
//# sourceMappingURL=create-flow.metadata.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-flow.metadata.test.js","sourceRoot":"","sources":["../src/create-flow.metadata.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fund-app-wallet.d.ts","sourceRoot":"","sources":["../../src/examples/fund-app-wallet.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Top up the app wallet from its owner — the ONE signature the app-wallet model
|
|
3
|
-
* cannot avoid, because it is the owner's money leaving the owner's wallet.
|
|
4
|
-
*
|
|
5
|
-
* The other direction (app wallet → owner) is `recover-app-wallet-assets.ts`.
|
|
6
|
-
*
|
|
7
|
-
* DFM_API_URL=https://app.dfm.finance \
|
|
8
|
-
* DFM_AGENT_KEYPAIR_PATH=~/.config/dfm/test-6vch.json \
|
|
9
|
-
* USDC=11.1 [SOL=0.01] npx tsx src/examples/fund-app-wallet.ts
|
|
10
|
-
*/
|
|
11
|
-
import { loadConfig } from '../config.js';
|
|
12
|
-
import { SiwsSession } from '../session.js';
|
|
13
|
-
import { DfmApiClient } from '../api-client.js';
|
|
14
|
-
import { signBase64Transaction } from '../signing.js';
|
|
15
|
-
import { submitSignedTx } from '../submit.js';
|
|
16
|
-
async function main() {
|
|
17
|
-
const config = loadConfig();
|
|
18
|
-
const api = new DfmApiClient(config, new SiwsSession(config));
|
|
19
|
-
const usdcMicros = Math.round(Number(process.env.USDC ?? '0') * 1e6);
|
|
20
|
-
const solLamports = Math.round(Number(process.env.SOL ?? '0') * 1e9);
|
|
21
|
-
if (usdcMicros <= 0 && solLamports <= 0)
|
|
22
|
-
throw new Error('set USDC and/or SOL');
|
|
23
|
-
const prepared = await api.prepareOperatingFund({
|
|
24
|
-
...(usdcMicros > 0 ? { usdcMicros } : {}),
|
|
25
|
-
...(solLamports > 0 ? { solLamports } : {}),
|
|
26
|
-
});
|
|
27
|
-
const signed = signBase64Transaction(config, prepared.transaction);
|
|
28
|
-
const signature = await submitSignedTx(config, signed, prepared.blockhash, prepared.lastValidBlockHeight,
|
|
29
|
-
// Backend broadcast: without `preparedTxId` this is the one write that
|
|
30
|
-
// demands a client RPC.
|
|
31
|
-
{ api, preparedTxId: prepared.preparedTxId });
|
|
32
|
-
console.log(`funded ${prepared.operatingWalletAddress} with ${usdcMicros / 1e6} USDC ` +
|
|
33
|
-
`+ ${solLamports / 1e9} SOL — ${signature}`);
|
|
34
|
-
}
|
|
35
|
-
main().catch((e) => {
|
|
36
|
-
console.error('FAILED', e instanceof Error ? e.message : e);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=fund-app-wallet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fund-app-wallet.js","sourceRoot":"","sources":["../../src/examples/fund-app-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrE,IAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC;QAC9C,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC,MAAM,EACN,MAAM,EACN,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,oBAAoB;IAC7B,uEAAuE;IACvE,wBAAwB;IACxB,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAC7C,CAAC;IACF,OAAO,CAAC,GAAG,CACT,UAAU,QAAQ,CAAC,sBAAsB,SAAS,UAAU,GAAG,GAAG,QAAQ;QACxE,KAAK,WAAW,GAAG,GAAG,UAAU,SAAS,EAAE,CAC9C,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"launch-deposit-redeem.d.ts","sourceRoot":"","sources":["../../src/examples/launch-deposit-redeem.ts"],"names":[],"mappings":""}
|