@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
@@ -1,116 +0,0 @@
1
- import chalk from 'chalk';
2
- import inquirer from 'inquirer';
3
- import { createSpinner, info, isJsonOutput, outputJson, printResult, printTable, success, warn } from '../lib/output';
4
- /**
5
- * Execute tokens command - list, add, or remove tokens
6
- */
7
- export async function executeTokens(ctx, options) {
8
- // Ensure vault is active before any operation
9
- await ctx.ensureActiveVault();
10
- if (options.add) {
11
- // Use CLI options if provided, otherwise prompt
12
- let symbol = options.symbol;
13
- let name = options.name;
14
- let decimals = options.decimals;
15
- // Only prompt for missing values
16
- const prompts = [];
17
- if (!symbol) {
18
- prompts.push({
19
- type: 'input',
20
- name: 'symbol',
21
- message: 'Enter token symbol (e.g., USDT):',
22
- validate: (input) => input.trim() !== '' || 'Symbol is required',
23
- });
24
- }
25
- if (!name) {
26
- prompts.push({
27
- type: 'input',
28
- name: 'name',
29
- message: 'Enter token name (e.g., Tether USD):',
30
- validate: (input) => input.trim() !== '' || 'Name is required',
31
- });
32
- }
33
- if (decimals === undefined) {
34
- prompts.push({
35
- type: 'number',
36
- name: 'decimals',
37
- message: 'Enter token decimals:',
38
- default: 18,
39
- validate: (input) => input >= 0 || 'Decimals must be non-negative',
40
- });
41
- }
42
- if (prompts.length > 0) {
43
- const answers = await inquirer.prompt(prompts);
44
- symbol = symbol || answers.symbol?.trim();
45
- name = name || answers.name?.trim();
46
- decimals = decimals ?? answers.decimals;
47
- }
48
- await addToken(ctx, {
49
- chain: options.chain,
50
- contractAddress: options.add,
51
- symbol: symbol,
52
- name: name,
53
- decimals: decimals,
54
- });
55
- }
56
- else if (options.remove) {
57
- await removeToken(ctx, options.chain, options.remove);
58
- }
59
- else {
60
- await listTokens(ctx, options.chain);
61
- }
62
- }
63
- /**
64
- * Add a token to a chain
65
- */
66
- export async function addToken(ctx, options) {
67
- const vault = await ctx.ensureActiveVault();
68
- await vault.addToken(options.chain, {
69
- id: `${options.chain}-${options.contractAddress}`,
70
- contractAddress: options.contractAddress,
71
- symbol: options.symbol,
72
- name: options.name,
73
- decimals: options.decimals,
74
- chainId: options.chain,
75
- isNative: false,
76
- });
77
- success(`\n+ Added token ${options.symbol} on ${options.chain}`);
78
- }
79
- /**
80
- * Remove a token from a chain
81
- */
82
- export async function removeToken(ctx, chain, tokenId) {
83
- const vault = await ctx.ensureActiveVault();
84
- await vault.removeToken(chain, tokenId);
85
- success(`\n+ Removed token ${tokenId} from ${chain}`);
86
- }
87
- /**
88
- * List tokens for a chain
89
- */
90
- export async function listTokens(ctx, chain) {
91
- const vault = await ctx.ensureActiveVault();
92
- const spinner = createSpinner(`Loading tokens for ${chain}...`);
93
- const tokens = vault.getTokens(chain);
94
- spinner.succeed(`Tokens loaded for ${chain}`);
95
- if (isJsonOutput()) {
96
- outputJson({ chain, tokens: tokens || [] });
97
- return;
98
- }
99
- if (!tokens || tokens.length === 0) {
100
- warn(`\nNo tokens configured for ${chain}`);
101
- info(chalk.gray(`\nUse --add <contractAddress> to add a token`));
102
- }
103
- else {
104
- printResult(chalk.cyan(`\nTokens for ${chain}:\n`));
105
- const table = tokens.map(token => ({
106
- Symbol: token.symbol,
107
- Name: token.name,
108
- Contract: token.contractAddress || 'N/A',
109
- Decimals: token.decimals,
110
- Native: token.isNative ? 'Yes' : 'No',
111
- }));
112
- printTable(table);
113
- info(chalk.gray(`\nUse --add <contractAddress> to add or --remove <tokenId> to remove`));
114
- }
115
- }
116
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
@@ -1,99 +0,0 @@
1
- import { Chain, Vultisig } from '@vultisig/sdk';
2
- import { createSpinner, isJsonOutput, outputJson, warn } from '../lib/output';
3
- import { confirmTransaction, displayTransactionPreview, displayTransactionResult } from '../ui';
4
- /**
5
- * Execute send command - send tokens to an address
6
- */
7
- export async function executeSend(ctx, params) {
8
- const vault = await ctx.ensureActiveVault();
9
- if (!Object.values(Chain).includes(params.chain)) {
10
- throw new Error(`Invalid chain: ${params.chain}`);
11
- }
12
- if (isNaN(parseFloat(params.amount)) || parseFloat(params.amount) <= 0) {
13
- throw new Error('Invalid amount');
14
- }
15
- return sendTransaction(vault, params);
16
- }
17
- /**
18
- * Send transaction with full flow: prepare -> confirm -> sign -> broadcast
19
- */
20
- export async function sendTransaction(vault, params) {
21
- // 1. Prepare transaction
22
- const prepareSpinner = createSpinner('Preparing transaction...');
23
- const address = await vault.address(params.chain);
24
- const balance = await vault.balance(params.chain, params.tokenId);
25
- const coin = {
26
- chain: params.chain,
27
- address,
28
- decimals: balance.decimals,
29
- ticker: balance.symbol,
30
- id: params.tokenId,
31
- };
32
- const amount = BigInt(Math.floor(parseFloat(params.amount) * Math.pow(10, balance.decimals)));
33
- const payload = await vault.prepareSendTx({
34
- coin,
35
- receiver: params.to,
36
- amount,
37
- memo: params.memo,
38
- });
39
- prepareSpinner.succeed('Transaction prepared');
40
- // 2. Get gas estimate
41
- let gas;
42
- try {
43
- gas = await vault.gas(params.chain);
44
- }
45
- catch {
46
- warn('\nGas estimation unavailable');
47
- }
48
- // 3. Show transaction preview (skip in JSON mode)
49
- if (!isJsonOutput()) {
50
- displayTransactionPreview(payload.coin.address, params.to, params.amount, payload.coin.ticker, params.chain, params.memo, gas);
51
- }
52
- // 4. Confirm with user (skip if --yes flag is set or JSON mode)
53
- if (!params.yes && !isJsonOutput()) {
54
- const confirmed = await confirmTransaction();
55
- if (!confirmed) {
56
- warn('Transaction cancelled');
57
- throw new Error('Transaction cancelled by user');
58
- }
59
- }
60
- // 5. Sign transaction
61
- const signSpinner = createSpinner('Signing transaction...');
62
- vault.on('signingProgress', ({ step }) => {
63
- signSpinner.text = `${step.message} (${step.progress}%)`;
64
- });
65
- try {
66
- const messageHashes = await vault.extractMessageHashes(payload);
67
- const signature = await vault.sign({
68
- transaction: payload,
69
- chain: payload.coin.chain,
70
- messageHashes,
71
- });
72
- signSpinner.succeed('Transaction signed');
73
- // 6. Broadcast transaction
74
- const broadcastSpinner = createSpinner('Broadcasting transaction...');
75
- const txHash = await vault.broadcastTx({
76
- chain: params.chain,
77
- keysignPayload: payload,
78
- signature,
79
- });
80
- broadcastSpinner.succeed(`Transaction broadcast: ${txHash}`);
81
- const result = {
82
- txHash,
83
- chain: params.chain,
84
- explorerUrl: Vultisig.getTxExplorerUrl(params.chain, txHash),
85
- };
86
- // 7. Display result
87
- if (isJsonOutput()) {
88
- outputJson(result);
89
- }
90
- else {
91
- displayTransactionResult(params.chain, txHash);
92
- }
93
- return result;
94
- }
95
- finally {
96
- vault.removeAllListeners('signingProgress');
97
- }
98
- }
99
- //# sourceMappingURL=transaction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/commands/transaction.ts"],"names":[],"mappings":"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"}
@@ -1,360 +0,0 @@
1
- import chalk from 'chalk';
2
- import { promises as fs } from 'fs';
3
- import inquirer from 'inquirer';
4
- import { createSpinner, error, info, isJsonOutput, outputJson, printResult, success, warn } from '../lib/output';
5
- import { displayVaultInfo, displayVaultsList, setupVaultEvents } from '../ui';
6
- /**
7
- * Execute create vault command
8
- */
9
- export async function executeCreate(ctx, options = { type: 'fast' }) {
10
- const vaultType = options.type.toLowerCase();
11
- if (vaultType !== 'fast' && vaultType !== 'secure') {
12
- throw new Error('Invalid vault type. Must be "fast" or "secure"');
13
- }
14
- // Use provided options or prompt for missing values
15
- let name = options.name;
16
- let password = options.password;
17
- const prompts = [];
18
- if (!name) {
19
- prompts.push({
20
- type: 'input',
21
- name: 'name',
22
- message: 'Enter vault name:',
23
- validate: (input) => input.trim() !== '' || 'Name is required',
24
- });
25
- }
26
- if (!password) {
27
- prompts.push({
28
- type: 'password',
29
- name: 'password',
30
- message: 'Enter password:',
31
- mask: '*',
32
- validate: (input) => input.length >= 8 || 'Password must be at least 8 characters',
33
- });
34
- prompts.push({
35
- type: 'password',
36
- name: 'confirmPassword',
37
- message: 'Confirm password:',
38
- mask: '*',
39
- validate: (input, ans) => input === ans.password || 'Passwords do not match',
40
- });
41
- }
42
- if (prompts.length > 0) {
43
- const answers = (await inquirer.prompt(prompts));
44
- name = name || answers.name;
45
- password = password || answers.password;
46
- }
47
- if (vaultType === 'fast') {
48
- let email = options.email;
49
- if (!email) {
50
- const emailAnswer = await inquirer.prompt([
51
- {
52
- type: 'input',
53
- name: 'email',
54
- message: 'Enter email for verification:',
55
- validate: (input) => /\S+@\S+\.\S+/.test(input) || 'Invalid email format',
56
- },
57
- ]);
58
- email = emailAnswer.email;
59
- }
60
- const spinner = createSpinner('Creating vault...');
61
- const result = await ctx.sdk.createFastVault({
62
- name: name,
63
- password: password,
64
- email: email,
65
- onProgress: step => {
66
- spinner.text = `${step.message} (${step.progress}%)`;
67
- },
68
- });
69
- setupVaultEvents(result.vault);
70
- await ctx.setActiveVault(result.vault);
71
- spinner.succeed(`Vault created: ${name}`);
72
- if (result.verificationRequired) {
73
- let code = options.code;
74
- if (!code) {
75
- warn('\nA verification code has been sent to your email.');
76
- info('Please check your inbox and enter the code.');
77
- const codeAnswer = await inquirer.prompt([
78
- {
79
- type: 'input',
80
- name: 'code',
81
- message: `Verification code sent to ${email}. Enter code:`,
82
- validate: (input) => /^\d{4,6}$/.test(input) || 'Code must be 4-6 digits',
83
- },
84
- ]);
85
- code = codeAnswer.code;
86
- }
87
- const verifySpinner = createSpinner('Verifying email code...');
88
- const verified = await ctx.sdk.verifyVault(result.vaultId, code);
89
- if (verified) {
90
- verifySpinner.succeed('Email verified successfully!');
91
- }
92
- else {
93
- verifySpinner.fail('Invalid verification code');
94
- error('\nx Verification failed. Please check the code and try again.');
95
- warn('\nTo retry verification, use:');
96
- info(` npm run wallet verify ${result.vaultId}`);
97
- warn('\nTo resend the verification email:');
98
- info(` npm run wallet verify ${result.vaultId} --resend`);
99
- const err = new Error('Verification failed');
100
- err.exitCode = 1;
101
- throw err;
102
- }
103
- }
104
- success('\n+ Vault created!');
105
- info('\nYour vault is ready. Run the following commands:');
106
- printResult(chalk.cyan(' npm run wallet balance ') + '- View balances');
107
- printResult(chalk.cyan(' npm run wallet addresses ') + '- View addresses');
108
- printResult(chalk.cyan(' npm run wallet portfolio ') + '- View portfolio value');
109
- return result.vault;
110
- }
111
- else {
112
- // Secure vault
113
- let threshold = options.threshold;
114
- let totalShares = options.shares;
115
- const securePrompts = [];
116
- if (threshold === undefined) {
117
- securePrompts.push({
118
- type: 'number',
119
- name: 'threshold',
120
- message: 'Signing threshold (m):',
121
- default: 2,
122
- validate: (input) => input > 0 || 'Threshold must be greater than 0',
123
- });
124
- }
125
- if (totalShares === undefined) {
126
- securePrompts.push({
127
- type: 'number',
128
- name: 'totalShares',
129
- message: 'Total shares (n):',
130
- default: 3,
131
- validate: (input, ans) => {
132
- const t = threshold ?? ans.threshold;
133
- return input >= t || `Total shares must be >= threshold (${t})`;
134
- },
135
- });
136
- }
137
- if (securePrompts.length > 0) {
138
- const secureAnswers = (await inquirer.prompt(securePrompts));
139
- threshold = threshold ?? secureAnswers.threshold;
140
- totalShares = totalShares ?? secureAnswers.totalShares;
141
- }
142
- const spinner = createSpinner('Creating secure vault...');
143
- try {
144
- const result = await ctx.sdk.createSecureVault({
145
- name: name,
146
- password: password,
147
- devices: totalShares,
148
- threshold: threshold,
149
- onProgress: step => {
150
- spinner.text = `${step.message} (${step.progress}%)`;
151
- },
152
- });
153
- setupVaultEvents(result.vault);
154
- await ctx.setActiveVault(result.vault);
155
- spinner.succeed(`Secure vault created: ${name} (${threshold}-of-${totalShares})`);
156
- warn(`\nImportant: Save your vault backup file (.vult) in a secure location.`);
157
- warn(`This is a ${threshold}-of-${totalShares} vault. You'll need ${threshold} devices to sign transactions.`);
158
- success('\n+ Vault created!');
159
- return result.vault;
160
- }
161
- catch (err) {
162
- spinner.fail('Secure vault creation failed');
163
- if (err.message?.includes('not implemented')) {
164
- warn('\nSecure vault creation is not yet implemented in the SDK');
165
- }
166
- throw err;
167
- }
168
- }
169
- }
170
- /**
171
- * Execute import vault command
172
- */
173
- export async function executeImport(ctx, file) {
174
- const { password } = await inquirer.prompt([
175
- {
176
- type: 'password',
177
- name: 'password',
178
- message: 'Enter vault password (if encrypted):',
179
- mask: '*',
180
- },
181
- ]);
182
- const spinner = createSpinner('Importing vault...');
183
- const vultContent = await fs.readFile(file, 'utf-8');
184
- const vault = await ctx.sdk.importVault(vultContent, password || undefined);
185
- setupVaultEvents(vault);
186
- await ctx.setActiveVault(vault);
187
- spinner.succeed(`Vault imported: ${vault.name}`);
188
- success('\n+ Vault imported successfully!');
189
- info('\nRun "npm run wallet balance" to view balances');
190
- return vault;
191
- }
192
- /**
193
- * Execute verify vault command
194
- */
195
- export async function executeVerify(ctx, vaultId, options = {}) {
196
- if (options.resend) {
197
- const spinner = createSpinner('Resending verification email...');
198
- await ctx.sdk.resendVaultVerification(vaultId);
199
- spinner.succeed('Verification email sent!');
200
- info('Check your inbox for the new verification code.');
201
- }
202
- let code = options.code;
203
- if (!code) {
204
- const codeAnswer = await inquirer.prompt([
205
- {
206
- type: 'input',
207
- name: 'code',
208
- message: 'Enter verification code:',
209
- validate: (input) => /^\d{4,6}$/.test(input) || 'Code must be 4-6 digits',
210
- },
211
- ]);
212
- code = codeAnswer.code;
213
- }
214
- const spinner = createSpinner('Verifying email code...');
215
- const verified = await ctx.sdk.verifyVault(vaultId, code);
216
- if (verified) {
217
- spinner.succeed('Vault verified successfully!');
218
- return true;
219
- }
220
- else {
221
- spinner.fail('Invalid verification code');
222
- error('\nx Verification failed. Please check the code and try again.');
223
- warn('\nTip: Use --resend to get a new verification code:');
224
- info(` npm run wallet verify ${vaultId} --resend`);
225
- return false;
226
- }
227
- }
228
- /**
229
- * Execute export vault command
230
- */
231
- export async function executeExport(ctx, options = {}) {
232
- const vault = await ctx.ensureActiveVault();
233
- let encrypt = options.encrypt;
234
- let password = options.password;
235
- // Only prompt if --encrypt/--no-encrypt not specified
236
- if (encrypt === undefined) {
237
- const encryptAnswer = await inquirer.prompt([
238
- {
239
- type: 'confirm',
240
- name: 'encrypt',
241
- message: 'Encrypt export with password?',
242
- default: true,
243
- },
244
- ]);
245
- encrypt = encryptAnswer.encrypt;
246
- }
247
- if (encrypt && !password) {
248
- const passwordAnswer = await inquirer.prompt([
249
- {
250
- type: 'password',
251
- name: 'password',
252
- message: 'Enter password:',
253
- mask: '*',
254
- },
255
- ]);
256
- password = passwordAnswer.password;
257
- }
258
- const spinner = createSpinner('Exporting vault...');
259
- // Pass password to export if encrypting
260
- const { data: vultContent } = await vault.export(encrypt ? password : undefined);
261
- const fileName = options.outputPath || `${vault.name}-${vault.localPartyId}-vault.vult`;
262
- await fs.writeFile(fileName, vultContent, 'utf-8');
263
- spinner.succeed(`Vault exported: ${fileName}`);
264
- success('\n+ Vault exported successfully!');
265
- info(`File: ${fileName}`);
266
- return fileName;
267
- }
268
- /**
269
- * Execute list vaults command
270
- */
271
- export async function executeVaults(ctx) {
272
- const spinner = createSpinner('Loading vaults...');
273
- const vaults = await ctx.sdk.listVaults();
274
- spinner.succeed('Vaults loaded');
275
- if (isJsonOutput()) {
276
- const activeVault = ctx.getActiveVault();
277
- outputJson({
278
- vaults: vaults.map(v => ({
279
- id: v.id,
280
- name: v.name,
281
- type: v.type,
282
- chains: v.chains.length,
283
- createdAt: v.createdAt,
284
- isActive: activeVault?.id === v.id,
285
- })),
286
- });
287
- return vaults;
288
- }
289
- if (vaults.length === 0) {
290
- warn('\nNo vaults found. Create or import a vault first.');
291
- return [];
292
- }
293
- const activeVault = ctx.getActiveVault();
294
- displayVaultsList(vaults, activeVault);
295
- info(chalk.gray('\nUse "npm run wallet switch <id>" to switch active vault'));
296
- return vaults;
297
- }
298
- /**
299
- * Execute switch vault command
300
- */
301
- export async function executeSwitch(ctx, vaultId) {
302
- const spinner = createSpinner('Loading vault...');
303
- const vault = await ctx.sdk.getVaultById(vaultId);
304
- if (!vault) {
305
- spinner.fail('Vault not found');
306
- throw new Error(`No vault found with ID: ${vaultId}`);
307
- }
308
- await ctx.setActiveVault(vault);
309
- setupVaultEvents(vault);
310
- spinner.succeed('Vault switched');
311
- success(`\n+ Switched to vault: ${vault.name}`);
312
- info(` Type: ${vault.type}`);
313
- info(` Chains: ${vault.chains.length}`);
314
- return vault;
315
- }
316
- /**
317
- * Execute rename vault command
318
- */
319
- export async function executeRename(ctx, newName) {
320
- const vault = await ctx.ensureActiveVault();
321
- const oldName = vault.name;
322
- const spinner = createSpinner('Renaming vault...');
323
- await vault.rename(newName);
324
- spinner.succeed('Vault renamed');
325
- success(`\n+ Vault renamed from "${oldName}" to "${newName}"`);
326
- }
327
- /**
328
- * Execute vault info command
329
- */
330
- export async function executeInfo(ctx) {
331
- const vault = await ctx.ensureActiveVault();
332
- if (isJsonOutput()) {
333
- outputJson({
334
- vault: {
335
- id: vault.id,
336
- name: vault.name,
337
- type: vault.type,
338
- createdAt: vault.createdAt,
339
- lastModified: vault.lastModified,
340
- isEncrypted: vault.isEncrypted,
341
- isBackedUp: vault.isBackedUp,
342
- libType: vault.libType,
343
- threshold: vault.threshold,
344
- totalSigners: vault.totalSigners,
345
- localPartyId: vault.localPartyId,
346
- availableSigningModes: [...vault.availableSigningModes],
347
- chains: [...vault.chains],
348
- currency: vault.currency,
349
- publicKeys: {
350
- ecdsa: vault.publicKeys.ecdsa,
351
- eddsa: vault.publicKeys.eddsa,
352
- chainCode: vault.hexChainCode,
353
- },
354
- },
355
- });
356
- return;
357
- }
358
- displayVaultInfo(vault);
359
- }
360
- //# sourceMappingURL=vault-management.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vault-management.js","sourceRoot":"","sources":["../../src/commands/vault-management.ts"],"names":[],"mappings":"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"}