@centient/secrets 0.2.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/dist/cli/messages.d.ts +60 -0
- package/dist/cli/messages.d.ts.map +1 -0
- package/dist/cli/messages.js +63 -0
- package/dist/cli/messages.js.map +1 -0
- package/dist/cli/secrets-cli.d.ts +38 -0
- package/dist/cli/secrets-cli.d.ts.map +1 -0
- package/dist/cli/secrets-cli.js +532 -0
- package/dist/cli/secrets-cli.js.map +1 -0
- package/dist/crypto/vault-common.d.ts +63 -0
- package/dist/crypto/vault-common.d.ts.map +1 -0
- package/dist/crypto/vault-common.js +180 -0
- package/dist/crypto/vault-common.js.map +1 -0
- package/dist/environment/EnvironmentManager.d.ts +171 -0
- package/dist/environment/EnvironmentManager.d.ts.map +1 -0
- package/dist/environment/EnvironmentManager.js +604 -0
- package/dist/environment/EnvironmentManager.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/agent-detect.d.ts +15 -0
- package/dist/platform/agent-detect.d.ts.map +1 -0
- package/dist/platform/agent-detect.js +22 -0
- package/dist/platform/agent-detect.js.map +1 -0
- package/dist/platform/platform.d.ts +51 -0
- package/dist/platform/platform.d.ts.map +1 -0
- package/dist/platform/platform.js +141 -0
- package/dist/platform/platform.js.map +1 -0
- package/dist/vault/types.d.ts +54 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +12 -0
- package/dist/vault/types.js.map +1 -0
- package/dist/vault/vault-env.d.ts +58 -0
- package/dist/vault/vault-env.d.ts.map +1 -0
- package/dist/vault/vault-env.js +73 -0
- package/dist/vault/vault-env.js.map +1 -0
- package/dist/vault/vault-gpg.d.ts +40 -0
- package/dist/vault/vault-gpg.d.ts.map +1 -0
- package/dist/vault/vault-gpg.js +149 -0
- package/dist/vault/vault-gpg.js.map +1 -0
- package/dist/vault/vault-libsecret.d.ts +51 -0
- package/dist/vault/vault-libsecret.d.ts.map +1 -0
- package/dist/vault/vault-libsecret.js +115 -0
- package/dist/vault/vault-libsecret.js.map +1 -0
- package/dist/vault/vault-utils.d.ts +12 -0
- package/dist/vault/vault-utils.d.ts.map +1 -0
- package/dist/vault/vault-utils.js +16 -0
- package/dist/vault/vault-utils.js.map +1 -0
- package/dist/vault/vault-windows.d.ts +71 -0
- package/dist/vault/vault-windows.d.ts.map +1 -0
- package/dist/vault/vault-windows.js +186 -0
- package/dist/vault/vault-windows.js.map +1 -0
- package/dist/vault/vault.d.ts +53 -0
- package/dist/vault/vault.d.ts.map +1 -0
- package/dist/vault/vault.js +132 -0
- package/dist/vault/vault.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets CLI Commands
|
|
3
|
+
*
|
|
4
|
+
* CLI commands for managing the encrypted secrets vault and environments.
|
|
5
|
+
* These commands are only available to human operators (blocked from AI agents).
|
|
6
|
+
*
|
|
7
|
+
* Vault Commands:
|
|
8
|
+
* centient secrets init Initialize a new encrypted vault
|
|
9
|
+
* centient secrets unlock Unlock the vault (prompts biometric)
|
|
10
|
+
* centient secrets lock Lock the vault
|
|
11
|
+
* centient secrets list List secret names (not values)
|
|
12
|
+
* centient secrets set <name> Add/update a secret (prompts for value)
|
|
13
|
+
* centient secrets get <name> Get a secret value
|
|
14
|
+
* centient secrets delete <name> Delete a secret
|
|
15
|
+
* centient secrets status Show vault status
|
|
16
|
+
*
|
|
17
|
+
* Environment Commands:
|
|
18
|
+
* centient secrets env-list List all environments
|
|
19
|
+
* centient secrets env-switch <name> Switch to an environment
|
|
20
|
+
* centient secrets env-create <name> Create a new environment
|
|
21
|
+
* centient secrets env-current Show current environment
|
|
22
|
+
*
|
|
23
|
+
* Security:
|
|
24
|
+
* - All commands check for AI agent environment and refuse to run
|
|
25
|
+
* - Vault is encrypted with AES-256-GCM
|
|
26
|
+
* - Key stored in macOS Keychain (requires biometric/PIN)
|
|
27
|
+
* - 4-hour session timeout, 30-minute idle timeout
|
|
28
|
+
*/
|
|
29
|
+
import { createInterface } from "readline";
|
|
30
|
+
import { join } from "path";
|
|
31
|
+
import { homedir } from "os";
|
|
32
|
+
import { existsSync } from "fs";
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Agent Detection (Local Implementation)
|
|
35
|
+
// =============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Check if running in an AI agent environment.
|
|
38
|
+
* If detected, refuse to run secrets commands.
|
|
39
|
+
*/
|
|
40
|
+
function isAgentEnvironment() {
|
|
41
|
+
return !!(process.env.CLAUDE_PROJECT_DIR ||
|
|
42
|
+
process.env.MCP_CONTEXT ||
|
|
43
|
+
process.env.CLAUDE_CODE_SESSION ||
|
|
44
|
+
process.env.CLAUDE_CODE_ENTRY_POINT);
|
|
45
|
+
}
|
|
46
|
+
// =============================================================================
|
|
47
|
+
// Simple Encrypted Vault
|
|
48
|
+
// =============================================================================
|
|
49
|
+
import { readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
50
|
+
import { randomBytes } from "crypto";
|
|
51
|
+
import { encryptObject, decryptObject, getKeyFromKeychain as vaultGetKey, storeKeyInKeychain as vaultStoreKey, } from "../crypto/vault-common.js";
|
|
52
|
+
const VAULT_PATH = join(homedir(), ".centient", "secrets", "vault.enc");
|
|
53
|
+
const KEYCHAIN_SERVICE = "centient-vault";
|
|
54
|
+
const KEYCHAIN_ACCOUNT = "vault-key";
|
|
55
|
+
const KEY_LENGTH = 32;
|
|
56
|
+
// Session state
|
|
57
|
+
let sessionKey = null;
|
|
58
|
+
let sessionUnlockedAt = null;
|
|
59
|
+
const SESSION_TTL = 4 * 60 * 60 * 1000; // 4 hours
|
|
60
|
+
function isSessionValid() {
|
|
61
|
+
if (!sessionKey || !sessionUnlockedAt)
|
|
62
|
+
return false;
|
|
63
|
+
return Date.now() - sessionUnlockedAt < SESSION_TTL;
|
|
64
|
+
}
|
|
65
|
+
function encrypt(data, key) {
|
|
66
|
+
const result = encryptObject(data, key);
|
|
67
|
+
if (!result)
|
|
68
|
+
throw new Error("Encryption failed");
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
function decrypt(data, key) {
|
|
72
|
+
const parsed = decryptObject(data, key);
|
|
73
|
+
if (!parsed)
|
|
74
|
+
return null;
|
|
75
|
+
// Validate all values are strings
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
78
|
+
if (typeof v !== "string")
|
|
79
|
+
return null;
|
|
80
|
+
result[k] = v;
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
function getKeyFromKeychain() {
|
|
85
|
+
return vaultGetKey(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
|
|
86
|
+
}
|
|
87
|
+
function storeKeyInKeychain(key) {
|
|
88
|
+
return vaultStoreKey(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT, key);
|
|
89
|
+
}
|
|
90
|
+
// =============================================================================
|
|
91
|
+
// CLI Handlers
|
|
92
|
+
// =============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Prompt for input (with optional hidden mode for passwords)
|
|
95
|
+
*/
|
|
96
|
+
async function prompt(message, hidden = false) {
|
|
97
|
+
const rl = createInterface({
|
|
98
|
+
input: process.stdin,
|
|
99
|
+
output: process.stdout,
|
|
100
|
+
});
|
|
101
|
+
return new Promise((resolve) => {
|
|
102
|
+
if (hidden) {
|
|
103
|
+
// For hidden input, we need to handle it differently
|
|
104
|
+
process.stdout.write(message);
|
|
105
|
+
let input = "";
|
|
106
|
+
const stdin = process.stdin;
|
|
107
|
+
const wasRaw = stdin.isRaw;
|
|
108
|
+
stdin.setRawMode?.(true);
|
|
109
|
+
stdin.resume();
|
|
110
|
+
stdin.setEncoding("utf8");
|
|
111
|
+
const onData = (char) => {
|
|
112
|
+
if (char === "\n" || char === "\r") {
|
|
113
|
+
stdin.setRawMode?.(wasRaw || false);
|
|
114
|
+
stdin.pause();
|
|
115
|
+
stdin.removeListener("data", onData);
|
|
116
|
+
process.stdout.write("\n"); // New line after hidden input
|
|
117
|
+
rl.close();
|
|
118
|
+
resolve(input);
|
|
119
|
+
}
|
|
120
|
+
else if (char === "\u0003") {
|
|
121
|
+
// Ctrl+C
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
else if (char === "\u007F" || char === "\b") {
|
|
125
|
+
// Backspace
|
|
126
|
+
if (input.length > 0) {
|
|
127
|
+
input = input.slice(0, -1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
input += char;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
stdin.on("data", onData);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
rl.question(message, (answer) => {
|
|
138
|
+
rl.close();
|
|
139
|
+
resolve(answer);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Initialize a new vault
|
|
146
|
+
*/
|
|
147
|
+
async function initVault() {
|
|
148
|
+
process.stdout.write("\n🔐 Initializing Centient Secrets Vault\n\n");
|
|
149
|
+
if (existsSync(VAULT_PATH)) {
|
|
150
|
+
const confirm = await prompt("⚠️ Vault already exists. Overwrite? (yes/no): ");
|
|
151
|
+
if (confirm.toLowerCase() !== "yes") {
|
|
152
|
+
process.stdout.write("Aborted.\n");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Generate key
|
|
157
|
+
const key = randomBytes(KEY_LENGTH);
|
|
158
|
+
// Store in Keychain
|
|
159
|
+
process.stdout.write("Storing encryption key in macOS Keychain...\n");
|
|
160
|
+
if (!storeKeyInKeychain(key)) {
|
|
161
|
+
console.error("❌ Failed to store key in Keychain");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Create empty vault
|
|
165
|
+
const secrets = {};
|
|
166
|
+
const encrypted = encrypt(secrets, key);
|
|
167
|
+
// Ensure directory exists
|
|
168
|
+
const dir = join(homedir(), ".centient", "secrets");
|
|
169
|
+
mkdirSync(dir, { recursive: true });
|
|
170
|
+
// Write vault
|
|
171
|
+
writeFileSync(VAULT_PATH, encrypted);
|
|
172
|
+
// Set session
|
|
173
|
+
sessionKey = key;
|
|
174
|
+
sessionUnlockedAt = Date.now();
|
|
175
|
+
process.stdout.write("\n✅ Vault initialized successfully!\n");
|
|
176
|
+
process.stdout.write(` Location: ${VAULT_PATH}\n`);
|
|
177
|
+
process.stdout.write(" The vault is now unlocked. Use 'centient secrets set' to add secrets.\n\n");
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Unlock the vault
|
|
181
|
+
*/
|
|
182
|
+
async function unlockVault() {
|
|
183
|
+
process.stdout.write("\n🔓 Unlocking vault...\n\n");
|
|
184
|
+
if (!existsSync(VAULT_PATH)) {
|
|
185
|
+
console.error("❌ Vault not found. Run 'centient secrets init' first.");
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
// Get key from Keychain (may prompt for biometric/PIN)
|
|
189
|
+
process.stdout.write("Retrieving key from Keychain (Touch ID/password may be required)...\n");
|
|
190
|
+
const key = getKeyFromKeychain();
|
|
191
|
+
if (!key) {
|
|
192
|
+
console.error("❌ Failed to retrieve key from Keychain");
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
// Verify key works
|
|
196
|
+
const data = readFileSync(VAULT_PATH);
|
|
197
|
+
const secrets = decrypt(data, key);
|
|
198
|
+
if (!secrets) {
|
|
199
|
+
console.error("❌ Failed to decrypt vault - key may be incorrect");
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
// Set session
|
|
203
|
+
sessionKey = key;
|
|
204
|
+
sessionUnlockedAt = Date.now();
|
|
205
|
+
process.stdout.write("✅ Vault unlocked successfully!\n");
|
|
206
|
+
process.stdout.write(` Session valid for 4 hours.\n\n`);
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Lock the vault
|
|
211
|
+
*/
|
|
212
|
+
function lockVault() {
|
|
213
|
+
if (sessionKey) {
|
|
214
|
+
sessionKey.fill(0);
|
|
215
|
+
}
|
|
216
|
+
sessionKey = null;
|
|
217
|
+
sessionUnlockedAt = null;
|
|
218
|
+
process.stdout.write("\n🔒 Vault locked.\n\n");
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* List secrets
|
|
222
|
+
*/
|
|
223
|
+
async function listSecrets() {
|
|
224
|
+
if (!isSessionValid()) {
|
|
225
|
+
process.stdout.write("\n🔒 Vault is locked. Unlocking...\n");
|
|
226
|
+
if (!(await unlockVault()))
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const data = readFileSync(VAULT_PATH);
|
|
230
|
+
const secrets = decrypt(data, sessionKey);
|
|
231
|
+
if (!secrets) {
|
|
232
|
+
console.error("❌ Failed to decrypt vault");
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const names = Object.keys(secrets).sort();
|
|
236
|
+
process.stdout.write(`\n📋 Secrets in vault (${names.length}):\n\n`);
|
|
237
|
+
if (names.length === 0) {
|
|
238
|
+
process.stdout.write(" (empty - use 'centient secrets set <name>' to add secrets)\n");
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
for (const name of names) {
|
|
242
|
+
const value = secrets[name] ?? "";
|
|
243
|
+
const preview = value.length > 0 ? "•".repeat(Math.min(value.length, 20)) : "(empty)";
|
|
244
|
+
process.stdout.write(` ${name.padEnd(30)} ${preview}\n`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
process.stdout.write("\n");
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Set a secret
|
|
251
|
+
*/
|
|
252
|
+
async function setSecret(name) {
|
|
253
|
+
if (!name) {
|
|
254
|
+
console.error("❌ Secret name required. Usage: centient secrets set <name>");
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (!isSessionValid()) {
|
|
258
|
+
process.stdout.write("\n🔒 Vault is locked. Unlocking...\n");
|
|
259
|
+
if (!(await unlockVault()))
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const data = readFileSync(VAULT_PATH);
|
|
263
|
+
const secrets = decrypt(data, sessionKey);
|
|
264
|
+
if (!secrets) {
|
|
265
|
+
console.error("❌ Failed to decrypt vault");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const exists = name in secrets;
|
|
269
|
+
const action = exists ? "update" : "add";
|
|
270
|
+
process.stdout.write(`\n${exists ? "✏️ Updating" : "➕ Adding"} secret: ${name}\n\n`);
|
|
271
|
+
const value = await prompt(`Enter value for ${name}: `, true);
|
|
272
|
+
if (!value) {
|
|
273
|
+
process.stdout.write("Aborted - empty value.\n");
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
secrets[name] = value;
|
|
277
|
+
// Re-encrypt and save
|
|
278
|
+
const encrypted = encrypt(secrets, sessionKey);
|
|
279
|
+
writeFileSync(VAULT_PATH, encrypted);
|
|
280
|
+
process.stdout.write(`\n✅ Secret '${name}' ${action}d successfully!\n\n`);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get a secret
|
|
284
|
+
*/
|
|
285
|
+
async function getSecret(name) {
|
|
286
|
+
if (!name) {
|
|
287
|
+
console.error("❌ Secret name required. Usage: centient secrets get <name>");
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (!isSessionValid()) {
|
|
291
|
+
process.stdout.write("\n🔒 Vault is locked. Unlocking...\n");
|
|
292
|
+
if (!(await unlockVault()))
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const data = readFileSync(VAULT_PATH);
|
|
296
|
+
const secrets = decrypt(data, sessionKey);
|
|
297
|
+
if (!secrets) {
|
|
298
|
+
console.error("❌ Failed to decrypt vault");
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
if (!(name in secrets)) {
|
|
302
|
+
console.error(`❌ Secret '${name}' not found`);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
// Print without newline for piping
|
|
306
|
+
const secretValue = secrets[name];
|
|
307
|
+
if (secretValue !== undefined) {
|
|
308
|
+
process.stdout.write(secretValue);
|
|
309
|
+
}
|
|
310
|
+
process.stdout.write("\n");
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Delete a secret
|
|
314
|
+
*/
|
|
315
|
+
async function deleteSecret(name) {
|
|
316
|
+
if (!name) {
|
|
317
|
+
console.error("❌ Secret name required. Usage: centient secrets delete <name>");
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (!isSessionValid()) {
|
|
321
|
+
process.stdout.write("\n🔒 Vault is locked. Unlocking...\n");
|
|
322
|
+
if (!(await unlockVault()))
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const data = readFileSync(VAULT_PATH);
|
|
326
|
+
const secrets = decrypt(data, sessionKey);
|
|
327
|
+
if (!secrets) {
|
|
328
|
+
console.error("❌ Failed to decrypt vault");
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (!(name in secrets)) {
|
|
332
|
+
console.error(`❌ Secret '${name}' not found`);
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
const confirm = await prompt(`Delete secret '${name}'? (yes/no): `);
|
|
336
|
+
if (confirm.toLowerCase() !== "yes") {
|
|
337
|
+
process.stdout.write("Aborted.\n");
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
delete secrets[name];
|
|
341
|
+
// Re-encrypt and save
|
|
342
|
+
const encrypted = encrypt(secrets, sessionKey);
|
|
343
|
+
writeFileSync(VAULT_PATH, encrypted);
|
|
344
|
+
process.stdout.write(`\n✅ Secret '${name}' deleted.\n\n`);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* List all environments
|
|
348
|
+
*/
|
|
349
|
+
async function listEnvironments() {
|
|
350
|
+
const { EnvironmentManager } = await import("../environment/EnvironmentManager.js");
|
|
351
|
+
const manager = new EnvironmentManager();
|
|
352
|
+
const result = manager.listEnvironments();
|
|
353
|
+
if (!result.success) {
|
|
354
|
+
console.error(`\n❌ ${result.message}\n`);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const environments = result.environments;
|
|
358
|
+
process.stdout.write(`\n🌍 Environments (${environments.length}):\n\n`);
|
|
359
|
+
if (environments.length === 0) {
|
|
360
|
+
process.stdout.write(" (no environments found)\n");
|
|
361
|
+
process.stdout.write(" Run 'centient secrets env-create <name>' to create one.\n\n");
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
for (const env of environments) {
|
|
365
|
+
const current = env.isActive ? " ← current" : "";
|
|
366
|
+
const vault = env.hasVault ? " [vault]" : "";
|
|
367
|
+
process.stdout.write(` ${env.isActive ? "●" : "○"} ${env.name}${vault}${current}\n`);
|
|
368
|
+
}
|
|
369
|
+
process.stdout.write("\n");
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Switch to a different environment
|
|
373
|
+
*/
|
|
374
|
+
async function switchEnvironment(name) {
|
|
375
|
+
if (!name) {
|
|
376
|
+
console.error("❌ Environment name required. Usage: centient secrets env-switch <name>");
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const { EnvironmentManager } = await import("../environment/EnvironmentManager.js");
|
|
380
|
+
const manager = new EnvironmentManager();
|
|
381
|
+
const result = manager.switchEnvironment(name);
|
|
382
|
+
if (!result.success) {
|
|
383
|
+
console.error(`\n❌ ${result.message}\n`);
|
|
384
|
+
if (result.nextAction) {
|
|
385
|
+
process.stdout.write(` ${result.nextAction}\n\n`);
|
|
386
|
+
}
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
process.stdout.write(`\n✅ ${result.message}\n\n`);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Create a new environment
|
|
393
|
+
*/
|
|
394
|
+
async function createEnvironment(name) {
|
|
395
|
+
if (!name) {
|
|
396
|
+
console.error("❌ Environment name required. Usage: centient secrets env-create <name>");
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
const { EnvironmentManager } = await import("../environment/EnvironmentManager.js");
|
|
400
|
+
const manager = new EnvironmentManager();
|
|
401
|
+
const result = manager.createEnvironment(name);
|
|
402
|
+
if (!result.success) {
|
|
403
|
+
console.error(`\n❌ ${result.message}\n`);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
process.stdout.write(`\n✅ ${result.message}\n`);
|
|
407
|
+
if (result.nextAction) {
|
|
408
|
+
process.stdout.write(` ${result.nextAction}\n\n`);
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
process.stdout.write("\n");
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Show current environment
|
|
416
|
+
*/
|
|
417
|
+
async function showCurrentEnvironment() {
|
|
418
|
+
const { EnvironmentManager } = await import("../environment/EnvironmentManager.js");
|
|
419
|
+
const manager = new EnvironmentManager();
|
|
420
|
+
const currentName = manager.getCurrentEnvironment();
|
|
421
|
+
if (!currentName) {
|
|
422
|
+
process.stdout.write("\n🌍 No environment is currently active.\n\n");
|
|
423
|
+
process.stdout.write(" Run 'centient secrets env-list' to see available environments.\n");
|
|
424
|
+
process.stdout.write(" Run 'centient secrets env-create <name>' to create one.\n\n");
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
const env = manager.getEnvironment(currentName);
|
|
428
|
+
if (!env) {
|
|
429
|
+
console.error(`\n❌ Failed to load environment '${currentName}'\n`);
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
process.stdout.write(`\n🌍 Current Environment: ${env.name}\n\n`);
|
|
433
|
+
process.stdout.write("\u2500".repeat(40) + "\n");
|
|
434
|
+
process.stdout.write(`Path: ${env.path}\n`);
|
|
435
|
+
process.stdout.write(`Has Config: ${env.hasConfig ? "✅ yes" : "❌ no"}\n`);
|
|
436
|
+
process.stdout.write(`Has Vault: ${env.hasVault ? "✅ yes" : "❌ no"}\n`);
|
|
437
|
+
if (env.lastModified) {
|
|
438
|
+
process.stdout.write(`Modified: ${env.lastModified.toLocaleString()}\n`);
|
|
439
|
+
}
|
|
440
|
+
process.stdout.write("\u2500".repeat(40) + "\n");
|
|
441
|
+
process.stdout.write("\n");
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Show vault status
|
|
445
|
+
*/
|
|
446
|
+
async function showStatus() {
|
|
447
|
+
process.stdout.write("\n📊 Vault Status\n\n");
|
|
448
|
+
process.stdout.write("\u2500".repeat(40) + "\n");
|
|
449
|
+
// Check vault exists
|
|
450
|
+
const vaultExists = existsSync(VAULT_PATH);
|
|
451
|
+
process.stdout.write(`Vault file: ${vaultExists ? "✅ exists" : "❌ not found"}\n`);
|
|
452
|
+
process.stdout.write(`Location: ${VAULT_PATH}\n`);
|
|
453
|
+
// Check session
|
|
454
|
+
const sessionValid = isSessionValid();
|
|
455
|
+
process.stdout.write(`Session: ${sessionValid ? "🔓 unlocked" : "🔒 locked"}\n`);
|
|
456
|
+
if (sessionValid && sessionUnlockedAt) {
|
|
457
|
+
const remaining = SESSION_TTL - (Date.now() - sessionUnlockedAt);
|
|
458
|
+
const hours = Math.floor(remaining / (60 * 60 * 1000));
|
|
459
|
+
const minutes = Math.floor((remaining % (60 * 60 * 1000)) / (60 * 1000));
|
|
460
|
+
process.stdout.write(`Expires in: ${hours}h ${minutes}m\n`);
|
|
461
|
+
}
|
|
462
|
+
// Check Keychain
|
|
463
|
+
const hasKey = getKeyFromKeychain() !== null;
|
|
464
|
+
process.stdout.write(`Keychain key: ${hasKey ? "✅ found" : "❌ not found"}\n`);
|
|
465
|
+
// Count secrets if unlocked
|
|
466
|
+
if (sessionValid && vaultExists) {
|
|
467
|
+
const data = readFileSync(VAULT_PATH);
|
|
468
|
+
const secrets = decrypt(data, sessionKey);
|
|
469
|
+
if (secrets) {
|
|
470
|
+
process.stdout.write(`Secrets count: ${Object.keys(secrets).length}\n`);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
process.stdout.write("\u2500".repeat(40) + "\n");
|
|
474
|
+
process.stdout.write("\n");
|
|
475
|
+
}
|
|
476
|
+
// =============================================================================
|
|
477
|
+
// Main Handler
|
|
478
|
+
// =============================================================================
|
|
479
|
+
/**
|
|
480
|
+
* Run secrets command
|
|
481
|
+
*/
|
|
482
|
+
export async function runSecrets(options) {
|
|
483
|
+
// Security: Block AI agents
|
|
484
|
+
if (isAgentEnvironment()) {
|
|
485
|
+
console.error("\n❌ Secrets commands are not available to AI agents.");
|
|
486
|
+
console.error(" This is a security measure to protect your secrets.\n");
|
|
487
|
+
process.exit(1);
|
|
488
|
+
}
|
|
489
|
+
switch (options.command) {
|
|
490
|
+
case "init":
|
|
491
|
+
await initVault();
|
|
492
|
+
break;
|
|
493
|
+
case "unlock":
|
|
494
|
+
await unlockVault();
|
|
495
|
+
break;
|
|
496
|
+
case "lock":
|
|
497
|
+
lockVault();
|
|
498
|
+
break;
|
|
499
|
+
case "list":
|
|
500
|
+
await listSecrets();
|
|
501
|
+
break;
|
|
502
|
+
case "set":
|
|
503
|
+
await setSecret(options.secretName || "");
|
|
504
|
+
break;
|
|
505
|
+
case "get":
|
|
506
|
+
await getSecret(options.secretName || "");
|
|
507
|
+
break;
|
|
508
|
+
case "delete":
|
|
509
|
+
await deleteSecret(options.secretName || "");
|
|
510
|
+
break;
|
|
511
|
+
case "status":
|
|
512
|
+
await showStatus();
|
|
513
|
+
break;
|
|
514
|
+
case "env-list":
|
|
515
|
+
await listEnvironments();
|
|
516
|
+
break;
|
|
517
|
+
case "env-switch":
|
|
518
|
+
await switchEnvironment(options.secretName || "");
|
|
519
|
+
break;
|
|
520
|
+
case "env-create":
|
|
521
|
+
await createEnvironment(options.secretName || "");
|
|
522
|
+
break;
|
|
523
|
+
case "env-current":
|
|
524
|
+
await showCurrentEnvironment();
|
|
525
|
+
break;
|
|
526
|
+
default:
|
|
527
|
+
console.error(`Unknown secrets command: ${options.command}`);
|
|
528
|
+
console.error("Available: init, unlock, lock, list, set, get, delete, status, env-list, env-switch, env-create, env-current");
|
|
529
|
+
process.exit(1);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=secrets-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-cli.js","sourceRoot":"","sources":["../../src/cli/secrets-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crypto — Vault Common Helpers
|
|
3
|
+
*
|
|
4
|
+
* Shared encryption/decryption utilities and Keychain accessor functions
|
|
5
|
+
* used by both the auth vault and the secrets CLI.
|
|
6
|
+
*
|
|
7
|
+
* Zero duplication rule: encrypt, decrypt, getKeyFromKeychain, and
|
|
8
|
+
* storeKeyInKeychain must NOT be copied into any other file — import from here.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ALGORITHM: "aes-256-gcm";
|
|
11
|
+
export declare const IV_LENGTH = 12;
|
|
12
|
+
export declare const AUTH_TAG_LENGTH = 16;
|
|
13
|
+
export declare const KEY_LENGTH = 32;
|
|
14
|
+
/**
|
|
15
|
+
* Encrypt a string value with AES-256-GCM.
|
|
16
|
+
*
|
|
17
|
+
* The returned Buffer layout is:
|
|
18
|
+
* [IV (12 bytes)] [AuthTag (16 bytes)] [Ciphertext (variable)]
|
|
19
|
+
*/
|
|
20
|
+
export declare function encrypt(plaintext: string, key: Buffer): Buffer;
|
|
21
|
+
/**
|
|
22
|
+
* Decrypt a Buffer produced by `encrypt()`.
|
|
23
|
+
* Returns the plaintext string, or null if decryption fails.
|
|
24
|
+
*/
|
|
25
|
+
export declare function decrypt(data: Buffer, key: Buffer): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* Encrypt a JSON-serializable object. Convenience wrapper over `encrypt()`.
|
|
28
|
+
* Returns null if serialization fails (should not happen with plain objects).
|
|
29
|
+
*/
|
|
30
|
+
export declare function encryptObject(data: Record<string, unknown>, key: Buffer): Buffer | null;
|
|
31
|
+
/**
|
|
32
|
+
* Decrypt a Buffer to a JSON object. Convenience wrapper over `decrypt()`.
|
|
33
|
+
* Returns null if decryption or parsing fails.
|
|
34
|
+
*/
|
|
35
|
+
export declare function decryptObject(data: Buffer, key: Buffer): Record<string, unknown> | null;
|
|
36
|
+
/**
|
|
37
|
+
* Read a hex-encoded key from the macOS Keychain.
|
|
38
|
+
* Returns the key as a Buffer, or null if not found / command fails.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getKeyFromKeychain(service: string, account: string): Buffer | null;
|
|
41
|
+
/**
|
|
42
|
+
* Store a hex-encoded key in the macOS Keychain.
|
|
43
|
+
* Deletes any existing entry first to avoid duplicates.
|
|
44
|
+
* Returns true on success, false on failure.
|
|
45
|
+
*/
|
|
46
|
+
export declare function storeKeyInKeychain(service: string, account: string, key: Buffer): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Store an arbitrary string value directly in the macOS Keychain
|
|
49
|
+
* (not hex-encoded — intended for short credential strings like tokens).
|
|
50
|
+
* Returns true on success, false on failure.
|
|
51
|
+
*/
|
|
52
|
+
export declare function storeStringInKeychain(service: string, account: string, value: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Read an arbitrary string value from the macOS Keychain.
|
|
55
|
+
* Returns the stored string, or null if not found / command fails.
|
|
56
|
+
*/
|
|
57
|
+
export declare function getStringFromKeychain(service: string, account: string): string | null;
|
|
58
|
+
/**
|
|
59
|
+
* Delete an entry from the macOS Keychain.
|
|
60
|
+
* Returns true if deleted (or did not exist), false if command fails unexpectedly.
|
|
61
|
+
*/
|
|
62
|
+
export declare function deleteFromKeychain(service: string, account: string): boolean;
|
|
63
|
+
//# sourceMappingURL=vault-common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-common.d.ts","sourceRoot":"","sources":["../../src/crypto/vault-common.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,eAAO,MAAM,SAAS,EAAG,aAAsB,CAAC;AAChD,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,UAAU,KAAK,CAAC;AAM7B;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAS9D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBhE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAMf;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAYf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAsBT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAqBT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAWf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAYT"}
|