@zincapp/zn-vault-agent 1.3.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 (88) hide show
  1. package/README.md +701 -0
  2. package/deploy/logrotate.d/zn-vault-agent +14 -0
  3. package/deploy/systemd/zn-vault-agent.service +75 -0
  4. package/dist/commands/certs.d.ts +3 -0
  5. package/dist/commands/certs.d.ts.map +1 -0
  6. package/dist/commands/certs.js +369 -0
  7. package/dist/commands/certs.js.map +1 -0
  8. package/dist/commands/exec.d.ts +3 -0
  9. package/dist/commands/exec.d.ts.map +1 -0
  10. package/dist/commands/exec.js +193 -0
  11. package/dist/commands/exec.js.map +1 -0
  12. package/dist/commands/login.d.ts +3 -0
  13. package/dist/commands/login.d.ts.map +1 -0
  14. package/dist/commands/login.js +234 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/secrets.d.ts +3 -0
  17. package/dist/commands/secrets.d.ts.map +1 -0
  18. package/dist/commands/secrets.js +445 -0
  19. package/dist/commands/secrets.js.map +1 -0
  20. package/dist/commands/setup.d.ts +9 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +346 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/start.d.ts +3 -0
  25. package/dist/commands/start.d.ts.map +1 -0
  26. package/dist/commands/start.js +113 -0
  27. package/dist/commands/start.js.map +1 -0
  28. package/dist/commands/status.d.ts +3 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +85 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/commands/sync.d.ts +3 -0
  33. package/dist/commands/sync.d.ts.map +1 -0
  34. package/dist/commands/sync.js +126 -0
  35. package/dist/commands/sync.js.map +1 -0
  36. package/dist/index.d.ts +3 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +28 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lib/api.d.ts +104 -0
  41. package/dist/lib/api.d.ts.map +1 -0
  42. package/dist/lib/api.js +338 -0
  43. package/dist/lib/api.js.map +1 -0
  44. package/dist/lib/config.d.ts +164 -0
  45. package/dist/lib/config.d.ts.map +1 -0
  46. package/dist/lib/config.js +299 -0
  47. package/dist/lib/config.js.map +1 -0
  48. package/dist/lib/deployer.d.ts +22 -0
  49. package/dist/lib/deployer.d.ts.map +1 -0
  50. package/dist/lib/deployer.js +407 -0
  51. package/dist/lib/deployer.js.map +1 -0
  52. package/dist/lib/health.d.ts +68 -0
  53. package/dist/lib/health.d.ts.map +1 -0
  54. package/dist/lib/health.js +216 -0
  55. package/dist/lib/health.js.map +1 -0
  56. package/dist/lib/logger.d.ts +38 -0
  57. package/dist/lib/logger.d.ts.map +1 -0
  58. package/dist/lib/logger.js +161 -0
  59. package/dist/lib/logger.js.map +1 -0
  60. package/dist/lib/metrics.d.ts +50 -0
  61. package/dist/lib/metrics.d.ts.map +1 -0
  62. package/dist/lib/metrics.js +273 -0
  63. package/dist/lib/metrics.js.map +1 -0
  64. package/dist/lib/secret-deployer.d.ts +22 -0
  65. package/dist/lib/secret-deployer.d.ts.map +1 -0
  66. package/dist/lib/secret-deployer.js +201 -0
  67. package/dist/lib/secret-deployer.js.map +1 -0
  68. package/dist/lib/validation.d.ts +25 -0
  69. package/dist/lib/validation.d.ts.map +1 -0
  70. package/dist/lib/validation.js +257 -0
  71. package/dist/lib/validation.js.map +1 -0
  72. package/dist/lib/websocket.d.ts +74 -0
  73. package/dist/lib/websocket.d.ts.map +1 -0
  74. package/dist/lib/websocket.js +441 -0
  75. package/dist/lib/websocket.js.map +1 -0
  76. package/dist/services/api-key-renewal.d.ts +13 -0
  77. package/dist/services/api-key-renewal.d.ts.map +1 -0
  78. package/dist/services/api-key-renewal.js +204 -0
  79. package/dist/services/api-key-renewal.js.map +1 -0
  80. package/dist/services/npm-auto-update.d.ts +60 -0
  81. package/dist/services/npm-auto-update.d.ts.map +1 -0
  82. package/dist/services/npm-auto-update.js +245 -0
  83. package/dist/services/npm-auto-update.js.map +1 -0
  84. package/dist/types/update.d.ts +19 -0
  85. package/dist/types/update.d.ts.map +1 -0
  86. package/dist/types/update.js +7 -0
  87. package/dist/types/update.js.map +1 -0
  88. package/package.json +74 -0
@@ -0,0 +1,445 @@
1
+ // Path: src/commands/secrets.ts
2
+ // Secret sync commands
3
+ import inquirer from 'inquirer';
4
+ import ora from 'ora';
5
+ import chalk from 'chalk';
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { execSync } from 'node:child_process';
9
+ import { addSecretTarget, removeSecretTarget, getSecretTargets, updateSecretTargetVersion, isConfigured, } from '../lib/config.js';
10
+ import { listSecrets, getSecret } from '../lib/api.js';
11
+ /**
12
+ * Format secret data for output
13
+ */
14
+ function formatSecretData(secret, format, options) {
15
+ const data = secret.data;
16
+ switch (format) {
17
+ case 'env': {
18
+ // Add underscore only if prefix doesn't already end with one
19
+ const rawPrefix = options.envPrefix || '';
20
+ const prefix = rawPrefix && !rawPrefix.endsWith('_') ? `${rawPrefix}_` : rawPrefix;
21
+ return Object.entries(data)
22
+ .map(([k, v]) => {
23
+ const key = `${prefix}${k.toUpperCase().replace(/[^A-Z0-9_]/g, '_')}`;
24
+ const value = typeof v === 'string' ? v : JSON.stringify(v);
25
+ // Escape special characters in value
26
+ const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
27
+ return `${key}="${escaped}"`;
28
+ })
29
+ .join('\n') + '\n';
30
+ }
31
+ case 'json':
32
+ return JSON.stringify(data, null, 2) + '\n';
33
+ case 'yaml': {
34
+ // Simple YAML serialization (no dependency needed for basic cases)
35
+ const lines = [];
36
+ for (const [k, v] of Object.entries(data)) {
37
+ if (typeof v === 'string') {
38
+ // Quote strings that might be problematic
39
+ if (v.includes('\n') || v.includes(':') || v.includes('#') || v.startsWith(' ')) {
40
+ lines.push(`${k}: "${v.replace(/"/g, '\\"').replace(/\n/g, '\\n')}"`);
41
+ }
42
+ else {
43
+ lines.push(`${k}: ${v}`);
44
+ }
45
+ }
46
+ else {
47
+ lines.push(`${k}: ${JSON.stringify(v)}`);
48
+ }
49
+ }
50
+ return lines.join('\n') + '\n';
51
+ }
52
+ case 'raw': {
53
+ if (!options.key) {
54
+ throw new Error('Key must be specified for raw format');
55
+ }
56
+ const value = data[options.key];
57
+ if (value === undefined) {
58
+ throw new Error(`Key "${options.key}" not found in secret data`);
59
+ }
60
+ return typeof value === 'string' ? value : JSON.stringify(value);
61
+ }
62
+ case 'template': {
63
+ if (!options.templatePath) {
64
+ throw new Error('Template path must be specified for template format');
65
+ }
66
+ if (!fs.existsSync(options.templatePath)) {
67
+ throw new Error(`Template file not found: ${options.templatePath}`);
68
+ }
69
+ let template = fs.readFileSync(options.templatePath, 'utf-8');
70
+ // Replace {{ key }} placeholders
71
+ for (const [k, v] of Object.entries(data)) {
72
+ const value = typeof v === 'string' ? v : JSON.stringify(v);
73
+ template = template.replace(new RegExp(`\\{\\{\\s*${k}\\s*\\}\\}`, 'g'), value);
74
+ }
75
+ return template;
76
+ }
77
+ default:
78
+ throw new Error(`Unknown format: ${format}`);
79
+ }
80
+ }
81
+ /**
82
+ * Write secret to file with proper permissions
83
+ */
84
+ function writeSecretFile(filePath, content, owner, mode) {
85
+ // Ensure directory exists
86
+ const dir = path.dirname(filePath);
87
+ if (!fs.existsSync(dir)) {
88
+ fs.mkdirSync(dir, { recursive: true });
89
+ }
90
+ // Write to temp file first (atomic)
91
+ const tempPath = `${filePath}.tmp.${process.pid}`;
92
+ fs.writeFileSync(tempPath, content, { mode: parseInt(mode || '0600', 8) });
93
+ // Set ownership if specified and running as root
94
+ if (owner && process.getuid?.() === 0) {
95
+ try {
96
+ execSync(`chown ${owner} "${tempPath}"`, { stdio: 'ignore' });
97
+ }
98
+ catch {
99
+ // Ignore chown errors
100
+ }
101
+ }
102
+ // Atomic rename
103
+ fs.renameSync(tempPath, filePath);
104
+ }
105
+ /**
106
+ * Sync a single secret target
107
+ */
108
+ async function syncSecretTarget(target) {
109
+ try {
110
+ const secret = await getSecret(target.secretId);
111
+ // Format the data
112
+ const content = formatSecretData(secret, target.format, {
113
+ key: target.key,
114
+ envPrefix: target.envPrefix,
115
+ templatePath: target.templatePath,
116
+ });
117
+ // Write to file
118
+ writeSecretFile(target.output, content, target.owner, target.mode);
119
+ // Update config with new version
120
+ updateSecretTargetVersion(target.secretId, secret.version);
121
+ // Run reload command if specified
122
+ if (target.reloadCmd) {
123
+ try {
124
+ execSync(target.reloadCmd, { stdio: 'inherit' });
125
+ }
126
+ catch (err) {
127
+ console.error(chalk.yellow(`Warning: Reload command failed: ${err}`));
128
+ }
129
+ }
130
+ return true;
131
+ }
132
+ catch (err) {
133
+ console.error(chalk.red(`Failed to sync ${target.name}:`), err instanceof Error ? err.message : String(err));
134
+ return false;
135
+ }
136
+ }
137
+ export function registerSecretsCommands(program) {
138
+ const secretCmd = program
139
+ .command('secret')
140
+ .description('Manage secret synchronization')
141
+ .addHelpText('after', `
142
+ Examples:
143
+ zn-vault-agent secret available # List secrets in vault
144
+ zn-vault-agent secret add alias:db/creds --name db --format env --output /etc/app/db.env
145
+ zn-vault-agent secret list # Show configured targets
146
+ zn-vault-agent secret sync # Deploy all secrets
147
+ zn-vault-agent secret remove db # Remove a target
148
+ `);
149
+ // List available secrets in vault
150
+ secretCmd
151
+ .command('available')
152
+ .description('List secrets available in vault')
153
+ .option('--json', 'Output as JSON')
154
+ .addHelpText('after', `
155
+ Examples:
156
+ zn-vault-agent secret available # Human-readable list
157
+ zn-vault-agent secret available --json # JSON output for scripting
158
+ `)
159
+ .action(async (options) => {
160
+ if (!isConfigured()) {
161
+ console.error(chalk.red('Not configured. Run: zn-vault-agent login'));
162
+ process.exit(1);
163
+ }
164
+ const spinner = ora('Fetching secrets...').start();
165
+ try {
166
+ const result = await listSecrets();
167
+ spinner.stop();
168
+ if (options.json) {
169
+ console.log(JSON.stringify(result.items, null, 2));
170
+ return;
171
+ }
172
+ if (result.items.length === 0) {
173
+ console.log('No secrets found in vault');
174
+ return;
175
+ }
176
+ console.log();
177
+ console.log(chalk.bold('Available Secrets'));
178
+ console.log();
179
+ const targets = getSecretTargets();
180
+ const configuredIds = new Set(targets.map(t => t.secretId));
181
+ for (const secret of result.items) {
182
+ const configured = configuredIds.has(secret.id) || configuredIds.has(`alias:${secret.alias}`);
183
+ const status = configured ? chalk.green('✓ configured') : chalk.gray('not configured');
184
+ console.log(` ${secret.id.substring(0, 8)} ${secret.alias.padEnd(30)} ${status}`);
185
+ console.log(` ${chalk.gray(`type: ${secret.type}, v${secret.version}`)}`);
186
+ console.log();
187
+ }
188
+ console.log(`Total: ${result.total} secret(s)`);
189
+ }
190
+ catch (err) {
191
+ spinner.fail('Failed to fetch secrets');
192
+ console.error(chalk.red('Error:'), err instanceof Error ? err.message : String(err));
193
+ process.exit(1);
194
+ }
195
+ });
196
+ // Add a secret target
197
+ secretCmd
198
+ .command('add <secret-id>')
199
+ .description('Add a secret to sync (ID or alias:path)')
200
+ .option('-n, --name <name>', 'Local name for this secret')
201
+ .option('-f, --format <format>', 'Output format: env, json, yaml, raw, template', 'env')
202
+ .option('-o, --output <path>', 'Output file path')
203
+ .option('-k, --key <key>', 'For raw format: key to extract')
204
+ .option('-t, --template <path>', 'For template format: template file path')
205
+ .option('-p, --prefix <prefix>', 'For env format: variable name prefix')
206
+ .option('--owner <user:group>', 'File ownership')
207
+ .option('--mode <mode>', 'File permissions', '0600')
208
+ .option('--reload <cmd>', 'Command to run after sync')
209
+ .addHelpText('after', `
210
+ Examples:
211
+ # Sync to .env file
212
+ zn-vault-agent secret add alias:database/credentials \\
213
+ --name db-creds --format env --output /etc/myapp/db.env
214
+
215
+ # JSON format with reload command
216
+ zn-vault-agent secret add alias:app/config \\
217
+ --name app-config --format json --output /etc/myapp/config.json \\
218
+ --reload "systemctl restart myapp"
219
+
220
+ # Extract single key with raw format
221
+ zn-vault-agent secret add alias:api/key \\
222
+ --name api-key --format raw --key apiKey --output /etc/myapp/api-key.txt
223
+
224
+ # YAML with custom permissions
225
+ zn-vault-agent secret add alias:database/prod \\
226
+ --name db-yaml --format yaml --output /etc/myapp/db.yml \\
227
+ --owner www-data:www-data --mode 0640
228
+
229
+ # Template-based output
230
+ zn-vault-agent secret add alias:database/prod \\
231
+ --name db-template --format template \\
232
+ --template /etc/myapp/config.tmpl --output /etc/myapp/config.yml
233
+
234
+ # Env format with prefix
235
+ zn-vault-agent secret add alias:database/credentials \\
236
+ --name db-prefixed --format env --prefix DB --output /etc/myapp/db.env
237
+ `)
238
+ .action(async (secretId, options) => {
239
+ if (!isConfigured()) {
240
+ console.error(chalk.red('Not configured. Run: zn-vault-agent login'));
241
+ process.exit(1);
242
+ }
243
+ // Validate format
244
+ const validFormats = ['env', 'json', 'yaml', 'raw', 'template'];
245
+ if (!validFormats.includes(options.format)) {
246
+ console.error(chalk.red(`Invalid format. Must be one of: ${validFormats.join(', ')}`));
247
+ process.exit(1);
248
+ }
249
+ // Validate format-specific options
250
+ if (options.format === 'raw' && !options.key) {
251
+ console.error(chalk.red('--key is required for raw format'));
252
+ process.exit(1);
253
+ }
254
+ if (options.format === 'template' && !options.template) {
255
+ console.error(chalk.red('--template is required for template format'));
256
+ process.exit(1);
257
+ }
258
+ // Try to fetch the secret to validate it exists
259
+ const spinner = ora('Validating secret...').start();
260
+ let secret;
261
+ try {
262
+ secret = await getSecret(secretId);
263
+ spinner.stop();
264
+ }
265
+ catch (err) {
266
+ spinner.fail('Secret not found');
267
+ console.error(chalk.red('Error:'), err instanceof Error ? err.message : String(err));
268
+ process.exit(1);
269
+ }
270
+ console.log();
271
+ console.log(chalk.bold('Secret:'), secret.alias);
272
+ console.log(chalk.gray(`Type: ${secret.type}, Version: ${secret.version}`));
273
+ console.log(chalk.gray(`Keys: ${Object.keys(secret.data).join(', ')}`));
274
+ console.log();
275
+ // Gather configuration interactively if not all options provided
276
+ let name = options.name;
277
+ let output = options.output;
278
+ if (!name || !output) {
279
+ const answers = await inquirer.prompt([
280
+ {
281
+ type: 'input',
282
+ name: 'name',
283
+ message: 'Local name for this target:',
284
+ default: options.name || secret.alias.replace(/[^a-zA-Z0-9-_]/g, '-'),
285
+ when: !name,
286
+ },
287
+ {
288
+ type: 'input',
289
+ name: 'output',
290
+ message: 'Output file path:',
291
+ default: options.output || `/etc/secrets/${secret.alias.replace(/\//g, '-')}.${options.format === 'yaml' ? 'yml' : options.format}`,
292
+ when: !output,
293
+ },
294
+ ]);
295
+ name = name || answers.name;
296
+ output = output || answers.output;
297
+ }
298
+ // Build target configuration
299
+ const target = {
300
+ secretId,
301
+ name,
302
+ format: options.format,
303
+ output,
304
+ key: options.key,
305
+ templatePath: options.template,
306
+ envPrefix: options.prefix,
307
+ owner: options.owner,
308
+ mode: options.mode,
309
+ reloadCmd: options.reload,
310
+ };
311
+ // Save target
312
+ addSecretTarget(target);
313
+ console.log(chalk.green('✓') + ` Secret target "${name}" added`);
314
+ console.log();
315
+ console.log(`Format: ${options.format}`);
316
+ console.log(`Output: ${output}`);
317
+ console.log();
318
+ console.log('Run ' + chalk.cyan('zn-vault-agent secret sync') + ' to deploy now');
319
+ });
320
+ // List configured secret targets
321
+ secretCmd
322
+ .command('list')
323
+ .description('List configured secret targets')
324
+ .option('--json', 'Output as JSON')
325
+ .addHelpText('after', `
326
+ Examples:
327
+ zn-vault-agent secret list # Human-readable list
328
+ zn-vault-agent secret list --json # JSON output for scripting
329
+ `)
330
+ .action(async (options) => {
331
+ const targets = getSecretTargets();
332
+ if (options.json) {
333
+ console.log(JSON.stringify(targets, null, 2));
334
+ return;
335
+ }
336
+ if (targets.length === 0) {
337
+ console.log('No secret targets configured.');
338
+ console.log('Run ' + chalk.cyan('zn-vault-agent secret add <id>') + ' to add one.');
339
+ return;
340
+ }
341
+ console.log();
342
+ console.log(chalk.bold('Configured Secret Targets'));
343
+ console.log();
344
+ for (const target of targets) {
345
+ const syncStatus = target.lastSync
346
+ ? chalk.green(`synced ${new Date(target.lastSync).toLocaleString()}`)
347
+ : chalk.yellow('not synced');
348
+ console.log(` ${chalk.bold(target.name)}`);
349
+ console.log(` Secret: ${target.secretId}`);
350
+ console.log(` Format: ${target.format}`);
351
+ console.log(` Output: ${target.output}`);
352
+ console.log(` Status: ${syncStatus}`);
353
+ if (target.reloadCmd) {
354
+ console.log(` Reload: ${target.reloadCmd}`);
355
+ }
356
+ console.log();
357
+ }
358
+ console.log(`Total: ${targets.length} target(s)`);
359
+ });
360
+ // Remove a secret target
361
+ secretCmd
362
+ .command('remove <name>')
363
+ .description('Remove a secret target')
364
+ .option('-f, --force', 'Skip confirmation')
365
+ .addHelpText('after', `
366
+ Examples:
367
+ zn-vault-agent secret remove db-creds # Interactive confirmation
368
+ zn-vault-agent secret remove db-creds --force # Skip confirmation
369
+ `)
370
+ .action(async (name, options) => {
371
+ const targets = getSecretTargets();
372
+ const target = targets.find(t => t.name === name || t.secretId === name);
373
+ if (!target) {
374
+ console.error(chalk.red(`Target "${name}" not found`));
375
+ process.exit(1);
376
+ }
377
+ if (!options.force) {
378
+ const { confirm } = await inquirer.prompt([
379
+ {
380
+ type: 'confirm',
381
+ name: 'confirm',
382
+ message: `Remove target "${target.name}"?`,
383
+ default: false,
384
+ },
385
+ ]);
386
+ if (!confirm) {
387
+ console.log('Cancelled');
388
+ return;
389
+ }
390
+ }
391
+ removeSecretTarget(name);
392
+ console.log(chalk.green('✓') + ` Target "${target.name}" removed`);
393
+ });
394
+ // Sync all secret targets
395
+ secretCmd
396
+ .command('sync')
397
+ .description('Sync all configured secrets')
398
+ .option('--name <name>', 'Sync only specific target')
399
+ .addHelpText('after', `
400
+ Examples:
401
+ zn-vault-agent secret sync # Sync all configured secrets
402
+ zn-vault-agent secret sync --name db # Sync only "db" target
403
+ `)
404
+ .action(async (options) => {
405
+ if (!isConfigured()) {
406
+ console.error(chalk.red('Not configured. Run: zn-vault-agent login'));
407
+ process.exit(1);
408
+ }
409
+ let targets = getSecretTargets();
410
+ if (targets.length === 0) {
411
+ console.log('No secret targets configured.');
412
+ console.log('Run ' + chalk.cyan('zn-vault-agent secret add <id>') + ' to add one.');
413
+ return;
414
+ }
415
+ if (options.name) {
416
+ targets = targets.filter(t => t.name === options.name || t.secretId === options.name);
417
+ if (targets.length === 0) {
418
+ console.error(chalk.red(`Target "${options.name}" not found`));
419
+ process.exit(1);
420
+ }
421
+ }
422
+ console.log();
423
+ console.log(chalk.bold('Syncing secrets...'));
424
+ console.log();
425
+ let success = 0;
426
+ let failed = 0;
427
+ for (const target of targets) {
428
+ const spinner = ora(`Syncing ${target.name}...`).start();
429
+ if (await syncSecretTarget(target)) {
430
+ spinner.succeed(`${target.name} → ${target.output}`);
431
+ success++;
432
+ }
433
+ else {
434
+ spinner.fail(`${target.name} failed`);
435
+ failed++;
436
+ }
437
+ }
438
+ console.log();
439
+ console.log(`Synced: ${success}, Failed: ${failed}`);
440
+ if (failed > 0) {
441
+ process.exit(1);
442
+ }
443
+ });
444
+ }
445
+ //# 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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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Setup Command
3
+ *
4
+ * Installs systemd service and creates necessary directories
5
+ * for running zn-vault-agent as a system daemon.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function registerSetupCommand(program: Command): void;
9
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC3D"}