dsh-vault 1.10.67 → 1.10.69
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-zh.md +6 -1
- package/README.md +7 -1
- package/lib/cli.js +99 -39
- package/lib/client.js +160 -160
- package/package.json +3 -2
package/README-zh.md
CHANGED
|
@@ -252,6 +252,11 @@ dsh-vault get my-entry --field apiKey # 取指定字段
|
|
|
252
252
|
dsh-vault get my-entry --mask # 只确认存在,不打印值
|
|
253
253
|
dsh-vault show my-entry # 非敏感字段的 JSON
|
|
254
254
|
dsh-vault env # 带 env 标签的条目 → KEY=VALUE
|
|
255
|
+
dsh-vault env --mask # 人类视角,两段都是 KEY=VALUE:
|
|
256
|
+
# ## exported items
|
|
257
|
+
# NPM_REGISTRY_API_KEY=npm_***
|
|
258
|
+
# ## unexported items
|
|
259
|
+
# EXAMPLE_BILLING_API_KEY=***
|
|
255
260
|
dsh-vault export-env .env # ……或写成 0600 权限的 .env 文件
|
|
256
261
|
dsh-vault verify # 校验主密码,stdout 无输出
|
|
257
262
|
```
|
|
@@ -278,7 +283,7 @@ dsh-vault export-env .env && set -a && . ./.env && set +a
|
|
|
278
283
|
|
|
279
284
|
### 4. 主密码
|
|
280
285
|
|
|
281
|
-
依次取 `--password-stdin` → `$DSH_VAULT_MASTER_PASSWORD`(或 `$DSH_VAULT_PASSWORD`)→
|
|
286
|
+
依次取 `--password-stdin` → `$DSH_VAULT_MASTER_PASSWORD`(或 `$DSH_VAULT_PASSWORD`)→ 交互式提示(**输入不回显**,终端会切到 raw mode;`tests/e2e/cli-prompt.mjs` 会验证这一点);它**不会**去读插件配置文件里的密码,所以 CLI 既不依赖、也不会泄露 profile patch 里那份:
|
|
282
287
|
|
|
283
288
|
```sh
|
|
284
289
|
DSH_VAULT_MASTER_PASSWORD=… pnpm vault list
|
package/README.md
CHANGED
|
@@ -268,6 +268,11 @@ dsh-vault get my-entry --field apiKey # one named field
|
|
|
268
268
|
dsh-vault get my-entry --mask # confirm it exists without printing it
|
|
269
269
|
dsh-vault show my-entry # non-secret metadata as JSON
|
|
270
270
|
dsh-vault env # env-tagged entries as KEY=VALUE
|
|
271
|
+
dsh-vault env --mask # human view, both sections as KEY=VALUE:
|
|
272
|
+
# ## exported items
|
|
273
|
+
# NPM_REGISTRY_API_KEY=npm_***
|
|
274
|
+
# ## unexported items
|
|
275
|
+
# EXAMPLE_BILLING_API_KEY=***
|
|
271
276
|
dsh-vault export-env .env # …or write them to a 0600 file
|
|
272
277
|
dsh-vault verify # check the master password, nothing on stdout
|
|
273
278
|
```
|
|
@@ -300,7 +305,8 @@ dsh-vault export-env .env && set -a && . ./.env && set +a
|
|
|
300
305
|
### 4. The master password
|
|
301
306
|
|
|
302
307
|
`--password-stdin`, then `$DSH_VAULT_MASTER_PASSWORD` (or `$DSH_VAULT_PASSWORD`),
|
|
303
|
-
then an interactive prompt
|
|
308
|
+
then an interactive prompt that **hides what you type** (the terminal is switched
|
|
309
|
+
to raw mode; verify with `tests/e2e/cli-prompt.mjs`). It is **not** read from the plugin's config file, so
|
|
304
310
|
the CLI never depends on (or leaks) whatever the profile patch holds:
|
|
305
311
|
|
|
306
312
|
```sh
|
package/lib/cli.js
CHANGED
|
@@ -17,13 +17,14 @@
|
|
|
17
17
|
* The core is `runCli(argv, io)`, which tests drive directly without spawning.
|
|
18
18
|
*/
|
|
19
19
|
import { chmod, mkdir, writeFile } from 'node:fs/promises';
|
|
20
|
-
import { existsSync, realpathSync } from 'node:fs';
|
|
20
|
+
import { existsSync, openSync, realpathSync, writeSync } from 'node:fs';
|
|
21
21
|
import { createRequire } from 'node:module';
|
|
22
22
|
import { dirname, resolve } from 'node:path';
|
|
23
23
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
24
24
|
import { createInterface } from 'node:readline';
|
|
25
|
+
import { ReadStream } from 'node:tty';
|
|
25
26
|
import { openVault, defaultVaultPath } from "./store.js";
|
|
26
|
-
import { envLinesFor, envPairsForEntry, maskSecret, primarySecret } from "./env-export.js";
|
|
27
|
+
import { envLinesFor, envPairsForEntry, maskSecret, primarySecret, shellQuote } from "./env-export.js";
|
|
27
28
|
function packageVersion() {
|
|
28
29
|
try {
|
|
29
30
|
const require = createRequire(import.meta.url);
|
|
@@ -79,7 +80,9 @@ env options:
|
|
|
79
80
|
--prefix <P> Prefix for derived key names (an explicit envKey is kept verbatim)
|
|
80
81
|
--kind <k> Only entries of this kind
|
|
81
82
|
--keys-only Print key names without values
|
|
82
|
-
--mask
|
|
83
|
+
--mask Human view: masked values PLUS an "unexported items"
|
|
84
|
+
section (what the tag currently leaves out)
|
|
85
|
+
--explain Same two-section view with the real values
|
|
83
86
|
--file <path> Write to a file instead of stdout
|
|
84
87
|
|
|
85
88
|
Exported lines are shell-quoted (KEY='value'), so read them with
|
|
@@ -156,50 +159,63 @@ export function resolveCliVaultPath(parsed, env) {
|
|
|
156
159
|
}
|
|
157
160
|
/** Interactive prompt with echo off, read from the terminal rather than stdin. */
|
|
158
161
|
async function promptHidden(prompt) {
|
|
159
|
-
|
|
160
|
-
|
|
162
|
+
// The terminal echoes what you type unless it is switched to raw mode: the
|
|
163
|
+
// first version of this opened /dev/tty but left echo on, so the master
|
|
164
|
+
// password appeared in clear text. Raw mode also means we handle Enter,
|
|
165
|
+
// backspace and Ctrl-C ourselves (below).
|
|
166
|
+
let fd;
|
|
161
167
|
try {
|
|
162
|
-
|
|
168
|
+
fd = openSync('/dev/tty', 'r+');
|
|
163
169
|
}
|
|
164
170
|
catch {
|
|
171
|
+
// No controlling terminal (piped input): read a plain line from stdin.
|
|
165
172
|
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
166
173
|
const answer = await new Promise(res => rl.question(prompt, res));
|
|
167
174
|
rl.close();
|
|
168
175
|
return answer;
|
|
169
176
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
177
|
+
const input = new ReadStream(fd);
|
|
178
|
+
input.setRawMode(true);
|
|
179
|
+
input.setEncoding('utf8');
|
|
180
|
+
writeSync(fd, prompt);
|
|
181
|
+
try {
|
|
182
|
+
return await new Promise((resolve, reject) => {
|
|
183
|
+
let value = '';
|
|
184
|
+
const finish = (result) => {
|
|
185
|
+
writeSync(fd, '\n');
|
|
186
|
+
resolve(result);
|
|
187
|
+
};
|
|
188
|
+
input.on('data', (chunk) => {
|
|
189
|
+
for (const ch of String(chunk)) {
|
|
190
|
+
if (ch === '\n' || ch === '\r') {
|
|
191
|
+
finish(value);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (ch === '\u0003') { // Ctrl-C
|
|
195
|
+
writeSync(fd, '\n');
|
|
196
|
+
reject(new Error('aborted'));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (ch === '\u007f' || ch === '\b') {
|
|
200
|
+
value = value.slice(0, -1);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (ch === '\u0015') {
|
|
204
|
+
value = '';
|
|
205
|
+
continue;
|
|
206
|
+
} // Ctrl-U clears the line
|
|
207
|
+
if (ch < ' ')
|
|
208
|
+
continue; // ignore other control characters
|
|
209
|
+
value += ch;
|
|
197
210
|
}
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
});
|
|
212
|
+
input.on('error', err => reject(err instanceof Error ? err : new Error(String(err))));
|
|
200
213
|
});
|
|
201
|
-
|
|
202
|
-
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
input.setRawMode(false);
|
|
217
|
+
input.destroy(); // owns the fd
|
|
218
|
+
}
|
|
203
219
|
}
|
|
204
220
|
async function readStdinLine() {
|
|
205
221
|
const rl = createInterface({ input: process.stdin });
|
|
@@ -343,7 +359,7 @@ export async function runCli(argv, io) {
|
|
|
343
359
|
list: ['kind', 'tag'],
|
|
344
360
|
get: ['field', 'fields', 'mask', 'all'],
|
|
345
361
|
show: [],
|
|
346
|
-
env: ['prefix', 'kind', 'keys-only', 'mask', 'file'],
|
|
362
|
+
env: ['prefix', 'kind', 'keys-only', 'mask', 'explain', 'file'],
|
|
347
363
|
'export-env': ['prefix', 'kind', 'keys-only'],
|
|
348
364
|
verify: [],
|
|
349
365
|
};
|
|
@@ -465,7 +481,8 @@ export async function runCli(argv, io) {
|
|
|
465
481
|
// env / export-env
|
|
466
482
|
const prefix = stringFlag(parsed, 'prefix') ?? '';
|
|
467
483
|
const kind = stringFlag(parsed, 'kind');
|
|
468
|
-
const
|
|
484
|
+
const matching = store.list().filter(entry => kind === undefined || (entry.kind ?? 'login') === kind);
|
|
485
|
+
const lines = envLinesFor(matching, { prefix, ...(kind !== undefined ? { kind } : {}) });
|
|
469
486
|
const rendered = lines.map(line => {
|
|
470
487
|
if (keysOnly)
|
|
471
488
|
return line.split('=')[0] ?? line;
|
|
@@ -474,6 +491,27 @@ export async function runCli(argv, io) {
|
|
|
474
491
|
const eq = line.indexOf('=');
|
|
475
492
|
return `${line.slice(0, eq)}=${maskSecret(line.slice(eq + 1).replace(/^'|'$/g, ''))}`;
|
|
476
493
|
});
|
|
494
|
+
// `--mask` is the human view (masked values are useless to a script), so it
|
|
495
|
+
// also lists what is NOT exported. Without it the output stays pure
|
|
496
|
+
// `KEY=VALUE`, which is what `eval "$(…)"` and pipelines need.
|
|
497
|
+
const explain = mask || parsed.flags.get('explain') === true;
|
|
498
|
+
const unexported = matching.filter(entry => !(entry.tags ?? []).includes('env'));
|
|
499
|
+
/** `KEY=***` for entries that are not exported (names visible, values not). */
|
|
500
|
+
const envPairsForEntryPairs = (entries) => pairsOf(entries, true).map(line => `${line.slice(0, line.indexOf('='))}=***`);
|
|
501
|
+
/** KEY=VALUE pairs of the given entries, de-duplicated, first entry wins. */
|
|
502
|
+
const pairsOf = (entries, masked) => {
|
|
503
|
+
const seen = new Set();
|
|
504
|
+
const out = [];
|
|
505
|
+
for (const entry of entries) {
|
|
506
|
+
for (const pair of envPairsForEntry(entry, prefix)) {
|
|
507
|
+
if (seen.has(pair.key))
|
|
508
|
+
continue;
|
|
509
|
+
seen.add(pair.key);
|
|
510
|
+
out.push(`${pair.key}=${masked ? maskSecret(pair.value) : shellQuote(pair.value)}`);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return out;
|
|
514
|
+
};
|
|
477
515
|
const target = parsed.command === 'export-env' ? parsed.positional[0] : stringFlag(parsed, 'file');
|
|
478
516
|
if (parsed.command === 'export-env' && target === undefined) {
|
|
479
517
|
io.err('dsh-vault: export-env needs a file path\n');
|
|
@@ -490,6 +528,28 @@ export async function runCli(argv, io) {
|
|
|
490
528
|
: `dsh-vault: wrote ${rendered.length} lines to ${file} (mode 0600)\n`);
|
|
491
529
|
return 0;
|
|
492
530
|
}
|
|
531
|
+
if (explain) {
|
|
532
|
+
// Both sections use the same KEY=VALUE shape, so a name can be copied from
|
|
533
|
+
// either one. The unexported values stay masked even under --explain: the
|
|
534
|
+
// tag is what says "this one is meant for a shell".
|
|
535
|
+
io.out('## exported items\n');
|
|
536
|
+
if (rendered.length > 0)
|
|
537
|
+
io.out(`${rendered.join('\n')}\n`);
|
|
538
|
+
else
|
|
539
|
+
io.out(' (none — no entry carries the "env" tag)\n');
|
|
540
|
+
io.out('\n## unexported items\n');
|
|
541
|
+
// A fixed placeholder, not `maskSecret`: these did not opt into export, so
|
|
542
|
+
// not even a four-character prefix of a password should be shown.
|
|
543
|
+
const hidden = envPairsForEntryPairs(unexported);
|
|
544
|
+
if (hidden.length > 0) {
|
|
545
|
+
io.out(`${hidden.join('\n')}\n`);
|
|
546
|
+
io.out(' not exported (no "env" tag) — values hidden. `get <name>` still reads them.\n');
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
io.out(' (none — every entry is exported)\n');
|
|
550
|
+
}
|
|
551
|
+
return 0;
|
|
552
|
+
}
|
|
493
553
|
io.out(rendered.join('\n') + (rendered.length > 0 ? '\n' : ''));
|
|
494
554
|
if (rendered.length === 0) {
|
|
495
555
|
// The usual first-run wall: `env` only exports entries tagged `env`, and
|
package/lib/client.js
CHANGED
|
@@ -495,190 +495,190 @@ window.__ModuleLoader__.load({
|
|
|
495
495
|
document.head.appendChild(tag);
|
|
496
496
|
}
|
|
497
497
|
var VaultSection_module_css_default = {
|
|
498
|
-
"revealButton": "t_j5va_revealButton",
|
|
499
|
-
"toolbarMain": "t_j5va_toolbarMain",
|
|
500
|
-
"vaultTarget": "t_j5va_vaultTarget",
|
|
501
|
-
"lockedBanner": "t_j5va_lockedBanner",
|
|
502
498
|
"deleteButton": "t_j5va_deleteButton",
|
|
503
|
-
"
|
|
504
|
-
"
|
|
505
|
-
"
|
|
506
|
-
"
|
|
507
|
-
"
|
|
508
|
-
"
|
|
509
|
-
"
|
|
510
|
-
"
|
|
511
|
-
"
|
|
512
|
-
"
|
|
513
|
-
"bulkBar": "t_j5va_bulkBar",
|
|
499
|
+
"totpRing": "t_j5va_totpRing",
|
|
500
|
+
"genOpts": "t_j5va_genOpts",
|
|
501
|
+
"brandGlyphSm": "t_j5va_brandGlyphSm",
|
|
502
|
+
"detailBox": "t_j5va_detailBox",
|
|
503
|
+
"vaultSwitch": "t_j5va_vaultSwitch",
|
|
504
|
+
"reportBox": "t_j5va_reportBox",
|
|
505
|
+
"brandGlyph": "t_j5va_brandGlyph",
|
|
506
|
+
"field": "t_j5va_field",
|
|
507
|
+
"copyAllBtn": "t_j5va_copyAllBtn",
|
|
508
|
+
"detailItem": "t_j5va_detailItem",
|
|
514
509
|
"actionGroupLabel": "t_j5va_actionGroupLabel",
|
|
510
|
+
"section": "t_j5va_section",
|
|
511
|
+
"rowCheck": "t_j5va_rowCheck",
|
|
512
|
+
"list": "t_j5va_list",
|
|
513
|
+
"bulkBar": "t_j5va_bulkBar",
|
|
514
|
+
"attachAdd": "t_j5va_attachAdd",
|
|
515
515
|
"auditChip": "t_j5va_auditChip",
|
|
516
|
-
"
|
|
517
|
-
"detailItem": "t_j5va_detailItem",
|
|
518
|
-
"reportLine": "t_j5va_reportLine",
|
|
519
|
-
"detailBox": "t_j5va_detailBox",
|
|
520
|
-
"importRow": "t_j5va_importRow",
|
|
521
|
-
"detailActions": "t_j5va_detailActions",
|
|
522
|
-
"bulkCount": "t_j5va_bulkCount",
|
|
523
|
-
"pwHistBox": "t_j5va_pwHistBox",
|
|
524
|
-
"moreMenu": "t_j5va_moreMenu",
|
|
525
|
-
"backupButton": "t_j5va_backupButton",
|
|
526
|
-
"editorBody": "t_j5va_editorBody",
|
|
527
|
-
"detailRemain": "t_j5va_detailRemain",
|
|
528
|
-
"srOnly": "t_j5va_srOnly",
|
|
529
|
-
"saveButton": "t_j5va_saveButton",
|
|
530
|
-
"moreWrap": "t_j5va_moreWrap",
|
|
531
|
-
"emptyHint": "t_j5va_emptyHint",
|
|
532
|
-
"modeAsk": "t_j5va_modeAsk",
|
|
533
|
-
"auditChipActive": "t_j5va_auditChipActive",
|
|
516
|
+
"error": "t_j5va_error",
|
|
534
517
|
"badgeLink": "t_j5va_badgeLink",
|
|
535
|
-
"
|
|
518
|
+
"tagRow": "t_j5va_tagRow",
|
|
519
|
+
"headerMessage": "t_j5va_headerMessage",
|
|
520
|
+
"reportSub": "t_j5va_reportSub",
|
|
521
|
+
"totp": "t_j5va_totp",
|
|
536
522
|
"pwHistPwd": "t_j5va_pwHistPwd",
|
|
537
|
-
"
|
|
523
|
+
"kindFilter": "t_j5va_kindFilter",
|
|
524
|
+
"title": "t_j5va_title",
|
|
525
|
+
"rowDue": "t_j5va_rowDue",
|
|
526
|
+
"actionGroups": "t_j5va_actionGroups",
|
|
527
|
+
"importActions": "t_j5va_importActions",
|
|
528
|
+
"searchKbd": "t_j5va_searchKbd",
|
|
529
|
+
"histNeutral": "t_j5va_histNeutral",
|
|
530
|
+
"gridRow": "t_j5va_gridRow",
|
|
531
|
+
"dupMerge": "t_j5va_dupMerge",
|
|
532
|
+
"pwMeter": "t_j5va_pwMeter",
|
|
533
|
+
"colorSwatch": "t_j5va_colorSwatch",
|
|
534
|
+
"inlineInput": "t_j5va_inlineInput",
|
|
538
535
|
"rowSelected": "t_j5va_rowSelected",
|
|
539
|
-
"
|
|
540
|
-
"
|
|
536
|
+
"badgeActive": "t_j5va_badgeActive",
|
|
537
|
+
"auditWhen": "t_j5va_auditWhen",
|
|
538
|
+
"saveButton": "t_j5va_saveButton",
|
|
539
|
+
"genOptRow": "t_j5va_genOptRow",
|
|
540
|
+
"totpCopy": "t_j5va_totpCopy",
|
|
541
|
+
"lenChipActive": "t_j5va_lenChipActive",
|
|
542
|
+
"intro": "t_j5va_intro",
|
|
543
|
+
"pwStrong": "t_j5va_pwStrong",
|
|
544
|
+
"srOnly": "t_j5va_srOnly",
|
|
545
|
+
"lenChip": "t_j5va_lenChip",
|
|
546
|
+
"detailRemain": "t_j5va_detailRemain",
|
|
547
|
+
"reportJump": "t_j5va_reportJump",
|
|
548
|
+
"pwFair": "t_j5va_pwFair",
|
|
549
|
+
"tagManager": "t_j5va_tagManager",
|
|
550
|
+
"row": "t_j5va_row",
|
|
551
|
+
"listCompact": "t_j5va_listCompact",
|
|
552
|
+
"toolbarFilters": "t_j5va_toolbarFilters",
|
|
553
|
+
"vaultHeader": "t_j5va_vaultHeader",
|
|
554
|
+
"pwLabel": "t_j5va_pwLabel",
|
|
555
|
+
"toolbar": "t_j5va_toolbar",
|
|
556
|
+
"gridDetail": "t_j5va_gridDetail",
|
|
557
|
+
"policyField": "t_j5va_policyField",
|
|
558
|
+
"colorFieldWrap": "t_j5va_colorFieldWrap",
|
|
559
|
+
"urlGlyph": "t_j5va_urlGlyph",
|
|
560
|
+
"auditChips": "t_j5va_auditChips",
|
|
561
|
+
"dupNames": "t_j5va_dupNames",
|
|
562
|
+
"favToggle": "t_j5va_favToggle",
|
|
563
|
+
"importName": "t_j5va_importName",
|
|
564
|
+
"importDesc": "t_j5va_importDesc",
|
|
541
565
|
"dupGroup": "t_j5va_dupGroup",
|
|
542
|
-
"
|
|
543
|
-
"
|
|
544
|
-
"
|
|
566
|
+
"scoreRing": "t_j5va_scoreRing",
|
|
567
|
+
"editorActions": "t_j5va_editorActions",
|
|
568
|
+
"exportChip": "t_j5va_exportChip",
|
|
569
|
+
"rowActions": "t_j5va_rowActions",
|
|
570
|
+
"vaultManageRow": "t_j5va_vaultManageRow",
|
|
571
|
+
"lockedBanner": "t_j5va_lockedBanner",
|
|
572
|
+
"policyBar": "t_j5va_policyBar",
|
|
573
|
+
"modeAuto": "t_j5va_modeAuto",
|
|
545
574
|
"pinOff": "t_j5va_pinOff",
|
|
546
|
-
"
|
|
575
|
+
"pinOn": "t_j5va_pinOn",
|
|
576
|
+
"riskBanner": "t_j5va_riskBanner",
|
|
547
577
|
"emojiPicker": "t_j5va_emojiPicker",
|
|
548
|
-
"
|
|
549
|
-
"
|
|
550
|
-
"
|
|
578
|
+
"moreMenu": "t_j5va_moreMenu",
|
|
579
|
+
"tagManagerHead": "t_j5va_tagManagerHead",
|
|
580
|
+
"histUpdate": "t_j5va_histUpdate",
|
|
581
|
+
"tagActions": "t_j5va_tagActions",
|
|
582
|
+
"searchBox": "t_j5va_searchBox",
|
|
583
|
+
"tabs": "t_j5va_tabs",
|
|
584
|
+
"status": "t_j5va_status",
|
|
585
|
+
"vaultTarget": "t_j5va_vaultTarget",
|
|
586
|
+
"rowExpired": "t_j5va_rowExpired",
|
|
551
587
|
"favActive": "t_j5va_favActive",
|
|
552
|
-
"
|
|
553
|
-
"
|
|
554
|
-
"
|
|
588
|
+
"modeAsk": "t_j5va_modeAsk",
|
|
589
|
+
"emptyHint": "t_j5va_emptyHint",
|
|
590
|
+
"dangerButton": "t_j5va_dangerButton",
|
|
591
|
+
"editorBody": "t_j5va_editorBody",
|
|
555
592
|
"recentLabel": "t_j5va_recentLabel",
|
|
556
|
-
"
|
|
557
|
-
"
|
|
558
|
-
"
|
|
559
|
-
"
|
|
560
|
-
"importList": "t_j5va_importList",
|
|
561
|
-
"lockedTag": "t_j5va_lockedTag",
|
|
562
|
-
"tagCount": "t_j5va_tagCount",
|
|
563
|
-
"field": "t_j5va_field",
|
|
564
|
-
"importActions": "t_j5va_importActions",
|
|
565
|
-
"riskBanner": "t_j5va_riskBanner",
|
|
566
|
-
"colorFieldWrap": "t_j5va_colorFieldWrap",
|
|
567
|
-
"list": "t_j5va_list",
|
|
568
|
-
"reportSub": "t_j5va_reportSub",
|
|
593
|
+
"gridInput": "t_j5va_gridInput",
|
|
594
|
+
"inlineField": "t_j5va_inlineField",
|
|
595
|
+
"pwHistBox": "t_j5va_pwHistBox",
|
|
596
|
+
"auditChipActive": "t_j5va_auditChipActive",
|
|
569
597
|
"auditRow": "t_j5va_auditRow",
|
|
570
|
-
"
|
|
571
|
-
"
|
|
598
|
+
"identity": "t_j5va_identity",
|
|
599
|
+
"backupButton": "t_j5va_backupButton",
|
|
572
600
|
"recentChip": "t_j5va_recentChip",
|
|
573
|
-
"
|
|
574
|
-
"
|
|
575
|
-
"
|
|
601
|
+
"customFieldRows": "t_j5va_customFieldRows",
|
|
602
|
+
"histAdd": "t_j5va_histAdd",
|
|
603
|
+
"dueBadge": "t_j5va_dueBadge",
|
|
604
|
+
"badgeBtn": "t_j5va_badgeBtn",
|
|
576
605
|
"histLink": "t_j5va_histLink",
|
|
577
|
-
"
|
|
578
|
-
"
|
|
579
|
-
"healthBar": "t_j5va_healthBar",
|
|
580
|
-
"pwLabel": "t_j5va_pwLabel",
|
|
581
|
-
"inlineField": "t_j5va_inlineField",
|
|
582
|
-
"retryButton": "t_j5va_retryButton",
|
|
583
|
-
"lenChipActive": "t_j5va_lenChipActive",
|
|
584
|
-
"genOptRow": "t_j5va_genOptRow",
|
|
585
|
-
"vaultSwitch": "t_j5va_vaultSwitch",
|
|
586
|
-
"tagRow": "t_j5va_tagRow",
|
|
587
|
-
"exportChip": "t_j5va_exportChip",
|
|
588
|
-
"title": "t_j5va_title",
|
|
589
|
-
"totpCopy": "t_j5va_totpCopy",
|
|
590
|
-
"brandGlyph": "t_j5va_brandGlyph",
|
|
591
|
-
"pwWeak": "t_j5va_pwWeak",
|
|
592
|
-
"hit": "t_j5va_hit",
|
|
593
|
-
"vaultManageRow": "t_j5va_vaultManageRow",
|
|
594
|
-
"pwHistTime": "t_j5va_pwHistTime",
|
|
595
|
-
"bulkItem": "t_j5va_bulkItem",
|
|
596
|
-
"row": "t_j5va_row",
|
|
597
|
-
"pwStrong": "t_j5va_pwStrong",
|
|
598
|
-
"rowDue": "t_j5va_rowDue",
|
|
599
|
-
"tabs": "t_j5va_tabs",
|
|
600
|
-
"urlGlyph": "t_j5va_urlGlyph",
|
|
601
|
-
"highBadge": "t_j5va_highBadge",
|
|
606
|
+
"editor": "t_j5va_editor",
|
|
607
|
+
"kindIcon": "t_j5va_kindIcon",
|
|
602
608
|
"tabActive": "t_j5va_tabActive",
|
|
603
|
-
"
|
|
604
|
-
"
|
|
605
|
-
"genHistItem": "t_j5va_genHistItem",
|
|
606
|
-
"toolbar": "t_j5va_toolbar",
|
|
607
|
-
"policyField": "t_j5va_policyField",
|
|
608
|
-
"actionGroup": "t_j5va_actionGroup",
|
|
609
|
-
"iconFieldWrap": "t_j5va_iconFieldWrap",
|
|
610
|
-
"attachAdd": "t_j5va_attachAdd",
|
|
609
|
+
"copied": "t_j5va_copied",
|
|
610
|
+
"revealButton": "t_j5va_revealButton",
|
|
611
611
|
"sortButton": "t_j5va_sortButton",
|
|
612
|
-
"lenChip": "t_j5va_lenChip",
|
|
613
|
-
"badgeWarn": "t_j5va_badgeWarn",
|
|
614
|
-
"auditIssues": "t_j5va_auditIssues",
|
|
615
|
-
"auditWhen": "t_j5va_auditWhen",
|
|
616
|
-
"exportChips": "t_j5va_exportChips",
|
|
617
|
-
"error": "t_j5va_error",
|
|
618
|
-
"kindFilter": "t_j5va_kindFilter",
|
|
619
|
-
"gridRow": "t_j5va_gridRow",
|
|
620
|
-
"dueBadge": "t_j5va_dueBadge",
|
|
621
|
-
"badgeDanger": "t_j5va_badgeDanger",
|
|
622
|
-
"pwFair": "t_j5va_pwFair",
|
|
623
|
-
"copyAllBtn": "t_j5va_copyAllBtn",
|
|
624
|
-
"colorSwatch": "t_j5va_colorSwatch",
|
|
625
|
-
"tagName": "t_j5va_tagName",
|
|
626
|
-
"customValueInput": "t_j5va_customValueInput",
|
|
627
|
-
"rowExpired": "t_j5va_rowExpired",
|
|
628
|
-
"reportJump": "t_j5va_reportJump",
|
|
629
|
-
"scoreRing": "t_j5va_scoreRing",
|
|
630
|
-
"genHist": "t_j5va_genHist",
|
|
631
|
-
"inlineInput": "t_j5va_inlineInput",
|
|
632
|
-
"editorActions": "t_j5va_editorActions",
|
|
633
612
|
"checkField": "t_j5va_checkField",
|
|
634
|
-
"
|
|
635
|
-
"
|
|
636
|
-
"
|
|
637
|
-
"
|
|
638
|
-
"
|
|
639
|
-
"
|
|
640
|
-
"
|
|
641
|
-
"toolbarFilters": "t_j5va_toolbarFilters",
|
|
613
|
+
"colorPalette": "t_j5va_colorPalette",
|
|
614
|
+
"recentClear": "t_j5va_recentClear",
|
|
615
|
+
"highBadge": "t_j5va_highBadge",
|
|
616
|
+
"badgeWarn": "t_j5va_badgeWarn",
|
|
617
|
+
"bulkCount": "t_j5va_bulkCount",
|
|
618
|
+
"tagCount": "t_j5va_tagCount",
|
|
619
|
+
"toolbarMain": "t_j5va_toolbarMain",
|
|
642
620
|
"toolbarDivider": "t_j5va_toolbarDivider",
|
|
621
|
+
"iconFieldWrap": "t_j5va_iconFieldWrap",
|
|
622
|
+
"trashButton": "t_j5va_trashButton",
|
|
623
|
+
"empty": "t_j5va_empty",
|
|
624
|
+
"actionBtn": "t_j5va_actionBtn",
|
|
625
|
+
"healthBar": "t_j5va_healthBar",
|
|
626
|
+
"tabPane": "t_j5va_tabPane",
|
|
627
|
+
"uriCode": "t_j5va_uriCode",
|
|
628
|
+
"importList": "t_j5va_importList",
|
|
629
|
+
"gridActions": "t_j5va_gridActions",
|
|
630
|
+
"histDanger": "t_j5va_histDanger",
|
|
631
|
+
"secretField": "t_j5va_secretField",
|
|
632
|
+
"detailDeleteBtn": "t_j5va_detailDeleteBtn",
|
|
633
|
+
"importRow": "t_j5va_importRow",
|
|
634
|
+
"badgeOk": "t_j5va_badgeOk",
|
|
635
|
+
"detailActions": "t_j5va_detailActions",
|
|
636
|
+
"kindChip": "t_j5va_kindChip",
|
|
637
|
+
"hit": "t_j5va_hit",
|
|
638
|
+
"riskWarn": "t_j5va_riskWarn",
|
|
643
639
|
"emojiBtn": "t_j5va_emojiBtn",
|
|
644
|
-
"
|
|
645
|
-
"
|
|
640
|
+
"reportLine": "t_j5va_reportLine",
|
|
641
|
+
"pwBar": "t_j5va_pwBar",
|
|
642
|
+
"detailTotp": "t_j5va_detailTotp",
|
|
643
|
+
"selectActive": "t_j5va_selectActive",
|
|
644
|
+
"healthSummary": "t_j5va_healthSummary",
|
|
645
|
+
"auditIssues": "t_j5va_auditIssues",
|
|
646
|
+
"actionPrimary": "t_j5va_actionPrimary",
|
|
647
|
+
"pwHistTime": "t_j5va_pwHistTime",
|
|
646
648
|
"pinStar": "t_j5va_pinStar",
|
|
647
|
-
"
|
|
648
|
-
"status": "t_j5va_status",
|
|
649
|
-
"uriCode": "t_j5va_uriCode",
|
|
650
|
-
"reportBox": "t_j5va_reportBox",
|
|
651
|
-
"headerMessage": "t_j5va_headerMessage",
|
|
652
|
-
"importName": "t_j5va_importName",
|
|
649
|
+
"pwWeak": "t_j5va_pwWeak",
|
|
653
650
|
"riskDanger": "t_j5va_riskDanger",
|
|
654
|
-
"
|
|
655
|
-
"
|
|
656
|
-
"
|
|
657
|
-
"
|
|
658
|
-
"
|
|
651
|
+
"moreWrap": "t_j5va_moreWrap",
|
|
652
|
+
"exportChips": "t_j5va_exportChips",
|
|
653
|
+
"customValueInput": "t_j5va_customValueInput",
|
|
654
|
+
"customEq": "t_j5va_customEq",
|
|
655
|
+
"pwHistRow": "t_j5va_pwHistRow",
|
|
656
|
+
"emptyBox": "t_j5va_emptyBox",
|
|
657
|
+
"resultCount": "t_j5va_resultCount",
|
|
658
|
+
"recentSearch": "t_j5va_recentSearch",
|
|
659
|
+
"badgeDanger": "t_j5va_badgeDanger",
|
|
659
660
|
"rowMain": "t_j5va_rowMain",
|
|
661
|
+
"reportLineLink": "t_j5va_reportLineLink",
|
|
662
|
+
"badge": "t_j5va_badge",
|
|
660
663
|
"gridName": "t_j5va_gridName",
|
|
661
|
-
"
|
|
662
|
-
"
|
|
664
|
+
"tab": "t_j5va_tab",
|
|
665
|
+
"genHistItem": "t_j5va_genHistItem",
|
|
666
|
+
"tagName": "t_j5va_tagName",
|
|
663
667
|
"modeReadonly": "t_j5va_modeReadonly",
|
|
664
|
-
"
|
|
665
|
-
"
|
|
666
|
-
"
|
|
667
|
-
"
|
|
668
|
-
"
|
|
669
|
-
"
|
|
670
|
-
"
|
|
671
|
-
"
|
|
672
|
-
"
|
|
673
|
-
"
|
|
674
|
-
"
|
|
675
|
-
"
|
|
676
|
-
"
|
|
677
|
-
"
|
|
678
|
-
"histAdd": "t_j5va_histAdd",
|
|
679
|
-
"histDanger": "t_j5va_histDanger",
|
|
680
|
-
"pinOn": "t_j5va_pinOn",
|
|
681
|
-
"actionPrimary": "t_j5va_actionPrimary",
|
|
668
|
+
"moreButton": "t_j5va_moreButton",
|
|
669
|
+
"customKeyInput": "t_j5va_customKeyInput",
|
|
670
|
+
"lenChips": "t_j5va_lenChips",
|
|
671
|
+
"actionGroup": "t_j5va_actionGroup",
|
|
672
|
+
"lockedTag": "t_j5va_lockedTag",
|
|
673
|
+
"clearButton": "t_j5va_clearButton",
|
|
674
|
+
"detailCode": "t_j5va_detailCode",
|
|
675
|
+
"bulkItem": "t_j5va_bulkItem",
|
|
676
|
+
"genHist": "t_j5va_genHist",
|
|
677
|
+
"attachBox": "t_j5va_attachBox",
|
|
678
|
+
"retryButton": "t_j5va_retryButton",
|
|
679
|
+
"addButton": "t_j5va_addButton",
|
|
680
|
+
"customFieldRow": "t_j5va_customFieldRow",
|
|
681
|
+
"kindChipActive": "t_j5va_kindChipActive",
|
|
682
682
|
"reportTitle": "t_j5va_reportTitle"
|
|
683
683
|
};
|
|
684
684
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-vault",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.69",
|
|
4
4
|
"bin": {
|
|
5
5
|
"dsh-vault": "./lib/cli.js"
|
|
6
6
|
},
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"scan:public": "node scripts/secret-scan.mjs --public",
|
|
88
88
|
"e2e:theme": "node tests/e2e/theme-check.mjs",
|
|
89
89
|
"e2e:polish": "node tests/e2e/polish-check.mjs",
|
|
90
|
-
"e2e:contrast": "node tests/e2e/contrast-audit.mjs"
|
|
90
|
+
"e2e:contrast": "node tests/e2e/contrast-audit.mjs",
|
|
91
|
+
"e2e:prompt": "node tests/e2e/cli-prompt.mjs"
|
|
91
92
|
}
|
|
92
93
|
}
|