@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/cli",
|
|
3
|
-
"version": "0.1.0
|
|
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": "
|
|
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": ">=
|
|
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"}
|
package/dist/adapters/index.js
DELETED
|
@@ -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"}
|
package/dist/commands/balance.js
DELETED
|
@@ -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":"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"}
|
package/dist/commands/chains.js
DELETED
|
@@ -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"}
|
package/dist/commands/index.js
DELETED
|
@@ -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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"}
|
package/dist/commands/swap.js
DELETED
|
@@ -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":"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"}
|