@zincapp/znvault-cli 2.1.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 (122) hide show
  1. package/README.md +310 -0
  2. package/dist/commands/agent.d.ts +3 -0
  3. package/dist/commands/agent.d.ts.map +1 -0
  4. package/dist/commands/agent.js +660 -0
  5. package/dist/commands/agent.js.map +1 -0
  6. package/dist/commands/apikey.d.ts +3 -0
  7. package/dist/commands/apikey.d.ts.map +1 -0
  8. package/dist/commands/apikey.js +767 -0
  9. package/dist/commands/apikey.js.map +1 -0
  10. package/dist/commands/audit.d.ts +3 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +147 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/auth.d.ts +3 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +426 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/cert.d.ts +3 -0
  19. package/dist/commands/cert.d.ts.map +1 -0
  20. package/dist/commands/cert.js +398 -0
  21. package/dist/commands/cert.js.map +1 -0
  22. package/dist/commands/cluster.d.ts +3 -0
  23. package/dist/commands/cluster.d.ts.map +1 -0
  24. package/dist/commands/cluster.js +228 -0
  25. package/dist/commands/cluster.js.map +1 -0
  26. package/dist/commands/emergency.d.ts +3 -0
  27. package/dist/commands/emergency.d.ts.map +1 -0
  28. package/dist/commands/emergency.js +223 -0
  29. package/dist/commands/emergency.js.map +1 -0
  30. package/dist/commands/health.d.ts +3 -0
  31. package/dist/commands/health.d.ts.map +1 -0
  32. package/dist/commands/health.js +188 -0
  33. package/dist/commands/health.js.map +1 -0
  34. package/dist/commands/lockdown.d.ts +3 -0
  35. package/dist/commands/lockdown.d.ts.map +1 -0
  36. package/dist/commands/lockdown.js +232 -0
  37. package/dist/commands/lockdown.js.map +1 -0
  38. package/dist/commands/permissions.d.ts +3 -0
  39. package/dist/commands/permissions.d.ts.map +1 -0
  40. package/dist/commands/permissions.js +168 -0
  41. package/dist/commands/permissions.js.map +1 -0
  42. package/dist/commands/policy.d.ts +3 -0
  43. package/dist/commands/policy.d.ts.map +1 -0
  44. package/dist/commands/policy.js +660 -0
  45. package/dist/commands/policy.js.map +1 -0
  46. package/dist/commands/superadmin.d.ts +3 -0
  47. package/dist/commands/superadmin.d.ts.map +1 -0
  48. package/dist/commands/superadmin.js +203 -0
  49. package/dist/commands/superadmin.js.map +1 -0
  50. package/dist/commands/tenant.d.ts +3 -0
  51. package/dist/commands/tenant.d.ts.map +1 -0
  52. package/dist/commands/tenant.js +277 -0
  53. package/dist/commands/tenant.js.map +1 -0
  54. package/dist/commands/update.d.ts +9 -0
  55. package/dist/commands/update.d.ts.map +1 -0
  56. package/dist/commands/update.js +359 -0
  57. package/dist/commands/update.js.map +1 -0
  58. package/dist/commands/user.d.ts +3 -0
  59. package/dist/commands/user.d.ts.map +1 -0
  60. package/dist/commands/user.js +363 -0
  61. package/dist/commands/user.js.map +1 -0
  62. package/dist/index.d.ts +3 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +82 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/lib/client.d.ts +246 -0
  67. package/dist/lib/client.d.ts.map +1 -0
  68. package/dist/lib/client.js +734 -0
  69. package/dist/lib/client.js.map +1 -0
  70. package/dist/lib/config.d.ts +130 -0
  71. package/dist/lib/config.d.ts.map +1 -0
  72. package/dist/lib/config.js +342 -0
  73. package/dist/lib/config.js.map +1 -0
  74. package/dist/lib/db.d.ts +111 -0
  75. package/dist/lib/db.d.ts.map +1 -0
  76. package/dist/lib/db.js +698 -0
  77. package/dist/lib/db.js.map +1 -0
  78. package/dist/lib/local.d.ts +41 -0
  79. package/dist/lib/local.d.ts.map +1 -0
  80. package/dist/lib/local.js +236 -0
  81. package/dist/lib/local.js.map +1 -0
  82. package/dist/lib/mode.d.ts +210 -0
  83. package/dist/lib/mode.d.ts.map +1 -0
  84. package/dist/lib/mode.js +389 -0
  85. package/dist/lib/mode.js.map +1 -0
  86. package/dist/lib/output.d.ts +61 -0
  87. package/dist/lib/output.d.ts.map +1 -0
  88. package/dist/lib/output.js +190 -0
  89. package/dist/lib/output.js.map +1 -0
  90. package/dist/lib/prompts.d.ts +32 -0
  91. package/dist/lib/prompts.d.ts.map +1 -0
  92. package/dist/lib/prompts.js +96 -0
  93. package/dist/lib/prompts.js.map +1 -0
  94. package/dist/services/auto-update-daemon.d.ts +48 -0
  95. package/dist/services/auto-update-daemon.d.ts.map +1 -0
  96. package/dist/services/auto-update-daemon.js +296 -0
  97. package/dist/services/auto-update-daemon.js.map +1 -0
  98. package/dist/services/signature-verifier.d.ts +38 -0
  99. package/dist/services/signature-verifier.d.ts.map +1 -0
  100. package/dist/services/signature-verifier.js +209 -0
  101. package/dist/services/signature-verifier.js.map +1 -0
  102. package/dist/services/update-checker.d.ts +39 -0
  103. package/dist/services/update-checker.d.ts.map +1 -0
  104. package/dist/services/update-checker.js +198 -0
  105. package/dist/services/update-checker.js.map +1 -0
  106. package/dist/services/update-installer.d.ts +54 -0
  107. package/dist/services/update-installer.d.ts.map +1 -0
  108. package/dist/services/update-installer.js +360 -0
  109. package/dist/services/update-installer.js.map +1 -0
  110. package/dist/types/index.d.ts +411 -0
  111. package/dist/types/index.d.ts.map +1 -0
  112. package/dist/types/index.js +2 -0
  113. package/dist/types/index.js.map +1 -0
  114. package/dist/types/update.d.ts +137 -0
  115. package/dist/types/update.d.ts.map +1 -0
  116. package/dist/types/update.js +27 -0
  117. package/dist/types/update.js.map +1 -0
  118. package/dist/utils/platform.d.ts +35 -0
  119. package/dist/utils/platform.d.ts.map +1 -0
  120. package/dist/utils/platform.js +115 -0
  121. package/dist/utils/platform.js.map +1 -0
  122. package/package.json +59 -0
@@ -0,0 +1,359 @@
1
+ // Path: znvault-cli/src/commands/update.ts
2
+ import ora from 'ora';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import * as output from '../lib/output.js';
7
+ import { createUpdateChecker } from '../services/update-checker.js';
8
+ import { createUpdateInstaller } from '../services/update-installer.js';
9
+ import { getPlatform, getPlatformName, getInstallPath, ensureConfigDir, isRoot } from '../utils/platform.js';
10
+ import { DEFAULT_UPDATE_CONFIG } from '../types/update.js';
11
+ // ESM workaround for __dirname
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ const UPDATE_CONFIG_FILE = 'update.json';
15
+ /**
16
+ * Get current version from package.json
17
+ */
18
+ function getCurrentVersion() {
19
+ // Try to read from package.json in various locations
20
+ const possiblePaths = [
21
+ path.join(process.cwd(), 'package.json'),
22
+ path.join(__dirname, '../../package.json'),
23
+ path.join(__dirname, '../../../package.json'),
24
+ ];
25
+ for (const p of possiblePaths) {
26
+ try {
27
+ if (fs.existsSync(p)) {
28
+ const pkg = JSON.parse(fs.readFileSync(p, 'utf-8'));
29
+ if (pkg.version) {
30
+ return pkg.version;
31
+ }
32
+ }
33
+ }
34
+ catch {
35
+ // Continue to next path
36
+ }
37
+ }
38
+ // Fallback: check VERSION file
39
+ const versionFile = path.join(__dirname, '../../VERSION');
40
+ if (fs.existsSync(versionFile)) {
41
+ return fs.readFileSync(versionFile, 'utf-8').trim();
42
+ }
43
+ return 'unknown';
44
+ }
45
+ /**
46
+ * Load update configuration
47
+ */
48
+ function loadConfig() {
49
+ const configPath = path.join(ensureConfigDir(), UPDATE_CONFIG_FILE);
50
+ if (fs.existsSync(configPath)) {
51
+ try {
52
+ const data = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
53
+ return { ...DEFAULT_UPDATE_CONFIG, ...data };
54
+ }
55
+ catch {
56
+ // Return default on error
57
+ }
58
+ }
59
+ return { ...DEFAULT_UPDATE_CONFIG };
60
+ }
61
+ /**
62
+ * Save update configuration
63
+ */
64
+ function saveConfig(config) {
65
+ const configPath = path.join(ensureConfigDir(), UPDATE_CONFIG_FILE);
66
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
67
+ }
68
+ export function registerUpdateCommands(program) {
69
+ const update = program
70
+ .command('update')
71
+ .description('Manage agent updates');
72
+ // Check for updates
73
+ update
74
+ .command('check')
75
+ .description('Check for available updates')
76
+ .option('--channel <channel>', 'Update channel (stable, beta, staging)', 'stable')
77
+ .option('--json', 'Output as JSON')
78
+ .action(async (options) => {
79
+ const spinner = ora('Checking for updates...').start();
80
+ try {
81
+ const checker = createUpdateChecker(options.channel);
82
+ const currentVersion = getCurrentVersion();
83
+ const result = await checker.checkForUpdates(currentVersion);
84
+ spinner.stop();
85
+ if (options.json) {
86
+ output.json(result);
87
+ return;
88
+ }
89
+ console.log();
90
+ console.log(`Current version: ${result.currentVersion}`);
91
+ console.log(`Latest version: ${result.latestVersion}`);
92
+ console.log(`Channel: ${options.channel}`);
93
+ console.log(`Platform: ${getPlatformName()}`);
94
+ if (result.error) {
95
+ console.log();
96
+ output.error(result.error);
97
+ return;
98
+ }
99
+ if (result.updateAvailable) {
100
+ console.log();
101
+ console.log('✨ Update available!');
102
+ console.log();
103
+ console.log('Run "znvault update install" to update.');
104
+ if (result.manifest?.releaseNotes) {
105
+ console.log();
106
+ console.log('Release notes:');
107
+ console.log(result.manifest.releaseNotes);
108
+ }
109
+ }
110
+ else {
111
+ console.log();
112
+ console.log('✓ You are running the latest version.');
113
+ }
114
+ }
115
+ catch (err) {
116
+ spinner.fail('Check failed');
117
+ output.error(err instanceof Error ? err.message : String(err));
118
+ process.exit(1);
119
+ }
120
+ });
121
+ // Install update
122
+ update
123
+ .command('install')
124
+ .description('Download and install the latest update')
125
+ .option('--channel <channel>', 'Update channel', 'stable')
126
+ .option('--force', 'Force reinstall even if up to date')
127
+ .option('--path <path>', 'Installation path')
128
+ .option('-y, --yes', 'Skip confirmation prompts')
129
+ .action(async (options) => {
130
+ const config = loadConfig();
131
+ const channel = (options.channel || config.channel);
132
+ const installPath = options.path || config.installPath || getInstallPath();
133
+ // Check platform
134
+ const platform = getPlatform();
135
+ if (platform === 'unsupported') {
136
+ output.error(`Unsupported platform: ${process.platform}/${process.arch}`);
137
+ output.error('Auto-update is only available on Linux (amd64, arm64).');
138
+ process.exit(1);
139
+ }
140
+ // Check permissions
141
+ const installer = createUpdateInstaller(installPath);
142
+ const { canInstall, reason } = installer.canInstall();
143
+ if (!canInstall) {
144
+ output.error(reason || 'Cannot install to target path');
145
+ if (!isRoot()) {
146
+ console.log('Tip: Try running with sudo');
147
+ }
148
+ process.exit(1);
149
+ }
150
+ // Check for updates
151
+ const spinner = ora('Checking for updates...').start();
152
+ try {
153
+ const checker = createUpdateChecker(channel);
154
+ const currentVersion = getCurrentVersion();
155
+ const result = await checker.checkForUpdates(currentVersion);
156
+ if (result.error) {
157
+ spinner.fail(result.error);
158
+ process.exit(1);
159
+ }
160
+ if (!result.updateAvailable && !options.force) {
161
+ spinner.succeed('Already running the latest version');
162
+ return;
163
+ }
164
+ if (!result.artifact || !result.manifest) {
165
+ spinner.fail('No artifact available for this platform');
166
+ process.exit(1);
167
+ }
168
+ spinner.stop();
169
+ // Confirm installation
170
+ if (!options.yes) {
171
+ console.log();
172
+ console.log(`Current version: ${result.currentVersion}`);
173
+ console.log(`New version: ${result.latestVersion}`);
174
+ console.log(`Install path: ${installPath}`);
175
+ console.log();
176
+ const { confirm } = await import('inquirer').then(m => m.default.prompt([
177
+ {
178
+ type: 'confirm',
179
+ name: 'confirm',
180
+ message: 'Proceed with installation?',
181
+ default: true,
182
+ },
183
+ ]));
184
+ if (!confirm) {
185
+ console.log('Installation cancelled.');
186
+ return;
187
+ }
188
+ }
189
+ // Install with progress
190
+ let currentSpinner = null;
191
+ const progressHandler = (progress) => {
192
+ if (currentSpinner) {
193
+ if (progress.stage === 'complete') {
194
+ currentSpinner.succeed(progress.message);
195
+ currentSpinner = null;
196
+ }
197
+ else if (progress.stage === 'error') {
198
+ currentSpinner.fail(progress.message);
199
+ currentSpinner = null;
200
+ }
201
+ else {
202
+ currentSpinner.text = progress.message;
203
+ }
204
+ }
205
+ else if (progress.stage !== 'complete' && progress.stage !== 'error') {
206
+ currentSpinner = ora(progress.message).start();
207
+ }
208
+ };
209
+ const installerWithProgress = createUpdateInstaller(installPath, progressHandler);
210
+ await installerWithProgress.install(result.artifact, result.latestVersion);
211
+ console.log();
212
+ console.log('✓ Update installed successfully!');
213
+ console.log();
214
+ console.log('Note: You may need to restart any running agents for the update to take effect.');
215
+ }
216
+ catch (err) {
217
+ if (spinner.isSpinning) {
218
+ spinner.fail('Installation failed');
219
+ }
220
+ output.error(err instanceof Error ? err.message : String(err));
221
+ process.exit(1);
222
+ }
223
+ });
224
+ // Configure auto-update
225
+ update
226
+ .command('config')
227
+ .description('Configure auto-update settings')
228
+ .option('--enable', 'Enable auto-updates')
229
+ .option('--disable', 'Disable auto-updates')
230
+ .option('--channel <channel>', 'Update channel (stable, beta, staging)')
231
+ .option('--window <start-end>', 'Maintenance window (e.g., "02:00-04:00")')
232
+ .option('--timezone <tz>', 'Timezone for maintenance window', 'UTC')
233
+ .option('--interval <minutes>', 'Check interval in minutes')
234
+ .option('--path <path>', 'Installation path')
235
+ .option('--vault-url <url>', 'Vault URL for WebSocket notifications')
236
+ .option('--show', 'Show current configuration')
237
+ .option('--json', 'Output as JSON')
238
+ .action(async (options) => {
239
+ const config = loadConfig();
240
+ // Show current config
241
+ if (options.show || Object.keys(options).length === 0) {
242
+ if (options.json) {
243
+ output.json(config);
244
+ return;
245
+ }
246
+ console.log('Auto-Update Configuration:');
247
+ console.log();
248
+ console.log(` Auto-update: ${config.autoUpdate ? 'enabled' : 'disabled'}`);
249
+ console.log(` Channel: ${config.channel}`);
250
+ console.log(` Check interval: ${config.checkInterval / 60000} minutes`);
251
+ console.log(` Install path: ${config.installPath}`);
252
+ if (config.maintenanceWindow) {
253
+ console.log(` Window: ${config.maintenanceWindow.start}-${config.maintenanceWindow.end} ${config.maintenanceWindow.timezone}`);
254
+ }
255
+ else {
256
+ console.log(` Window: none (updates anytime)`);
257
+ }
258
+ if (config.vaultUrl) {
259
+ console.log(` Vault URL: ${config.vaultUrl}`);
260
+ }
261
+ return;
262
+ }
263
+ // Update config
264
+ if (options.enable) {
265
+ config.autoUpdate = true;
266
+ }
267
+ if (options.disable) {
268
+ config.autoUpdate = false;
269
+ }
270
+ if (options.channel) {
271
+ config.channel = options.channel;
272
+ }
273
+ if (options.window) {
274
+ const [start, end] = options.window.split('-');
275
+ if (start && end) {
276
+ config.maintenanceWindow = {
277
+ start,
278
+ end,
279
+ timezone: options.timezone || 'UTC',
280
+ };
281
+ }
282
+ }
283
+ if (options.interval) {
284
+ config.checkInterval = parseInt(options.interval, 10) * 60000;
285
+ }
286
+ if (options.path) {
287
+ config.installPath = options.path;
288
+ }
289
+ if (options.vaultUrl) {
290
+ config.vaultUrl = options.vaultUrl;
291
+ }
292
+ saveConfig(config);
293
+ console.log('Configuration saved.');
294
+ if (options.json) {
295
+ output.json(config);
296
+ }
297
+ });
298
+ // Show status
299
+ update
300
+ .command('status')
301
+ .description('Show update status and configuration')
302
+ .option('--json', 'Output as JSON')
303
+ .action(async (options) => {
304
+ const config = loadConfig();
305
+ const currentVersion = getCurrentVersion();
306
+ const platform = getPlatform();
307
+ const status = {
308
+ currentVersion,
309
+ platform: getPlatformName(),
310
+ platformSupported: platform !== 'unsupported',
311
+ installPath: config.installPath || getInstallPath(),
312
+ config,
313
+ };
314
+ if (options.json) {
315
+ output.json(status);
316
+ return;
317
+ }
318
+ console.log('Update Status:');
319
+ console.log();
320
+ console.log(` Version: ${status.currentVersion}`);
321
+ console.log(` Platform: ${status.platform}`);
322
+ console.log(` Supported: ${status.platformSupported ? 'yes' : 'no'}`);
323
+ console.log(` Install path: ${status.installPath}`);
324
+ console.log();
325
+ console.log('Configuration:');
326
+ console.log(` Auto-update: ${config.autoUpdate ? 'enabled' : 'disabled'}`);
327
+ console.log(` Channel: ${config.channel}`);
328
+ console.log(` Check interval: ${config.checkInterval / 60000} minutes`);
329
+ if (config.maintenanceWindow) {
330
+ console.log(` Window: ${config.maintenanceWindow.start}-${config.maintenanceWindow.end} ${config.maintenanceWindow.timezone}`);
331
+ }
332
+ });
333
+ // Daemon mode (for systemd)
334
+ update
335
+ .command('daemon')
336
+ .description('Start auto-update daemon (for systemd service)')
337
+ .option('-c, --config <path>', 'Config file path')
338
+ .action(async (options) => {
339
+ const config = options.config
340
+ ? JSON.parse(fs.readFileSync(options.config, 'utf-8'))
341
+ : loadConfig();
342
+ if (!config.autoUpdate) {
343
+ console.log('Auto-update is disabled. Enable with "znvault update config --enable"');
344
+ process.exit(0);
345
+ }
346
+ console.log('Starting auto-update daemon...');
347
+ console.log(` Channel: ${config.channel}`);
348
+ console.log(` Check interval: ${config.checkInterval / 60000} minutes`);
349
+ if (config.maintenanceWindow) {
350
+ console.log(` Window: ${config.maintenanceWindow.start}-${config.maintenanceWindow.end} ${config.maintenanceWindow.timezone}`);
351
+ }
352
+ console.log();
353
+ // Import and start daemon
354
+ const { AutoUpdateDaemon } = await import('../services/auto-update-daemon.js');
355
+ const daemon = new AutoUpdateDaemon(config);
356
+ await daemon.start();
357
+ });
358
+ }
359
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUserCommands(program: Command): void;
3
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/commands/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+W3D"}