@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.
Files changed (57) hide show
  1. package/dist/cli/messages.d.ts +60 -0
  2. package/dist/cli/messages.d.ts.map +1 -0
  3. package/dist/cli/messages.js +63 -0
  4. package/dist/cli/messages.js.map +1 -0
  5. package/dist/cli/secrets-cli.d.ts +38 -0
  6. package/dist/cli/secrets-cli.d.ts.map +1 -0
  7. package/dist/cli/secrets-cli.js +532 -0
  8. package/dist/cli/secrets-cli.js.map +1 -0
  9. package/dist/crypto/vault-common.d.ts +63 -0
  10. package/dist/crypto/vault-common.d.ts.map +1 -0
  11. package/dist/crypto/vault-common.js +180 -0
  12. package/dist/crypto/vault-common.js.map +1 -0
  13. package/dist/environment/EnvironmentManager.d.ts +171 -0
  14. package/dist/environment/EnvironmentManager.d.ts.map +1 -0
  15. package/dist/environment/EnvironmentManager.js +604 -0
  16. package/dist/environment/EnvironmentManager.js.map +1 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +17 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/platform/agent-detect.d.ts +15 -0
  22. package/dist/platform/agent-detect.d.ts.map +1 -0
  23. package/dist/platform/agent-detect.js +22 -0
  24. package/dist/platform/agent-detect.js.map +1 -0
  25. package/dist/platform/platform.d.ts +51 -0
  26. package/dist/platform/platform.d.ts.map +1 -0
  27. package/dist/platform/platform.js +141 -0
  28. package/dist/platform/platform.js.map +1 -0
  29. package/dist/vault/types.d.ts +54 -0
  30. package/dist/vault/types.d.ts.map +1 -0
  31. package/dist/vault/types.js +12 -0
  32. package/dist/vault/types.js.map +1 -0
  33. package/dist/vault/vault-env.d.ts +58 -0
  34. package/dist/vault/vault-env.d.ts.map +1 -0
  35. package/dist/vault/vault-env.js +73 -0
  36. package/dist/vault/vault-env.js.map +1 -0
  37. package/dist/vault/vault-gpg.d.ts +40 -0
  38. package/dist/vault/vault-gpg.d.ts.map +1 -0
  39. package/dist/vault/vault-gpg.js +149 -0
  40. package/dist/vault/vault-gpg.js.map +1 -0
  41. package/dist/vault/vault-libsecret.d.ts +51 -0
  42. package/dist/vault/vault-libsecret.d.ts.map +1 -0
  43. package/dist/vault/vault-libsecret.js +115 -0
  44. package/dist/vault/vault-libsecret.js.map +1 -0
  45. package/dist/vault/vault-utils.d.ts +12 -0
  46. package/dist/vault/vault-utils.d.ts.map +1 -0
  47. package/dist/vault/vault-utils.js +16 -0
  48. package/dist/vault/vault-utils.js.map +1 -0
  49. package/dist/vault/vault-windows.d.ts +71 -0
  50. package/dist/vault/vault-windows.d.ts.map +1 -0
  51. package/dist/vault/vault-windows.js +186 -0
  52. package/dist/vault/vault-windows.js.map +1 -0
  53. package/dist/vault/vault.d.ts +53 -0
  54. package/dist/vault/vault.d.ts.map +1 -0
  55. package/dist/vault/vault.js +132 -0
  56. package/dist/vault/vault.js.map +1 -0
  57. 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"}