@zincapp/znvault-cli 2.26.5 → 2.29.1

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 (53) hide show
  1. package/dist/commands/group.d.ts +3 -0
  2. package/dist/commands/group.d.ts.map +1 -0
  3. package/dist/commands/group.js +319 -0
  4. package/dist/commands/group.js.map +1 -0
  5. package/dist/commands/host/bootstrap-token.d.ts.map +1 -1
  6. package/dist/commands/host/bootstrap-token.js +28 -10
  7. package/dist/commands/host/bootstrap-token.js.map +1 -1
  8. package/dist/commands/ssh-ca/ca.d.ts +14 -0
  9. package/dist/commands/ssh-ca/ca.d.ts.map +1 -0
  10. package/dist/commands/ssh-ca/ca.js +169 -0
  11. package/dist/commands/ssh-ca/ca.js.map +1 -0
  12. package/dist/commands/ssh-ca/certificates.d.ts +7 -0
  13. package/dist/commands/ssh-ca/certificates.d.ts.map +1 -0
  14. package/dist/commands/ssh-ca/certificates.js +131 -0
  15. package/dist/commands/ssh-ca/certificates.js.map +1 -0
  16. package/dist/commands/ssh-ca/helpers.d.ts +37 -0
  17. package/dist/commands/ssh-ca/helpers.d.ts.map +1 -0
  18. package/dist/commands/ssh-ca/helpers.js +104 -0
  19. package/dist/commands/ssh-ca/helpers.js.map +1 -0
  20. package/dist/commands/ssh-ca/index.d.ts +7 -0
  21. package/dist/commands/ssh-ca/index.d.ts.map +1 -0
  22. package/dist/commands/ssh-ca/index.js +180 -0
  23. package/dist/commands/ssh-ca/index.js.map +1 -0
  24. package/dist/commands/ssh-ca/mappings.d.ts +11 -0
  25. package/dist/commands/ssh-ca/mappings.d.ts.map +1 -0
  26. package/dist/commands/ssh-ca/mappings.js +178 -0
  27. package/dist/commands/ssh-ca/mappings.js.map +1 -0
  28. package/dist/commands/ssh-ca/server-groups.d.ts +21 -0
  29. package/dist/commands/ssh-ca/server-groups.d.ts.map +1 -0
  30. package/dist/commands/ssh-ca/server-groups.js +252 -0
  31. package/dist/commands/ssh-ca/server-groups.js.map +1 -0
  32. package/dist/commands/ssh-ca/sign.d.ts +3 -0
  33. package/dist/commands/ssh-ca/sign.d.ts.map +1 -0
  34. package/dist/commands/ssh-ca/sign.js +79 -0
  35. package/dist/commands/ssh-ca/sign.js.map +1 -0
  36. package/dist/commands/ssh-ca/types.d.ts +135 -0
  37. package/dist/commands/ssh-ca/types.d.ts.map +1 -0
  38. package/dist/commands/ssh-ca/types.js +3 -0
  39. package/dist/commands/ssh-ca/types.js.map +1 -0
  40. package/dist/commands/ssh-ca.d.ts +7 -0
  41. package/dist/commands/ssh-ca.d.ts.map +1 -0
  42. package/dist/commands/ssh-ca.js +7 -0
  43. package/dist/commands/ssh-ca.js.map +1 -0
  44. package/dist/commands/ssh.d.ts +3 -0
  45. package/dist/commands/ssh.d.ts.map +1 -0
  46. package/dist/commands/ssh.js +814 -0
  47. package/dist/commands/ssh.js.map +1 -0
  48. package/dist/index.js +6 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/lib/client/tenants.d.ts.map +1 -1
  51. package/dist/lib/client/tenants.js +3 -6
  52. package/dist/lib/client/tenants.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerGroupCommands(program: Command): void;
3
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/commands/group.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAyEzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8W5D"}
@@ -0,0 +1,319 @@
1
+ // Path: znvault-cli/src/commands/group.ts
2
+ import ora from 'ora';
3
+ import { client } from '../lib/client.js';
4
+ import { promptConfirm } from '../lib/prompts.js';
5
+ import * as output from '../lib/output.js';
6
+ // ============================================================================
7
+ // Commands
8
+ // ============================================================================
9
+ export function registerGroupCommands(program) {
10
+ const group = program
11
+ .command('group')
12
+ .description('SSO group management');
13
+ // ---------------------------------------------------------------------------
14
+ // List Groups
15
+ // ---------------------------------------------------------------------------
16
+ group
17
+ .command('list')
18
+ .description('List SSO groups')
19
+ .option('--tenant <id>', 'Filter by tenant (superadmin only)')
20
+ .option('--json', 'Output as JSON')
21
+ .action(async (options) => {
22
+ const spinner = ora('Fetching groups...').start();
23
+ try {
24
+ const params = new URLSearchParams();
25
+ if (options.tenant) {
26
+ params.set('tenantId', options.tenant);
27
+ }
28
+ const queryString = params.toString() ? `?${params.toString()}` : '';
29
+ const data = await client.get(`/v1/sso/groups${queryString}`);
30
+ spinner.stop();
31
+ if (options.json) {
32
+ output.json(data);
33
+ return;
34
+ }
35
+ if (data.items.length === 0) {
36
+ output.info('No groups found');
37
+ return;
38
+ }
39
+ output.table(['Name', 'Display Name', 'Members', 'Created'], data.items.map((g) => [
40
+ g.name,
41
+ g.displayName ?? '-',
42
+ g.memberCount ?? 0,
43
+ new Date(g.createdAt).toLocaleDateString(),
44
+ ]));
45
+ output.info(`Total: ${data.pagination.total} group(s)`);
46
+ }
47
+ catch (err) {
48
+ spinner.fail('Error fetching groups');
49
+ output.error(err instanceof Error ? err.message : 'Unknown error');
50
+ process.exit(1);
51
+ }
52
+ });
53
+ // ---------------------------------------------------------------------------
54
+ // Create Group
55
+ // ---------------------------------------------------------------------------
56
+ group
57
+ .command('create <name>')
58
+ .description('Create a new SSO group')
59
+ .option('--display-name <name>', 'Human-readable display name')
60
+ .option('--description <text>', 'Group description')
61
+ .option('--json', 'Output as JSON')
62
+ .action(async (name, options) => {
63
+ const spinner = ora('Creating group...').start();
64
+ try {
65
+ const body = {
66
+ name,
67
+ };
68
+ if (options.displayName) {
69
+ body.display_name = options.displayName;
70
+ }
71
+ if (options.description) {
72
+ body.description = options.description;
73
+ }
74
+ const data = await client.post('/v1/sso/groups', body);
75
+ spinner.succeed('Group created successfully');
76
+ if (options.json) {
77
+ output.json(data);
78
+ return;
79
+ }
80
+ output.keyValue({
81
+ 'ID': data.id,
82
+ 'Name': data.name,
83
+ 'Display Name': data.displayName ?? '-',
84
+ 'Description': data.description ?? '-',
85
+ });
86
+ }
87
+ catch (err) {
88
+ spinner.fail('Error creating group');
89
+ output.error(err instanceof Error ? err.message : 'Unknown error');
90
+ process.exit(1);
91
+ }
92
+ });
93
+ // ---------------------------------------------------------------------------
94
+ // Get Group
95
+ // ---------------------------------------------------------------------------
96
+ group
97
+ .command('get <id>')
98
+ .description('Get group details')
99
+ .option('--json', 'Output as JSON')
100
+ .action(async (id, options) => {
101
+ const spinner = ora('Fetching group...').start();
102
+ try {
103
+ const data = await client.get(`/v1/sso/groups/${id}`);
104
+ spinner.stop();
105
+ if (options.json) {
106
+ output.json(data);
107
+ return;
108
+ }
109
+ output.keyValue({
110
+ 'ID': data.id,
111
+ 'Tenant': data.tenantId,
112
+ 'Name': data.name,
113
+ 'Display Name': data.displayName ?? '-',
114
+ 'Description': data.description ?? '-',
115
+ 'Members': data.memberCount ?? 'N/A',
116
+ 'Created By': data.createdByUsername ?? data.createdBy ?? '-',
117
+ 'Created At': new Date(data.createdAt).toLocaleString(),
118
+ 'Updated At': new Date(data.updatedAt).toLocaleString(),
119
+ });
120
+ }
121
+ catch (err) {
122
+ spinner.fail('Error fetching group');
123
+ output.error(err instanceof Error ? err.message : 'Unknown error');
124
+ process.exit(1);
125
+ }
126
+ });
127
+ // ---------------------------------------------------------------------------
128
+ // Update Group
129
+ // ---------------------------------------------------------------------------
130
+ group
131
+ .command('update <id>')
132
+ .description('Update group')
133
+ .option('--name <name>', 'New group name')
134
+ .option('--display-name <name>', 'New display name')
135
+ .option('--description <text>', 'New description')
136
+ .option('--json', 'Output as JSON')
137
+ .action(async (id, options) => {
138
+ const spinner = ora('Updating group...').start();
139
+ try {
140
+ const body = {};
141
+ if (options.name) {
142
+ body.name = options.name;
143
+ }
144
+ if (options.displayName !== undefined) {
145
+ body.display_name = options.displayName || null;
146
+ }
147
+ if (options.description !== undefined) {
148
+ body.description = options.description || null;
149
+ }
150
+ if (Object.keys(body).length === 0) {
151
+ spinner.fail('No updates specified');
152
+ output.error('Use --name, --display-name, or --description to specify updates');
153
+ process.exit(1);
154
+ }
155
+ const data = await client.patch(`/v1/sso/groups/${id}`, body);
156
+ spinner.succeed('Group updated successfully');
157
+ if (options.json) {
158
+ output.json(data);
159
+ return;
160
+ }
161
+ output.keyValue({
162
+ 'ID': data.id,
163
+ 'Name': data.name,
164
+ 'Display Name': data.displayName ?? '-',
165
+ 'Description': data.description ?? '-',
166
+ });
167
+ }
168
+ catch (err) {
169
+ spinner.fail('Error updating group');
170
+ output.error(err instanceof Error ? err.message : 'Unknown error');
171
+ process.exit(1);
172
+ }
173
+ });
174
+ // ---------------------------------------------------------------------------
175
+ // Delete Group
176
+ // ---------------------------------------------------------------------------
177
+ group
178
+ .command('delete <id>')
179
+ .description('Delete group')
180
+ .option('-y, --yes', 'Skip confirmation')
181
+ .action(async (id, options) => {
182
+ try {
183
+ // Get group info for confirmation
184
+ const groupData = await client.get(`/v1/sso/groups/${id}`);
185
+ if (!options.yes) {
186
+ const confirmed = await promptConfirm(`Delete group "${groupData.name}"? This will remove all members.`);
187
+ if (!confirmed) {
188
+ output.info('Cancelled');
189
+ return;
190
+ }
191
+ }
192
+ const spinner = ora('Deleting group...').start();
193
+ await client.delete(`/v1/sso/groups/${id}`);
194
+ spinner.succeed(`Group "${groupData.name}" deleted`);
195
+ }
196
+ catch (err) {
197
+ output.error(err instanceof Error ? err.message : 'Unknown error');
198
+ process.exit(1);
199
+ }
200
+ });
201
+ // ---------------------------------------------------------------------------
202
+ // Members Subcommand
203
+ // ---------------------------------------------------------------------------
204
+ const members = group
205
+ .command('members')
206
+ .description('Manage group members');
207
+ // List members
208
+ members
209
+ .command('list <groupId>')
210
+ .description('List group members')
211
+ .option('--json', 'Output as JSON')
212
+ .action(async (groupId, options) => {
213
+ const spinner = ora('Fetching members...').start();
214
+ try {
215
+ const data = await client.get(`/v1/sso/groups/${groupId}/members`);
216
+ spinner.stop();
217
+ if (options.json) {
218
+ output.json(data);
219
+ return;
220
+ }
221
+ if (data.items.length === 0) {
222
+ output.info('No members found');
223
+ return;
224
+ }
225
+ output.table(['User ID', 'Username', 'Email', 'Added At'], data.items.map((m) => [
226
+ m.userId,
227
+ m.username,
228
+ m.email ?? '-',
229
+ new Date(m.addedAt).toLocaleDateString(),
230
+ ]));
231
+ output.info(`Total: ${data.pagination.total} member(s)`);
232
+ }
233
+ catch (err) {
234
+ spinner.fail('Error fetching members');
235
+ output.error(err instanceof Error ? err.message : 'Unknown error');
236
+ process.exit(1);
237
+ }
238
+ });
239
+ // Add member
240
+ members
241
+ .command('add <groupId> <userId>')
242
+ .description('Add user to group')
243
+ .action(async (groupId, userId) => {
244
+ const spinner = ora('Adding member...').start();
245
+ try {
246
+ const data = await client.post(`/v1/sso/groups/${groupId}/members`, {
247
+ user_id: userId,
248
+ });
249
+ spinner.succeed('Member added successfully');
250
+ output.keyValue({
251
+ 'User ID': data.userId,
252
+ 'Username': data.username,
253
+ 'Added At': new Date(data.addedAt).toLocaleString(),
254
+ });
255
+ }
256
+ catch (err) {
257
+ spinner.fail('Error adding member');
258
+ output.error(err instanceof Error ? err.message : 'Unknown error');
259
+ process.exit(1);
260
+ }
261
+ });
262
+ // Remove member
263
+ members
264
+ .command('remove <groupId> <userId>')
265
+ .description('Remove user from group')
266
+ .option('-y, --yes', 'Skip confirmation')
267
+ .action(async (groupId, userId, options) => {
268
+ try {
269
+ if (!options.yes) {
270
+ const confirmed = await promptConfirm(`Remove user ${userId} from group?`);
271
+ if (!confirmed) {
272
+ output.info('Cancelled');
273
+ return;
274
+ }
275
+ }
276
+ const spinner = ora('Removing member...').start();
277
+ await client.delete(`/v1/sso/groups/${groupId}/members/${userId}`);
278
+ spinner.succeed('Member removed successfully');
279
+ }
280
+ catch (err) {
281
+ output.error(err instanceof Error ? err.message : 'Unknown error');
282
+ process.exit(1);
283
+ }
284
+ });
285
+ // ---------------------------------------------------------------------------
286
+ // My Groups
287
+ // ---------------------------------------------------------------------------
288
+ group
289
+ .command('my-groups')
290
+ .description('List groups you belong to')
291
+ .option('--json', 'Output as JSON')
292
+ .action(async (options) => {
293
+ const spinner = ora('Fetching your groups...').start();
294
+ try {
295
+ const data = await client.get('/v1/sso/my-groups');
296
+ spinner.stop();
297
+ if (options.json) {
298
+ output.json(data);
299
+ return;
300
+ }
301
+ if (data.groups.length === 0) {
302
+ output.info('You are not a member of any groups');
303
+ return;
304
+ }
305
+ output.table(['ID', 'Name', 'Display Name'], data.groups.map((g) => [
306
+ g.id,
307
+ g.name,
308
+ g.displayName ?? '-',
309
+ ]));
310
+ output.info(`Total: ${data.groups.length} group(s)`);
311
+ }
312
+ catch (err) {
313
+ spinner.fail('Error fetching groups');
314
+ output.error(err instanceof Error ? err.message : 'Unknown error');
315
+ process.exit(1);
316
+ }
317
+ });
318
+ }
319
+ //# sourceMappingURL=group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/commands/group.ts"],"names":[],"mappings":"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"}
@@ -1 +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,CA8EtE"}
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,CAiGtE"}
@@ -13,6 +13,7 @@ export function registerBootstrapTokenCommand(parentCmd) {
13
13
  .alias('token')
14
14
  .description('Generate a bootstrap token for a host')
15
15
  .option('-e, --expires <duration>', 'Token expiration (e.g., 1h, 24h, 7d)', '24h')
16
+ .option('-a, --agent-hostname <hostname>', 'Agent hostname (for multi-host templates, defaults to host config name)')
16
17
  .option('--json', 'Output as JSON')
17
18
  .action(async (hostname, options) => {
18
19
  // Parse expiration
@@ -27,35 +28,52 @@ export function registerBootstrapTokenCommand(parentCmd) {
27
28
  }
28
29
  const spinner = ora('Generating bootstrap token...').start();
29
30
  try {
30
- const response = await mode.apiPost(`/v1/hosts/${encodeURIComponent(hostname)}/bootstrap-token`, { expiresAt });
31
+ // Build request body
32
+ const body = { expiresAt };
33
+ if (options.agentHostname) {
34
+ body.agentHostname = options.agentHostname;
35
+ }
36
+ const response = await mode.apiPost(`/v1/hosts/${encodeURIComponent(hostname)}/bootstrap-token`, body);
31
37
  spinner.succeed('Bootstrap token generated');
32
38
  if (options.json) {
33
39
  output.json(response);
34
40
  return;
35
41
  }
36
- // Build the one-command URL
37
- const oneCommandUrl = `${response.bootstrapUrl}?token=${response.token}`;
42
+ // Use bootstrapUrl directly (now includes token and hostname)
43
+ const bootstrapUrl = response.bootstrapUrl;
44
+ const agentHostname = response.agentHostname;
45
+ const isMultiHost = agentHostname !== hostname;
38
46
  console.log();
39
- output.section('Bootstrap Token for ' + hostname);
47
+ if (isMultiHost) {
48
+ output.section(`Bootstrap Token for ${agentHostname} (template: ${hostname})`);
49
+ }
50
+ else {
51
+ output.section('Bootstrap Token for ' + hostname);
52
+ }
40
53
  console.log();
41
- output.keyValue({
54
+ const tokenInfo = {
42
55
  'Token': response.token,
43
56
  'Expires': new Date(response.expiresAt).toLocaleString(),
44
- });
57
+ };
58
+ if (isMultiHost) {
59
+ tokenInfo['Host Config'] = hostname;
60
+ tokenInfo['Agent Hostname'] = agentHostname;
61
+ }
62
+ output.keyValue(tokenInfo);
45
63
  console.log();
46
64
  output.section('Quick Start (One Command)');
47
65
  console.log();
48
66
  console.log(' Run this on the target server to install and configure the agent:');
49
67
  console.log();
50
- console.log(` curl -sL "${oneCommandUrl}" | sudo bash`);
68
+ console.log(` curl -sL "${bootstrapUrl}" | sudo bash`);
51
69
  console.log();
52
70
  output.section('Review First (Recommended)');
53
71
  console.log();
54
72
  console.log(' Download the script, review it, then run:');
55
73
  console.log();
56
- console.log(` curl -sL "${oneCommandUrl}" -o bootstrap-${hostname}.sh`);
57
- console.log(` less bootstrap-${hostname}.sh`);
58
- console.log(` sudo bash bootstrap-${hostname}.sh`);
74
+ console.log(` curl -sL "${bootstrapUrl}" -o bootstrap-${agentHostname}.sh`);
75
+ console.log(` less bootstrap-${agentHostname}.sh`);
76
+ console.log(` sudo bash bootstrap-${agentHostname}.sh`);
59
77
  console.log();
60
78
  output.section('Alternative: Manual Installation');
61
79
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap-token.js","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap-token.js","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { InitCAOptions } from './types.js';
2
+ export declare function getStatus(options: {
3
+ json?: boolean;
4
+ }): Promise<void>;
5
+ export declare function initCA(options: InitCAOptions): Promise<void>;
6
+ export declare function deleteCA(options: {
7
+ force?: boolean;
8
+ json?: boolean;
9
+ }): Promise<void>;
10
+ export declare function getPublicKey(options: {
11
+ raw?: boolean;
12
+ json?: boolean;
13
+ }): Promise<void>;
14
+ //# sourceMappingURL=ca.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ca.d.ts","sourceRoot":"","sources":["../../../src/commands/ssh-ca/ca.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAGpE,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1E;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuElE;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B1F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC5F"}
@@ -0,0 +1,169 @@
1
+ // Path: src/commands/ssh-ca/ca.ts
2
+ /**
3
+ * SSH CA management commands
4
+ */
5
+ import ora from 'ora';
6
+ import inquirer from 'inquirer';
7
+ import { client } from '../../lib/client.js';
8
+ import * as output from '../../lib/output.js';
9
+ import { formatTtl, formatKeyType, parseExtensions } from './helpers.js';
10
+ export async function getStatus(options) {
11
+ const spinner = ora('Fetching CA status...').start();
12
+ try {
13
+ const response = await client.get('/v1/ssh/ca');
14
+ spinner.stop();
15
+ if (options.json) {
16
+ output.json(response);
17
+ return;
18
+ }
19
+ if (!response.initialized) {
20
+ output.warn('SSH CA is not initialized.');
21
+ output.info('Run: znvault ssh-ca init');
22
+ return;
23
+ }
24
+ output.keyValue({
25
+ 'Status': 'Initialized',
26
+ 'Key Type': formatKeyType(response.keyType),
27
+ 'Fingerprint': response.fingerprint ?? '-',
28
+ 'Default TTL': formatTtl(response.defaultTtlSeconds),
29
+ 'Max TTL': formatTtl(response.maxTtlSeconds),
30
+ 'Extensions': response.allowedExtensions?.join(', ') ?? '-',
31
+ 'Total Certificates': String(response.totalCertificatesIssued ?? 0),
32
+ 'Active Certificates': String(response.activeCertificates ?? 0),
33
+ });
34
+ }
35
+ catch (err) {
36
+ spinner.fail('Failed to get CA status');
37
+ output.error(err instanceof Error ? err.message : String(err));
38
+ process.exit(1);
39
+ }
40
+ }
41
+ export async function initCA(options) {
42
+ // Interactive prompts if options not provided
43
+ const keyType = options.keyType ?? (await inquirer.prompt([{
44
+ type: 'list',
45
+ name: 'keyType',
46
+ message: 'Key type:',
47
+ choices: [
48
+ { name: 'Ed25519 (recommended)', value: 'ed25519' },
49
+ { name: 'RSA-4096', value: 'rsa-4096' },
50
+ ],
51
+ default: 'ed25519',
52
+ }])).keyType;
53
+ const defaultTtl = options.defaultTtl ? parseInt(options.defaultTtl, 10) : (await inquirer.prompt([{
54
+ type: 'number',
55
+ name: 'ttl',
56
+ message: 'Default TTL (seconds):',
57
+ default: 28800, // 8 hours
58
+ }])).ttl;
59
+ const maxTtl = options.maxTtl ? parseInt(options.maxTtl, 10) : (await inquirer.prompt([{
60
+ type: 'number',
61
+ name: 'ttl',
62
+ message: 'Maximum TTL (seconds):',
63
+ default: 86400, // 24 hours
64
+ }])).ttl;
65
+ const extensionsInput = options.extensions ?? (await inquirer.prompt([{
66
+ type: 'input',
67
+ name: 'ext',
68
+ message: 'Allowed extensions (comma-separated):',
69
+ default: 'permit-pty,permit-port-forwarding',
70
+ }])).ext;
71
+ const extensions = parseExtensions(extensionsInput);
72
+ const spinner = ora('Initializing SSH CA...').start();
73
+ try {
74
+ const response = await client.post('/v1/ssh/ca', {
75
+ keyType,
76
+ defaultTtlSeconds: defaultTtl,
77
+ maxTtlSeconds: maxTtl,
78
+ allowedExtensions: extensions,
79
+ });
80
+ spinner.succeed('SSH CA initialized successfully');
81
+ if (options.json) {
82
+ output.json(response);
83
+ return;
84
+ }
85
+ output.keyValue({
86
+ 'ID': response.id,
87
+ 'Key Type': formatKeyType(response.keyType),
88
+ 'Fingerprint': response.fingerprint,
89
+ 'Default TTL': formatTtl(response.defaultTtlSeconds),
90
+ 'Max TTL': formatTtl(response.maxTtlSeconds),
91
+ 'Extensions': response.allowedExtensions.join(', '),
92
+ });
93
+ console.log();
94
+ output.info('Next steps:');
95
+ output.info(' 1. Create principal mappings: znvault ssh-ca mapping create');
96
+ output.info(' 2. Create server groups: znvault ssh-ca server-group create');
97
+ output.info(' 3. Configure servers with CA public key: znvault ssh-ca public-key --raw');
98
+ }
99
+ catch (err) {
100
+ spinner.fail('Failed to initialize CA');
101
+ output.error(err instanceof Error ? err.message : String(err));
102
+ process.exit(1);
103
+ }
104
+ }
105
+ export async function deleteCA(options) {
106
+ if (!options.force) {
107
+ const { confirm } = await inquirer.prompt([{
108
+ type: 'confirm',
109
+ name: 'confirm',
110
+ message: 'Are you sure you want to delete the SSH CA? This will invalidate all issued certificates.',
111
+ default: false,
112
+ }]);
113
+ if (!confirm) {
114
+ output.info('Operation cancelled.');
115
+ return;
116
+ }
117
+ }
118
+ const spinner = ora('Deleting SSH CA...').start();
119
+ try {
120
+ await client.delete('/v1/ssh/ca');
121
+ spinner.succeed('SSH CA deleted successfully');
122
+ if (options.json) {
123
+ output.json({ success: true });
124
+ }
125
+ }
126
+ catch (err) {
127
+ spinner.fail('Failed to delete CA');
128
+ output.error(err instanceof Error ? err.message : String(err));
129
+ process.exit(1);
130
+ }
131
+ }
132
+ export async function getPublicKey(options) {
133
+ const spinner = ora('Fetching CA public key...').start();
134
+ try {
135
+ const response = await client.get('/v1/ssh/ca');
136
+ spinner.stop();
137
+ if (!response.initialized || !response.publicKey) {
138
+ output.error('SSH CA is not initialized.');
139
+ process.exit(1);
140
+ }
141
+ if (options.raw) {
142
+ console.log(response.publicKey);
143
+ return;
144
+ }
145
+ if (options.json) {
146
+ output.json({
147
+ publicKey: response.publicKey,
148
+ fingerprint: response.fingerprint,
149
+ keyType: response.keyType,
150
+ });
151
+ return;
152
+ }
153
+ output.keyValue({
154
+ 'Fingerprint': response.fingerprint ?? '-',
155
+ 'Key Type': formatKeyType(response.keyType),
156
+ });
157
+ console.log();
158
+ console.log('Public Key:');
159
+ console.log(response.publicKey);
160
+ console.log();
161
+ output.info('Add this to your servers\' /etc/ssh/trusted-user-ca-keys.pub');
162
+ }
163
+ catch (err) {
164
+ spinner.fail('Failed to get CA public key');
165
+ output.error(err instanceof Error ? err.message : String(err));
166
+ process.exit(1);
167
+ }
168
+ }
169
+ //# sourceMappingURL=ca.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ca.js","sourceRoot":"","sources":["../../../src/commands/ssh-ca/ca.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC;;GAEG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA2B;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAc,YAAY,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC;YACd,QAAQ,EAAE,aAAa;YACvB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3C,aAAa,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG;YAC1C,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpD,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,YAAY,EAAE,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;YAC3D,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,uBAAuB,IAAI,CAAC,CAAC;YACnE,qBAAqB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,8CAA8C;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAsB,CAAC;YAC9E,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE;gBACnD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;aACxC;YACD,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAEb,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAkB,CAAC;YAClH,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,KAAK,EAAE,UAAU;SAC3B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAET,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAkB,CAAC;YACtG,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,KAAK,EAAE,WAAW;SAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAET,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAkB,CAAC;YACrF,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,mCAAmC;SAC7C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAET,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAQ,YAAY,EAAE;YACtD,OAAO;YACP,iBAAiB,EAAE,UAAU;YAC7B,aAAa,EAAE,MAAM;YACrB,iBAAiB,EAAE,UAAU;SAC9B,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,EAAE;YACjB,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3C,aAAa,EAAE,QAAQ,CAAC,WAAW;YACnC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpD,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA4C;IACzE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB,CAAC;gBAC/D,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,2FAA2F;gBACpG,OAAO,EAAE,KAAK;aACf,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA0C;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAc,YAAY,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC;YACd,aAAa,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG;YAC1C,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CertListOptions, RevokeOptions } from './types.js';
2
+ export declare function listCertificates(options: CertListOptions): Promise<void>;
3
+ export declare function getCertificate(certId: string, options: {
4
+ json?: boolean;
5
+ }): Promise<void>;
6
+ export declare function revokeCertificate(certId: string, options: RevokeOptions): Promise<void>;
7
+ //# sourceMappingURL=certificates.d.ts.map