@zincapp/znvault-cli 3.1.0 → 3.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"lmk.d.ts","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE1D"}
1
+ {"version":3,"file":"lmk.d.ts","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA+FzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgO1D"}
@@ -1,11 +1,18 @@
1
1
  // Path: znvault-cli/src/commands/lmk.ts
2
2
  //
3
- // LMK rotation operational commands. Today this is just `rotation resume`
4
- // (M4 of the zn-api integration hardening plan); future LMK admin
5
- // subcommands (status, list versions, etc.) belong under this same
6
- // `lmk` namespace.
3
+ // LMK rotation operational commands.
4
+ //
5
+ // Subcommands under `znvault lmk rotation`:
6
+ // start POST /v1/admin/lmk/rotate (initiate, with destructive-confirm)
7
+ // resume POST /v1/admin/lmk/rotation/resume
8
+ // list GET /v1/admin/lmk/rotations
9
+ // show GET /v1/admin/lmk/rotation/:rotationId
10
+ // cancel POST /v1/admin/lmk/rotation/:rotationId/cancel
11
+ //
12
+ // Direct alias: `znvault lmk rotate` → same as `lmk rotation start`.
7
13
  import { client } from '../lib/client.js';
8
14
  import * as output from '../lib/output.js';
15
+ import { promptConfirm } from '../lib/prompts.js';
9
16
  export function registerLmkCommands(program) {
10
17
  const lmk = program
11
18
  .command('lmk')
@@ -13,6 +20,37 @@ export function registerLmkCommands(program) {
13
20
  const rotation = lmk
14
21
  .command('rotation')
15
22
  .description('LMK rotation operations');
23
+ // -------------------------------------------------------------------------
24
+ // lmk rotation start
25
+ // -------------------------------------------------------------------------
26
+ rotation
27
+ .command('start')
28
+ .description('Start an LMK rotation. Creates a new LMK version and re-wraps all ' +
29
+ 'DEKs. Operator-only; requires confirmation unless --force.')
30
+ .option('-d, --description <text>', 'Free-text description of why this rotation is being run')
31
+ .option('--manual', 'Only initiate (do not auto-run re-wrap or complete). Useful for ' +
32
+ 'staged rotations on large clusters; follow up with `lmk rotation resume`.')
33
+ .option('-f, --force', 'Skip confirmation prompt')
34
+ .option('--json', 'Output as JSON')
35
+ .action(async (options) => {
36
+ await runStart(options);
37
+ });
38
+ // -------------------------------------------------------------------------
39
+ // lmk rotate (top-level alias for `lmk rotation start`)
40
+ // -------------------------------------------------------------------------
41
+ lmk
42
+ .command('rotate')
43
+ .description('Alias for `lmk rotation start`')
44
+ .option('-d, --description <text>', 'Free-text description of why this rotation is being run')
45
+ .option('--manual', 'Only initiate (do not auto-run re-wrap or complete)')
46
+ .option('-f, --force', 'Skip confirmation prompt')
47
+ .option('--json', 'Output as JSON')
48
+ .action(async (options) => {
49
+ await runStart(options);
50
+ });
51
+ // -------------------------------------------------------------------------
52
+ // lmk rotation resume
53
+ // -------------------------------------------------------------------------
16
54
  rotation
17
55
  .command('resume')
18
56
  .description('Resume an interrupted LMK rotation. Use after /v1/health/ready returns ' +
@@ -24,7 +62,7 @@ export function registerLmkCommands(program) {
24
62
  try {
25
63
  const result = await client.post('/v1/admin/lmk/rotation/resume', {});
26
64
  spinner.stop();
27
- if (options.json) {
65
+ if (options.json === true) {
28
66
  output.json(result);
29
67
  return;
30
68
  }
@@ -57,5 +95,176 @@ export function registerLmkCommands(program) {
57
95
  throw err;
58
96
  }
59
97
  });
98
+ // -------------------------------------------------------------------------
99
+ // lmk rotation list
100
+ // -------------------------------------------------------------------------
101
+ rotation
102
+ .command('list')
103
+ .description('List historical LMK rotations.')
104
+ .option('--limit <n>', 'Page size (default 50)')
105
+ .option('--offset <n>', 'Page offset (default 0)')
106
+ .option('--json', 'Output as JSON')
107
+ .action(async (options) => {
108
+ const limit = options.limit !== undefined ? parseInt(options.limit, 10) : 50;
109
+ const offset = options.offset !== undefined ? parseInt(options.offset, 10) : 0;
110
+ const query = `?limit=${limit}&offset=${offset}`;
111
+ const result = await client.get(`/v1/admin/lmk/rotations${query}`);
112
+ if (options.json === true) {
113
+ output.json(result);
114
+ return;
115
+ }
116
+ if (result.rotations.length === 0) {
117
+ output.info('No LMK rotations recorded.');
118
+ return;
119
+ }
120
+ output.section(`LMK Rotations (${result.rotations.length}/${result.total})`);
121
+ output.table(['Rotation ID', 'Status', 'Old → New', 'DEKs (mig/fail/total)', 'Started', 'By'], result.rotations.map((r) => [
122
+ r.rotationId,
123
+ r.status,
124
+ `${r.oldLmkVersion} → ${r.newLmkVersion}`,
125
+ `${r.migratedDeks}/${r.failedDeks}/${r.totalDeks}`,
126
+ output.formatDate(r.startedAt),
127
+ r.initiatedBy ?? '-',
128
+ ]));
129
+ });
130
+ // -------------------------------------------------------------------------
131
+ // lmk rotation show <rotationId>
132
+ // -------------------------------------------------------------------------
133
+ rotation
134
+ .command('show <rotationId>')
135
+ .description('Show details of a single LMK rotation.')
136
+ .option('--json', 'Output as JSON')
137
+ .action(async (rotationId, options) => {
138
+ const result = await client.get(`/v1/admin/lmk/rotation/${rotationId}`);
139
+ if (options.json === true) {
140
+ output.json(result);
141
+ return;
142
+ }
143
+ output.section(`LMK Rotation ${result.rotationId}`);
144
+ output.keyValue({
145
+ 'Status': result.status,
146
+ 'Old LMK version': result.oldLmkVersion,
147
+ 'New LMK version': result.newLmkVersion,
148
+ 'DEKs total': result.totalDeks,
149
+ 'DEKs migrated': result.deksMigrated,
150
+ 'DEKs failed': result.deksFailed,
151
+ 'Started': output.formatDate(result.startedAt),
152
+ 'Completed': result.completedAt !== undefined ? output.formatDate(result.completedAt) : '-',
153
+ 'Description': result.description ?? '-',
154
+ 'Initiated by': result.initiatedBy ?? '-',
155
+ });
156
+ if (result.errors !== undefined && result.errors.length > 0) {
157
+ output.warn(`${result.errors.length} per-DEK errors recorded; see audit log / dek_rotation_history.`);
158
+ }
159
+ });
160
+ // -------------------------------------------------------------------------
161
+ // lmk rotation cancel <rotationId>
162
+ // -------------------------------------------------------------------------
163
+ rotation
164
+ .command('cancel <rotationId>')
165
+ .description('Cancel an in-progress LMK rotation. DEKs already re-wrapped to the new ' +
166
+ 'LMK version remain on the new version — cancel does NOT roll those ' +
167
+ 'back. Use with care.')
168
+ .option('-r, --reason <text>', 'Reason recorded in the rotation row (audit trail)')
169
+ .option('-f, --force', 'Skip confirmation prompt')
170
+ .option('--json', 'Output as JSON')
171
+ .action(async (rotationId, options) => {
172
+ if (options.force !== true) {
173
+ output.warn('Cancellation will NOT roll back DEKs already re-wrapped to the ' +
174
+ 'new LMK version. Those DEKs remain on the new version and the ' +
175
+ 'cluster will keep both LMK versions in lmk_versions for them.');
176
+ const proceed = await promptConfirm(`Cancel rotation ${rotationId}?`, false);
177
+ if (!proceed) {
178
+ output.info('Aborted.');
179
+ return;
180
+ }
181
+ }
182
+ const result = await client.post(`/v1/admin/lmk/rotation/${rotationId}/cancel`, { reason: options.reason ?? 'Cancelled by operator via CLI' });
183
+ if (options.json === true) {
184
+ output.json(result);
185
+ return;
186
+ }
187
+ output.success(result.message);
188
+ });
189
+ }
190
+ // ---------------------------------------------------------------------------
191
+ // Shared start handler — used by both `lmk rotation start` and the
192
+ // top-level `lmk rotate` alias.
193
+ // ---------------------------------------------------------------------------
194
+ async function runStart(options) {
195
+ const automatic = options.manual !== true;
196
+ if (options.force !== true) {
197
+ output.warn('LMK rotation is a cluster-wide cryptographic operation. The readiness ' +
198
+ 'gate will refuse traffic with a 503 while DEK re-wrap runs. Existing ' +
199
+ 'lmk.bin will be rotated to a new file (lmk.bin.v<N+1>) — back it up ' +
200
+ 'before proceeding.');
201
+ if (!automatic) {
202
+ output.info('Manual mode: only initiate() will run. You will need to follow up ' +
203
+ 'with `znvault lmk rotation resume` to finish the rewrap + complete.');
204
+ }
205
+ const proceed = await promptConfirm(automatic
206
+ ? 'Proceed with full automatic LMK rotation?'
207
+ : 'Proceed with manual LMK rotation initiate?', false);
208
+ if (!proceed) {
209
+ output.info('Aborted.');
210
+ return;
211
+ }
212
+ }
213
+ const spinner = output
214
+ .spinner(automatic ? 'Rotating LMK (initiate + re-wrap + complete)...' : 'Initiating LMK rotation...')
215
+ .start();
216
+ try {
217
+ const body = { automatic };
218
+ if (options.description !== undefined) {
219
+ body.description = options.description;
220
+ }
221
+ if (automatic) {
222
+ const result = await client.post('/v1/admin/lmk/rotate', body);
223
+ spinner.stop();
224
+ if (options.json === true) {
225
+ output.json(result);
226
+ return;
227
+ }
228
+ output.section('LMK Rotation Complete');
229
+ output.keyValue({
230
+ 'Rotation ID': result.rotationId,
231
+ 'New LMK version': result.newLmkVersion,
232
+ 'Status': result.status,
233
+ 'DEKs migrated': result.deksMigrated ?? 0,
234
+ 'DEKs failed': result.deksFailed ?? 0,
235
+ });
236
+ if ((result.deksFailed ?? 0) > 0) {
237
+ output.warn('Rotation completed with per-DEK failures. Inspect ' +
238
+ 'dek_rotation_history for details and consider rerunning ' +
239
+ '`znvault lmk rotation resume` after resolving the underlying cause.');
240
+ }
241
+ else {
242
+ output.success(`LMK now at version ${String(result.newLmkVersion)}. Back up the new ` +
243
+ `lmk.bin file (data/lmk.bin.v${String(result.newLmkVersion)}) on all nodes.`);
244
+ }
245
+ }
246
+ else {
247
+ const result = await client.post('/v1/admin/lmk/rotate', body);
248
+ spinner.stop();
249
+ if (options.json === true) {
250
+ output.json(result);
251
+ return;
252
+ }
253
+ output.section('LMK Rotation Initiated (manual mode)');
254
+ output.keyValue({
255
+ 'Rotation ID': result.rotationId,
256
+ 'New LMK version': result.newLmkVersion,
257
+ 'Status': result.status,
258
+ 'DEKs to migrate': result.deksToMigrate ?? 0,
259
+ });
260
+ output.info(`Next: run \`znvault lmk rotation resume\` to finish the rewrap and ` +
261
+ `complete the rotation. /v1/health/ready will refuse traffic with 503 ` +
262
+ `until that finishes.`);
263
+ }
264
+ }
265
+ catch (err) {
266
+ spinner.fail('LMK rotation failed');
267
+ throw err;
268
+ }
60
269
  }
61
270
  //# sourceMappingURL=lmk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lmk.js","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,0EAA0E;AAC1E,kEAAkE;AAClE,mEAAmE;AACnE,mBAAmB;AAInB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAiB3C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,GAAG;SACjB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAE1C,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,yEAAyE;QACzE,uEAAuE;QACvE,iBAAiB,CAClB;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA8B,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,+BAA+B,EAC/B,EAAE,CACH,CAAC;YACF,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC;gBACd,aAAa,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG;gBACvC,kBAAkB,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG;gBAC7C,gBAAgB,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG;gBACzC,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;gBAC/B,sBAAsB,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;gBAC5C,wBAAwB,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;gBAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;aAC7B,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CACT,oEAAoE;oBACpE,8DAA8D;oBAC9D,mCAAmC,CACpC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CACZ,kEAAkE;oBAClE,kBAAkB,CACnB,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"lmk.js","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zincapp/znvault-cli",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Official CLI for ZnVault administration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",