@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.
Files changed (60) hide show
  1. package/README.md +6 -0
  2. package/dist/index.js +3185 -361
  3. package/package.json +4 -3
  4. package/dist/adapters/cli-context.js +0 -25
  5. package/dist/adapters/cli-context.js.map +0 -1
  6. package/dist/adapters/cli-runner.js +0 -47
  7. package/dist/adapters/cli-runner.js.map +0 -1
  8. package/dist/adapters/index.js +0 -6
  9. package/dist/adapters/index.js.map +0 -1
  10. package/dist/commands/balance.js +0 -65
  11. package/dist/commands/balance.js.map +0 -1
  12. package/dist/commands/chains.js +0 -46
  13. package/dist/commands/chains.js.map +0 -1
  14. package/dist/commands/index.js +0 -12
  15. package/dist/commands/index.js.map +0 -1
  16. package/dist/commands/settings.js +0 -151
  17. package/dist/commands/settings.js.map +0 -1
  18. package/dist/commands/swap.js +0 -180
  19. package/dist/commands/swap.js.map +0 -1
  20. package/dist/commands/tokens.js +0 -116
  21. package/dist/commands/tokens.js.map +0 -1
  22. package/dist/commands/transaction.js +0 -99
  23. package/dist/commands/transaction.js.map +0 -1
  24. package/dist/commands/vault-management.js +0 -360
  25. package/dist/commands/vault-management.js.map +0 -1
  26. package/dist/core/command-context.js +0 -81
  27. package/dist/core/command-context.js.map +0 -1
  28. package/dist/core/index.js +0 -7
  29. package/dist/core/index.js.map +0 -1
  30. package/dist/core/password-manager.js +0 -92
  31. package/dist/core/password-manager.js.map +0 -1
  32. package/dist/core/types.js +0 -2
  33. package/dist/core/types.js.map +0 -1
  34. package/dist/index.js.map +0 -1
  35. package/dist/interactive/completer.js +0 -170
  36. package/dist/interactive/completer.js.map +0 -1
  37. package/dist/interactive/event-buffer.js +0 -186
  38. package/dist/interactive/event-buffer.js.map +0 -1
  39. package/dist/interactive/index.js +0 -9
  40. package/dist/interactive/index.js.map +0 -1
  41. package/dist/interactive/session.js +0 -525
  42. package/dist/interactive/session.js.map +0 -1
  43. package/dist/interactive/shell-commands.js +0 -167
  44. package/dist/interactive/shell-commands.js.map +0 -1
  45. package/dist/interactive/shell-context.js +0 -112
  46. package/dist/interactive/shell-context.js.map +0 -1
  47. package/dist/lib/completion.js +0 -375
  48. package/dist/lib/completion.js.map +0 -1
  49. package/dist/lib/config.js +0 -172
  50. package/dist/lib/config.js.map +0 -1
  51. package/dist/lib/errors.js +0 -163
  52. package/dist/lib/errors.js.map +0 -1
  53. package/dist/lib/index.js +0 -9
  54. package/dist/lib/index.js.map +0 -1
  55. package/dist/lib/output.js +0 -155
  56. package/dist/lib/output.js.map +0 -1
  57. package/dist/lib/version.js +0 -210
  58. package/dist/lib/version.js.map +0 -1
  59. package/dist/ui.js +0 -286
  60. package/dist/ui.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/cli",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0",
4
4
  "description": "Command-line wallet for Vultisig - multi-chain MPC wallet management",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,7 @@
14
14
  "LICENSE"
15
15
  ],
16
16
  "scripts": {
17
- "build": "tsc",
17
+ "build": "esbuild src/index.ts --bundle --platform=node --target=node20 --format=esm --outfile=dist/index.js --external:@vultisig/sdk --external:dotenv --external:chalk --external:commander --external:inquirer --external:ora --external:cli-table3 --external:tabtab --external:ws",
18
18
  "start": "node dist/index.js",
19
19
  "dev": "npx tsx src/index.ts",
20
20
  "cli": "npx tsx src/index.ts",
@@ -63,11 +63,12 @@
63
63
  "@types/node": "^22.13.10",
64
64
  "@types/tabtab": "^3.0.4",
65
65
  "@types/ws": "^8.18.1",
66
+ "esbuild": "^0.24.0",
66
67
  "tsx": "^4.7.0",
67
68
  "typescript": "^5.8.2"
68
69
  },
69
70
  "engines": {
70
- "node": ">=18.0.0"
71
+ "node": ">=20.0.0"
71
72
  },
72
73
  "publishConfig": {
73
74
  "access": "public",
@@ -1,25 +0,0 @@
1
- import { BaseCommandContext } from '../core/command-context';
2
- import { getPassword } from '../core/password-manager';
3
- /**
4
- * CLI-specific implementation of CommandContext
5
- */
6
- export class CLIContext extends BaseCommandContext {
7
- get isInteractive() {
8
- return false;
9
- }
10
- /**
11
- * Get password for a vault
12
- * In CLI mode, we check env vars first, then prompt
13
- * No caching since each command runs independently
14
- */
15
- async getPassword(vaultId, vaultName) {
16
- return getPassword(vaultId, vaultName);
17
- }
18
- }
19
- /**
20
- * Create a CLI context from an initialized SDK
21
- */
22
- export function createCLIContext(sdk) {
23
- return new CLIContext(sdk);
24
- }
25
- //# sourceMappingURL=cli-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-context.js","sourceRoot":"","sources":["../../src/adapters/cli-context.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,kBAAkB;IAChD,IAAI,aAAa;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,SAAkB;QACnD,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAa;IAC5C,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * CLI Runner - Wraps command execution for CLI mode
3
- *
4
- * Provides:
5
- * - Error handling with process exit
6
- * - Consistent exit codes
7
- * - Cleanup on completion
8
- */
9
- import { isJsonOutput, outputJsonError, printError } from '../lib/output';
10
- /**
11
- * Wrap a command handler with CLI exit behavior
12
- * - Exits with code 0 on success
13
- * - Exits with code 1 on error (or custom exitCode)
14
- */
15
- export function withExit(handler) {
16
- return async (...args) => {
17
- try {
18
- await handler(...args);
19
- process.exit(0);
20
- }
21
- catch (err) {
22
- const exitCode = err.exitCode ?? 1;
23
- // In JSON mode, output structured error
24
- if (isJsonOutput()) {
25
- outputJsonError(err.message, err.code ?? 'GENERAL_ERROR');
26
- process.exit(exitCode);
27
- }
28
- if (err.exitCode !== undefined) {
29
- process.exit(err.exitCode);
30
- }
31
- printError(`\nx ${err.message}`);
32
- process.exit(1);
33
- }
34
- };
35
- }
36
- /**
37
- * Run a command with context and automatic cleanup
38
- */
39
- export async function runCommand(ctx, handler) {
40
- try {
41
- return await handler();
42
- }
43
- finally {
44
- // Context cleanup happens in the withExit wrapper
45
- }
46
- }
47
- //# sourceMappingURL=cli-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../src/adapters/cli-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGzE;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAkB,OAAsC;IAC9E,OAAO,KAAK,EAAE,GAAG,IAAO,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAA;YAElC,wCAAwC;YACxC,IAAI,YAAY,EAAE,EAAE,CAAC;gBACnB,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,eAAe,CAAC,CAAA;gBACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,CAAC;YACD,UAAU,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,GAAe,EAAE,OAAyB;IAC5E,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,EAAE,CAAA;IACxB,CAAC;YAAS,CAAC;QACT,kDAAkD;IACpD,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Adapter exports
3
- */
4
- export { CLIContext, createCLIContext } from './cli-context';
5
- export { runCommand, withExit } from './cli-runner';
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA"}
@@ -1,65 +0,0 @@
1
- import { fiatCurrencies, fiatCurrencyNameRecord } from '@vultisig/sdk';
2
- import { createSpinner, error, isJsonOutput, outputJson, warn } from '../lib/output';
3
- import { displayBalance, displayBalancesTable, displayPortfolio } from '../ui';
4
- /**
5
- * Execute balance command - show balance for one chain or all chains
6
- */
7
- export async function executeBalance(ctx, options = {}) {
8
- const vault = await ctx.ensureActiveVault();
9
- const spinner = createSpinner('Loading balances...');
10
- if (options.chain) {
11
- const balance = await vault.balance(options.chain);
12
- spinner.succeed('Balance loaded');
13
- if (isJsonOutput()) {
14
- outputJson({ chain: options.chain, balance });
15
- return;
16
- }
17
- displayBalance(options.chain, balance);
18
- }
19
- else {
20
- const balances = await vault.balances(undefined, options.includeTokens);
21
- spinner.succeed('Balances loaded');
22
- if (isJsonOutput()) {
23
- outputJson({ balances });
24
- return;
25
- }
26
- displayBalancesTable(balances);
27
- }
28
- }
29
- /**
30
- * Execute portfolio command - show total portfolio value with breakdown
31
- */
32
- export async function executePortfolio(ctx, options = {}) {
33
- const vault = await ctx.ensureActiveVault();
34
- const currency = options.currency || 'usd';
35
- if (!fiatCurrencies.includes(currency)) {
36
- error(`x Invalid currency: ${currency}`);
37
- warn(`Supported currencies: ${fiatCurrencies.join(', ')}`);
38
- throw new Error('Invalid currency');
39
- }
40
- if (vault.currency !== currency) {
41
- await vault.setCurrency(currency);
42
- }
43
- const currencyName = fiatCurrencyNameRecord[currency];
44
- const spinner = createSpinner(`Loading portfolio in ${currencyName}...`);
45
- const totalValue = await vault.getTotalValue(currency);
46
- const chains = vault.chains;
47
- const chainBalances = await Promise.all(chains.map(async (chain) => {
48
- const balance = await vault.balance(chain);
49
- try {
50
- const value = await vault.getValue(chain, undefined, currency);
51
- return { chain, balance, value };
52
- }
53
- catch {
54
- return { chain, balance };
55
- }
56
- }));
57
- const portfolio = { totalValue, chainBalances };
58
- spinner.succeed('Portfolio loaded');
59
- if (isJsonOutput()) {
60
- outputJson({ portfolio, currency });
61
- return;
62
- }
63
- displayPortfolio(portfolio, currency);
64
- }
65
- //# sourceMappingURL=balance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAGtE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAO9E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAmB,EAAE,UAA0B,EAAE;IACpF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAA;IAEpD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClD,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAEjC,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YAC7C,OAAM;QACR,CAAC;QACD,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;QACvE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAElC,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QACD,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAMD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAmB,EAAE,UAA4B,EAAE;IACxF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;IAE1C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,yBAAyB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1D,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,aAAa,CAAC,wBAAwB,YAAY,KAAK,CAAC,CAAA;IAExE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAE3B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;QACvB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;YAC9D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,SAAS,GAAqB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAA;IAEjE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEnC,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnC,OAAM;IACR,CAAC;IACD,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AACvC,CAAC"}
@@ -1,46 +0,0 @@
1
- import chalk from 'chalk';
2
- import { createSpinner, info, isJsonOutput, outputJson, printResult, success } from '../lib/output';
3
- import { displayAddresses } from '../ui';
4
- /**
5
- * Execute chains command - list, add, or remove chains
6
- */
7
- export async function executeChains(ctx, options = {}) {
8
- const vault = await ctx.ensureActiveVault();
9
- if (options.add) {
10
- await vault.addChain(options.add);
11
- success(`\n+ Added chain: ${options.add}`);
12
- const address = await vault.address(options.add);
13
- info(`Address: ${address}`);
14
- }
15
- else if (options.remove) {
16
- await vault.removeChain(options.remove);
17
- success(`\n+ Removed chain: ${options.remove}`);
18
- }
19
- else {
20
- const chains = vault.chains;
21
- if (isJsonOutput()) {
22
- outputJson({ chains: [...chains] });
23
- return;
24
- }
25
- printResult(chalk.cyan('\nActive Chains:\n'));
26
- chains.forEach((chain) => {
27
- printResult(` - ${chain}`);
28
- });
29
- info(chalk.gray('\nUse --add <chain> to add a chain or --remove <chain> to remove one'));
30
- }
31
- }
32
- /**
33
- * Execute addresses command - show all vault addresses
34
- */
35
- export async function executeAddresses(ctx) {
36
- const vault = await ctx.ensureActiveVault();
37
- const spinner = createSpinner('Loading addresses...');
38
- const addresses = await vault.addresses();
39
- spinner.succeed('Addresses loaded');
40
- if (isJsonOutput()) {
41
- outputJson({ addresses });
42
- return;
43
- }
44
- displayAddresses(addresses);
45
- }
46
- //# sourceMappingURL=chains.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/commands/chains.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAOxC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB,EAAE,UAAyB,EAAE;IAClF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,CAAC,oBAAoB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChD,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;IAC7B,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACvC,OAAO,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAE3B,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;YACnC,OAAM;QACR,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,EAAE;YAC9B,WAAW,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC,CAAA;IAC1F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAmB;IACxD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAA;IAEzC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEnC,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;QACzB,OAAM;IACR,CAAC;IAED,gBAAgB,CAAC,SAAS,CAAC,CAAA;AAC7B,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Command exports - all command logic for CLI and Interactive Shell
3
- */
4
- export { executeBalance, executePortfolio } from './balance';
5
- export { executeAddresses, executeChains } from './chains';
6
- export { addToken, executeTokens, listTokens, removeToken } from './tokens';
7
- // Transaction commands
8
- export { executeSend, sendTransaction } from './transaction';
9
- export { executeCreate, executeExport, executeImport, executeInfo, executeRename, executeSwitch, executeVaults, executeVerify, } from './vault-management';
10
- export { executeSwap, executeSwapChains, executeSwapQuote } from './swap';
11
- export { executeAddressBook, executeCurrency, executeServer } from './settings';
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAI5D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3E,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAI5D,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,oBAAoB,CAAA;AAI3B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAIzE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -1,151 +0,0 @@
1
- import { Chain, fiatCurrencies, fiatCurrencyNameRecord } from '@vultisig/sdk';
2
- import chalk from 'chalk';
3
- import inquirer from 'inquirer';
4
- import { createSpinner, error, info, isJsonOutput, outputJson, printResult, printTable, success, warn, } from '../lib/output';
5
- /**
6
- * Execute currency command - view or set currency preference
7
- */
8
- export async function executeCurrency(ctx, newCurrency) {
9
- const vault = await ctx.ensureActiveVault();
10
- if (!newCurrency) {
11
- const currentCurrency = vault.currency;
12
- const currencyName = fiatCurrencyNameRecord[currentCurrency];
13
- printResult(chalk.cyan('\nCurrent Currency Preference:'));
14
- printResult(` ${chalk.green(currentCurrency.toUpperCase())} - ${currencyName}`);
15
- info(chalk.gray(`\nSupported currencies: ${fiatCurrencies.join(', ')}`));
16
- info(chalk.gray('Use "npm run wallet currency <code>" to change'));
17
- return currentCurrency;
18
- }
19
- const currency = newCurrency.toLowerCase();
20
- if (!fiatCurrencies.includes(currency)) {
21
- error(`x Invalid currency: ${newCurrency}`);
22
- warn(`Supported currencies: ${fiatCurrencies.join(', ')}`);
23
- throw new Error('Invalid currency');
24
- }
25
- const spinner = createSpinner('Updating currency preference...');
26
- await vault.setCurrency(currency);
27
- spinner.succeed('Currency updated');
28
- const currencyName = fiatCurrencyNameRecord[currency];
29
- success(`\n+ Currency preference set to ${currency.toUpperCase()} (${currencyName})`);
30
- return currency;
31
- }
32
- /**
33
- * Execute server status command
34
- */
35
- export async function executeServer(ctx) {
36
- const spinner = createSpinner('Checking server status...');
37
- try {
38
- const status = await ctx.sdk.getServerStatus();
39
- spinner.succeed('Server status retrieved');
40
- if (isJsonOutput()) {
41
- outputJson({ server: status });
42
- return status;
43
- }
44
- printResult(chalk.cyan('\nServer Status:\n'));
45
- printResult(chalk.bold('Fast Vault Server:'));
46
- printResult(` Online: ${status.fastVault.online ? chalk.green('Yes') : chalk.red('No')}`);
47
- if (status.fastVault.latency) {
48
- printResult(` Latency: ${status.fastVault.latency}ms`);
49
- }
50
- printResult(chalk.bold('\nMessage Relay:'));
51
- printResult(` Online: ${status.messageRelay.online ? chalk.green('Yes') : chalk.red('No')}`);
52
- if (status.messageRelay.latency) {
53
- printResult(` Latency: ${status.messageRelay.latency}ms`);
54
- }
55
- return status;
56
- }
57
- catch (err) {
58
- spinner.fail('Failed to check server status');
59
- error(`\nx ${err.message}`);
60
- throw err;
61
- }
62
- }
63
- /**
64
- * Execute address-book command - manage address book
65
- */
66
- export async function executeAddressBook(ctx, options = {}) {
67
- if (options.add) {
68
- // Use CLI options if provided, otherwise prompt
69
- let chain = options.chain;
70
- let address = options.address;
71
- let name = options.name;
72
- const prompts = [];
73
- if (!chain) {
74
- prompts.push({
75
- type: 'list',
76
- name: 'chain',
77
- message: 'Select chain:',
78
- choices: Object.values(Chain),
79
- });
80
- }
81
- if (!address) {
82
- prompts.push({
83
- type: 'input',
84
- name: 'address',
85
- message: 'Enter address:',
86
- validate: (input) => input.trim() !== '' || 'Address is required',
87
- });
88
- }
89
- if (!name) {
90
- prompts.push({
91
- type: 'input',
92
- name: 'name',
93
- message: 'Enter name/label:',
94
- validate: (input) => input.trim() !== '' || 'Name is required',
95
- });
96
- }
97
- if (prompts.length > 0) {
98
- const answers = await inquirer.prompt(prompts);
99
- chain = chain || answers.chain;
100
- address = address || answers.address?.trim();
101
- name = name || answers.name?.trim();
102
- }
103
- const spinner = createSpinner('Adding address to address book...');
104
- await ctx.sdk.addAddressBookEntry([
105
- {
106
- chain: chain,
107
- address: address,
108
- name: name,
109
- source: 'saved',
110
- dateAdded: Date.now(),
111
- },
112
- ]);
113
- spinner.succeed('Address added');
114
- success(`\n+ Added ${name} (${chain}: ${address})`);
115
- return [];
116
- }
117
- if (options.remove) {
118
- const spinner = createSpinner('Removing address from address book...');
119
- await ctx.sdk.removeAddressBookEntry([{ address: options.remove, chain: options.chain }]);
120
- spinner.succeed('Address removed');
121
- success(`\n+ Removed ${options.remove}`);
122
- return [];
123
- }
124
- // List address book
125
- const spinner = createSpinner('Loading address book...');
126
- const addressBook = await ctx.sdk.getAddressBook(options.chain);
127
- spinner.succeed('Address book loaded');
128
- // Combine saved and vault addresses
129
- const allEntries = [...addressBook.saved, ...addressBook.vaults];
130
- if (isJsonOutput()) {
131
- outputJson({ addressBook: allEntries, chain: options.chain });
132
- return allEntries;
133
- }
134
- if (allEntries.length === 0) {
135
- warn(`\nNo addresses in address book${options.chain ? ` for ${options.chain}` : ''}`);
136
- info(chalk.gray('\nUse --add to add an address to the address book'));
137
- }
138
- else {
139
- printResult(chalk.cyan(`\nAddress Book${options.chain ? ` (${options.chain})` : ''}:\n`));
140
- const table = allEntries.map(entry => ({
141
- Name: entry.name,
142
- Chain: entry.chain,
143
- Address: entry.address,
144
- Source: entry.source,
145
- }));
146
- printTable(table);
147
- info(chalk.gray('\nUse --add to add or --remove <address> to remove an address'));
148
- }
149
- return allEntries;
150
- }
151
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
1
- import { createSpinner, info, isJsonOutput, outputJson, warn } from '../lib/output';
2
- import { confirmSwap, displaySwapChains, displaySwapPreview, displaySwapResult } from '../ui';
3
- /**
4
- * Execute swap-chains command - list supported swap chains
5
- */
6
- export async function executeSwapChains(ctx) {
7
- const vault = await ctx.ensureActiveVault();
8
- const spinner = createSpinner('Loading supported swap chains...');
9
- const chains = await vault.getSupportedSwapChains();
10
- spinner.succeed('Swap chains loaded');
11
- if (isJsonOutput()) {
12
- outputJson({ swapChains: [...chains] });
13
- return chains;
14
- }
15
- displaySwapChains(chains);
16
- return chains;
17
- }
18
- /**
19
- * Execute swap-quote command - get quote without executing
20
- */
21
- export async function executeSwapQuote(ctx, options) {
22
- const vault = await ctx.ensureActiveVault();
23
- if (isNaN(options.amount) || options.amount <= 0) {
24
- throw new Error('Invalid amount');
25
- }
26
- // Check swap support
27
- const isSupported = await vault.isSwapSupported(options.fromChain, options.toChain);
28
- if (!isSupported) {
29
- throw new Error(`Swaps from ${options.fromChain} to ${options.toChain} are not supported`);
30
- }
31
- const spinner = createSpinner('Getting swap quote...');
32
- const quote = await vault.getSwapQuote({
33
- fromCoin: { chain: options.fromChain, token: options.fromToken },
34
- toCoin: { chain: options.toChain, token: options.toToken },
35
- amount: options.amount,
36
- fiatCurrency: 'usd', // Request fiat conversion
37
- });
38
- spinner.succeed('Quote received');
39
- if (isJsonOutput()) {
40
- outputJson({
41
- fromChain: options.fromChain,
42
- toChain: options.toChain,
43
- amount: options.amount,
44
- quote,
45
- });
46
- return quote;
47
- }
48
- // Get native token for fee display (fees are paid in native token)
49
- const feeBalance = await vault.balance(options.fromChain);
50
- // Use coin info from quote for accurate decimals and symbols
51
- displaySwapPreview(quote, String(options.amount), quote.fromCoin.ticker, quote.toCoin.ticker, {
52
- fromDecimals: quote.fromCoin.decimals,
53
- toDecimals: quote.toCoin.decimals,
54
- feeDecimals: feeBalance.decimals,
55
- feeSymbol: feeBalance.symbol,
56
- });
57
- info('\nTo execute this swap, use the "swap" command');
58
- return quote;
59
- }
60
- /**
61
- * Execute swap command - perform a cross-chain swap
62
- */
63
- export async function executeSwap(ctx, options) {
64
- const vault = await ctx.ensureActiveVault();
65
- if (isNaN(options.amount) || options.amount <= 0) {
66
- throw new Error('Invalid amount');
67
- }
68
- // Check swap support
69
- const isSupported = await vault.isSwapSupported(options.fromChain, options.toChain);
70
- if (!isSupported) {
71
- throw new Error(`Swaps from ${options.fromChain} to ${options.toChain} are not supported`);
72
- }
73
- // 1. Get swap quote
74
- const quoteSpinner = createSpinner('Getting swap quote...');
75
- const quote = await vault.getSwapQuote({
76
- fromCoin: { chain: options.fromChain, token: options.fromToken },
77
- toCoin: { chain: options.toChain, token: options.toToken },
78
- amount: options.amount,
79
- fiatCurrency: 'usd', // Request fiat conversion
80
- });
81
- quoteSpinner.succeed('Quote received');
82
- // Get native token for fee display (fees are paid in native token)
83
- const feeBalance = await vault.balance(options.fromChain);
84
- // 2. Display preview using coin info from quote for accurate decimals (skip in JSON mode)
85
- if (!isJsonOutput()) {
86
- displaySwapPreview(quote, String(options.amount), quote.fromCoin.ticker, quote.toCoin.ticker, {
87
- fromDecimals: quote.fromCoin.decimals,
88
- toDecimals: quote.toCoin.decimals,
89
- feeDecimals: feeBalance.decimals,
90
- feeSymbol: feeBalance.symbol,
91
- });
92
- }
93
- // 3. Confirm with user (skip if --yes flag is set or JSON mode)
94
- if (!options.yes && !isJsonOutput()) {
95
- const confirmed = await confirmSwap();
96
- if (!confirmed) {
97
- warn('Swap cancelled');
98
- throw new Error('Swap cancelled by user');
99
- }
100
- }
101
- // 4. Prepare swap transaction
102
- const prepSpinner = createSpinner('Preparing swap transaction...');
103
- const { keysignPayload, approvalPayload } = await vault.prepareSwapTx({
104
- fromCoin: { chain: options.fromChain, token: options.fromToken },
105
- toCoin: { chain: options.toChain, token: options.toToken },
106
- amount: options.amount,
107
- swapQuote: quote,
108
- autoApprove: false,
109
- });
110
- prepSpinner.succeed('Swap prepared');
111
- // 5. Handle approval if needed
112
- if (approvalPayload) {
113
- info('\nToken approval required before swap...');
114
- const approvalSpinner = createSpinner('Signing approval transaction...');
115
- vault.on('signingProgress', ({ step }) => {
116
- approvalSpinner.text = `Approval: ${step.message} (${step.progress}%)`;
117
- });
118
- try {
119
- const approvalHashes = await vault.extractMessageHashes(approvalPayload);
120
- const approvalSig = await vault.sign({
121
- transaction: approvalPayload,
122
- chain: options.fromChain,
123
- messageHashes: approvalHashes,
124
- });
125
- approvalSpinner.succeed('Approval signed');
126
- const broadcastApprovalSpinner = createSpinner('Broadcasting approval...');
127
- const approvalTxHash = await vault.broadcastTx({
128
- chain: options.fromChain,
129
- keysignPayload: approvalPayload,
130
- signature: approvalSig,
131
- });
132
- broadcastApprovalSpinner.succeed(`Approval broadcast: ${approvalTxHash}`);
133
- info('Waiting for approval to confirm...');
134
- // Wait a bit for approval to be mined
135
- await new Promise(resolve => setTimeout(resolve, 5000));
136
- }
137
- finally {
138
- vault.removeAllListeners('signingProgress');
139
- }
140
- }
141
- // 6. Sign main swap transaction
142
- const signSpinner = createSpinner('Signing swap transaction...');
143
- vault.on('signingProgress', ({ step }) => {
144
- signSpinner.text = `${step.message} (${step.progress}%)`;
145
- });
146
- try {
147
- const messageHashes = await vault.extractMessageHashes(keysignPayload);
148
- const signature = await vault.sign({
149
- transaction: keysignPayload,
150
- chain: options.fromChain,
151
- messageHashes,
152
- });
153
- signSpinner.succeed('Swap transaction signed');
154
- // 7. Broadcast swap
155
- const broadcastSpinner = createSpinner('Broadcasting swap transaction...');
156
- const txHash = await vault.broadcastTx({
157
- chain: options.fromChain,
158
- keysignPayload,
159
- signature,
160
- });
161
- broadcastSpinner.succeed(`Swap broadcast: ${txHash}`);
162
- // 8. Display result
163
- if (isJsonOutput()) {
164
- outputJson({
165
- txHash,
166
- fromChain: options.fromChain,
167
- toChain: options.toChain,
168
- quote,
169
- });
170
- }
171
- else {
172
- displaySwapResult(options.fromChain, options.toChain, txHash, quote, quote.toCoin.decimals);
173
- }
174
- return { txHash, quote };
175
- }
176
- finally {
177
- vault.removeAllListeners('signingProgress');
178
- }
179
- }
180
- //# sourceMappingURL=swap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/commands/swap.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAE7F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAmB;IACzD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,kCAAkC,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE,CAAA;IACnD,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAErC,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QACvC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,iBAAiB,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,MAAM,CAAA;AACf,CAAC;AAUD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAmB,EAAE,OAAyB;IACnF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,OAAO,OAAO,CAAC,OAAO,oBAAoB,CAAC,CAAA;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAA;IAEtD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;QACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;QAChE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;QAC1D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,KAAK,EAAE,0BAA0B;KAChD,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEjC,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,UAAU,CAAC;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK;SACN,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mEAAmE;IACnE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAEzD,6DAA6D;IAC7D,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QAC5F,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QACjC,WAAW,EAAE,UAAU,CAAC,QAAQ;QAChC,SAAS,EAAE,UAAU,CAAC,MAAM;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAEtD,OAAO,KAAK,CAAA;AACd,CAAC;AAOD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAmB,EACnB,OAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,OAAO,OAAO,CAAC,OAAO,oBAAoB,CAAC,CAAA;IAC5F,CAAC;IAED,oBAAoB;IACpB,MAAM,YAAY,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAA;IAE3D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;QACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;QAChE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;QAC1D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,KAAK,EAAE,0BAA0B;KAChD,CAAC,CAAA;IAEF,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEtC,mEAAmE;IACnE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAEzD,0FAA0F;IAC1F,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5F,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACrC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YACjC,WAAW,EAAE,UAAU,CAAC,QAAQ;YAChC,SAAS,EAAE,UAAU,CAAC,MAAM;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAA;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,+BAA+B,CAAC,CAAA;IAElE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACpE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;QAChE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;QAC1D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAA;IAEF,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAEpC,+BAA+B;IAC/B,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,0CAA0C,CAAC,CAAA;QAEhD,MAAM,eAAe,GAAG,aAAa,CAAC,iCAAiC,CAAC,CAAA;QAExE,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAO,EAAE,EAAE;YAC5C,eAAe,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAA;QACxE,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAA;YACxE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBACnC,WAAW,EAAE,eAAe;gBAC5B,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,aAAa,EAAE,cAAc;aAC9B,CAAC,CAAA;YAEF,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;YAE1C,MAAM,wBAAwB,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAA;YAC1E,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;gBAC7C,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,cAAc,EAAE,eAAe;gBAC/B,SAAS,EAAE,WAAW;aACvB,CAAC,CAAA;YAEF,wBAAwB,CAAC,OAAO,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,oCAAoC,CAAC,CAAA;YAE1C,sCAAsC;YACtC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAA;IAEhE,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,cAAc,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;YACjC,WAAW,EAAE,cAAc;YAC3B,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,aAAa;SACd,CAAC,CAAA;QAEF,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAE9C,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,aAAa,CAAC,kCAAkC,CAAC,CAAA;QAE1E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;YACrC,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,cAAc;YACd,SAAS;SACV,CAAC,CAAA;QAEF,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAA;QAErD,oBAAoB;QACpB,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC;gBACT,MAAM;gBACN,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC7F,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1B,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC"}