proofscan 0.7.2 → 0.7.3
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/dist/cli.js +5 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/secrets.d.ts +19 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +387 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/secrets/index.d.ts +2 -0
- package/dist/secrets/index.d.ts.map +1 -1
- package/dist/secrets/index.js +4 -0
- package/dist/secrets/index.js.map +1 -1
- package/dist/secrets/management.d.ts +112 -0
- package/dist/secrets/management.d.ts.map +1 -0
- package/dist/secrets/management.js +488 -0
- package/dist/secrets/management.js.map +1 -0
- package/dist/secrets/resolve.d.ts +51 -0
- package/dist/secrets/resolve.d.ts.map +1 -0
- package/dist/secrets/resolve.js +113 -0
- package/dist/secrets/resolve.js.map +1 -0
- package/dist/secrets/store.d.ts +4 -0
- package/dist/secrets/store.d.ts.map +1 -1
- package/dist/secrets/store.js +12 -0
- package/dist/secrets/store.js.map +1 -1
- package/dist/secrets/types.d.ts +1 -1
- package/dist/secrets/types.d.ts.map +1 -1
- package/dist/secrets/types.js +2 -2
- package/dist/secrets/types.js.map +1 -1
- package/dist/utils/clipboard.d.ts +4 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +6 -0
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/secret-input.d.ts +22 -0
- package/dist/utils/secret-input.d.ts.map +1 -0
- package/dist/utils/secret-input.js +84 -0
- package/dist/utils/secret-input.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -25,7 +25,7 @@ import { setOutputOptions } from './utils/output.js';
|
|
|
25
25
|
const require = createRequire(import.meta.url);
|
|
26
26
|
const packageJson = require('../package.json');
|
|
27
27
|
const VERSION = packageJson.version;
|
|
28
|
-
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, createPermissionsCommand, createRecordCommand, createDoctorCommand, createShellCommand, } from './commands/index.js';
|
|
28
|
+
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, createPermissionsCommand, createRecordCommand, createDoctorCommand, createShellCommand, createSecretsCommand, } from './commands/index.js';
|
|
29
29
|
const program = new Command();
|
|
30
30
|
// Global state for config path
|
|
31
31
|
let globalConfigPath;
|
|
@@ -52,6 +52,7 @@ Management:
|
|
|
52
52
|
archive, a Archive and prune old data
|
|
53
53
|
config, c Configuration management
|
|
54
54
|
connectors Connector management
|
|
55
|
+
secrets Secret management (list, set, edit, prune, export, import)
|
|
55
56
|
doctor Diagnose and fix database issues
|
|
56
57
|
|
|
57
58
|
Shortcuts:
|
|
@@ -160,6 +161,8 @@ program.addCommand(createRecordCommand(getConfigPath));
|
|
|
160
161
|
program.addCommand(createDoctorCommand(getConfigPath));
|
|
161
162
|
// shell (Phase 4: interactive REPL)
|
|
162
163
|
program.addCommand(createShellCommand(getConfigPath));
|
|
164
|
+
// secrets (Phase 3.6: secret management)
|
|
165
|
+
program.addCommand(createSecretsCommand(getConfigPath));
|
|
163
166
|
// ============================================================
|
|
164
167
|
// Default action: pfscan → pfscan view
|
|
165
168
|
// ============================================================
|
|
@@ -172,7 +175,7 @@ function hasSubcommand() {
|
|
|
172
175
|
const knownCommands = new Set([
|
|
173
176
|
'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
|
|
174
177
|
'scan', 's', 'archive', 'a', 'config', 'c',
|
|
175
|
-
'connectors', 'connector', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'permissions', 'record', 'doctor', 'shell', 'help'
|
|
178
|
+
'connectors', 'connector', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'permissions', 'record', 'doctor', 'shell', 'secrets', 'help'
|
|
176
179
|
]);
|
|
177
180
|
for (let i = 2; i < process.argv.length; i++) {
|
|
178
181
|
const arg = process.argv[i];
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,iCAAiC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC;AAEzB,uBAAuB;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC;AAEzB,uBAAuB;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,YAAY,CAAC;AAE3B,gCAAgC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets management command (Phase 3.6)
|
|
3
|
+
*
|
|
4
|
+
* Provides commands for managing secrets:
|
|
5
|
+
* - list: Show all secrets with their bindings
|
|
6
|
+
* - set: Store a secret for a connector/key
|
|
7
|
+
* - edit: Interactive wizard to fill missing placeholders
|
|
8
|
+
* - prune: Remove orphan secrets not referenced by config
|
|
9
|
+
* - export: Export secrets to encrypted bundle
|
|
10
|
+
* - import: Import secrets from encrypted bundle
|
|
11
|
+
*
|
|
12
|
+
* Security: Never print plaintext secrets to console, logs, or files.
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
/**
|
|
16
|
+
* Create the secrets command group
|
|
17
|
+
*/
|
|
18
|
+
export declare function createSecretsCommand(getConfigPath: () => string): Command;
|
|
19
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAoYzE"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets management command (Phase 3.6)
|
|
3
|
+
*
|
|
4
|
+
* Provides commands for managing secrets:
|
|
5
|
+
* - list: Show all secrets with their bindings
|
|
6
|
+
* - set: Store a secret for a connector/key
|
|
7
|
+
* - edit: Interactive wizard to fill missing placeholders
|
|
8
|
+
* - prune: Remove orphan secrets not referenced by config
|
|
9
|
+
* - export: Export secrets to encrypted bundle
|
|
10
|
+
* - import: Import secrets from encrypted bundle
|
|
11
|
+
*
|
|
12
|
+
* Security: Never print plaintext secrets to console, logs, or files.
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
import { output, outputError, getOutputOptions } from '../utils/output.js';
|
|
16
|
+
import { existsSync, readFileSync } from 'fs';
|
|
17
|
+
import { dirname } from 'path';
|
|
18
|
+
import { listSecretBindings, setSecret, pruneOrphanSecrets, exportSecrets, importSecrets, } from '../secrets/index.js';
|
|
19
|
+
import { detectSecret } from '../secrets/detection.js';
|
|
20
|
+
import { readSecretHidden, readSecretFromClipboard } from '../utils/secret-input.js';
|
|
21
|
+
/**
|
|
22
|
+
* Create the secrets command group
|
|
23
|
+
*/
|
|
24
|
+
export function createSecretsCommand(getConfigPath) {
|
|
25
|
+
const secrets = new Command('secrets')
|
|
26
|
+
.description('Secret management (list, set, edit, prune, export, import)');
|
|
27
|
+
// ============================================================
|
|
28
|
+
// secrets list
|
|
29
|
+
// ============================================================
|
|
30
|
+
secrets
|
|
31
|
+
.command('list')
|
|
32
|
+
.description('List all stored secrets with bindings')
|
|
33
|
+
.option('--json', 'Output in JSON format')
|
|
34
|
+
.option('--orphans', 'Show only orphan secrets (not bound to any config)')
|
|
35
|
+
.action(async (options) => {
|
|
36
|
+
try {
|
|
37
|
+
const configPath = getConfigPath();
|
|
38
|
+
const configDir = dirname(configPath);
|
|
39
|
+
const bindings = await listSecretBindings(configDir, configPath);
|
|
40
|
+
if (options.orphans) {
|
|
41
|
+
const orphans = bindings.filter(b => b.status === 'ORPHAN');
|
|
42
|
+
if (getOutputOptions().json || options.json) {
|
|
43
|
+
output(orphans);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
if (orphans.length === 0) {
|
|
47
|
+
output('No orphan secrets found.');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
output(`Found ${orphans.length} orphan secret(s):\n`);
|
|
51
|
+
for (const b of orphans) {
|
|
52
|
+
output(` ${b.secret_ref} (created: ${b.created_at})`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (getOutputOptions().json || options.json) {
|
|
59
|
+
output(bindings);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
if (bindings.length === 0) {
|
|
63
|
+
output('No secrets stored.');
|
|
64
|
+
output('\nTo add secrets, use:');
|
|
65
|
+
output(' pfscan secrets set <connector> <ENV_KEY>');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
output(`Found ${bindings.length} secret(s):\n`);
|
|
69
|
+
output(' CONNECTOR ENV_KEY STATUS PROVIDER CREATED');
|
|
70
|
+
output(' ───────────────── ───────────────────────── ──────── ──────── ───────────────────');
|
|
71
|
+
for (const b of bindings) {
|
|
72
|
+
const connector = (b.connector_id || '-').padEnd(17);
|
|
73
|
+
const key = (b.env_key || '-').padEnd(25);
|
|
74
|
+
const status = b.status.padEnd(8);
|
|
75
|
+
const provider = b.provider.padEnd(8);
|
|
76
|
+
const created = b.created_at.slice(0, 19);
|
|
77
|
+
output(` ${connector} ${key} ${status} ${provider} ${created}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
outputError(`Failed to list secrets: ${msg}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// ============================================================
|
|
88
|
+
// secrets set
|
|
89
|
+
// ============================================================
|
|
90
|
+
secrets
|
|
91
|
+
.command('set <connector> <envKey>')
|
|
92
|
+
.description('Set a secret value for a connector environment variable')
|
|
93
|
+
.option('--clip', 'Read secret from clipboard instead of prompting')
|
|
94
|
+
.action(async (connectorId, envKey, options) => {
|
|
95
|
+
try {
|
|
96
|
+
const configPath = getConfigPath();
|
|
97
|
+
// Validate connector exists
|
|
98
|
+
if (!existsSync(configPath)) {
|
|
99
|
+
outputError(`Config file not found: ${configPath}`);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
let config;
|
|
103
|
+
try {
|
|
104
|
+
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
105
|
+
}
|
|
106
|
+
catch (parseErr) {
|
|
107
|
+
outputError(`Invalid config file format: ${parseErr instanceof SyntaxError ? 'JSON parse error' : 'Read error'}`);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
const connector = config.connectors?.find(c => c.id === connectorId);
|
|
111
|
+
if (!connector) {
|
|
112
|
+
outputError(`Connector not found: ${connectorId}`);
|
|
113
|
+
outputError(`Available connectors: ${config.connectors?.map(c => c.id).join(', ') || 'none'}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
// Read secret value
|
|
117
|
+
let secretValue;
|
|
118
|
+
if (options.clip) {
|
|
119
|
+
output(`Reading secret for ${connectorId}.${envKey} from clipboard...`);
|
|
120
|
+
secretValue = await readSecretFromClipboard();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
output(`Enter secret for ${connectorId}.${envKey}:`);
|
|
124
|
+
secretValue = await readSecretHidden();
|
|
125
|
+
}
|
|
126
|
+
if (!secretValue || secretValue.trim().length === 0) {
|
|
127
|
+
outputError('Secret value cannot be empty');
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
// Store secret and update config
|
|
131
|
+
const result = await setSecret({
|
|
132
|
+
configPath,
|
|
133
|
+
connectorId,
|
|
134
|
+
envKey,
|
|
135
|
+
secretValue: secretValue.trim(),
|
|
136
|
+
});
|
|
137
|
+
output(`\n Secret stored: ${result.secretRef}`);
|
|
138
|
+
output(` Config updated: ${connectorId}.transport.env.${envKey}`);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
142
|
+
outputError(`Failed to set secret: ${msg}`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
// ============================================================
|
|
147
|
+
// secrets edit
|
|
148
|
+
// ============================================================
|
|
149
|
+
secrets
|
|
150
|
+
.command('edit [connector]')
|
|
151
|
+
.description('Interactive wizard to fill missing/placeholder secrets')
|
|
152
|
+
.option('--clip', 'Read secrets from clipboard')
|
|
153
|
+
.action(async (connectorId, options) => {
|
|
154
|
+
try {
|
|
155
|
+
const configPath = getConfigPath();
|
|
156
|
+
if (!existsSync(configPath)) {
|
|
157
|
+
outputError(`Config file not found: ${configPath}`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
let config;
|
|
161
|
+
try {
|
|
162
|
+
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
163
|
+
}
|
|
164
|
+
catch (parseErr) {
|
|
165
|
+
outputError(`Invalid config file format: ${parseErr instanceof SyntaxError ? 'JSON parse error' : 'Read error'}`);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const connectors = connectorId
|
|
169
|
+
? config.connectors?.filter(c => c.id === connectorId)
|
|
170
|
+
: config.connectors;
|
|
171
|
+
if (!connectors || connectors.length === 0) {
|
|
172
|
+
if (connectorId) {
|
|
173
|
+
outputError(`Connector not found: ${connectorId}`);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
outputError('No connectors configured');
|
|
177
|
+
}
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
// Find all missing/placeholder secrets
|
|
181
|
+
const missing = [];
|
|
182
|
+
for (const conn of connectors) {
|
|
183
|
+
// Only stdio transport has env
|
|
184
|
+
if (conn.transport?.type !== 'stdio')
|
|
185
|
+
continue;
|
|
186
|
+
const env = conn.transport.env;
|
|
187
|
+
if (!env)
|
|
188
|
+
continue;
|
|
189
|
+
for (const [key, value] of Object.entries(env)) {
|
|
190
|
+
const detection = detectSecret(key, value);
|
|
191
|
+
if (detection.action === 'warn') {
|
|
192
|
+
// Placeholder detected
|
|
193
|
+
missing.push({
|
|
194
|
+
connector: conn,
|
|
195
|
+
key,
|
|
196
|
+
value: value,
|
|
197
|
+
reason: 'placeholder',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else if (detection.action === 'store' && !value.match(/^(dpapi|keychain|plain):[a-zA-Z0-9_-]+$/)) {
|
|
201
|
+
// Secret key but not yet stored (raw value)
|
|
202
|
+
missing.push({
|
|
203
|
+
connector: conn,
|
|
204
|
+
key,
|
|
205
|
+
value: value,
|
|
206
|
+
reason: 'raw-secret',
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (missing.length === 0) {
|
|
212
|
+
output('All secrets are properly configured.');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
output(`Found ${missing.length} secret(s) to configure:\n`);
|
|
216
|
+
let updated = 0;
|
|
217
|
+
for (let i = 0; i < missing.length; i++) {
|
|
218
|
+
const item = missing[i];
|
|
219
|
+
const label = `[${i + 1}/${missing.length}]`;
|
|
220
|
+
output(`${label} ${item.connector.id}.${item.key}`);
|
|
221
|
+
output(` Current: ${item.reason === 'placeholder' ? '(placeholder)' : '(not stored)'}`);
|
|
222
|
+
let secretValue;
|
|
223
|
+
if (options.clip) {
|
|
224
|
+
output(' Reading from clipboard...');
|
|
225
|
+
secretValue = await readSecretFromClipboard();
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
output(' Enter value (or press Enter to skip):');
|
|
229
|
+
secretValue = await readSecretHidden();
|
|
230
|
+
}
|
|
231
|
+
if (!secretValue || secretValue.trim().length === 0) {
|
|
232
|
+
output(' Skipped.\n');
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
await setSecret({
|
|
236
|
+
configPath,
|
|
237
|
+
connectorId: item.connector.id,
|
|
238
|
+
envKey: item.key,
|
|
239
|
+
secretValue: secretValue.trim(),
|
|
240
|
+
});
|
|
241
|
+
output(' Stored.\n');
|
|
242
|
+
updated++;
|
|
243
|
+
}
|
|
244
|
+
output(`\nUpdated ${updated} of ${missing.length} secret(s).`);
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
248
|
+
outputError(`Failed to edit secrets: ${msg}`);
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
// ============================================================
|
|
253
|
+
// secrets prune
|
|
254
|
+
// ============================================================
|
|
255
|
+
secrets
|
|
256
|
+
.command('prune')
|
|
257
|
+
.description('Remove orphan secrets not referenced by config')
|
|
258
|
+
.option('--dry-run', 'Show what would be removed without actually removing')
|
|
259
|
+
.option('--older-than <days>', 'Only prune secrets older than N days', parseInt)
|
|
260
|
+
.action(async (options) => {
|
|
261
|
+
try {
|
|
262
|
+
const configPath = getConfigPath();
|
|
263
|
+
const configDir = dirname(configPath);
|
|
264
|
+
// Validate olderThan option
|
|
265
|
+
const olderThanDays = options.olderThan;
|
|
266
|
+
if (olderThanDays !== undefined && (isNaN(olderThanDays) || olderThanDays < 0)) {
|
|
267
|
+
outputError('--older-than must be a positive number');
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
const result = await pruneOrphanSecrets({
|
|
271
|
+
configDir,
|
|
272
|
+
configPath,
|
|
273
|
+
dryRun: options.dryRun,
|
|
274
|
+
olderThanDays,
|
|
275
|
+
});
|
|
276
|
+
if (getOutputOptions().json) {
|
|
277
|
+
output(result);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
if (result.orphanCount === 0) {
|
|
281
|
+
output('No orphan secrets found.');
|
|
282
|
+
}
|
|
283
|
+
else if (options.dryRun) {
|
|
284
|
+
output(`Would remove ${result.orphanCount} orphan secret(s):`);
|
|
285
|
+
for (const id of result.removedIds) {
|
|
286
|
+
output(` - ${id}`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
output(`Removed ${result.removedCount} orphan secret(s).`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
296
|
+
outputError(`Failed to prune secrets: ${msg}`);
|
|
297
|
+
process.exit(1);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
// ============================================================
|
|
301
|
+
// secrets export
|
|
302
|
+
// ============================================================
|
|
303
|
+
secrets
|
|
304
|
+
.command('export')
|
|
305
|
+
.description('Export secrets to encrypted bundle file')
|
|
306
|
+
.requiredOption('-o, --output <file>', 'Output file path')
|
|
307
|
+
.option('--format <format>', 'Output format (json)', 'json')
|
|
308
|
+
.action(async (options) => {
|
|
309
|
+
try {
|
|
310
|
+
const configPath = getConfigPath();
|
|
311
|
+
const configDir = dirname(configPath);
|
|
312
|
+
output('Enter passphrase to encrypt the export:');
|
|
313
|
+
const passphrase = await readSecretHidden();
|
|
314
|
+
if (!passphrase || passphrase.length < 12) {
|
|
315
|
+
outputError('Passphrase must be at least 12 characters');
|
|
316
|
+
process.exit(1);
|
|
317
|
+
}
|
|
318
|
+
output('Confirm passphrase:');
|
|
319
|
+
const confirm = await readSecretHidden();
|
|
320
|
+
if (passphrase !== confirm) {
|
|
321
|
+
outputError('Passphrases do not match');
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
output('\nExporting secrets...');
|
|
325
|
+
const result = await exportSecrets({
|
|
326
|
+
configDir,
|
|
327
|
+
configPath,
|
|
328
|
+
outputPath: options.output,
|
|
329
|
+
passphrase,
|
|
330
|
+
});
|
|
331
|
+
output(`\nExported ${result.exportedCount} secret(s) to: ${options.output}`);
|
|
332
|
+
output('\nIMPORTANT: Store this file securely. It contains encrypted secrets.');
|
|
333
|
+
output(' You will need the passphrase to import on another machine.');
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
337
|
+
outputError(`Failed to export secrets: ${msg}`);
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
// ============================================================
|
|
342
|
+
// secrets import
|
|
343
|
+
// ============================================================
|
|
344
|
+
secrets
|
|
345
|
+
.command('import <file>')
|
|
346
|
+
.description('Import secrets from encrypted bundle file')
|
|
347
|
+
.option('--overwrite', 'Overwrite existing secrets with same connector/key')
|
|
348
|
+
.option('--skip', 'Skip existing secrets (default)')
|
|
349
|
+
.action(async (file, options) => {
|
|
350
|
+
try {
|
|
351
|
+
const configPath = getConfigPath();
|
|
352
|
+
const configDir = dirname(configPath);
|
|
353
|
+
if (!existsSync(file)) {
|
|
354
|
+
outputError(`File not found: ${file}`);
|
|
355
|
+
process.exit(1);
|
|
356
|
+
}
|
|
357
|
+
output('Enter passphrase to decrypt the import:');
|
|
358
|
+
const passphrase = await readSecretHidden();
|
|
359
|
+
if (!passphrase) {
|
|
360
|
+
outputError('Passphrase is required');
|
|
361
|
+
process.exit(1);
|
|
362
|
+
}
|
|
363
|
+
output('\nImporting secrets...');
|
|
364
|
+
const result = await importSecrets({
|
|
365
|
+
configDir,
|
|
366
|
+
configPath,
|
|
367
|
+
inputPath: file,
|
|
368
|
+
passphrase,
|
|
369
|
+
overwrite: options.overwrite ?? false,
|
|
370
|
+
});
|
|
371
|
+
output(`\nImported ${result.importedCount} secret(s).`);
|
|
372
|
+
if (result.skippedCount > 0) {
|
|
373
|
+
output(`Skipped ${result.skippedCount} existing secret(s).`);
|
|
374
|
+
}
|
|
375
|
+
if (result.errorCount > 0) {
|
|
376
|
+
output(`Failed to import ${result.errorCount} secret(s).`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
381
|
+
outputError(`Failed to import secrets: ${msg}`);
|
|
382
|
+
process.exit(1);
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
return secrets;
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
package/dist/secrets/index.d.ts
CHANGED
|
@@ -9,4 +9,6 @@ export { redactDeep, redactValue, redactEnv, redactionSummary, isRedacted, REDAC
|
|
|
9
9
|
export { SqliteSecretStore, getSecretStore, closeSecretStore, } from './store.js';
|
|
10
10
|
export { PlainProvider, DpapiProvider, getBestProvider, getProvider, } from './providers/index.js';
|
|
11
11
|
export { secretizeEnv, formatSecretizeOutput, isSecretizeAvailable, type SecretizeKeyResult, type SecretizeResult, type SecretizeOptions, type FormatSecretizeOptions, } from './secretize.js';
|
|
12
|
+
export { listSecretBindings, setSecret, pruneOrphanSecrets, exportSecrets, importSecrets, type SecretBindingInfo, type SetSecretOptions, type SetSecretResult, type PruneOptions, type PruneResult, type ExportOptions, type ExportResult, type ImportOptions, type ImportResult, type ImportError, } from './management.js';
|
|
13
|
+
export { resolveEnvSecrets, formatResolveErrors, type ResolveEnvSecretsResult, type ResolveError, } from './resolve.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC"}
|
package/dist/secrets/index.js
CHANGED
|
@@ -15,4 +15,8 @@ export { SqliteSecretStore, getSecretStore, closeSecretStore, } from './store.js
|
|
|
15
15
|
export { PlainProvider, DpapiProvider, getBestProvider, getProvider, } from './providers/index.js';
|
|
16
16
|
// Secretize
|
|
17
17
|
export { secretizeEnv, formatSecretizeOutput, isSecretizeAvailable, } from './secretize.js';
|
|
18
|
+
// Management (Phase 3.6)
|
|
19
|
+
export { listSecretBindings, setSecret, pruneOrphanSecrets, exportSecrets, importSecrets, } from './management.js';
|
|
20
|
+
// Resolution (Phase 3.6)
|
|
21
|
+
export { resolveEnvSecrets, formatResolveErrors, } from './resolve.js';
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,cAAc,YAAY,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,YAAY,GAEb,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAExB,QAAQ;AACR,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,YAAY;AACZ,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,cAAc,YAAY,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,YAAY,GAEb,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAExB,QAAQ;AACR,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,YAAY;AACZ,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,gBAAgB,CAAC;AAExB,yBAAyB;AACzB,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,GAWd,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,cAAc,CAAC"}
|