@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 @@
1
+ {"version":3,"file":"certificates.d.ts","sourceRoot":"","sources":["../../../src/commands/ssh-ca/certificates.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD9E;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC/F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7F"}
@@ -0,0 +1,131 @@
1
+ // Path: src/commands/ssh-ca/certificates.ts
2
+ /**
3
+ * Certificate management commands for SSH CA
4
+ */
5
+ import ora from 'ora';
6
+ import Table from 'cli-table3';
7
+ import inquirer from 'inquirer';
8
+ import { client } from '../../lib/client.js';
9
+ import * as output from '../../lib/output.js';
10
+ import { formatDate, formatValidity, formatPrincipals } from './helpers.js';
11
+ export async function listCertificates(options) {
12
+ const spinner = ora('Fetching certificates...').start();
13
+ try {
14
+ const params = new URLSearchParams();
15
+ if (options.activeOnly)
16
+ params.set('activeOnly', 'true');
17
+ if (options.revoked)
18
+ params.set('revoked', 'true');
19
+ if (options.userId)
20
+ params.set('userId', options.userId);
21
+ if (options.limit)
22
+ params.set('limit', options.limit);
23
+ const query = params.toString();
24
+ const response = await client.get(`/v1/ssh/certificates${query ? `?${query}` : ''}`);
25
+ spinner.stop();
26
+ if (options.json) {
27
+ output.json(response);
28
+ return;
29
+ }
30
+ if (response.items.length === 0) {
31
+ output.info('No certificates found.');
32
+ return;
33
+ }
34
+ const table = new Table({
35
+ head: ['Serial', 'User', 'Principals', 'Valid Until', 'Status'],
36
+ style: { head: ['cyan'] },
37
+ });
38
+ for (const cert of response.items) {
39
+ table.push([
40
+ cert.serial,
41
+ cert.username ?? cert.userId.substring(0, 8),
42
+ formatPrincipals(cert.principals),
43
+ formatDate(cert.validBefore),
44
+ formatValidity(cert.validBefore, cert.revoked),
45
+ ]);
46
+ }
47
+ console.log(table.toString());
48
+ output.info(`${response.items.length} certificate(s) found (total: ${response.pagination.total})`);
49
+ }
50
+ catch (err) {
51
+ spinner.fail('Failed to list certificates');
52
+ output.error(err instanceof Error ? err.message : String(err));
53
+ process.exit(1);
54
+ }
55
+ }
56
+ export async function getCertificate(certId, options) {
57
+ const spinner = ora('Fetching certificate...').start();
58
+ try {
59
+ const cert = await client.get(`/v1/ssh/certificates/${certId}`);
60
+ spinner.stop();
61
+ if (options.json) {
62
+ output.json(cert);
63
+ return;
64
+ }
65
+ output.keyValue({
66
+ 'ID': cert.id,
67
+ 'Serial': cert.serial,
68
+ 'User': cert.username ?? cert.userId,
69
+ 'Fingerprint': cert.fingerprint,
70
+ 'Principals': cert.principals.join(', '),
71
+ 'Extensions': cert.extensions?.join(', ') ?? '-',
72
+ 'Valid From': formatDate(cert.validAfter),
73
+ 'Valid Until': formatDate(cert.validBefore),
74
+ 'Status': formatValidity(cert.validBefore, cert.revoked),
75
+ 'Request IP': cert.requestIp ?? '-',
76
+ 'Created': formatDate(cert.createdAt),
77
+ });
78
+ if (cert.revoked) {
79
+ console.log();
80
+ output.warn('Certificate is revoked:');
81
+ output.keyValue({
82
+ 'Revoked At': formatDate(cert.revokedAt),
83
+ 'Revoked By': cert.revokedBy ?? '-',
84
+ 'Reason': cert.revocationReason ?? '-',
85
+ });
86
+ }
87
+ }
88
+ catch (err) {
89
+ spinner.fail('Failed to get certificate');
90
+ output.error(err instanceof Error ? err.message : String(err));
91
+ process.exit(1);
92
+ }
93
+ }
94
+ export async function revokeCertificate(certId, options) {
95
+ if (!options.force) {
96
+ const { confirm } = await inquirer.prompt([{
97
+ type: 'confirm',
98
+ name: 'confirm',
99
+ message: `Revoke certificate ${certId}?`,
100
+ default: false,
101
+ }]);
102
+ if (!confirm) {
103
+ output.info('Operation cancelled.');
104
+ return;
105
+ }
106
+ }
107
+ const reason = options.reason ?? (await inquirer.prompt([{
108
+ type: 'input',
109
+ name: 'reason',
110
+ message: 'Revocation reason (optional):',
111
+ default: 'Manually revoked via CLI',
112
+ }])).reason;
113
+ const spinner = ora('Revoking certificate...').start();
114
+ try {
115
+ await client.post(`/v1/ssh/certificates/${certId}/revoke`, { reason });
116
+ spinner.succeed('Certificate revoked');
117
+ if (options.json) {
118
+ output.json({ success: true, certId, reason });
119
+ }
120
+ else {
121
+ output.info('Certificate has been added to the Key Revocation List.');
122
+ output.info('Servers should refresh their KRL: znvault ssh-ca krl');
123
+ }
124
+ }
125
+ catch (err) {
126
+ spinner.fail('Failed to revoke certificate');
127
+ output.error(err instanceof Error ? err.message : String(err));
128
+ process.exit(1);
129
+ }
130
+ }
131
+ //# sourceMappingURL=certificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificates.js","sourceRoot":"","sources":["../../../src/commands/ssh-ca/certificates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Format TTL in human-readable form
3
+ */
4
+ export declare function formatTtl(seconds: number | undefined | null): string;
5
+ /**
6
+ * Format date in a readable format
7
+ */
8
+ export declare function formatDate(date: string | null | undefined): string;
9
+ /**
10
+ * Format certificate validity status
11
+ */
12
+ export declare function formatValidity(validBefore: string, revoked: boolean): string;
13
+ /**
14
+ * Format key type for display
15
+ */
16
+ export declare function formatKeyType(keyType: string | undefined): string;
17
+ /**
18
+ * Format principals array
19
+ */
20
+ export declare function formatPrincipals(principals: string[]): string;
21
+ /**
22
+ * Parse principals from comma-separated string
23
+ */
24
+ export declare function parsePrincipals(input: string): string[];
25
+ /**
26
+ * Parse extensions from comma-separated string
27
+ */
28
+ export declare function parseExtensions(input: string): string[];
29
+ /**
30
+ * Validate principal name
31
+ */
32
+ export declare function isValidPrincipal(name: string): boolean;
33
+ /**
34
+ * Read public key from file or stdin
35
+ */
36
+ export declare function readPublicKey(file?: string): Promise<string>;
37
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/ssh-ca/helpers.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAOpE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAkB5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlE"}
@@ -0,0 +1,104 @@
1
+ // Path: src/commands/ssh-ca/helpers.ts
2
+ /**
3
+ * Helper functions for SSH CA commands
4
+ */
5
+ import chalk from 'chalk';
6
+ /**
7
+ * Format TTL in human-readable form
8
+ */
9
+ export function formatTtl(seconds) {
10
+ if (seconds === undefined || seconds === null)
11
+ return '-';
12
+ if (seconds < 60)
13
+ return `${seconds}s`;
14
+ if (seconds < 3600)
15
+ return `${Math.floor(seconds / 60)}m`;
16
+ if (seconds < 86400)
17
+ return `${Math.floor(seconds / 3600)}h`;
18
+ return `${Math.floor(seconds / 86400)}d`;
19
+ }
20
+ /**
21
+ * Format date in a readable format
22
+ */
23
+ export function formatDate(date) {
24
+ if (!date)
25
+ return '-';
26
+ const d = new Date(date);
27
+ return d.toLocaleString();
28
+ }
29
+ /**
30
+ * Format certificate validity status
31
+ */
32
+ export function formatValidity(validBefore, revoked) {
33
+ if (revoked) {
34
+ return chalk.red('REVOKED');
35
+ }
36
+ const expiry = new Date(validBefore);
37
+ const now = new Date();
38
+ if (expiry < now) {
39
+ return chalk.gray('EXPIRED');
40
+ }
41
+ const hoursLeft = Math.floor((expiry.getTime() - now.getTime()) / (1000 * 60 * 60));
42
+ if (hoursLeft < 1) {
43
+ return chalk.yellow('EXPIRING');
44
+ }
45
+ return chalk.green('VALID');
46
+ }
47
+ /**
48
+ * Format key type for display
49
+ */
50
+ export function formatKeyType(keyType) {
51
+ if (!keyType)
52
+ return '-';
53
+ return keyType === 'ed25519' ? 'Ed25519' : 'RSA-4096';
54
+ }
55
+ /**
56
+ * Format principals array
57
+ */
58
+ export function formatPrincipals(principals) {
59
+ if (!principals || principals.length === 0)
60
+ return '-';
61
+ if (principals.length <= 3)
62
+ return principals.join(', ');
63
+ return `${principals.slice(0, 3).join(', ')} (+${principals.length - 3})`;
64
+ }
65
+ /**
66
+ * Parse principals from comma-separated string
67
+ */
68
+ export function parsePrincipals(input) {
69
+ return input.split(',').map(p => p.trim()).filter(p => p.length > 0);
70
+ }
71
+ /**
72
+ * Parse extensions from comma-separated string
73
+ */
74
+ export function parseExtensions(input) {
75
+ return input.split(',').map(e => e.trim()).filter(e => e.length > 0);
76
+ }
77
+ /**
78
+ * Validate principal name
79
+ */
80
+ export function isValidPrincipal(name) {
81
+ return /^[a-zA-Z0-9_-]+$/.test(name);
82
+ }
83
+ /**
84
+ * Read public key from file or stdin
85
+ */
86
+ export async function readPublicKey(file) {
87
+ const fs = await import('fs/promises');
88
+ if (file) {
89
+ const content = await fs.readFile(file, 'utf8');
90
+ return content.trim();
91
+ }
92
+ // Read from stdin if piped
93
+ if (!process.stdin.isTTY) {
94
+ return new Promise((resolve, reject) => {
95
+ let data = '';
96
+ process.stdin.setEncoding('utf8');
97
+ process.stdin.on('data', chunk => { data += chunk; });
98
+ process.stdin.on('end', () => resolve(data.trim()));
99
+ process.stdin.on('error', reject);
100
+ });
101
+ }
102
+ throw new Error('No public key provided. Use --public-key, --file, or pipe to stdin.');
103
+ }
104
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/ssh-ca/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SSH CA command registration
3
+ */
4
+ import { type Command } from 'commander';
5
+ export * from './types.js';
6
+ export declare function registerSSHCACommands(program: Command): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/ssh-ca/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,cAAc,YAAY,CAAC;AAE3B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgM5D"}
@@ -0,0 +1,180 @@
1
+ // Path: src/commands/ssh-ca/index.ts
2
+ import { getStatus, initCA, deleteCA, getPublicKey } from './ca.js';
3
+ import { listMappings, createMapping, updateMapping, deleteMapping } from './mappings.js';
4
+ import { listServerGroups, getServerGroup, createServerGroup, deleteServerGroup, setAccessRule, deleteAccessRule, getAuthorizedPrincipals, } from './server-groups.js';
5
+ import { listCertificates, getCertificate, revokeCertificate } from './certificates.js';
6
+ import { signCertificate } from './sign.js';
7
+ // Re-export types
8
+ export * from './types.js';
9
+ export function registerSSHCACommands(program) {
10
+ const sshca = program
11
+ .command('ssh-ca')
12
+ .description('SSH Certificate Authority management')
13
+ .addHelpText('after', `
14
+ Examples:
15
+ # Initialize the CA
16
+ znvault ssh-ca init --key-type ed25519 --default-ttl 28800
17
+
18
+ # Get CA public key for server configuration
19
+ znvault ssh-ca public-key --raw > /etc/ssh/trusted-user-ca-keys.pub
20
+
21
+ # Create a principal mapping
22
+ znvault ssh-ca mapping create --group-id GROUP_ID --principals deploy,developer
23
+
24
+ # Create a server group and add access rules
25
+ znvault ssh-ca server-group create --name production-web
26
+ znvault ssh-ca server-group set-access GROUP_ID --linux-user deploy --principals deploy,admin
27
+
28
+ # Sign your SSH public key
29
+ znvault ssh-ca sign --file ~/.ssh/id_ed25519.pub > ~/.ssh/id_ed25519-cert.pub
30
+
31
+ # List and revoke certificates
32
+ znvault ssh-ca cert list --active-only
33
+ znvault ssh-ca cert revoke CERT_ID --reason "User offboarded"
34
+ `);
35
+ // -------------------------------------------------------------------------
36
+ // CA Commands
37
+ // -------------------------------------------------------------------------
38
+ sshca
39
+ .command('status')
40
+ .description('Get SSH CA status')
41
+ .option('--json', 'Output as JSON')
42
+ .action(getStatus);
43
+ sshca
44
+ .command('init')
45
+ .description('Initialize SSH CA')
46
+ .option('--key-type <type>', 'Key type: ed25519 or rsa-4096')
47
+ .option('--default-ttl <seconds>', 'Default certificate TTL in seconds')
48
+ .option('--max-ttl <seconds>', 'Maximum certificate TTL in seconds')
49
+ .option('--extensions <list>', 'Allowed extensions (comma-separated)')
50
+ .option('--json', 'Output as JSON')
51
+ .action(initCA);
52
+ sshca
53
+ .command('delete')
54
+ .description('Delete SSH CA (destructive!)')
55
+ .option('--force', 'Skip confirmation')
56
+ .option('--json', 'Output as JSON')
57
+ .action(deleteCA);
58
+ sshca
59
+ .command('public-key')
60
+ .description('Get CA public key')
61
+ .option('--raw', 'Output only the key (for piping to file)')
62
+ .option('--json', 'Output as JSON')
63
+ .action(getPublicKey);
64
+ // -------------------------------------------------------------------------
65
+ // Mapping Commands
66
+ // -------------------------------------------------------------------------
67
+ const mapping = sshca.command('mapping').description('Manage principal mappings (SSO group → SSH principals)');
68
+ mapping
69
+ .command('list')
70
+ .alias('ls')
71
+ .description('List principal mappings')
72
+ .option('--json', 'Output as JSON')
73
+ .action(listMappings);
74
+ mapping
75
+ .command('create')
76
+ .description('Create a principal mapping')
77
+ .option('--group-id <id>', 'SSO group ID')
78
+ .option('--principals <list>', 'SSH principals (comma-separated)')
79
+ .option('--json', 'Output as JSON')
80
+ .action(createMapping);
81
+ mapping
82
+ .command('update <mapping-id>')
83
+ .description('Update a principal mapping')
84
+ .option('--principals <list>', 'New SSH principals (comma-separated)')
85
+ .option('--json', 'Output as JSON')
86
+ .action(updateMapping);
87
+ mapping
88
+ .command('delete <mapping-id>')
89
+ .alias('rm')
90
+ .description('Delete a principal mapping')
91
+ .option('--force', 'Skip confirmation')
92
+ .option('--json', 'Output as JSON')
93
+ .action(deleteMapping);
94
+ // -------------------------------------------------------------------------
95
+ // Server Group Commands
96
+ // -------------------------------------------------------------------------
97
+ const serverGroup = sshca.command('server-group').alias('sg').description('Manage server groups');
98
+ serverGroup
99
+ .command('list')
100
+ .alias('ls')
101
+ .description('List server groups')
102
+ .option('--json', 'Output as JSON')
103
+ .action(listServerGroups);
104
+ serverGroup
105
+ .command('get <group-id>')
106
+ .description('Get server group details')
107
+ .option('--json', 'Output as JSON')
108
+ .action(getServerGroup);
109
+ serverGroup
110
+ .command('create')
111
+ .description('Create a server group')
112
+ .option('--name <name>', 'Server group name')
113
+ .option('--description <desc>', 'Description')
114
+ .option('--json', 'Output as JSON')
115
+ .action(createServerGroup);
116
+ serverGroup
117
+ .command('delete <group-id>')
118
+ .alias('rm')
119
+ .description('Delete a server group')
120
+ .option('--force', 'Skip confirmation')
121
+ .option('--json', 'Output as JSON')
122
+ .action(deleteServerGroup);
123
+ serverGroup
124
+ .command('set-access <group-id>')
125
+ .description('Set access rule for a server group')
126
+ .option('--linux-user <user>', 'Linux user name')
127
+ .option('--principals <list>', 'Allowed principals (comma-separated)')
128
+ .option('--json', 'Output as JSON')
129
+ .action(setAccessRule);
130
+ serverGroup
131
+ .command('delete-access <group-id> <linux-user>')
132
+ .description('Delete access rule from a server group')
133
+ .option('--force', 'Skip confirmation')
134
+ .option('--json', 'Output as JSON')
135
+ .action(deleteAccessRule);
136
+ serverGroup
137
+ .command('principals <group-id>')
138
+ .description('Get authorized principals for server configuration')
139
+ .option('--json', 'Output as JSON')
140
+ .action(getAuthorizedPrincipals);
141
+ // -------------------------------------------------------------------------
142
+ // Certificate Commands
143
+ // -------------------------------------------------------------------------
144
+ const cert = sshca.command('cert').alias('certificate').description('Manage SSH certificates');
145
+ cert
146
+ .command('list')
147
+ .alias('ls')
148
+ .description('List certificates')
149
+ .option('--active-only', 'Show only active certificates')
150
+ .option('--revoked', 'Show only revoked certificates')
151
+ .option('--user-id <id>', 'Filter by user ID')
152
+ .option('--limit <n>', 'Maximum number of results')
153
+ .option('--json', 'Output as JSON')
154
+ .action(listCertificates);
155
+ cert
156
+ .command('get <cert-id>')
157
+ .description('Get certificate details')
158
+ .option('--json', 'Output as JSON')
159
+ .action(getCertificate);
160
+ cert
161
+ .command('revoke <cert-id>')
162
+ .description('Revoke a certificate')
163
+ .option('--reason <reason>', 'Revocation reason')
164
+ .option('--force', 'Skip confirmation')
165
+ .option('--json', 'Output as JSON')
166
+ .action(revokeCertificate);
167
+ // -------------------------------------------------------------------------
168
+ // Sign Command
169
+ // -------------------------------------------------------------------------
170
+ sshca
171
+ .command('sign')
172
+ .description('Sign SSH public key to get a certificate')
173
+ .option('--public-key <key>', 'SSH public key string')
174
+ .option('--file <path>', 'Path to SSH public key file')
175
+ .option('--ttl <seconds>', 'Certificate TTL in seconds')
176
+ .option('--principals <list>', 'Direct principal specification (admin override, comma-separated). Requires ssh:ca:admin permission OR admin crypto access.')
177
+ .option('--json', 'Output as JSON')
178
+ .action(signCertificate);
179
+ }
180
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/ssh-ca/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { MappingCreateOptions, MappingUpdateOptions } from './types.js';
2
+ export declare function listMappings(options: {
3
+ json?: boolean;
4
+ }): Promise<void>;
5
+ export declare function createMapping(options: MappingCreateOptions): Promise<void>;
6
+ export declare function updateMapping(mappingId: string, options: MappingUpdateOptions): Promise<void>;
7
+ export declare function deleteMapping(mappingId: string, options: {
8
+ force?: boolean;
9
+ json?: boolean;
10
+ }): Promise<void>;
11
+ //# sourceMappingURL=mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappings.d.ts","sourceRoot":"","sources":["../../../src/commands/ssh-ca/mappings.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAapB,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7E;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EhF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BnG;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlH"}