@zincapp/znvault-cli 2.23.0 → 2.24.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 (61) hide show
  1. package/dist/commands/host/bootstrap-token.d.ts +6 -0
  2. package/dist/commands/host/bootstrap-token.d.ts.map +1 -0
  3. package/dist/commands/host/bootstrap-token.js +64 -0
  4. package/dist/commands/host/bootstrap-token.js.map +1 -0
  5. package/dist/commands/host/config.d.ts +6 -0
  6. package/dist/commands/host/config.d.ts.map +1 -0
  7. package/dist/commands/host/config.js +140 -0
  8. package/dist/commands/host/config.js.map +1 -0
  9. package/dist/commands/host/create.d.ts +6 -0
  10. package/dist/commands/host/create.d.ts.map +1 -0
  11. package/dist/commands/host/create.js +69 -0
  12. package/dist/commands/host/create.js.map +1 -0
  13. package/dist/commands/host/delete.d.ts +6 -0
  14. package/dist/commands/host/delete.d.ts.map +1 -0
  15. package/dist/commands/host/delete.js +59 -0
  16. package/dist/commands/host/delete.js.map +1 -0
  17. package/dist/commands/host/get.d.ts +10 -0
  18. package/dist/commands/host/get.d.ts.map +1 -0
  19. package/dist/commands/host/get.js +79 -0
  20. package/dist/commands/host/get.js.map +1 -0
  21. package/dist/commands/host/helpers.d.ts +33 -0
  22. package/dist/commands/host/helpers.d.ts.map +1 -0
  23. package/dist/commands/host/helpers.js +197 -0
  24. package/dist/commands/host/helpers.js.map +1 -0
  25. package/dist/commands/host/index.d.ts +7 -0
  26. package/dist/commands/host/index.d.ts.map +1 -0
  27. package/dist/commands/host/index.js +34 -0
  28. package/dist/commands/host/index.js.map +1 -0
  29. package/dist/commands/host/list.d.ts +10 -0
  30. package/dist/commands/host/list.d.ts.map +1 -0
  31. package/dist/commands/host/list.js +100 -0
  32. package/dist/commands/host/list.js.map +1 -0
  33. package/dist/commands/host/sync.d.ts +6 -0
  34. package/dist/commands/host/sync.d.ts.map +1 -0
  35. package/dist/commands/host/sync.js +61 -0
  36. package/dist/commands/host/sync.js.map +1 -0
  37. package/dist/commands/host/types.d.ts +197 -0
  38. package/dist/commands/host/types.d.ts.map +1 -0
  39. package/dist/commands/host/types.js +4 -0
  40. package/dist/commands/host/types.js.map +1 -0
  41. package/dist/commands/quarantine.d.ts +3 -0
  42. package/dist/commands/quarantine.d.ts.map +1 -0
  43. package/dist/commands/quarantine.js +400 -0
  44. package/dist/commands/quarantine.js.map +1 -0
  45. package/dist/index.js +4 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/client/index.d.ts +18 -0
  48. package/dist/lib/client/index.d.ts.map +1 -1
  49. package/dist/lib/client/index.js +15 -0
  50. package/dist/lib/client/index.js.map +1 -1
  51. package/dist/lib/client/quarantine.d.ts +61 -0
  52. package/dist/lib/client/quarantine.d.ts.map +1 -0
  53. package/dist/lib/client/quarantine.js +97 -0
  54. package/dist/lib/client/quarantine.js.map +1 -0
  55. package/dist/lib/mode.d.ts +4 -0
  56. package/dist/lib/mode.d.ts.map +1 -1
  57. package/dist/lib/mode.js +9 -0
  58. package/dist/lib/mode.js.map +1 -1
  59. package/dist/types/index.d.ts +64 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the bootstrap-token command
4
+ */
5
+ export declare function registerBootstrapTokenCommand(parentCmd: Command): void;
6
+ //# sourceMappingURL=bootstrap-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-token.d.ts","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA0DtE"}
@@ -0,0 +1,64 @@
1
+ // Path: src/commands/host/bootstrap-token.ts
2
+ // Generate bootstrap token for host
3
+ import ora from 'ora';
4
+ import * as mode from '../../lib/mode.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { parseDuration } from './helpers.js';
7
+ /**
8
+ * Register the bootstrap-token command
9
+ */
10
+ export function registerBootstrapTokenCommand(parentCmd) {
11
+ parentCmd
12
+ .command('bootstrap-token <hostname>')
13
+ .alias('token')
14
+ .description('Generate a bootstrap token for a host')
15
+ .option('-e, --expires <duration>', 'Token expiration (e.g., 1h, 24h, 7d)', '24h')
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (hostname, options) => {
18
+ // Parse expiration
19
+ let expiresAt;
20
+ try {
21
+ const expirationDate = parseDuration(options.expires ?? '24h');
22
+ expiresAt = expirationDate.toISOString();
23
+ }
24
+ catch (err) {
25
+ output.error(err instanceof Error ? err.message : String(err));
26
+ process.exit(1);
27
+ }
28
+ const spinner = ora('Generating bootstrap token...').start();
29
+ try {
30
+ const response = await mode.apiPost(`/v1/hosts/${encodeURIComponent(hostname)}/bootstrap-token`, { expiresAt });
31
+ spinner.succeed('Bootstrap token generated');
32
+ if (options.json) {
33
+ output.json(response);
34
+ return;
35
+ }
36
+ console.log();
37
+ console.log('Bootstrap Token for ' + hostname);
38
+ console.log('─'.repeat(60));
39
+ console.log();
40
+ console.log(' Token: ' + response.token);
41
+ console.log(' Expires: ' + new Date(response.expiresAt).toLocaleString());
42
+ console.log();
43
+ console.log('Bootstrap Commands:');
44
+ console.log();
45
+ console.log(' # Option 1: Use bootstrap script (recommended)');
46
+ console.log(` curl -sL ${response.bootstrapUrl} | sudo bash -s -- --token ${response.token}`);
47
+ console.log();
48
+ console.log(' # Option 2: Manual installation');
49
+ console.log(' sudo npm install -g @zincapp/zn-vault-agent');
50
+ console.log(` sudo zn-vault-agent bootstrap --token ${response.token}`);
51
+ console.log();
52
+ console.log('Note: The token can only be used once and expires in ' + (options.expires ?? '24h'));
53
+ }
54
+ catch (err) {
55
+ spinner.fail('Failed to generate bootstrap token');
56
+ output.error(err instanceof Error ? err.message : String(err));
57
+ process.exit(1);
58
+ }
59
+ finally {
60
+ await mode.closeLocalClient();
61
+ }
62
+ });
63
+ }
64
+ //# sourceMappingURL=bootstrap-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-token.js","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the config command
4
+ */
5
+ export declare function registerConfigCommand(parentCmd: Command): void;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/host/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAgH9D"}
@@ -0,0 +1,140 @@
1
+ // Path: src/commands/host/config.ts
2
+ // View and edit host configuration
3
+ import fs from 'node:fs';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { spawn } from 'node:child_process';
7
+ import ora from 'ora';
8
+ import * as mode from '../../lib/mode.js';
9
+ import * as output from '../../lib/output.js';
10
+ import { formatConfigYaml } from './helpers.js';
11
+ /**
12
+ * Open editor and return the edited content
13
+ */
14
+ async function editInEditor(content) {
15
+ const editor = process.env.EDITOR ?? process.env.VISUAL ?? 'vi';
16
+ const tmpFile = path.join(os.tmpdir(), `znvault-host-config-${Date.now()}.json`);
17
+ // Write content to temp file
18
+ fs.writeFileSync(tmpFile, content, 'utf-8');
19
+ return new Promise((resolve, reject) => {
20
+ const child = spawn(editor, [tmpFile], {
21
+ stdio: 'inherit',
22
+ shell: true,
23
+ });
24
+ child.on('error', (err) => {
25
+ fs.unlinkSync(tmpFile);
26
+ reject(new Error(`Failed to open editor: ${err.message}`));
27
+ });
28
+ child.on('exit', (code) => {
29
+ if (code !== 0) {
30
+ fs.unlinkSync(tmpFile);
31
+ reject(new Error(`Editor exited with code ${code}`));
32
+ return;
33
+ }
34
+ try {
35
+ const edited = fs.readFileSync(tmpFile, 'utf-8');
36
+ fs.unlinkSync(tmpFile);
37
+ resolve(edited);
38
+ }
39
+ catch (err) {
40
+ reject(new Error(`Failed to read edited file: ${err instanceof Error ? err.message : String(err)}`));
41
+ }
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * Register the config command
47
+ */
48
+ export function registerConfigCommand(parentCmd) {
49
+ parentCmd
50
+ .command('config <hostname>')
51
+ .description('View or edit host configuration')
52
+ .option('-e, --edit', 'Open config in editor')
53
+ .option('-i, --import <file>', 'Import config from JSON file')
54
+ .option('--json', 'Output as JSON')
55
+ .action(async (hostname, options) => {
56
+ const spinner = ora('Fetching host configuration...').start();
57
+ try {
58
+ // Get current config
59
+ const host = await mode.apiGet(`/v1/hosts/${encodeURIComponent(hostname)}`);
60
+ spinner.stop();
61
+ // Import from file
62
+ if (options.import) {
63
+ spinner.text = 'Importing configuration...';
64
+ spinner.start();
65
+ let newConfig;
66
+ try {
67
+ const content = fs.readFileSync(options.import, 'utf-8');
68
+ newConfig = JSON.parse(content);
69
+ }
70
+ catch (err) {
71
+ spinner.fail('Failed to read import file');
72
+ output.error(err instanceof Error ? err.message : String(err));
73
+ process.exit(1);
74
+ }
75
+ const updated = await mode.apiPut(`/v1/hosts/${encodeURIComponent(hostname)}/config`, { config: newConfig });
76
+ spinner.succeed(`Configuration imported (version ${updated.version})`);
77
+ if (options.json) {
78
+ output.json(updated);
79
+ }
80
+ return;
81
+ }
82
+ // Edit in editor
83
+ if (options.edit) {
84
+ const configJson = JSON.stringify(host.config, null, 2);
85
+ console.log('Opening config in editor...');
86
+ console.log('(Save and close the editor to apply changes, or exit without saving to cancel)');
87
+ console.log();
88
+ let editedContent;
89
+ try {
90
+ editedContent = await editInEditor(configJson);
91
+ }
92
+ catch (err) {
93
+ output.error(err instanceof Error ? err.message : String(err));
94
+ process.exit(1);
95
+ }
96
+ // Parse and validate
97
+ let newConfig;
98
+ try {
99
+ newConfig = JSON.parse(editedContent);
100
+ }
101
+ catch (err) {
102
+ output.error('Invalid JSON in edited config');
103
+ output.error(err instanceof Error ? err.message : String(err));
104
+ process.exit(1);
105
+ }
106
+ // Check if changed
107
+ if (JSON.stringify(newConfig) === JSON.stringify(host.config)) {
108
+ console.log('No changes made.');
109
+ return;
110
+ }
111
+ spinner.text = 'Updating configuration...';
112
+ spinner.start();
113
+ const updated = await mode.apiPut(`/v1/hosts/${encodeURIComponent(hostname)}/config`, { config: newConfig });
114
+ spinner.succeed(`Configuration updated (version ${updated.version})`);
115
+ console.log();
116
+ console.log('To push to agents: znvault host sync ' + hostname);
117
+ return;
118
+ }
119
+ // Just display the config
120
+ if (options.json) {
121
+ output.json(host.config);
122
+ return;
123
+ }
124
+ console.log(`Host: ${hostname} (version ${host.version})`);
125
+ console.log();
126
+ console.log(formatConfigYaml(host.config));
127
+ console.log();
128
+ console.log('To edit: znvault host config ' + hostname + ' --edit');
129
+ }
130
+ catch (err) {
131
+ spinner.fail('Failed to get host configuration');
132
+ output.error(err instanceof Error ? err.message : String(err));
133
+ process.exit(1);
134
+ }
135
+ finally {
136
+ await mode.closeLocalClient();
137
+ }
138
+ });
139
+ }
140
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/host/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the create command
4
+ */
5
+ export declare function registerCreateCommand(parentCmd: Command): void;
6
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/host/create.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA6D9D"}
@@ -0,0 +1,69 @@
1
+ // Path: src/commands/host/create.ts
2
+ // Create a new host configuration
3
+ import fs from 'node:fs';
4
+ import ora from 'ora';
5
+ import * as mode from '../../lib/mode.js';
6
+ import * as output from '../../lib/output.js';
7
+ import { validateHostname, printHostDetails } from './helpers.js';
8
+ /**
9
+ * Register the create command
10
+ */
11
+ export function registerCreateCommand(parentCmd) {
12
+ parentCmd
13
+ .command('create <hostname>')
14
+ .description('Create a new host configuration')
15
+ .option('-m, --managed-key <name>', 'Managed API key name for this host')
16
+ .option('-d, --description <text>', 'Host description')
17
+ .option('-c, --config-file <path>', 'Import config from JSON file')
18
+ .option('--json', 'Output as JSON')
19
+ .action(async (hostname, options) => {
20
+ // Validate hostname
21
+ const validation = validateHostname(hostname);
22
+ if (!validation.valid) {
23
+ output.error(validation.error ?? 'Invalid hostname');
24
+ process.exit(1);
25
+ }
26
+ // Load config from file if provided
27
+ let config = {};
28
+ if (options.configFile) {
29
+ try {
30
+ const content = fs.readFileSync(options.configFile, 'utf-8');
31
+ config = JSON.parse(content);
32
+ }
33
+ catch (err) {
34
+ output.error(`Failed to read config file: ${err instanceof Error ? err.message : String(err)}`);
35
+ process.exit(1);
36
+ }
37
+ }
38
+ const spinner = ora('Creating host configuration...').start();
39
+ try {
40
+ const response = await mode.apiPost('/v1/hosts', {
41
+ hostname,
42
+ description: options.description,
43
+ managedKeyName: options.managedKey,
44
+ config,
45
+ });
46
+ spinner.succeed('Host configuration created');
47
+ if (options.json) {
48
+ output.json(response);
49
+ return;
50
+ }
51
+ printHostDetails(response);
52
+ // Show next steps
53
+ console.log('Next steps:');
54
+ console.log(` 1. Edit config: znvault host config ${hostname} --edit`);
55
+ console.log(` 2. Generate token: znvault host bootstrap-token ${hostname}`);
56
+ console.log(` 3. Install agent: curl -sL <vault>/agent/bootstrap.sh | sudo bash -s -- --token <token>`);
57
+ console.log();
58
+ }
59
+ catch (err) {
60
+ spinner.fail('Failed to create host configuration');
61
+ output.error(err instanceof Error ? err.message : String(err));
62
+ process.exit(1);
63
+ }
64
+ finally {
65
+ await mode.closeLocalClient();
66
+ }
67
+ });
68
+ }
69
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/host/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the delete command
4
+ */
5
+ export declare function registerDeleteCommand(parentCmd: Command): void;
6
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/host/delete.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAsD9D"}
@@ -0,0 +1,59 @@
1
+ // Path: src/commands/host/delete.ts
2
+ // Delete a host configuration
3
+ import ora from 'ora';
4
+ import * as mode from '../../lib/mode.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { promptConfirm } from '../../lib/prompts.js';
7
+ /**
8
+ * Register the delete command
9
+ */
10
+ export function registerDeleteCommand(parentCmd) {
11
+ parentCmd
12
+ .command('delete <hostname>')
13
+ .description('Delete a host configuration')
14
+ .option('-y, --yes', 'Skip confirmation prompt')
15
+ .action(async (hostname, options) => {
16
+ // Confirm deletion
17
+ if (!options.yes) {
18
+ const confirmed = await promptConfirm(`Delete host configuration for '${hostname}'? This cannot be undone.`);
19
+ if (!confirmed) {
20
+ console.log('Cancelled.');
21
+ return;
22
+ }
23
+ }
24
+ const spinner = ora('Deleting host configuration...').start();
25
+ try {
26
+ // First get the host to show what's being deleted
27
+ const host = await mode.apiGet(`/v1/hosts/${encodeURIComponent(hostname)}`);
28
+ // Delete
29
+ await mode.apiDelete(`/v1/hosts/${encodeURIComponent(hostname)}`);
30
+ spinner.succeed(`Host configuration '${hostname}' deleted`);
31
+ // Show info about what was deleted
32
+ const certCount = host.config.targets?.length ?? 0;
33
+ const secretCount = host.config.secretTargets?.length ?? 0;
34
+ const pluginCount = host.config.plugins?.filter((p) => p.enabled !== false).length ?? 0;
35
+ if (certCount > 0 || secretCount > 0 || pluginCount > 0) {
36
+ console.log();
37
+ console.log('The following configuration was removed:');
38
+ if (certCount > 0)
39
+ console.log(` - ${certCount} certificate target(s)`);
40
+ if (secretCount > 0)
41
+ console.log(` - ${secretCount} secret target(s)`);
42
+ if (pluginCount > 0)
43
+ console.log(` - ${pluginCount} plugin(s)`);
44
+ }
45
+ console.log();
46
+ console.log('Note: Connected agents will continue running with their last known config.');
47
+ console.log(' They will fail to pull new config until re-bootstrapped.');
48
+ }
49
+ catch (err) {
50
+ spinner.fail('Failed to delete host configuration');
51
+ output.error(err instanceof Error ? err.message : String(err));
52
+ process.exit(1);
53
+ }
54
+ finally {
55
+ await mode.closeLocalClient();
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/host/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the get command
4
+ */
5
+ export declare function registerGetCommand(parentCmd: Command): void;
6
+ /**
7
+ * Register the outdated-agents command
8
+ */
9
+ export declare function registerOutdatedAgentsCommand(parentCmd: Command): void;
10
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/host/get.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA6B3D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkDtE"}
@@ -0,0 +1,79 @@
1
+ // Path: src/commands/host/get.ts
2
+ // Get host configuration details
3
+ import ora from 'ora';
4
+ import * as mode from '../../lib/mode.js';
5
+ import * as output from '../../lib/output.js';
6
+ import { printHostDetails } from './helpers.js';
7
+ /**
8
+ * Register the get command
9
+ */
10
+ export function registerGetCommand(parentCmd) {
11
+ parentCmd
12
+ .command('get <hostname>')
13
+ .description('Get host configuration details')
14
+ .option('--json', 'Output as JSON')
15
+ .action(async (hostname, options) => {
16
+ const spinner = ora('Fetching host configuration...').start();
17
+ try {
18
+ const response = await mode.apiGet(`/v1/hosts/${encodeURIComponent(hostname)}`);
19
+ spinner.stop();
20
+ if (options.json) {
21
+ output.json(response);
22
+ return;
23
+ }
24
+ printHostDetails(response);
25
+ }
26
+ catch (err) {
27
+ spinner.fail('Failed to get host configuration');
28
+ output.error(err instanceof Error ? err.message : String(err));
29
+ process.exit(1);
30
+ }
31
+ finally {
32
+ await mode.closeLocalClient();
33
+ }
34
+ });
35
+ }
36
+ /**
37
+ * Register the outdated-agents command
38
+ */
39
+ export function registerOutdatedAgentsCommand(parentCmd) {
40
+ parentCmd
41
+ .command('outdated-agents <hostname>')
42
+ .description('List agents with outdated configuration')
43
+ .option('--json', 'Output as JSON')
44
+ .action(async (hostname, options) => {
45
+ const spinner = ora('Checking for outdated agents...').start();
46
+ try {
47
+ const response = await mode.apiGet(`/v1/hosts/${encodeURIComponent(hostname)}/outdated-agents`);
48
+ spinner.stop();
49
+ if (options.json) {
50
+ output.json(response);
51
+ return;
52
+ }
53
+ console.log(`Host: ${response.hostname} (version ${response.currentVersion})`);
54
+ console.log();
55
+ if (response.agents.length === 0) {
56
+ console.log('All linked agents are up to date.');
57
+ return;
58
+ }
59
+ console.log(`Found ${response.agents.length} agent(s) with outdated config:`);
60
+ console.log();
61
+ output.table(['Agent ID', 'Config Version', 'Versions Behind'], response.agents.map((agent) => [
62
+ agent.agentId.substring(0, 12) + '...',
63
+ agent.configVersion?.toString() ?? 'never pulled',
64
+ String(agent.versionsBehind),
65
+ ]));
66
+ console.log();
67
+ console.log(`To push updates: znvault host sync ${hostname}`);
68
+ }
69
+ catch (err) {
70
+ spinner.fail('Failed to check outdated agents');
71
+ output.error(err instanceof Error ? err.message : String(err));
72
+ process.exit(1);
73
+ }
74
+ finally {
75
+ await mode.closeLocalClient();
76
+ }
77
+ });
78
+ }
79
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/host/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { HostConfig, HostStatus } from './types.js';
2
+ /**
3
+ * Format host status with color
4
+ */
5
+ export declare function formatStatus(status: HostStatus): string;
6
+ /**
7
+ * Format relative time (e.g., "5m ago", "2h ago", "3d ago")
8
+ */
9
+ export declare function formatRelativeTime(dateString: string | undefined): string;
10
+ /**
11
+ * Format config summary for display
12
+ */
13
+ export declare function formatConfigSummary(config: HostConfig['config']): string;
14
+ /**
15
+ * Validate hostname format
16
+ */
17
+ export declare function validateHostname(hostname: string): {
18
+ valid: boolean;
19
+ error?: string;
20
+ };
21
+ /**
22
+ * Parse duration string to ISO date (e.g., "1h", "24h", "7d")
23
+ */
24
+ export declare function parseDuration(duration: string): Date;
25
+ /**
26
+ * Pretty print config as YAML-like format
27
+ */
28
+ export declare function formatConfigYaml(config: HostConfig['config'], indent?: number): string;
29
+ /**
30
+ * Print host details in a formatted way
31
+ */
32
+ export declare function printHostDetails(host: HostConfig): void;
33
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/host/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAczD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAWvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAiBzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAaxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgBrF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAyBpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,SAAI,GAAG,MAAM,CA2DjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAwBvD"}