@vaultcompass/vault-guard 1.0.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/LICENSE +21 -0
- package/dist/__tests__/integration/proxy-test-helpers.d.ts +47 -0
- package/dist/__tests__/integration/proxy-test-helpers.d.ts.map +1 -0
- package/dist/__tests__/integration/proxy-test-helpers.js +146 -0
- package/dist/__tests__/integration/proxy-test-helpers.js.map +1 -0
- package/dist/cli-entry.d.ts +3 -0
- package/dist/cli-entry.d.ts.map +1 -0
- package/dist/cli-entry.js +15 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +241 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/check.d.ts +2 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +40 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +57 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/data.d.ts +67 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +294 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/fix.d.ts +2 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +80 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +26 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install-hook.d.ts +3 -0
- package/dist/commands/install-hook.d.ts.map +1 -0
- package/dist/commands/install-hook.js +31 -0
- package/dist/commands/install-hook.js.map +1 -0
- package/dist/commands/monitor.d.ts +2 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +23 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/commands/proxy.d.ts +68 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +445 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +156 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/statusline.d.ts +2 -0
- package/dist/commands/statusline.d.ts.map +1 -0
- package/dist/commands/statusline.js +34 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/suggest-model.d.ts +6 -0
- package/dist/commands/suggest-model.d.ts.map +1 -0
- package/dist/commands/suggest-model.js +38 -0
- package/dist/commands/suggest-model.js.map +1 -0
- package/dist/commands/tokens.d.ts +2 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +22 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/scan-utils.d.ts +65 -0
- package/dist/utils/scan-utils.d.ts.map +1 -0
- package/dist/utils/scan-utils.js +333 -0
- package/dist/utils/scan-utils.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.scanCommand = scanCommand;
|
|
7
|
+
const vault_guard_core_1 = require("@vaultcompass/vault-guard-core");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const scan_utils_1 = require("../utils/scan-utils");
|
|
10
|
+
async function scanCommand(targetPath, format = 'text', staged = false) {
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
let config;
|
|
13
|
+
try {
|
|
14
|
+
config = (0, vault_guard_core_1.loadConfig)(cwd);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (e instanceof vault_guard_core_1.ConfigError) {
|
|
18
|
+
console.error(chalk_1.default.red('❌ Config error:'), chalk_1.default.white(e.message));
|
|
19
|
+
console.error(chalk_1.default.gray(' Fix the JSON in the file above (or remove it) and re-run. ' +
|
|
20
|
+
'Vault Guard refuses to scan with a broken config because silent ' +
|
|
21
|
+
'fallback to defaults would mask the rules you intended.\n'));
|
|
22
|
+
return 1;
|
|
23
|
+
}
|
|
24
|
+
throw e;
|
|
25
|
+
}
|
|
26
|
+
const scanner = new vault_guard_core_1.SecretScanner(config);
|
|
27
|
+
// Merge config ignore paths and patterns into a single list for file filtering.
|
|
28
|
+
const configIgnorePatterns = [
|
|
29
|
+
...(config.ignore?.paths ?? []),
|
|
30
|
+
...(config.ignore?.patterns ?? []),
|
|
31
|
+
];
|
|
32
|
+
const bus = new vault_guard_core_1.DiagnosticBus();
|
|
33
|
+
const diagnostics = [];
|
|
34
|
+
const extraPatternDiagnostics = [];
|
|
35
|
+
// Surface rejected `extra_patterns` (ReDoS guard, length cap, invalid syntax).
|
|
36
|
+
for (const rej of scanner.extraPatternRejections) {
|
|
37
|
+
const ctx = {
|
|
38
|
+
patternId: rej.id,
|
|
39
|
+
reason: rej.reason,
|
|
40
|
+
detail: rej.detail,
|
|
41
|
+
};
|
|
42
|
+
extraPatternDiagnostics.push(ctx);
|
|
43
|
+
diagnostics.push({
|
|
44
|
+
code: (0, vault_guard_core_1.mapPatternRejectionReasonToDiagnosticCode)(rej.reason),
|
|
45
|
+
severity: 'warning',
|
|
46
|
+
ctx: { ...ctx },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (extraPatternDiagnostics.length > 0 && format === 'text') {
|
|
50
|
+
for (const ctx of extraPatternDiagnostics) {
|
|
51
|
+
console.error(chalk_1.default.yellow('⚠️ extra_pattern rejected:'), chalk_1.default.white(`${ctx.patternId} (${ctx.reason}) — ${ctx.detail}`));
|
|
52
|
+
}
|
|
53
|
+
console.error(chalk_1.default.gray(' Set "extra_patterns_unsafe": true in .vault-guard.json only if ' +
|
|
54
|
+
'you have audited every pattern.\n'));
|
|
55
|
+
}
|
|
56
|
+
if (format === 'text' && !staged) {
|
|
57
|
+
console.log(chalk_1.default.blue('🔍 Scanning'), chalk_1.default.cyan(targetPath));
|
|
58
|
+
}
|
|
59
|
+
const stats = { filesScanned: 0, bytesScanned: 0 };
|
|
60
|
+
const t0 = Date.now();
|
|
61
|
+
try {
|
|
62
|
+
let results;
|
|
63
|
+
if (staged) {
|
|
64
|
+
if (!(0, vault_guard_core_1.isInsideGitWorkTree)(cwd)) {
|
|
65
|
+
console.error(chalk_1.default.red('❌ Error:'), chalk_1.default.white('Not a git repository (or outside a work tree).'));
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
let stagedFiles;
|
|
69
|
+
try {
|
|
70
|
+
stagedFiles = (0, vault_guard_core_1.getGitStagedFilePaths)(cwd);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
if (e instanceof vault_guard_core_1.GitError) {
|
|
74
|
+
console.error(chalk_1.default.red('❌ Git error:'), chalk_1.default.white(e.message));
|
|
75
|
+
console.error(chalk_1.default.gray(' vault-guard cannot determine which files are staged.\n' +
|
|
76
|
+
' Refusing to produce a ✅ result that may be incorrect.\n'));
|
|
77
|
+
return 2;
|
|
78
|
+
}
|
|
79
|
+
throw e;
|
|
80
|
+
}
|
|
81
|
+
if (format === 'text') {
|
|
82
|
+
console.log(chalk_1.default.blue('🔍 Scanning'), chalk_1.default.cyan('git staged files'));
|
|
83
|
+
if (stagedFiles.length === 0) {
|
|
84
|
+
console.log(chalk_1.default.green.bold('✅ SUCCESS:'), chalk_1.default.white('Nothing staged — nothing to scan\n'));
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
console.log(chalk_1.default.gray(` ${stagedFiles.length} file(s) in the index\n`));
|
|
88
|
+
}
|
|
89
|
+
results = await (0, scan_utils_1.scanFileListAsync)(stagedFiles, scanner, {
|
|
90
|
+
verbose: format === 'text',
|
|
91
|
+
skipBinary: true,
|
|
92
|
+
progress: format === 'text',
|
|
93
|
+
bus,
|
|
94
|
+
stats,
|
|
95
|
+
configIgnorePatterns,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
results = await (0, scan_utils_1.scanFilesAsync)([targetPath], scanner, {
|
|
100
|
+
verbose: format === 'text',
|
|
101
|
+
skipBinary: true,
|
|
102
|
+
progress: format === 'text',
|
|
103
|
+
bus,
|
|
104
|
+
stats,
|
|
105
|
+
configIgnorePatterns,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Merge bus diagnostics
|
|
109
|
+
diagnostics.push(...bus.drain());
|
|
110
|
+
const baselineLoad = (0, vault_guard_core_1.loadBaseline)(cwd);
|
|
111
|
+
if (baselineLoad.parseError) {
|
|
112
|
+
diagnostics.push({
|
|
113
|
+
code: 'baseline.invalid',
|
|
114
|
+
severity: 'warning',
|
|
115
|
+
ctx: { path: baselineLoad.sourcePath ?? '', detail: baselineLoad.parseError },
|
|
116
|
+
});
|
|
117
|
+
if (format === 'text') {
|
|
118
|
+
console.error(chalk_1.default.yellow('⚠️ Baseline file invalid:'), chalk_1.default.white(baselineLoad.parseError), chalk_1.default.gray(baselineLoad.sourcePath ? `(${baselineLoad.sourcePath})` : ''));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const { results: afterBaseline, suppressed: baselineSuppressed } = (0, vault_guard_core_1.filterResultsByBaseline)(process.cwd(), results, baselineLoad.fingerprints);
|
|
122
|
+
results = afterBaseline;
|
|
123
|
+
const durationMs = Date.now() - t0;
|
|
124
|
+
const run = {
|
|
125
|
+
duration_ms: durationMs,
|
|
126
|
+
files_scanned: stats.filesScanned,
|
|
127
|
+
bytes_scanned: stats.bytesScanned,
|
|
128
|
+
patterns_active: scanner.getActivePatternCount(),
|
|
129
|
+
diagnostics_count: diagnostics.length,
|
|
130
|
+
...(baselineSuppressed > 0 ? { baseline_suppressed: baselineSuppressed } : {}),
|
|
131
|
+
};
|
|
132
|
+
if (format === 'json') {
|
|
133
|
+
process.stdout.write((0, scan_utils_1.formatJson)(results, { diagnostics, run }) + '\n');
|
|
134
|
+
return results.reduce((n, r) => n + r.matches.length, 0) === 0 ? 0 : 1;
|
|
135
|
+
}
|
|
136
|
+
if (format === 'sarif') {
|
|
137
|
+
process.stdout.write((0, scan_utils_1.formatSarif)(results, { diagnostics, run }) + '\n');
|
|
138
|
+
return results.reduce((n, r) => n + r.matches.length, 0) === 0 ? 0 : 1;
|
|
139
|
+
}
|
|
140
|
+
// Text mode: print one-line diagnostic summary when any non-fatal issues occurred
|
|
141
|
+
if (diagnostics.length > 0) {
|
|
142
|
+
console.error(chalk_1.default.yellow(`⚠️ ${diagnostics.length} warning(s) — run with --json for details`));
|
|
143
|
+
}
|
|
144
|
+
if (results.length === 0) {
|
|
145
|
+
console.log(chalk_1.default.green.bold('✅ SUCCESS:'), chalk_1.default.white('No secrets found\n'));
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
(0, scan_utils_1.displayScanResults)(results);
|
|
149
|
+
return 1;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error(chalk_1.default.red('❌ Fatal error:'), chalk_1.default.white(String(error)));
|
|
153
|
+
return 1;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../src/commands/statusline.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA4BvD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statuslineCommand = statuslineCommand;
|
|
4
|
+
const vault_guard_telemetry_1 = require("@vaultcompass/vault-guard-telemetry");
|
|
5
|
+
function statuslineCommand(asJson) {
|
|
6
|
+
let store;
|
|
7
|
+
try {
|
|
8
|
+
store = new vault_guard_telemetry_1.TelemetryStore();
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
if (e instanceof vault_guard_telemetry_1.TelemetryUnavailableError) {
|
|
12
|
+
if (asJson) {
|
|
13
|
+
process.stdout.write(`${JSON.stringify({ error: 'telemetry_unavailable', message: e.message })}\n`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
process.stderr.write(`vault-guard statusline: telemetry unavailable — ${e.message}\n`);
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const payload = store.getStatuslinePayload();
|
|
24
|
+
if (asJson) {
|
|
25
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
process.stdout.write(`Vault Guard (today UTC): secrets=${payload.secrets_today} tokens in/out=${payload.tokens_today_input}/${payload.tokens_today_output} est_cost_usd≈${payload.est_cost_usd} model=${payload.model ?? '—'}\n`);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
store.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=statusline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/commands/statusline.ts"],"names":[],"mappings":";;AAEA,8CA4BC;AA9BD,+EAAgG;AAEhG,SAAgB,iBAAiB,CAAC,MAAe;IAC/C,IAAI,KAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,sCAAc,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,iDAAyB,EAAE,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YACtG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACzF,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,OAAO,CAAC,aAAa,kBAAkB,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,iBAAiB,OAAO,CAAC,YAAY,UAAU,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAC5M,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-model.d.ts","sourceRoot":"","sources":["../../src/commands/suggest-model.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAgCP"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.suggestModelCommand = suggestModelCommand;
|
|
4
|
+
const vault_guard_telemetry_1 = require("@vaultcompass/vault-guard-telemetry");
|
|
5
|
+
function suggestModelCommand(options) {
|
|
6
|
+
let store;
|
|
7
|
+
try {
|
|
8
|
+
store = new vault_guard_telemetry_1.TelemetryStore();
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
if (e instanceof vault_guard_telemetry_1.TelemetryUnavailableError) {
|
|
12
|
+
if (options.json) {
|
|
13
|
+
process.stdout.write(`${JSON.stringify({ error: 'telemetry_unavailable', message: e.message }, null, 2)}\n`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
process.stderr.write(`vault-guard suggest-model: telemetry unavailable — ${e.message}\n`);
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const s = store.suggestModel({ cwd: options.cwd, language: options.language });
|
|
24
|
+
if (options.json) {
|
|
25
|
+
process.stdout.write(`${JSON.stringify(s, null, 2)}\n`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!s.suggested_model) {
|
|
29
|
+
process.stdout.write(`${s.reason}\n`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
process.stdout.write(`Suggested model: ${s.suggested_model}\n${s.reason}\n`);
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
store.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=suggest-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-model.js","sourceRoot":"","sources":["../../src/commands/suggest-model.ts"],"names":[],"mappings":";;AAEA,kDAoCC;AAtCD,+EAAgG;AAEhG,SAAgB,mBAAmB,CAAC,OAInC;IACC,IAAI,KAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,sCAAc,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,iDAAyB,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACvF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAC5F,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/E,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBnD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.tokensCommand = tokensCommand;
|
|
7
|
+
const vault_guard_core_1 = require("@vaultcompass/vault-guard-core");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
async function tokensCommand() {
|
|
10
|
+
console.log(chalk_1.default.magenta.bold('💰 Token Usage\n'));
|
|
11
|
+
const counter = new vault_guard_core_1.TokenCounter();
|
|
12
|
+
const report = counter.generateReport(process.cwd());
|
|
13
|
+
console.log(chalk_1.default.white.bold('Total Tokens:'), chalk_1.default.magenta.bold(report.totalTokens.toLocaleString()));
|
|
14
|
+
console.log(chalk_1.default.white.bold('Estimated Cost:'), chalk_1.default.magenta.bold(`$${report.estimatedCost.toFixed(2)}`));
|
|
15
|
+
console.log(chalk_1.default.white.bold('\nBreakdown by file type:'));
|
|
16
|
+
for (const [ext, tokens] of Object.entries(report.breakdown)) {
|
|
17
|
+
const percentage = ((tokens / report.totalTokens) * 100).toFixed(1);
|
|
18
|
+
console.log(` ${chalk_1.default.cyan(ext)}: ${chalk_1.default.magenta(tokens.toLocaleString())} tokens (${chalk_1.default.gray(percentage + '%')})`);
|
|
19
|
+
}
|
|
20
|
+
console.log(chalk_1.default.gray('\n💡 Tip: Use with AI coding tools to track token usage'));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":";;;;;AAGA,sCAgBC;AAnBD,qEAA8D;AAC9D,kDAA0B;AAEnB,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,+BAAY,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5G,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,YAAY,eAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1H,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;AACrF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.buildCli = void 0;
|
|
18
|
+
var cli_1 = require("./cli");
|
|
19
|
+
Object.defineProperty(exports, "buildCli", { enumerable: true, get: function () { return cli_1.buildCli; } });
|
|
20
|
+
__exportStar(require("./commands"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6BAAiC;AAAxB,+FAAA,QAAQ,OAAA;AACjB,6CAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./scan-utils"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SecretScanner, type JsonOutput, type JsonRunMetadata, type FileScanResult, type Diagnostic, type DiagnosticBus } from '@vaultcompass/vault-guard-core';
|
|
2
|
+
export type { JsonOutput, JsonRunMetadata };
|
|
3
|
+
export interface ScanFormatOptions {
|
|
4
|
+
diagnostics?: Diagnostic[];
|
|
5
|
+
run?: JsonRunMetadata;
|
|
6
|
+
}
|
|
7
|
+
export declare function formatJson(results: ScanResult[], opts?: ScanFormatOptions): string;
|
|
8
|
+
export declare function formatSarif(results: ScanResult[], opts?: ScanFormatOptions): string;
|
|
9
|
+
export type ScanResult = FileScanResult;
|
|
10
|
+
/** Filled by scan runners when provided (files opened for secret scanning, bytes read). */
|
|
11
|
+
export interface ScanTelemetryStats {
|
|
12
|
+
filesScanned: number;
|
|
13
|
+
bytesScanned: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ScanOptions {
|
|
16
|
+
verbose?: boolean;
|
|
17
|
+
maxSize?: number;
|
|
18
|
+
skipBinary?: boolean;
|
|
19
|
+
progress?: boolean;
|
|
20
|
+
concurrency?: number;
|
|
21
|
+
bus?: DiagnosticBus;
|
|
22
|
+
stats?: ScanTelemetryStats;
|
|
23
|
+
/**
|
|
24
|
+
* Combined gitignore-style patterns from `config.ignore.paths` and
|
|
25
|
+
* `config.ignore.patterns`. Applied to every file before scanning so that
|
|
26
|
+
* `.vault-guard.json` `ignore` entries are honoured uniformly across
|
|
27
|
+
* directory scans and staged-file scans.
|
|
28
|
+
*/
|
|
29
|
+
configIgnorePatterns?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Scan an explicit list of files (e.g. paths from \`git diff --cached\`).
|
|
33
|
+
* Skips missing paths and non-files silently.
|
|
34
|
+
*/
|
|
35
|
+
export declare function scanFileListAsync(files: string[], scanner: SecretScanner, options?: ScanOptions): Promise<ScanResult[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a file is binary based on extension
|
|
38
|
+
*/
|
|
39
|
+
export declare function isBinaryFile(filePath: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Scan files with proper filtering and error handling (async version)
|
|
42
|
+
* This is the shared scanning logic used by both scan and check commands
|
|
43
|
+
*/
|
|
44
|
+
export declare function scanFilesAsync(targetPaths: string[], scanner: SecretScanner, options?: ScanOptions): Promise<ScanResult[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Scan files with proper filtering and error handling (sync version for backwards compatibility)
|
|
47
|
+
* This is the shared scanning logic used by both scan and check commands
|
|
48
|
+
*/
|
|
49
|
+
export declare function scanFiles(targetPaths: string[], scanner: SecretScanner, options?: ScanOptions): ScanResult[];
|
|
50
|
+
/**
|
|
51
|
+
* Display scan results with proper formatting.
|
|
52
|
+
*
|
|
53
|
+
* Output format: `<path>:<line>:<col> <severity> <type> <redacted>`
|
|
54
|
+
*
|
|
55
|
+
* Why this layout:
|
|
56
|
+
* - Most modern terminals (iTerm2, Windows Terminal, VS Code, JetBrains)
|
|
57
|
+
* auto-link `path:line:col` so users can cmd/ctrl-click directly to the
|
|
58
|
+
* source — no copy-paste, no greppable secret value needed.
|
|
59
|
+
* - Paths are cwd-relative for the same reason JSON/SARIF are: avoids
|
|
60
|
+
* leaking the developer's home dir / username when output is shared.
|
|
61
|
+
* - The redacted match value (`sk-a…(37c)`) is shown last and intentionally
|
|
62
|
+
* low-information.
|
|
63
|
+
*/
|
|
64
|
+
export declare function displayScanResults(results: ScanResult[]): void;
|
|
65
|
+
//# sourceMappingURL=scan-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-utils.d.ts","sourceRoot":"","sources":["../../src/utils/scan-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAQb,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;AAC5C,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAMtF;AACD,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAMvF;AASD,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC,2FAA2F;AAC3F,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAiFvB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4GvB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,WAAgB,GACxB,UAAU,EAAE,CAoFd;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAyB9D"}
|