@vultisig/cli 0.1.0-alpha.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/index.js +3185 -361
- package/package.json +4 -3
- package/dist/adapters/cli-context.js +0 -25
- package/dist/adapters/cli-context.js.map +0 -1
- package/dist/adapters/cli-runner.js +0 -47
- package/dist/adapters/cli-runner.js.map +0 -1
- package/dist/adapters/index.js +0 -6
- package/dist/adapters/index.js.map +0 -1
- package/dist/commands/balance.js +0 -65
- package/dist/commands/balance.js.map +0 -1
- package/dist/commands/chains.js +0 -46
- package/dist/commands/chains.js.map +0 -1
- package/dist/commands/index.js +0 -12
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/settings.js +0 -151
- package/dist/commands/settings.js.map +0 -1
- package/dist/commands/swap.js +0 -180
- package/dist/commands/swap.js.map +0 -1
- package/dist/commands/tokens.js +0 -116
- package/dist/commands/tokens.js.map +0 -1
- package/dist/commands/transaction.js +0 -99
- package/dist/commands/transaction.js.map +0 -1
- package/dist/commands/vault-management.js +0 -360
- package/dist/commands/vault-management.js.map +0 -1
- package/dist/core/command-context.js +0 -81
- package/dist/core/command-context.js.map +0 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +0 -1
- package/dist/core/password-manager.js +0 -92
- package/dist/core/password-manager.js.map +0 -1
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interactive/completer.js +0 -170
- package/dist/interactive/completer.js.map +0 -1
- package/dist/interactive/event-buffer.js +0 -186
- package/dist/interactive/event-buffer.js.map +0 -1
- package/dist/interactive/index.js +0 -9
- package/dist/interactive/index.js.map +0 -1
- package/dist/interactive/session.js +0 -525
- package/dist/interactive/session.js.map +0 -1
- package/dist/interactive/shell-commands.js +0 -167
- package/dist/interactive/shell-commands.js.map +0 -1
- package/dist/interactive/shell-context.js +0 -112
- package/dist/interactive/shell-context.js.map +0 -1
- package/dist/lib/completion.js +0 -375
- package/dist/lib/completion.js.map +0 -1
- package/dist/lib/config.js +0 -172
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/errors.js +0 -163
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/index.js +0 -9
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/output.js +0 -155
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/version.js +0 -210
- package/dist/lib/version.js.map +0 -1
- package/dist/ui.js +0 -286
- package/dist/ui.js.map +0 -1
package/dist/commands/tokens.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import inquirer from 'inquirer';
|
|
3
|
-
import { createSpinner, info, isJsonOutput, outputJson, printResult, printTable, success, warn } from '../lib/output';
|
|
4
|
-
/**
|
|
5
|
-
* Execute tokens command - list, add, or remove tokens
|
|
6
|
-
*/
|
|
7
|
-
export async function executeTokens(ctx, options) {
|
|
8
|
-
// Ensure vault is active before any operation
|
|
9
|
-
await ctx.ensureActiveVault();
|
|
10
|
-
if (options.add) {
|
|
11
|
-
// Use CLI options if provided, otherwise prompt
|
|
12
|
-
let symbol = options.symbol;
|
|
13
|
-
let name = options.name;
|
|
14
|
-
let decimals = options.decimals;
|
|
15
|
-
// Only prompt for missing values
|
|
16
|
-
const prompts = [];
|
|
17
|
-
if (!symbol) {
|
|
18
|
-
prompts.push({
|
|
19
|
-
type: 'input',
|
|
20
|
-
name: 'symbol',
|
|
21
|
-
message: 'Enter token symbol (e.g., USDT):',
|
|
22
|
-
validate: (input) => input.trim() !== '' || 'Symbol is required',
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
if (!name) {
|
|
26
|
-
prompts.push({
|
|
27
|
-
type: 'input',
|
|
28
|
-
name: 'name',
|
|
29
|
-
message: 'Enter token name (e.g., Tether USD):',
|
|
30
|
-
validate: (input) => input.trim() !== '' || 'Name is required',
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
if (decimals === undefined) {
|
|
34
|
-
prompts.push({
|
|
35
|
-
type: 'number',
|
|
36
|
-
name: 'decimals',
|
|
37
|
-
message: 'Enter token decimals:',
|
|
38
|
-
default: 18,
|
|
39
|
-
validate: (input) => input >= 0 || 'Decimals must be non-negative',
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (prompts.length > 0) {
|
|
43
|
-
const answers = await inquirer.prompt(prompts);
|
|
44
|
-
symbol = symbol || answers.symbol?.trim();
|
|
45
|
-
name = name || answers.name?.trim();
|
|
46
|
-
decimals = decimals ?? answers.decimals;
|
|
47
|
-
}
|
|
48
|
-
await addToken(ctx, {
|
|
49
|
-
chain: options.chain,
|
|
50
|
-
contractAddress: options.add,
|
|
51
|
-
symbol: symbol,
|
|
52
|
-
name: name,
|
|
53
|
-
decimals: decimals,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
else if (options.remove) {
|
|
57
|
-
await removeToken(ctx, options.chain, options.remove);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
await listTokens(ctx, options.chain);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Add a token to a chain
|
|
65
|
-
*/
|
|
66
|
-
export async function addToken(ctx, options) {
|
|
67
|
-
const vault = await ctx.ensureActiveVault();
|
|
68
|
-
await vault.addToken(options.chain, {
|
|
69
|
-
id: `${options.chain}-${options.contractAddress}`,
|
|
70
|
-
contractAddress: options.contractAddress,
|
|
71
|
-
symbol: options.symbol,
|
|
72
|
-
name: options.name,
|
|
73
|
-
decimals: options.decimals,
|
|
74
|
-
chainId: options.chain,
|
|
75
|
-
isNative: false,
|
|
76
|
-
});
|
|
77
|
-
success(`\n+ Added token ${options.symbol} on ${options.chain}`);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Remove a token from a chain
|
|
81
|
-
*/
|
|
82
|
-
export async function removeToken(ctx, chain, tokenId) {
|
|
83
|
-
const vault = await ctx.ensureActiveVault();
|
|
84
|
-
await vault.removeToken(chain, tokenId);
|
|
85
|
-
success(`\n+ Removed token ${tokenId} from ${chain}`);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* List tokens for a chain
|
|
89
|
-
*/
|
|
90
|
-
export async function listTokens(ctx, chain) {
|
|
91
|
-
const vault = await ctx.ensureActiveVault();
|
|
92
|
-
const spinner = createSpinner(`Loading tokens for ${chain}...`);
|
|
93
|
-
const tokens = vault.getTokens(chain);
|
|
94
|
-
spinner.succeed(`Tokens loaded for ${chain}`);
|
|
95
|
-
if (isJsonOutput()) {
|
|
96
|
-
outputJson({ chain, tokens: tokens || [] });
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (!tokens || tokens.length === 0) {
|
|
100
|
-
warn(`\nNo tokens configured for ${chain}`);
|
|
101
|
-
info(chalk.gray(`\nUse --add <contractAddress> to add a token`));
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
printResult(chalk.cyan(`\nTokens for ${chain}:\n`));
|
|
105
|
-
const table = tokens.map(token => ({
|
|
106
|
-
Symbol: token.symbol,
|
|
107
|
-
Name: token.name,
|
|
108
|
-
Contract: token.contractAddress || 'N/A',
|
|
109
|
-
Decimals: token.decimals,
|
|
110
|
-
Native: token.isNative ? 'Yes' : 'No',
|
|
111
|
-
}));
|
|
112
|
-
printTable(table);
|
|
113
|
-
info(chalk.gray(`\nUse --add <contractAddress> to add or --remove <tokenId> to remove`));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=tokens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Chain, Vultisig } from '@vultisig/sdk';
|
|
2
|
-
import { createSpinner, isJsonOutput, outputJson, warn } from '../lib/output';
|
|
3
|
-
import { confirmTransaction, displayTransactionPreview, displayTransactionResult } from '../ui';
|
|
4
|
-
/**
|
|
5
|
-
* Execute send command - send tokens to an address
|
|
6
|
-
*/
|
|
7
|
-
export async function executeSend(ctx, params) {
|
|
8
|
-
const vault = await ctx.ensureActiveVault();
|
|
9
|
-
if (!Object.values(Chain).includes(params.chain)) {
|
|
10
|
-
throw new Error(`Invalid chain: ${params.chain}`);
|
|
11
|
-
}
|
|
12
|
-
if (isNaN(parseFloat(params.amount)) || parseFloat(params.amount) <= 0) {
|
|
13
|
-
throw new Error('Invalid amount');
|
|
14
|
-
}
|
|
15
|
-
return sendTransaction(vault, params);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Send transaction with full flow: prepare -> confirm -> sign -> broadcast
|
|
19
|
-
*/
|
|
20
|
-
export async function sendTransaction(vault, params) {
|
|
21
|
-
// 1. Prepare transaction
|
|
22
|
-
const prepareSpinner = createSpinner('Preparing transaction...');
|
|
23
|
-
const address = await vault.address(params.chain);
|
|
24
|
-
const balance = await vault.balance(params.chain, params.tokenId);
|
|
25
|
-
const coin = {
|
|
26
|
-
chain: params.chain,
|
|
27
|
-
address,
|
|
28
|
-
decimals: balance.decimals,
|
|
29
|
-
ticker: balance.symbol,
|
|
30
|
-
id: params.tokenId,
|
|
31
|
-
};
|
|
32
|
-
const amount = BigInt(Math.floor(parseFloat(params.amount) * Math.pow(10, balance.decimals)));
|
|
33
|
-
const payload = await vault.prepareSendTx({
|
|
34
|
-
coin,
|
|
35
|
-
receiver: params.to,
|
|
36
|
-
amount,
|
|
37
|
-
memo: params.memo,
|
|
38
|
-
});
|
|
39
|
-
prepareSpinner.succeed('Transaction prepared');
|
|
40
|
-
// 2. Get gas estimate
|
|
41
|
-
let gas;
|
|
42
|
-
try {
|
|
43
|
-
gas = await vault.gas(params.chain);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
warn('\nGas estimation unavailable');
|
|
47
|
-
}
|
|
48
|
-
// 3. Show transaction preview (skip in JSON mode)
|
|
49
|
-
if (!isJsonOutput()) {
|
|
50
|
-
displayTransactionPreview(payload.coin.address, params.to, params.amount, payload.coin.ticker, params.chain, params.memo, gas);
|
|
51
|
-
}
|
|
52
|
-
// 4. Confirm with user (skip if --yes flag is set or JSON mode)
|
|
53
|
-
if (!params.yes && !isJsonOutput()) {
|
|
54
|
-
const confirmed = await confirmTransaction();
|
|
55
|
-
if (!confirmed) {
|
|
56
|
-
warn('Transaction cancelled');
|
|
57
|
-
throw new Error('Transaction cancelled by user');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// 5. Sign transaction
|
|
61
|
-
const signSpinner = createSpinner('Signing transaction...');
|
|
62
|
-
vault.on('signingProgress', ({ step }) => {
|
|
63
|
-
signSpinner.text = `${step.message} (${step.progress}%)`;
|
|
64
|
-
});
|
|
65
|
-
try {
|
|
66
|
-
const messageHashes = await vault.extractMessageHashes(payload);
|
|
67
|
-
const signature = await vault.sign({
|
|
68
|
-
transaction: payload,
|
|
69
|
-
chain: payload.coin.chain,
|
|
70
|
-
messageHashes,
|
|
71
|
-
});
|
|
72
|
-
signSpinner.succeed('Transaction signed');
|
|
73
|
-
// 6. Broadcast transaction
|
|
74
|
-
const broadcastSpinner = createSpinner('Broadcasting transaction...');
|
|
75
|
-
const txHash = await vault.broadcastTx({
|
|
76
|
-
chain: params.chain,
|
|
77
|
-
keysignPayload: payload,
|
|
78
|
-
signature,
|
|
79
|
-
});
|
|
80
|
-
broadcastSpinner.succeed(`Transaction broadcast: ${txHash}`);
|
|
81
|
-
const result = {
|
|
82
|
-
txHash,
|
|
83
|
-
chain: params.chain,
|
|
84
|
-
explorerUrl: Vultisig.getTxExplorerUrl(params.chain, txHash),
|
|
85
|
-
};
|
|
86
|
-
// 7. Display result
|
|
87
|
-
if (isJsonOutput()) {
|
|
88
|
-
outputJson(result);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
displayTransactionResult(params.chain, txHash);
|
|
92
|
-
}
|
|
93
|
-
return result;
|
|
94
|
-
}
|
|
95
|
-
finally {
|
|
96
|
-
vault.removeAllListeners('signingProgress');
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=transaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/commands/transaction.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAW/F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAmB,EAAE,MAAkB;IACvE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAgB,EAAE,MAAkB;IACxE,yBAAyB;IACzB,MAAM,cAAc,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAA;IAEhE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjE,MAAM,IAAI,GAAgB;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,EAAE,EAAE,MAAM,CAAC,OAAO;KACnB,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAE7F,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACxC,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,CAAA;IAEF,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAE9C,sBAAsB;IACtB,IAAI,GAAsD,CAAA;IAC1D,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,8BAA8B,CAAC,CAAA;IACtC,CAAC;IAED,kDAAkD;IAClD,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,yBAAyB,CACvB,OAAO,CAAC,IAAI,CAAC,OAAO,EACpB,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,MAAM,EACb,OAAO,CAAC,IAAI,CAAC,MAAM,EACnB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,GAAG,CACJ,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAA;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,uBAAuB,CAAC,CAAA;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,WAAW,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAAA;IAE3D,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAO,EAAE,EAAE;QAC5C,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAE/D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;YACjC,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;YACzB,aAAa;SACd,CAAC,CAAA;QAEF,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAEzC,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAA;QAErE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,OAAO;YACvB,SAAS;SACV,CAAC,CAAA;QAEF,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAsB;YAChC,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;SAC7D,CAAA;QAED,oBAAoB;QACpB,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,wBAAwB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAChD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { promises as fs } from 'fs';
|
|
3
|
-
import inquirer from 'inquirer';
|
|
4
|
-
import { createSpinner, error, info, isJsonOutput, outputJson, printResult, success, warn } from '../lib/output';
|
|
5
|
-
import { displayVaultInfo, displayVaultsList, setupVaultEvents } from '../ui';
|
|
6
|
-
/**
|
|
7
|
-
* Execute create vault command
|
|
8
|
-
*/
|
|
9
|
-
export async function executeCreate(ctx, options = { type: 'fast' }) {
|
|
10
|
-
const vaultType = options.type.toLowerCase();
|
|
11
|
-
if (vaultType !== 'fast' && vaultType !== 'secure') {
|
|
12
|
-
throw new Error('Invalid vault type. Must be "fast" or "secure"');
|
|
13
|
-
}
|
|
14
|
-
// Use provided options or prompt for missing values
|
|
15
|
-
let name = options.name;
|
|
16
|
-
let password = options.password;
|
|
17
|
-
const prompts = [];
|
|
18
|
-
if (!name) {
|
|
19
|
-
prompts.push({
|
|
20
|
-
type: 'input',
|
|
21
|
-
name: 'name',
|
|
22
|
-
message: 'Enter vault name:',
|
|
23
|
-
validate: (input) => input.trim() !== '' || 'Name is required',
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
if (!password) {
|
|
27
|
-
prompts.push({
|
|
28
|
-
type: 'password',
|
|
29
|
-
name: 'password',
|
|
30
|
-
message: 'Enter password:',
|
|
31
|
-
mask: '*',
|
|
32
|
-
validate: (input) => input.length >= 8 || 'Password must be at least 8 characters',
|
|
33
|
-
});
|
|
34
|
-
prompts.push({
|
|
35
|
-
type: 'password',
|
|
36
|
-
name: 'confirmPassword',
|
|
37
|
-
message: 'Confirm password:',
|
|
38
|
-
mask: '*',
|
|
39
|
-
validate: (input, ans) => input === ans.password || 'Passwords do not match',
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (prompts.length > 0) {
|
|
43
|
-
const answers = (await inquirer.prompt(prompts));
|
|
44
|
-
name = name || answers.name;
|
|
45
|
-
password = password || answers.password;
|
|
46
|
-
}
|
|
47
|
-
if (vaultType === 'fast') {
|
|
48
|
-
let email = options.email;
|
|
49
|
-
if (!email) {
|
|
50
|
-
const emailAnswer = await inquirer.prompt([
|
|
51
|
-
{
|
|
52
|
-
type: 'input',
|
|
53
|
-
name: 'email',
|
|
54
|
-
message: 'Enter email for verification:',
|
|
55
|
-
validate: (input) => /\S+@\S+\.\S+/.test(input) || 'Invalid email format',
|
|
56
|
-
},
|
|
57
|
-
]);
|
|
58
|
-
email = emailAnswer.email;
|
|
59
|
-
}
|
|
60
|
-
const spinner = createSpinner('Creating vault...');
|
|
61
|
-
const result = await ctx.sdk.createFastVault({
|
|
62
|
-
name: name,
|
|
63
|
-
password: password,
|
|
64
|
-
email: email,
|
|
65
|
-
onProgress: step => {
|
|
66
|
-
spinner.text = `${step.message} (${step.progress}%)`;
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
setupVaultEvents(result.vault);
|
|
70
|
-
await ctx.setActiveVault(result.vault);
|
|
71
|
-
spinner.succeed(`Vault created: ${name}`);
|
|
72
|
-
if (result.verificationRequired) {
|
|
73
|
-
let code = options.code;
|
|
74
|
-
if (!code) {
|
|
75
|
-
warn('\nA verification code has been sent to your email.');
|
|
76
|
-
info('Please check your inbox and enter the code.');
|
|
77
|
-
const codeAnswer = await inquirer.prompt([
|
|
78
|
-
{
|
|
79
|
-
type: 'input',
|
|
80
|
-
name: 'code',
|
|
81
|
-
message: `Verification code sent to ${email}. Enter code:`,
|
|
82
|
-
validate: (input) => /^\d{4,6}$/.test(input) || 'Code must be 4-6 digits',
|
|
83
|
-
},
|
|
84
|
-
]);
|
|
85
|
-
code = codeAnswer.code;
|
|
86
|
-
}
|
|
87
|
-
const verifySpinner = createSpinner('Verifying email code...');
|
|
88
|
-
const verified = await ctx.sdk.verifyVault(result.vaultId, code);
|
|
89
|
-
if (verified) {
|
|
90
|
-
verifySpinner.succeed('Email verified successfully!');
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
verifySpinner.fail('Invalid verification code');
|
|
94
|
-
error('\nx Verification failed. Please check the code and try again.');
|
|
95
|
-
warn('\nTo retry verification, use:');
|
|
96
|
-
info(` npm run wallet verify ${result.vaultId}`);
|
|
97
|
-
warn('\nTo resend the verification email:');
|
|
98
|
-
info(` npm run wallet verify ${result.vaultId} --resend`);
|
|
99
|
-
const err = new Error('Verification failed');
|
|
100
|
-
err.exitCode = 1;
|
|
101
|
-
throw err;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
success('\n+ Vault created!');
|
|
105
|
-
info('\nYour vault is ready. Run the following commands:');
|
|
106
|
-
printResult(chalk.cyan(' npm run wallet balance ') + '- View balances');
|
|
107
|
-
printResult(chalk.cyan(' npm run wallet addresses ') + '- View addresses');
|
|
108
|
-
printResult(chalk.cyan(' npm run wallet portfolio ') + '- View portfolio value');
|
|
109
|
-
return result.vault;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
// Secure vault
|
|
113
|
-
let threshold = options.threshold;
|
|
114
|
-
let totalShares = options.shares;
|
|
115
|
-
const securePrompts = [];
|
|
116
|
-
if (threshold === undefined) {
|
|
117
|
-
securePrompts.push({
|
|
118
|
-
type: 'number',
|
|
119
|
-
name: 'threshold',
|
|
120
|
-
message: 'Signing threshold (m):',
|
|
121
|
-
default: 2,
|
|
122
|
-
validate: (input) => input > 0 || 'Threshold must be greater than 0',
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
if (totalShares === undefined) {
|
|
126
|
-
securePrompts.push({
|
|
127
|
-
type: 'number',
|
|
128
|
-
name: 'totalShares',
|
|
129
|
-
message: 'Total shares (n):',
|
|
130
|
-
default: 3,
|
|
131
|
-
validate: (input, ans) => {
|
|
132
|
-
const t = threshold ?? ans.threshold;
|
|
133
|
-
return input >= t || `Total shares must be >= threshold (${t})`;
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
if (securePrompts.length > 0) {
|
|
138
|
-
const secureAnswers = (await inquirer.prompt(securePrompts));
|
|
139
|
-
threshold = threshold ?? secureAnswers.threshold;
|
|
140
|
-
totalShares = totalShares ?? secureAnswers.totalShares;
|
|
141
|
-
}
|
|
142
|
-
const spinner = createSpinner('Creating secure vault...');
|
|
143
|
-
try {
|
|
144
|
-
const result = await ctx.sdk.createSecureVault({
|
|
145
|
-
name: name,
|
|
146
|
-
password: password,
|
|
147
|
-
devices: totalShares,
|
|
148
|
-
threshold: threshold,
|
|
149
|
-
onProgress: step => {
|
|
150
|
-
spinner.text = `${step.message} (${step.progress}%)`;
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
setupVaultEvents(result.vault);
|
|
154
|
-
await ctx.setActiveVault(result.vault);
|
|
155
|
-
spinner.succeed(`Secure vault created: ${name} (${threshold}-of-${totalShares})`);
|
|
156
|
-
warn(`\nImportant: Save your vault backup file (.vult) in a secure location.`);
|
|
157
|
-
warn(`This is a ${threshold}-of-${totalShares} vault. You'll need ${threshold} devices to sign transactions.`);
|
|
158
|
-
success('\n+ Vault created!');
|
|
159
|
-
return result.vault;
|
|
160
|
-
}
|
|
161
|
-
catch (err) {
|
|
162
|
-
spinner.fail('Secure vault creation failed');
|
|
163
|
-
if (err.message?.includes('not implemented')) {
|
|
164
|
-
warn('\nSecure vault creation is not yet implemented in the SDK');
|
|
165
|
-
}
|
|
166
|
-
throw err;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Execute import vault command
|
|
172
|
-
*/
|
|
173
|
-
export async function executeImport(ctx, file) {
|
|
174
|
-
const { password } = await inquirer.prompt([
|
|
175
|
-
{
|
|
176
|
-
type: 'password',
|
|
177
|
-
name: 'password',
|
|
178
|
-
message: 'Enter vault password (if encrypted):',
|
|
179
|
-
mask: '*',
|
|
180
|
-
},
|
|
181
|
-
]);
|
|
182
|
-
const spinner = createSpinner('Importing vault...');
|
|
183
|
-
const vultContent = await fs.readFile(file, 'utf-8');
|
|
184
|
-
const vault = await ctx.sdk.importVault(vultContent, password || undefined);
|
|
185
|
-
setupVaultEvents(vault);
|
|
186
|
-
await ctx.setActiveVault(vault);
|
|
187
|
-
spinner.succeed(`Vault imported: ${vault.name}`);
|
|
188
|
-
success('\n+ Vault imported successfully!');
|
|
189
|
-
info('\nRun "npm run wallet balance" to view balances');
|
|
190
|
-
return vault;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Execute verify vault command
|
|
194
|
-
*/
|
|
195
|
-
export async function executeVerify(ctx, vaultId, options = {}) {
|
|
196
|
-
if (options.resend) {
|
|
197
|
-
const spinner = createSpinner('Resending verification email...');
|
|
198
|
-
await ctx.sdk.resendVaultVerification(vaultId);
|
|
199
|
-
spinner.succeed('Verification email sent!');
|
|
200
|
-
info('Check your inbox for the new verification code.');
|
|
201
|
-
}
|
|
202
|
-
let code = options.code;
|
|
203
|
-
if (!code) {
|
|
204
|
-
const codeAnswer = await inquirer.prompt([
|
|
205
|
-
{
|
|
206
|
-
type: 'input',
|
|
207
|
-
name: 'code',
|
|
208
|
-
message: 'Enter verification code:',
|
|
209
|
-
validate: (input) => /^\d{4,6}$/.test(input) || 'Code must be 4-6 digits',
|
|
210
|
-
},
|
|
211
|
-
]);
|
|
212
|
-
code = codeAnswer.code;
|
|
213
|
-
}
|
|
214
|
-
const spinner = createSpinner('Verifying email code...');
|
|
215
|
-
const verified = await ctx.sdk.verifyVault(vaultId, code);
|
|
216
|
-
if (verified) {
|
|
217
|
-
spinner.succeed('Vault verified successfully!');
|
|
218
|
-
return true;
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
spinner.fail('Invalid verification code');
|
|
222
|
-
error('\nx Verification failed. Please check the code and try again.');
|
|
223
|
-
warn('\nTip: Use --resend to get a new verification code:');
|
|
224
|
-
info(` npm run wallet verify ${vaultId} --resend`);
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Execute export vault command
|
|
230
|
-
*/
|
|
231
|
-
export async function executeExport(ctx, options = {}) {
|
|
232
|
-
const vault = await ctx.ensureActiveVault();
|
|
233
|
-
let encrypt = options.encrypt;
|
|
234
|
-
let password = options.password;
|
|
235
|
-
// Only prompt if --encrypt/--no-encrypt not specified
|
|
236
|
-
if (encrypt === undefined) {
|
|
237
|
-
const encryptAnswer = await inquirer.prompt([
|
|
238
|
-
{
|
|
239
|
-
type: 'confirm',
|
|
240
|
-
name: 'encrypt',
|
|
241
|
-
message: 'Encrypt export with password?',
|
|
242
|
-
default: true,
|
|
243
|
-
},
|
|
244
|
-
]);
|
|
245
|
-
encrypt = encryptAnswer.encrypt;
|
|
246
|
-
}
|
|
247
|
-
if (encrypt && !password) {
|
|
248
|
-
const passwordAnswer = await inquirer.prompt([
|
|
249
|
-
{
|
|
250
|
-
type: 'password',
|
|
251
|
-
name: 'password',
|
|
252
|
-
message: 'Enter password:',
|
|
253
|
-
mask: '*',
|
|
254
|
-
},
|
|
255
|
-
]);
|
|
256
|
-
password = passwordAnswer.password;
|
|
257
|
-
}
|
|
258
|
-
const spinner = createSpinner('Exporting vault...');
|
|
259
|
-
// Pass password to export if encrypting
|
|
260
|
-
const { data: vultContent } = await vault.export(encrypt ? password : undefined);
|
|
261
|
-
const fileName = options.outputPath || `${vault.name}-${vault.localPartyId}-vault.vult`;
|
|
262
|
-
await fs.writeFile(fileName, vultContent, 'utf-8');
|
|
263
|
-
spinner.succeed(`Vault exported: ${fileName}`);
|
|
264
|
-
success('\n+ Vault exported successfully!');
|
|
265
|
-
info(`File: ${fileName}`);
|
|
266
|
-
return fileName;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Execute list vaults command
|
|
270
|
-
*/
|
|
271
|
-
export async function executeVaults(ctx) {
|
|
272
|
-
const spinner = createSpinner('Loading vaults...');
|
|
273
|
-
const vaults = await ctx.sdk.listVaults();
|
|
274
|
-
spinner.succeed('Vaults loaded');
|
|
275
|
-
if (isJsonOutput()) {
|
|
276
|
-
const activeVault = ctx.getActiveVault();
|
|
277
|
-
outputJson({
|
|
278
|
-
vaults: vaults.map(v => ({
|
|
279
|
-
id: v.id,
|
|
280
|
-
name: v.name,
|
|
281
|
-
type: v.type,
|
|
282
|
-
chains: v.chains.length,
|
|
283
|
-
createdAt: v.createdAt,
|
|
284
|
-
isActive: activeVault?.id === v.id,
|
|
285
|
-
})),
|
|
286
|
-
});
|
|
287
|
-
return vaults;
|
|
288
|
-
}
|
|
289
|
-
if (vaults.length === 0) {
|
|
290
|
-
warn('\nNo vaults found. Create or import a vault first.');
|
|
291
|
-
return [];
|
|
292
|
-
}
|
|
293
|
-
const activeVault = ctx.getActiveVault();
|
|
294
|
-
displayVaultsList(vaults, activeVault);
|
|
295
|
-
info(chalk.gray('\nUse "npm run wallet switch <id>" to switch active vault'));
|
|
296
|
-
return vaults;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Execute switch vault command
|
|
300
|
-
*/
|
|
301
|
-
export async function executeSwitch(ctx, vaultId) {
|
|
302
|
-
const spinner = createSpinner('Loading vault...');
|
|
303
|
-
const vault = await ctx.sdk.getVaultById(vaultId);
|
|
304
|
-
if (!vault) {
|
|
305
|
-
spinner.fail('Vault not found');
|
|
306
|
-
throw new Error(`No vault found with ID: ${vaultId}`);
|
|
307
|
-
}
|
|
308
|
-
await ctx.setActiveVault(vault);
|
|
309
|
-
setupVaultEvents(vault);
|
|
310
|
-
spinner.succeed('Vault switched');
|
|
311
|
-
success(`\n+ Switched to vault: ${vault.name}`);
|
|
312
|
-
info(` Type: ${vault.type}`);
|
|
313
|
-
info(` Chains: ${vault.chains.length}`);
|
|
314
|
-
return vault;
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Execute rename vault command
|
|
318
|
-
*/
|
|
319
|
-
export async function executeRename(ctx, newName) {
|
|
320
|
-
const vault = await ctx.ensureActiveVault();
|
|
321
|
-
const oldName = vault.name;
|
|
322
|
-
const spinner = createSpinner('Renaming vault...');
|
|
323
|
-
await vault.rename(newName);
|
|
324
|
-
spinner.succeed('Vault renamed');
|
|
325
|
-
success(`\n+ Vault renamed from "${oldName}" to "${newName}"`);
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Execute vault info command
|
|
329
|
-
*/
|
|
330
|
-
export async function executeInfo(ctx) {
|
|
331
|
-
const vault = await ctx.ensureActiveVault();
|
|
332
|
-
if (isJsonOutput()) {
|
|
333
|
-
outputJson({
|
|
334
|
-
vault: {
|
|
335
|
-
id: vault.id,
|
|
336
|
-
name: vault.name,
|
|
337
|
-
type: vault.type,
|
|
338
|
-
createdAt: vault.createdAt,
|
|
339
|
-
lastModified: vault.lastModified,
|
|
340
|
-
isEncrypted: vault.isEncrypted,
|
|
341
|
-
isBackedUp: vault.isBackedUp,
|
|
342
|
-
libType: vault.libType,
|
|
343
|
-
threshold: vault.threshold,
|
|
344
|
-
totalSigners: vault.totalSigners,
|
|
345
|
-
localPartyId: vault.localPartyId,
|
|
346
|
-
availableSigningModes: [...vault.availableSigningModes],
|
|
347
|
-
chains: [...vault.chains],
|
|
348
|
-
currency: vault.currency,
|
|
349
|
-
publicKeys: {
|
|
350
|
-
ecdsa: vault.publicKeys.ecdsa,
|
|
351
|
-
eddsa: vault.publicKeys.eddsa,
|
|
352
|
-
chainCode: vault.hexChainCode,
|
|
353
|
-
},
|
|
354
|
-
},
|
|
355
|
-
});
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
displayVaultInfo(vault);
|
|
359
|
-
}
|
|
360
|
-
//# sourceMappingURL=vault-management.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault-management.js","sourceRoot":"","sources":["../../src/commands/vault-management.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAChH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAa7E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAmB,EACnB,UAA8B,EAAE,IAAI,EAAE,MAAM,EAAE;IAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC5C,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACnE,CAAC;IAED,oDAAoD;IACpD,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACvB,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAE/B,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,kBAAkB;SACvE,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,iBAAiB;YAC1B,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,wCAAwC;SAC3F,CAAC,CAAA;QACF,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,mBAAmB;YAC5B,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,KAAa,EAAE,GAAQ,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,QAAQ,IAAI,wBAAwB;SAC1F,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAQ,CAAA;QACvD,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAA;QAC3B,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IACzC,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,+BAA+B;oBACxC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,sBAAsB;iBAClF;aACF,CAAC,CAAA;YACF,KAAK,GAAG,WAAW,CAAC,KAAK,CAAA;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;QAElD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC;YAC3C,IAAI,EAAE,IAAK;YACX,QAAQ,EAAE,QAAS;YACnB,KAAK,EAAE,KAAM;YACb,UAAU,EAAE,IAAI,CAAC,EAAE;gBACjB,OAAO,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAA;YACtD,CAAC;SACF,CAAC,CAAA;QAEF,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9B,MAAM,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtC,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAA;QAEzC,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YAEvB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBAC1D,IAAI,CAAC,6CAA6C,CAAC,CAAA;gBAEnD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACvC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,6BAA6B,KAAK,eAAe;wBAC1D,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,yBAAyB;qBAClF;iBACF,CAAC,CAAA;gBACF,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;YACxB,CAAC;YAED,MAAM,aAAa,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAA;YAC9D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAK,CAAC,CAAA;YAEjE,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAA;YACvD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;gBAC/C,KAAK,CAAC,+DAA+D,CAAC,CAAA;gBACtE,IAAI,CAAC,+BAA+B,CAAC,CAAA;gBACrC,IAAI,CAAC,2BAA2B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,qCAAqC,CAAC,CAAA;gBAC3C,IAAI,CAAC,2BAA2B,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;gBAC1D,MAAM,GAAG,GAAQ,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;gBACjD,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAA;gBAChB,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAC7B,IAAI,CAAC,oDAAoD,CAAC,CAAA;QAC1D,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,iBAAiB,CAAC,CAAA;QAC5E,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,kBAAkB,CAAC,CAAA;QAC7E,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,wBAAwB,CAAC,CAAA;QAEnF,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;SAAM,CAAC;QACN,eAAe;QACf,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACjC,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAA;QAEhC,MAAM,aAAa,GAAG,EAAE,CAAA;QACxB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,wBAAwB;gBACjC,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,kCAAkC;aAC7E,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,CAAC,KAAa,EAAE,GAAQ,EAAE,EAAE;oBACpC,MAAM,CAAC,GAAG,SAAS,IAAI,GAAG,CAAC,SAAS,CAAA;oBACpC,OAAO,KAAK,IAAI,CAAC,IAAI,sCAAsC,CAAC,GAAG,CAAA;gBACjE,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAQ,CAAA;YACnE,SAAS,GAAG,SAAS,IAAI,aAAa,CAAC,SAAS,CAAA;YAChD,WAAW,GAAG,WAAW,IAAI,aAAa,CAAC,WAAW,CAAA;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAA;QAEzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAC7C,IAAI,EAAE,IAAK;gBACX,QAAQ,EAAE,QAAS;gBACnB,OAAO,EAAE,WAAY;gBACrB,SAAS,EAAE,SAAU;gBACrB,UAAU,EAAE,IAAI,CAAC,EAAE;oBACjB,OAAO,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAA;gBACtD,CAAC;aACF,CAAC,CAAA;YAEF,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtC,OAAO,CAAC,OAAO,CAAC,yBAAyB,IAAI,KAAK,SAAS,OAAO,WAAW,GAAG,CAAC,CAAA;YAEjF,IAAI,CAAC,wEAAwE,CAAC,CAAA;YAC9E,IAAI,CAAC,aAAa,SAAS,OAAO,WAAW,uBAAuB,SAAS,gCAAgC,CAAC,CAAA;YAE9G,OAAO,CAAC,oBAAoB,CAAC,CAAA;YAE7B,OAAO,MAAM,CAAC,KAAK,CAAA;QACrB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;YAC5C,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,2DAA2D,CAAC,CAAA;YACnE,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,IAAY;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACzC;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,sCAAsC;YAC/C,IAAI,EAAE,GAAG;SACV;KACF,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;IAEnD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAA;IAE3E,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvB,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IAC/B,OAAO,CAAC,OAAO,CAAC,mBAAmB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAEhD,OAAO,CAAC,kCAAkC,CAAC,CAAA;IAC3C,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAEvD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAmB,EACnB,OAAe,EACf,UAA+C,EAAE;IAEjD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,aAAa,CAAC,iCAAiC,CAAC,CAAA;QAChE,MAAM,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QAC3C,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAEvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACvC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,0BAA0B;gBACnC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,yBAAyB;aAClF;SACF,CAAC,CAAA;QACF,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAK,CAAC,CAAA;IAE1D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACzC,KAAK,CAAC,+DAA+D,CAAC,CAAA;QACtE,IAAI,CAAC,qDAAqD,CAAC,CAAA;QAC3D,IAAI,CAAC,2BAA2B,OAAO,WAAW,CAAC,CAAA;QACnD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAQD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,UAA8B,EAAE;IACvF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAE/B,sDAAsD;IACtD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC1C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAA;QACF,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;IACjC,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE,GAAG;aACV;SACF,CAAC,CAAA;QACF,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAA;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;IAEnD,wCAAwC;IACxC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY,aAAa,CAAA;IAEvF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IAElD,OAAO,CAAC,OAAO,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAA;IAE9C,OAAO,CAAC,kCAAkC,CAAC,CAAA;IAC3C,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAA;IAEzB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB;IACrD,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;IACzC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAEhC,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAA;QACxC,UAAU,CAAC;YACT,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;gBACvB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE;aACnC,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,oDAAoD,CAAC,CAAA;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAA;IACxC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAEtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAA;IAE7E,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,OAAe;IACtE,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IAC/B,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvB,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEjC,OAAO,CAAC,0BAA0B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAExC,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,OAAe;IACtE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;IAE1B,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAEhC,OAAO,CAAC,2BAA2B,OAAO,SAAS,OAAO,GAAG,CAAC,CAAA;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAmB;IACnD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,UAAU,CAAC;YACT,KAAK,EAAE;gBACL,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,qBAAqB,EAAE,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC;gBACvD,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE;oBACV,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;oBAC7B,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;oBAC7B,SAAS,EAAE,KAAK,CAAC,YAAY;iBAC9B;aACF;SACF,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC"}
|