@vultisig/client-shared 0.2.8 → 0.2.9
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/CHANGELOG.md +7 -0
- package/dist/auth-setup.d.ts.map +1 -1
- package/dist/auth-setup.js +139 -137
- package/dist/auth-setup.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @vultisig/client-shared
|
|
2
2
|
|
|
3
|
+
## 0.2.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`c2fd086`](https://github.com/vultisig/vultisig-sdk/commit/c2fd08670ad67e9ec93443569f9b9b9aa5f9d685), [`1667b79`](https://github.com/vultisig/vultisig-sdk/commit/1667b79fbc754e36032942fb5e749706dfc09bf3), [`46274d7`](https://github.com/vultisig/vultisig-sdk/commit/46274d70fe19fb2f44bc90d9ec0cd4ac1994ae69), [`0c9f6d5`](https://github.com/vultisig/vultisig-sdk/commit/0c9f6d5139d4a096645a575505c7550c2b26bd2a)]:
|
|
8
|
+
- @vultisig/sdk@0.25.0
|
|
9
|
+
|
|
3
10
|
## 0.2.8
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/dist/auth-setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-setup.d.ts","sourceRoot":"","sources":["../src/auth-setup.ts"],"names":[],"mappings":"AAoBA,KAAK,aAAa,GAAG;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;
|
|
1
|
+
{"version":3,"file":"auth-setup.d.ts","sourceRoot":"","sources":["../src/auth-setup.ts"],"names":[],"mappings":"AAoBA,KAAK,aAAa,GAAG;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAyLD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,CAAC,CAgBrF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAChD,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC,CAC/E,CAeA;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBhG"}
|
package/dist/auth-setup.js
CHANGED
|
@@ -7,151 +7,153 @@ import inquirer from 'inquirer';
|
|
|
7
7
|
import { loadConfig, saveConfig } from './config-store.js';
|
|
8
8
|
import { clearCredentials, getStoredServerPassword, isUsingFileFallback, setDecryptionPassword, setFilePassphrase, setServerPassword, } from './credential-store.js';
|
|
9
9
|
import { discoverVaultFiles, SEARCH_DIRS } from './vault-discovery.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
throw new Error('Multiple vault files found but no TTY available. Use --vault-file <path> to specify which vault to use.');
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const { selected } = await inquirer.prompt([
|
|
33
|
-
{ type: 'list', name: 'selected', message: 'Select a vault file:', choices: files },
|
|
34
|
-
]);
|
|
35
|
-
vaultFilePath = selected;
|
|
36
|
-
}
|
|
10
|
+
async function resolveVaultFilePath(opts) {
|
|
11
|
+
if (opts.vaultFile)
|
|
12
|
+
return opts.vaultFile;
|
|
13
|
+
const config = await loadConfig();
|
|
14
|
+
const extraDirs = config.vaults
|
|
15
|
+
.map(v => v.filePath)
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.map(f => dirname(f));
|
|
18
|
+
const files = await discoverVaultFiles(extraDirs);
|
|
19
|
+
if (files.length === 0) {
|
|
20
|
+
const searched = [...SEARCH_DIRS, process.cwd()].join('\n - ');
|
|
21
|
+
throw new Error(`No .vult files found. Searched:\n - ${searched}\n\n` +
|
|
22
|
+
'Export your vault from the Vultisig app and place the .vult file in one of these locations,\n' +
|
|
23
|
+
'or specify the path directly: vsig auth setup --vault-file /path/to/vault.vult');
|
|
24
|
+
}
|
|
25
|
+
if (files.length === 1)
|
|
26
|
+
return files[0];
|
|
27
|
+
if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
28
|
+
throw new Error('Multiple vault files found but no TTY available. Use --vault-file <path> to specify which vault to use.');
|
|
37
29
|
}
|
|
38
|
-
|
|
30
|
+
const { selected } = await inquirer.prompt([
|
|
31
|
+
{ type: 'list', name: 'selected', message: 'Select a vault file:', choices: files },
|
|
32
|
+
]);
|
|
33
|
+
if (!selected)
|
|
39
34
|
throw new Error('No vault file selected');
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
return selected;
|
|
36
|
+
}
|
|
37
|
+
async function importEncryptedVaultFromEnv(sdk, vaultContent) {
|
|
38
|
+
const envDecryptPw = process.env.VAULT_DECRYPT_PASSWORD;
|
|
39
|
+
if (!envDecryptPw)
|
|
40
|
+
throw new Error('unreachable: missing VAULT_DECRYPT_PASSWORD');
|
|
42
41
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
type: 'password',
|
|
66
|
-
name: 'password',
|
|
67
|
-
message: attempt === 1
|
|
68
|
-
? 'Enter vault file password (the password you chose when exporting/backing up from the Vultisig app):'
|
|
69
|
-
: `Wrong password. Try again (attempt ${attempt}/${MAX_ATTEMPTS}):`,
|
|
70
|
-
mask: '*',
|
|
71
|
-
},
|
|
72
|
-
]);
|
|
73
|
-
try {
|
|
74
|
-
vault = await sdk.importVault(vaultContent, password);
|
|
75
|
-
decryptPassword = password;
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
if (attempt === MAX_ATTEMPTS) {
|
|
80
|
-
throw new Error('Failed to decrypt vault after 3 attempts. Check your decryption password.');
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
vault = await sdk.importVault(vaultContent, undefined);
|
|
88
|
-
}
|
|
89
|
-
if (!vault)
|
|
90
|
-
throw new Error('unreachable: vault must be set after decrypt loop');
|
|
91
|
-
const v = vault;
|
|
92
|
-
let serverPassword;
|
|
93
|
-
const envServerPw = process.env.VAULT_PASSWORD;
|
|
94
|
-
if (envServerPw) {
|
|
95
|
-
serverPassword = envServerPw;
|
|
96
|
-
}
|
|
97
|
-
else if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
98
|
-
throw new Error('No TTY available for password prompt. Set VAULT_PASSWORD env var for non-interactive usage.');
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const response = await inquirer.prompt([
|
|
102
|
-
{
|
|
103
|
-
type: 'password',
|
|
104
|
-
name: 'serverPassword',
|
|
105
|
-
message: 'Enter VultiServer password (your server signing password, used for 2-of-2 MPC signing):',
|
|
106
|
-
mask: '*',
|
|
107
|
-
},
|
|
108
|
-
]);
|
|
109
|
-
serverPassword = response.serverPassword;
|
|
110
|
-
}
|
|
42
|
+
return {
|
|
43
|
+
vault: await sdk.importVault(vaultContent, envDecryptPw),
|
|
44
|
+
decryptPassword: envDecryptPw,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new Error('VAULT_DECRYPT_PASSWORD is set but failed to decrypt the vault. Check that the password is correct.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function importEncryptedVaultInteractively(sdk, vaultContent) {
|
|
52
|
+
const MAX_ATTEMPTS = 3;
|
|
53
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
54
|
+
const { password } = await inquirer.prompt([
|
|
55
|
+
{
|
|
56
|
+
type: 'password',
|
|
57
|
+
name: 'password',
|
|
58
|
+
message: attempt === 1
|
|
59
|
+
? 'Enter vault file password (the password you chose when exporting/backing up from the Vultisig app):'
|
|
60
|
+
: `Wrong password. Try again (attempt ${attempt}/${MAX_ATTEMPTS}):`,
|
|
61
|
+
mask: '*',
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
111
64
|
try {
|
|
112
|
-
await
|
|
113
|
-
if (isEncrypted && decryptPassword) {
|
|
114
|
-
await setDecryptionPassword(v.id, decryptPassword);
|
|
115
|
-
}
|
|
65
|
+
return { vault: await sdk.importVault(vaultContent, password), decryptPassword: password };
|
|
116
66
|
}
|
|
117
67
|
catch {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
let passphrase;
|
|
121
|
-
if (envPassphrase) {
|
|
122
|
-
passphrase = envPassphrase;
|
|
123
|
-
}
|
|
124
|
-
else if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
125
|
-
throw new Error('OS keyring unavailable and no TTY for passphrase prompt. Set VULTISIG_CREDENTIALS_PASSPHRASE env var.');
|
|
68
|
+
if (attempt === MAX_ATTEMPTS) {
|
|
69
|
+
throw new Error('Failed to decrypt vault after 3 attempts. Check your decryption password.');
|
|
126
70
|
}
|
|
127
|
-
else {
|
|
128
|
-
const response = await inquirer.prompt([
|
|
129
|
-
{
|
|
130
|
-
type: 'password',
|
|
131
|
-
name: 'passphrase',
|
|
132
|
-
message: 'OS keyring unavailable. Enter a passphrase to encrypt credentials on disk (~/.vultisig/credentials.enc):',
|
|
133
|
-
mask: '*',
|
|
134
|
-
},
|
|
135
|
-
]);
|
|
136
|
-
passphrase = response.passphrase;
|
|
137
|
-
}
|
|
138
|
-
setFilePassphrase(passphrase);
|
|
139
|
-
await setServerPassword(v.id, serverPassword);
|
|
140
|
-
if (isEncrypted && decryptPassword) {
|
|
141
|
-
await setDecryptionPassword(v.id, decryptPassword);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
const config = await loadConfig();
|
|
145
|
-
const existing = config.vaults.findIndex(c => c.id === v.id);
|
|
146
|
-
const entry = { id: v.id, name: v.name, filePath: vaultFilePath };
|
|
147
|
-
if (existing >= 0) {
|
|
148
|
-
config.vaults[existing] = entry;
|
|
149
71
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
72
|
+
}
|
|
73
|
+
throw new Error('unreachable: encrypted vault import attempts exhausted');
|
|
74
|
+
}
|
|
75
|
+
async function importVaultForSetup(sdk, vaultContent, opts) {
|
|
76
|
+
const isEncrypted = sdk.isVaultEncrypted(vaultContent);
|
|
77
|
+
if (!isEncrypted)
|
|
78
|
+
return { vault: await sdk.importVault(vaultContent, undefined), isEncrypted };
|
|
79
|
+
if (process.env.VAULT_DECRYPT_PASSWORD) {
|
|
80
|
+
return { ...(await importEncryptedVaultFromEnv(sdk, vaultContent)), isEncrypted };
|
|
81
|
+
}
|
|
82
|
+
if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
83
|
+
throw new Error('Vault is encrypted but no TTY available. Set VAULT_DECRYPT_PASSWORD env var for non-interactive usage.');
|
|
84
|
+
}
|
|
85
|
+
return { ...(await importEncryptedVaultInteractively(sdk, vaultContent)), isEncrypted };
|
|
86
|
+
}
|
|
87
|
+
async function promptServerPassword(opts) {
|
|
88
|
+
const envServerPw = process.env.VAULT_PASSWORD;
|
|
89
|
+
if (envServerPw)
|
|
90
|
+
return envServerPw;
|
|
91
|
+
if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
92
|
+
throw new Error('No TTY available for password prompt. Set VAULT_PASSWORD env var for non-interactive usage.');
|
|
93
|
+
}
|
|
94
|
+
const response = await inquirer.prompt([
|
|
95
|
+
{
|
|
96
|
+
type: 'password',
|
|
97
|
+
name: 'serverPassword',
|
|
98
|
+
message: 'Enter VultiServer password (your server signing password, used for 2-of-2 MPC signing):',
|
|
99
|
+
mask: '*',
|
|
100
|
+
},
|
|
101
|
+
]);
|
|
102
|
+
return response.serverPassword;
|
|
103
|
+
}
|
|
104
|
+
async function resolveFilePassphrase(opts) {
|
|
105
|
+
const envPassphrase = process.env.VULTISIG_CREDENTIALS_PASSPHRASE;
|
|
106
|
+
if (envPassphrase)
|
|
107
|
+
return envPassphrase;
|
|
108
|
+
if (!process.stdin.isTTY || opts.nonInteractive) {
|
|
109
|
+
throw new Error('OS keyring unavailable and no TTY for passphrase prompt. Set VULTISIG_CREDENTIALS_PASSPHRASE env var.');
|
|
110
|
+
}
|
|
111
|
+
const response = await inquirer.prompt([
|
|
112
|
+
{
|
|
113
|
+
type: 'password',
|
|
114
|
+
name: 'passphrase',
|
|
115
|
+
message: 'OS keyring unavailable. Enter a passphrase to encrypt credentials on disk (~/.vultisig/credentials.enc):',
|
|
116
|
+
mask: '*',
|
|
117
|
+
},
|
|
118
|
+
]);
|
|
119
|
+
return response.passphrase;
|
|
120
|
+
}
|
|
121
|
+
async function writeVaultCredentials(vaultId, serverPassword, isEncrypted, decryptPassword) {
|
|
122
|
+
await setServerPassword(vaultId, serverPassword);
|
|
123
|
+
if (isEncrypted && decryptPassword)
|
|
124
|
+
await setDecryptionPassword(vaultId, decryptPassword);
|
|
125
|
+
}
|
|
126
|
+
async function persistVaultCredentials(vaultId, serverPassword, isEncrypted, decryptPassword, opts) {
|
|
127
|
+
try {
|
|
128
|
+
await writeVaultCredentials(vaultId, serverPassword, isEncrypted, decryptPassword);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
setFilePassphrase(await resolveFilePassphrase(opts));
|
|
132
|
+
await writeVaultCredentials(vaultId, serverPassword, isEncrypted, decryptPassword);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function saveVaultEntry(vault, vaultFilePath) {
|
|
136
|
+
const config = await loadConfig();
|
|
137
|
+
const existing = config.vaults.findIndex(c => c.id === vault.id);
|
|
138
|
+
const entry = { id: vault.id, name: vault.name, filePath: vaultFilePath };
|
|
139
|
+
if (existing >= 0) {
|
|
140
|
+
config.vaults[existing] = entry;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
config.vaults.push(entry);
|
|
144
|
+
}
|
|
145
|
+
await saveConfig(config);
|
|
146
|
+
}
|
|
147
|
+
export async function executeAuthSetup(opts) {
|
|
148
|
+
const vaultFilePath = await resolveVaultFilePath(opts);
|
|
149
|
+
const vaultContent = await fs.readFile(vaultFilePath, 'utf-8');
|
|
150
|
+
const sdk = new Vultisig({});
|
|
151
|
+
try {
|
|
152
|
+
const { vault, decryptPassword, isEncrypted } = await importVaultForSetup(sdk, vaultContent, opts);
|
|
153
|
+
const serverPassword = await promptServerPassword(opts);
|
|
154
|
+
await persistVaultCredentials(vault.id, serverPassword, isEncrypted, decryptPassword, opts);
|
|
155
|
+
await saveVaultEntry(vault, vaultFilePath);
|
|
156
|
+
return { vaultId: vault.id, vaultName: vault.name, storageBackend: isUsingFileFallback() ? 'file' : 'keyring' };
|
|
155
157
|
}
|
|
156
158
|
finally {
|
|
157
159
|
if (typeof sdk.dispose === 'function')
|
package/dist/auth-setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-setup.js","sourceRoot":"","sources":["../src/auth-setup.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,uEAAuE;AAEvE,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"auth-setup.js","sourceRoot":"","sources":["../src/auth-setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/client-shared",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "Shared client infrastructure for Vultisig CLI and MCP — auth, config, tool descriptions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@napi-rs/keyring": "^1.3.0",
|
|
34
|
-
"@vultisig/sdk": "^0.
|
|
34
|
+
"@vultisig/sdk": "^0.25.0",
|
|
35
35
|
"inquirer": "^13.4.2"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|