@vultisig/client-shared 0.2.16 → 0.3.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/CHANGELOG.md +30 -0
- package/dist/config-store.d.ts +1 -0
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +41 -4
- package/dist/config-store.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# @vultisig/client-shared
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1179](https://github.com/vultisig/vultisig-sdk/pull/1179) [`0c80a06`](https://github.com/vultisig/vultisig-sdk/commit/0c80a062bde65c4938a29ce8c1fb6052028615e1) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - Route the CLI version cache, version output, and VaultStateStore local state through `VULTISIG_CONFIG_DIR` so they stay co-located with SDK vault storage and other shared CLI state.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`69e2fc2`](https://github.com/vultisig/vultisig-sdk/commit/69e2fc2f92c053294b0276440306be5871988be9), [`0c80a06`](https://github.com/vultisig/vultisig-sdk/commit/0c80a062bde65c4938a29ce8c1fb6052028615e1), [`aa47b4a`](https://github.com/vultisig/vultisig-sdk/commit/aa47b4a03c7391d13c738cba68b13a1526d1c502), [`32e5d36`](https://github.com/vultisig/vultisig-sdk/commit/32e5d369ae4723299a6cb8f694da1782dbf207c2)]:
|
|
12
|
+
- @vultisig/sdk@2.21.1
|
|
13
|
+
|
|
14
|
+
## 0.2.17
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- [#878](https://github.com/vultisig/vultisig-sdk/pull/878) [`26dd218`](https://github.com/vultisig/vultisig-sdk/commit/26dd218282b198fdea9c1118e7fe5bc800c071fb) Thanks [@neavra](https://github.com/neavra)! - Harden the vault-registry config store (`config-store.ts`):
|
|
19
|
+
|
|
20
|
+
- `loadConfig` now warns to stderr (naming the path and parse error) when
|
|
21
|
+
`config.json` is corrupted instead of silently reverting to an empty
|
|
22
|
+
registry, and leaves the bad file intact at load time (the next saveConfig
|
|
23
|
+
still overwrites it once the user mutates state — this is not durable
|
|
24
|
+
recovery). A missing file is still treated as the normal first-run case (no
|
|
25
|
+
warning).
|
|
26
|
+
- `saveConfig` now writes `config.json` with `0o600` perms (and `chmod`s on
|
|
27
|
+
every write, since the mode is only honored on create) and creates the
|
|
28
|
+
config dir with `0o700`, mirroring credential-store's hardening.
|
|
29
|
+
|
|
30
|
+
- Updated dependencies [[`69bb830`](https://github.com/vultisig/vultisig-sdk/commit/69bb8307de72883f0c7693871a6ca040b7a0756c)]:
|
|
31
|
+
- @vultisig/sdk@2.8.4
|
|
32
|
+
|
|
3
33
|
## 0.2.16
|
|
4
34
|
|
|
5
35
|
### Patch Changes
|
package/dist/config-store.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAMD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CA4BtD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBlE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/config-store.js
CHANGED
|
@@ -8,21 +8,58 @@ import * as path from 'node:path';
|
|
|
8
8
|
function getConfigDir() {
|
|
9
9
|
return process.env.VULTISIG_CONFIG_DIR || path.join(os.homedir(), '.vultisig');
|
|
10
10
|
}
|
|
11
|
+
// Public form of the resolver above, for CLI state that must stay co-located
|
|
12
|
+
// with the config store (version cache, vault state). Same call-time contract.
|
|
13
|
+
export function getVultisigConfigDir() {
|
|
14
|
+
return getConfigDir();
|
|
15
|
+
}
|
|
11
16
|
function getConfigFilePath() {
|
|
12
17
|
return path.join(getConfigDir(), 'config.json');
|
|
13
18
|
}
|
|
14
19
|
export async function loadConfig() {
|
|
20
|
+
const filePath = getConfigFilePath();
|
|
21
|
+
let raw;
|
|
22
|
+
try {
|
|
23
|
+
raw = await fs.readFile(filePath, 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
// A missing file is the normal first-run case — stay silent. Any other
|
|
27
|
+
// read failure (e.g. EACCES) is worth surfacing before falling back.
|
|
28
|
+
if (err?.code !== 'ENOENT') {
|
|
29
|
+
console.warn(`[vultisig] Could not read config at ${filePath}: ${err?.message ?? String(err)}. Using an empty registry.`);
|
|
30
|
+
}
|
|
31
|
+
return { vaults: [] };
|
|
32
|
+
}
|
|
15
33
|
try {
|
|
16
|
-
const raw = await fs.readFile(getConfigFilePath(), 'utf-8');
|
|
17
34
|
return JSON.parse(raw);
|
|
18
35
|
}
|
|
19
|
-
catch {
|
|
36
|
+
catch (err) {
|
|
37
|
+
// Corrupted config (e.g. partial write or single-byte corruption): warn
|
|
38
|
+
// loudly instead of silently factory-resetting, which would vanish the
|
|
39
|
+
// user's vault registry. The bad file is left intact AT LOAD TIME (the next
|
|
40
|
+
// saveConfig still overwrites it when the user mutates state) — this is not
|
|
41
|
+
// durable recovery, just a chance to inspect the file before the next write.
|
|
42
|
+
console.warn(`[vultisig] Config at ${filePath} is corrupted (${err?.message ?? String(err)}); using an empty registry. The file was left intact at load time.`);
|
|
20
43
|
return { vaults: [] };
|
|
21
44
|
}
|
|
22
45
|
}
|
|
23
46
|
export async function saveConfig(config) {
|
|
24
|
-
|
|
25
|
-
|
|
47
|
+
const dir = getConfigDir();
|
|
48
|
+
const filePath = getConfigFilePath();
|
|
49
|
+
// 0o700 dir / 0o600 file: the registry maps vault IDs to on-disk vault file
|
|
50
|
+
// paths and lives alongside credentials. Mirror credential-store's hardening
|
|
51
|
+
// (commit 7bafd71a).
|
|
52
|
+
await fs.mkdir(dir, { recursive: true, mode: 0o700 });
|
|
53
|
+
await fs.writeFile(filePath, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
54
|
+
// writeFile's `mode` is honored only when the file is CREATED; an existing
|
|
55
|
+
// config.json keeps its old perms. chmod every write so a pre-existing (or
|
|
56
|
+
// out-of-band) file can't retain looser, world-readable perms.
|
|
57
|
+
try {
|
|
58
|
+
await fs.chmod(filePath, 0o600);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
/* best-effort: non-POSIX FS (e.g. Windows) ignores perms */
|
|
62
|
+
}
|
|
26
63
|
}
|
|
27
64
|
export function getConfigPath() {
|
|
28
65
|
return getConfigFilePath();
|
package/dist/config-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAE1E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,4EAA4E;AAC5E,mFAAmF;AACnF,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAE1E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,4EAA4E;AAC5E,mFAAmF;AACnF,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AAChF,CAAC;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB;IAClC,OAAO,YAAY,EAAE,CAAA;AACvB,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,qEAAqE;QACrE,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CACV,uCAAuC,QAAQ,KAAM,GAAa,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,4BAA4B,CACvH,CAAA;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACvB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,uEAAuE;QACvE,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,OAAO,CAAC,IAAI,CACV,wBAAwB,QAAQ,kBAAmB,GAAa,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,oEAAoE,CAC7J,CAAA;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAkB;IACjD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAA;IAC1B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,4EAA4E;IAC5E,6EAA6E;IAC7E,qBAAqB;IACrB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9E,2EAA2E;IAC3E,2EAA2E;IAC3E,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,EAAE,CAAA;AAC5B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { executeAuthLogout, executeAuthSetup, executeAuthStatus } from './auth-setup.js';
|
|
2
|
-
export { getConfigPath, loadConfig, saveConfig, type VaultEntry, type VsigConfig } from './config-store.js';
|
|
2
|
+
export { getConfigPath, getVultisigConfigDir, loadConfig, saveConfig, type VaultEntry, type VsigConfig, } from './config-store.js';
|
|
3
3
|
export { _resetAll, clearCredentials, getCredentialsPath, getDecryptionPassword, getServerPassword, getStoredServerPassword, isUsingFileFallback, setDecryptionPassword, setFilePassphrase, setServerPassword, } from './credential-store.js';
|
|
4
4
|
export * as descriptions from './descriptions.js';
|
|
5
5
|
export { discoverVaultFiles, SEARCH_DIRS } from './vault-discovery.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { executeAuthLogout, executeAuthSetup, executeAuthStatus } from './auth-setup.js';
|
|
2
|
-
export { getConfigPath, loadConfig, saveConfig } from './config-store.js';
|
|
2
|
+
export { getConfigPath, getVultisigConfigDir, loadConfig, saveConfig, } from './config-store.js';
|
|
3
3
|
export { _resetAll, clearCredentials, getCredentialsPath, getDecryptionPassword, getServerPassword, getStoredServerPassword, isUsingFileFallback, setDecryptionPassword, setFilePassphrase, setServerPassword, } from './credential-store.js';
|
|
4
4
|
export * as descriptions from './descriptions.js';
|
|
5
5
|
export { discoverVaultFiles, SEARCH_DIRS } from './vault-discovery.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,UAAU,GAGX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/client-shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Shared client infrastructure for Vultisig CLI and MCP — auth, config, tool descriptions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@napi-rs/keyring": "^1.3.0",
|
|
34
|
-
"@vultisig/sdk": "^2.
|
|
34
|
+
"@vultisig/sdk": "^2.21.1",
|
|
35
35
|
"inquirer": "^14.0.2"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/node": "^26.
|
|
38
|
+
"@types/node": "^26.1.1",
|
|
39
39
|
"typescript": "^6.0.3"
|
|
40
40
|
},
|
|
41
41
|
"publishConfig": {
|