@vultisig/cli 0.1.0-alpha.1

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 +391 -0
  2. package/dist/adapters/cli-context.js +25 -0
  3. package/dist/adapters/cli-context.js.map +1 -0
  4. package/dist/adapters/cli-runner.js +47 -0
  5. package/dist/adapters/cli-runner.js.map +1 -0
  6. package/dist/adapters/index.js +6 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/commands/balance.js +65 -0
  9. package/dist/commands/balance.js.map +1 -0
  10. package/dist/commands/chains.js +46 -0
  11. package/dist/commands/chains.js.map +1 -0
  12. package/dist/commands/index.js +12 -0
  13. package/dist/commands/index.js.map +1 -0
  14. package/dist/commands/settings.js +151 -0
  15. package/dist/commands/settings.js.map +1 -0
  16. package/dist/commands/swap.js +180 -0
  17. package/dist/commands/swap.js.map +1 -0
  18. package/dist/commands/tokens.js +116 -0
  19. package/dist/commands/tokens.js.map +1 -0
  20. package/dist/commands/transaction.js +99 -0
  21. package/dist/commands/transaction.js.map +1 -0
  22. package/dist/commands/vault-management.js +360 -0
  23. package/dist/commands/vault-management.js.map +1 -0
  24. package/dist/core/command-context.js +81 -0
  25. package/dist/core/command-context.js.map +1 -0
  26. package/dist/core/index.js +7 -0
  27. package/dist/core/index.js.map +1 -0
  28. package/dist/core/password-manager.js +92 -0
  29. package/dist/core/password-manager.js.map +1 -0
  30. package/dist/core/types.js +2 -0
  31. package/dist/core/types.js.map +1 -0
  32. package/dist/index.js +440 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/interactive/completer.js +170 -0
  35. package/dist/interactive/completer.js.map +1 -0
  36. package/dist/interactive/event-buffer.js +186 -0
  37. package/dist/interactive/event-buffer.js.map +1 -0
  38. package/dist/interactive/index.js +9 -0
  39. package/dist/interactive/index.js.map +1 -0
  40. package/dist/interactive/session.js +525 -0
  41. package/dist/interactive/session.js.map +1 -0
  42. package/dist/interactive/shell-commands.js +167 -0
  43. package/dist/interactive/shell-commands.js.map +1 -0
  44. package/dist/interactive/shell-context.js +112 -0
  45. package/dist/interactive/shell-context.js.map +1 -0
  46. package/dist/lib/completion.js +375 -0
  47. package/dist/lib/completion.js.map +1 -0
  48. package/dist/lib/config.js +172 -0
  49. package/dist/lib/config.js.map +1 -0
  50. package/dist/lib/errors.js +163 -0
  51. package/dist/lib/errors.js.map +1 -0
  52. package/dist/lib/index.js +9 -0
  53. package/dist/lib/index.js.map +1 -0
  54. package/dist/lib/output.js +155 -0
  55. package/dist/lib/output.js.map +1 -0
  56. package/dist/lib/version.js +210 -0
  57. package/dist/lib/version.js.map +1 -0
  58. package/dist/ui.js +286 -0
  59. package/dist/ui.js.map +1 -0
  60. package/package.json +76 -0
package/README.md ADDED
@@ -0,0 +1,391 @@
1
+ # Vultisig CLI
2
+
3
+ Command-line wallet for Vultisig - secure multi-party computation (MPC) wallet management across 40+ blockchains.
4
+
5
+ > **Tip:** Use `vsig` as a shorthand alias for `vultisig` - all commands work with both!
6
+
7
+ ## Installation
8
+
9
+ ### npm (recommended)
10
+
11
+ ```bash
12
+ # Install globally
13
+ npm install -g @vultisig/cli
14
+
15
+ # Verify installation
16
+ vultisig --version
17
+ ```
18
+
19
+ ### npx (no installation)
20
+
21
+ ```bash
22
+ # Run directly without installing
23
+ npx @vultisig/cli balance ethereum
24
+ ```
25
+
26
+ ### From source
27
+
28
+ ```bash
29
+ # Clone the repository
30
+ git clone https://github.com/vultisig/vultisig-sdk.git
31
+ cd vultisig-sdk
32
+
33
+ # Install dependencies
34
+ yarn install
35
+
36
+ # Run CLI
37
+ yarn cli --help
38
+ ```
39
+
40
+ ## Shell Completion
41
+
42
+ Enable tab completion for commands, chains, and vault names (works for both `vultisig` and `vsig`):
43
+
44
+ ```bash
45
+ # Install completion for your shell
46
+ vultisig completion --install
47
+
48
+ # Or manually add to your shell config
49
+ vultisig completion bash >> ~/.bashrc
50
+ vultisig completion zsh >> ~/.zshrc
51
+ vultisig completion fish >> ~/.config/fish/completions/vultisig.fish
52
+ ```
53
+
54
+ ## Quick Start
55
+
56
+ ### Create a Vault
57
+
58
+ ```bash
59
+ vultisig create
60
+ ```
61
+
62
+ You'll be prompted to:
63
+ 1. Enter a vault name
64
+ 2. Set a password (min 8 characters)
65
+ 3. Provide an email for verification
66
+ 4. Enter the verification code sent to your email
67
+
68
+ ### Check Balances
69
+
70
+ ```bash
71
+ # All chains
72
+ vultisig balance
73
+
74
+ # Specific chain
75
+ vultisig balance ethereum
76
+
77
+ # Include token balances
78
+ vultisig balance ethereum --tokens
79
+ ```
80
+
81
+ ### Send Transaction
82
+
83
+ ```bash
84
+ # Send native token
85
+ vultisig send ethereum 0xRecipient... 0.1
86
+
87
+ # Send ERC-20 token
88
+ vultisig send ethereum 0xRecipient... 100 --token 0xTokenAddress...
89
+ ```
90
+
91
+ ### Interactive Shell
92
+
93
+ Start an interactive session with tab completion and password caching:
94
+
95
+ ```bash
96
+ vultisig --interactive
97
+ # or
98
+ vultisig -i
99
+ ```
100
+
101
+ ## Commands
102
+
103
+ ### Vault Management
104
+
105
+ | Command | Description |
106
+ |---------|-------------|
107
+ | `create` | Create a new vault |
108
+ | `import <file>` | Import vault from .vult file |
109
+ | `export [path]` | Export vault to file |
110
+ | `verify <vaultId>` | Verify vault with email code |
111
+ | `vaults` | List all stored vaults |
112
+ | `switch <vaultId>` | Switch to a different vault |
113
+ | `rename <newName>` | Rename the active vault |
114
+ | `info` | Show detailed vault information |
115
+
116
+ ### Wallet Operations
117
+
118
+ | Command | Description |
119
+ |---------|-------------|
120
+ | `balance [chain]` | Show balance for a chain or all chains |
121
+ | `send <chain> <to> <amount>` | Send tokens to an address |
122
+ | `addresses` | Show all vault addresses |
123
+ | `portfolio` | Show total portfolio value |
124
+
125
+ ### Chain & Token Management
126
+
127
+ | Command | Description |
128
+ |---------|-------------|
129
+ | `chains` | List and manage chains (--add, --remove) |
130
+ | `tokens <chain>` | List and manage tokens for a chain |
131
+
132
+ ### Swap Operations
133
+
134
+ | Command | Description |
135
+ |---------|-------------|
136
+ | `swap-chains` | List chains that support swaps |
137
+ | `swap-quote <from> <to> <amount>` | Get a swap quote |
138
+ | `swap <from> <to> <amount>` | Execute a swap |
139
+
140
+ ### Settings
141
+
142
+ | Command | Description |
143
+ |---------|-------------|
144
+ | `currency [code]` | View or set currency preference |
145
+ | `server` | Check server connectivity |
146
+ | `address-book` | Manage saved addresses |
147
+
148
+ ### CLI Management
149
+
150
+ | Command | Description |
151
+ |---------|-------------|
152
+ | `version` | Show detailed version info |
153
+ | `update` | Check for updates |
154
+ | `completion` | Generate shell completion |
155
+
156
+ ### Interactive Shell Commands
157
+
158
+ | Command | Description |
159
+ |---------|-------------|
160
+ | `lock` | Lock vault (clear cached password) |
161
+ | `unlock` | Unlock vault (cache password) |
162
+ | `status` | Show vault status |
163
+ | `help` | Show available commands |
164
+ | `.exit` | Exit the shell |
165
+
166
+ ## Global Options
167
+
168
+ ```
169
+ -v, --version Show version
170
+ -i, --interactive Start interactive shell mode
171
+ -o, --output <format> Output format: table, json (default: table)
172
+ --silent Suppress informational output, show only results
173
+ --debug Enable debug output
174
+ -h, --help Show help
175
+ ```
176
+
177
+ ### Silent Mode
178
+
179
+ Use `--silent` to suppress spinners, progress messages, and informational output. Only results and errors are shown:
180
+
181
+ ```bash
182
+ # Normal output shows spinners and status messages
183
+ vultisig balance ethereum
184
+ # ✓ Loading vault...
185
+ # ✓ Fetching balance...
186
+ # ETH: 1.5
187
+
188
+ # Silent mode shows only the result
189
+ vultisig balance ethereum --silent
190
+ # ETH: 1.5
191
+ ```
192
+
193
+ Silent mode is useful for scripts where you only want the final output.
194
+
195
+ ### JSON Output
196
+
197
+ Use `-o json` or `--output json` to get structured JSON output. JSON mode automatically enables silent mode:
198
+
199
+ ```bash
200
+ # Get balance as JSON
201
+ vultisig balance ethereum -o json
202
+ ```
203
+ ```json
204
+ {
205
+ "chain": "ethereum",
206
+ "balance": {
207
+ "native": "1.5",
208
+ "symbol": "ETH",
209
+ "usdValue": "3750.00"
210
+ }
211
+ }
212
+ ```
213
+
214
+ ```bash
215
+ # Get all balances as JSON
216
+ vultisig balance -o json
217
+ ```
218
+ ```json
219
+ {
220
+ "balances": [
221
+ { "chain": "ethereum", "native": "1.5", "symbol": "ETH", "usdValue": "3750.00" },
222
+ { "chain": "bitcoin", "native": "0.1", "symbol": "BTC", "usdValue": "6500.00" }
223
+ ]
224
+ }
225
+ ```
226
+
227
+ ```bash
228
+ # Get portfolio as JSON
229
+ vultisig portfolio -o json
230
+ ```
231
+ ```json
232
+ {
233
+ "portfolio": {
234
+ "totalUsdValue": "10250.00",
235
+ "chains": [...]
236
+ },
237
+ "currency": "USD"
238
+ }
239
+ ```
240
+
241
+ ```bash
242
+ # List vaults as JSON
243
+ vultisig vaults -o json
244
+ ```
245
+ ```json
246
+ {
247
+ "vaults": [
248
+ { "id": "abc123", "name": "Main Wallet", "isActive": true }
249
+ ],
250
+ "activeVaultId": "abc123"
251
+ }
252
+ ```
253
+
254
+ ```bash
255
+ # Get swap quote as JSON
256
+ vultisig swap-quote ethereum thorchain 0.1 -o json
257
+ ```
258
+ ```json
259
+ {
260
+ "quote": {
261
+ "fromChain": "ethereum",
262
+ "toChain": "thorchain",
263
+ "fromAmount": "0.1",
264
+ "expectedOutput": "125.5",
265
+ "route": "..."
266
+ }
267
+ }
268
+ ```
269
+
270
+ JSON output is ideal for:
271
+ - Scripting and automation
272
+ - Parsing output programmatically
273
+ - Integration with other tools (e.g., `jq`):
274
+
275
+ ```bash
276
+ # Extract just the ETH balance using jq
277
+ vultisig balance ethereum -o json | jq -r '.balance.native'
278
+
279
+ # Get total portfolio value
280
+ vultisig portfolio -o json | jq -r '.portfolio.totalUsdValue'
281
+ ```
282
+
283
+ ## Configuration
284
+
285
+ ### Environment Variables
286
+
287
+ ```bash
288
+ # Override config directory
289
+ VULTISIG_CONFIG_DIR=/custom/path
290
+
291
+ # Disable colored output
292
+ VULTISIG_NO_COLOR=1
293
+
294
+ # Enable silent mode (suppress spinners and info messages)
295
+ VULTISIG_SILENT=1
296
+
297
+ # Enable debug output
298
+ VULTISIG_DEBUG=1
299
+
300
+ # Disable update checking
301
+ VULTISIG_NO_UPDATE_CHECK=1
302
+
303
+ # Vault password (for automation - use with caution!)
304
+ VAULT_PASSWORD=mypassword
305
+
306
+ # Multiple vault passwords
307
+ VAULT_PASSWORDS="Vault1:pass1 Vault2:pass2"
308
+ ```
309
+
310
+ ### Config Directory
311
+
312
+ Configuration is stored in `~/.vultisig/`:
313
+
314
+ ```
315
+ ~/.vultisig/
316
+ ├── config.json # User preferences
317
+ ├── vaults/ # Vault data
318
+ ├── cache/ # Version checks, etc.
319
+ └── address-book.json
320
+ ```
321
+
322
+ ## Security Best Practices
323
+
324
+ - Never store passwords in plain text for production use
325
+ - Always verify transaction details before confirming
326
+ - Use testnets for development and testing
327
+ - Keep vault backup files in a secure location
328
+ - Never commit .vult files or .env with passwords to git
329
+
330
+ ## Supported Chains
331
+
332
+ 40+ blockchains including:
333
+ - **EVM**: Ethereum, Polygon, Arbitrum, Optimism, BSC, Base, Avalanche
334
+ - **UTXO**: Bitcoin, Litecoin, Dogecoin, Dash, Zcash
335
+ - **Cosmos**: Cosmos Hub, THORChain, Maya, Dydx, Kujira
336
+ - **Others**: Solana, Sui, Polkadot, Ripple
337
+
338
+ ## Exit Codes
339
+
340
+ | Code | Meaning |
341
+ |------|---------|
342
+ | 0 | Success |
343
+ | 1 | General error |
344
+ | 2 | Invalid usage |
345
+ | 3 | Configuration error |
346
+ | 4 | Authentication error |
347
+ | 5 | Network error |
348
+ | 6 | Vault error |
349
+ | 7 | Transaction error |
350
+
351
+ ## Troubleshooting
352
+
353
+ ### "No active vault" error
354
+
355
+ Create or import a vault first:
356
+ ```bash
357
+ vultisig create
358
+ # or
359
+ vultisig import /path/to/vault.vult
360
+ ```
361
+
362
+ ### Network errors
363
+
364
+ 1. Check your internet connection
365
+ 2. Run `vultisig server` to check connectivity
366
+ 3. Try again in a few moments
367
+
368
+ ### Update issues
369
+
370
+ ```bash
371
+ # Check for updates
372
+ vultisig update --check
373
+
374
+ # Update manually
375
+ npm update -g @vultisig/cli
376
+ ```
377
+
378
+ ## Documentation
379
+
380
+ - [SDK Documentation](../../packages/sdk/README.md)
381
+ - [API Reference](https://docs.vultisig.com)
382
+
383
+ ## Support
384
+
385
+ - [GitHub Issues](https://github.com/vultisig/vultisig-sdk/issues)
386
+ - [Discord](https://discord.gg/vultisig)
387
+ - [Documentation](https://docs.vultisig.com)
388
+
389
+ ## License
390
+
391
+ MIT
@@ -0,0 +1,25 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,47 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Adapter exports
3
+ */
4
+ export { CLIContext, createCLIContext } from './cli-context';
5
+ export { runCommand, withExit } from './cli-runner';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,65 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
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"}