@zincapp/znvault-cli 4.22.0 → 4.23.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 (194) hide show
  1. package/dist/commands/agent/direct/update-all.d.ts.map +1 -1
  2. package/dist/commands/agent/direct/update-all.js +3 -3
  3. package/dist/commands/agent/direct/update-all.js.map +1 -1
  4. package/dist/commands/agent/helpers.d.ts.map +1 -1
  5. package/dist/commands/agent/helpers.js.map +1 -1
  6. package/dist/commands/agent/token/create.js +1 -1
  7. package/dist/commands/agent/token/list.js +1 -1
  8. package/dist/commands/apikey/conditions.js.map +1 -1
  9. package/dist/commands/apikey/create.js.map +1 -1
  10. package/dist/commands/apikey/managed/helpers.d.ts.map +1 -1
  11. package/dist/commands/apikey/managed/helpers.js.map +1 -1
  12. package/dist/commands/apikey/self.js.map +1 -1
  13. package/dist/commands/apikey/show.js.map +1 -1
  14. package/dist/commands/dynamic-secrets/helpers.d.ts.map +1 -1
  15. package/dist/commands/dynamic-secrets/helpers.js.map +1 -1
  16. package/dist/commands/host/get.js.map +1 -1
  17. package/dist/commands/host/helpers.js +2 -2
  18. package/dist/commands/host/helpers.js.map +1 -1
  19. package/dist/commands/kmip/clients.js +3 -3
  20. package/dist/commands/kmip/clients.js.map +1 -1
  21. package/dist/commands/kms/crud.d.ts.map +1 -1
  22. package/dist/commands/kms/crud.js +9 -2
  23. package/dist/commands/kms/crud.js.map +1 -1
  24. package/dist/commands/kms/crypto.js +2 -2
  25. package/dist/commands/lmk-escrow.d.ts.map +1 -1
  26. package/dist/commands/lmk-escrow.js +71 -5
  27. package/dist/commands/lmk-escrow.js.map +1 -1
  28. package/dist/commands/lmk-preflight.d.ts +3 -0
  29. package/dist/commands/lmk-preflight.d.ts.map +1 -0
  30. package/dist/commands/lmk-preflight.js +117 -0
  31. package/dist/commands/lmk-preflight.js.map +1 -0
  32. package/dist/commands/lmk-restore-drill.d.ts +3 -0
  33. package/dist/commands/lmk-restore-drill.d.ts.map +1 -0
  34. package/dist/commands/lmk-restore-drill.js +160 -0
  35. package/dist/commands/lmk-restore-drill.js.map +1 -0
  36. package/dist/commands/lmk.d.ts.map +1 -1
  37. package/dist/commands/lmk.js +4 -0
  38. package/dist/commands/lmk.js.map +1 -1
  39. package/dist/commands/notification.d.ts.map +1 -1
  40. package/dist/commands/notification.js +8 -2
  41. package/dist/commands/notification.js.map +1 -1
  42. package/dist/commands/permissions.d.ts.map +1 -1
  43. package/dist/commands/permissions.js.map +1 -1
  44. package/dist/commands/plugin/helpers.d.ts +3 -3
  45. package/dist/commands/plugin/helpers.d.ts.map +1 -1
  46. package/dist/commands/plugin/helpers.js +5 -5
  47. package/dist/commands/plugin/helpers.js.map +1 -1
  48. package/dist/commands/plugin/info.js +3 -3
  49. package/dist/commands/plugin/info.js.map +1 -1
  50. package/dist/commands/plugin/install.js +3 -3
  51. package/dist/commands/plugin/install.js.map +1 -1
  52. package/dist/commands/plugin/list.js +2 -2
  53. package/dist/commands/plugin/uninstall.d.ts.map +1 -1
  54. package/dist/commands/plugin/uninstall.js +5 -0
  55. package/dist/commands/plugin/uninstall.js.map +1 -1
  56. package/dist/commands/policy/helpers.d.ts.map +1 -1
  57. package/dist/commands/policy/helpers.js +1 -0
  58. package/dist/commands/policy/helpers.js.map +1 -1
  59. package/dist/commands/quarantine.js.map +1 -1
  60. package/dist/commands/role.d.ts.map +1 -1
  61. package/dist/commands/role.js +13 -13
  62. package/dist/commands/role.js.map +1 -1
  63. package/dist/commands/secret/create.js +8 -8
  64. package/dist/commands/secret/create.js.map +1 -1
  65. package/dist/commands/secret/decrypt.d.ts.map +1 -1
  66. package/dist/commands/secret/decrypt.js +33 -29
  67. package/dist/commands/secret/decrypt.js.map +1 -1
  68. package/dist/commands/secret/get.js +1 -1
  69. package/dist/commands/secret/history.js +7 -7
  70. package/dist/commands/secret/history.js.map +1 -1
  71. package/dist/commands/secret/list.js +1 -1
  72. package/dist/commands/secret/patch/parsers.js.map +1 -1
  73. package/dist/commands/secret/pem-analysis.d.ts.map +1 -1
  74. package/dist/commands/secret/pem-analysis.js +2 -0
  75. package/dist/commands/secret/pem-analysis.js.map +1 -1
  76. package/dist/commands/secret/raw-value.d.ts +7 -0
  77. package/dist/commands/secret/raw-value.d.ts.map +1 -1
  78. package/dist/commands/secret/raw-value.js +2 -1
  79. package/dist/commands/secret/raw-value.js.map +1 -1
  80. package/dist/commands/secret/rotate.js.map +1 -1
  81. package/dist/commands/secret/update.js.map +1 -1
  82. package/dist/commands/self-update.js +1 -1
  83. package/dist/commands/self-update.js.map +1 -1
  84. package/dist/commands/ssh/bookmark.d.ts.map +1 -1
  85. package/dist/commands/ssh/bookmark.js +6 -8
  86. package/dist/commands/ssh/bookmark.js.map +1 -1
  87. package/dist/commands/ssh/config.js +2 -2
  88. package/dist/commands/ssh/config.js.map +1 -1
  89. package/dist/commands/ssh/connect.js +1 -1
  90. package/dist/commands/ssh/connect.js.map +1 -1
  91. package/dist/commands/ssh/exec.d.ts.map +1 -1
  92. package/dist/commands/ssh/exec.js +8 -12
  93. package/dist/commands/ssh/exec.js.map +1 -1
  94. package/dist/commands/ssh/forward.d.ts.map +1 -1
  95. package/dist/commands/ssh/forward.js +2 -1
  96. package/dist/commands/ssh/forward.js.map +1 -1
  97. package/dist/commands/ssh/hosts.d.ts.map +1 -1
  98. package/dist/commands/ssh/hosts.js +9 -18
  99. package/dist/commands/ssh/hosts.js.map +1 -1
  100. package/dist/commands/ssh/scp.d.ts.map +1 -1
  101. package/dist/commands/ssh/scp.js +5 -1
  102. package/dist/commands/ssh/scp.js.map +1 -1
  103. package/dist/commands/ssh-ca/helpers.js +2 -2
  104. package/dist/commands/ssh-ca/helpers.js.map +1 -1
  105. package/dist/commands/sso/crud.js +6 -6
  106. package/dist/commands/sso/crud.js.map +1 -1
  107. package/dist/commands/tenant.js.map +1 -1
  108. package/dist/commands/user.js.map +1 -1
  109. package/dist/index.js +35 -2
  110. package/dist/index.js.map +1 -1
  111. package/dist/lib/bsk-source.d.ts +21 -0
  112. package/dist/lib/bsk-source.d.ts.map +1 -0
  113. package/dist/lib/bsk-source.js +89 -0
  114. package/dist/lib/bsk-source.js.map +1 -0
  115. package/dist/lib/client/http.js +8 -8
  116. package/dist/lib/client/http.js.map +1 -1
  117. package/dist/lib/client/index.d.ts.map +1 -1
  118. package/dist/lib/client/index.js +4 -0
  119. package/dist/lib/client/index.js.map +1 -1
  120. package/dist/lib/config/index.d.ts +1 -1
  121. package/dist/lib/config/index.d.ts.map +1 -1
  122. package/dist/lib/config/index.js +1 -1
  123. package/dist/lib/config/index.js.map +1 -1
  124. package/dist/lib/config/profile.d.ts +14 -0
  125. package/dist/lib/config/profile.d.ts.map +1 -1
  126. package/dist/lib/config/profile.js +22 -0
  127. package/dist/lib/config/profile.js.map +1 -1
  128. package/dist/lib/config/store.d.ts.map +1 -1
  129. package/dist/lib/config/store.js +1 -0
  130. package/dist/lib/config/store.js.map +1 -1
  131. package/dist/lib/config.d.ts +1 -1
  132. package/dist/lib/config.d.ts.map +1 -1
  133. package/dist/lib/config.js +1 -1
  134. package/dist/lib/config.js.map +1 -1
  135. package/dist/lib/db/index.d.ts +9 -1
  136. package/dist/lib/db/index.d.ts.map +1 -1
  137. package/dist/lib/db/index.js +13 -0
  138. package/dist/lib/db/index.js.map +1 -1
  139. package/dist/lib/db/lmk-escrow.d.ts +18 -0
  140. package/dist/lib/db/lmk-escrow.d.ts.map +1 -1
  141. package/dist/lib/db/lmk-escrow.js +25 -0
  142. package/dist/lib/db/lmk-escrow.js.map +1 -1
  143. package/dist/lib/db/preflight.d.ts +42 -0
  144. package/dist/lib/db/preflight.d.ts.map +1 -0
  145. package/dist/lib/db/preflight.js +165 -0
  146. package/dist/lib/db/preflight.js.map +1 -0
  147. package/dist/lib/db.d.ts.map +1 -1
  148. package/dist/lib/db.js +3 -1
  149. package/dist/lib/db.js.map +1 -1
  150. package/dist/lib/debug.d.ts +0 -3
  151. package/dist/lib/debug.d.ts.map +1 -1
  152. package/dist/lib/debug.js +15 -1
  153. package/dist/lib/debug.js.map +1 -1
  154. package/dist/lib/format-helpers.d.ts.map +1 -1
  155. package/dist/lib/format-helpers.js +1 -0
  156. package/dist/lib/format-helpers.js.map +1 -1
  157. package/dist/lib/kcv.d.ts +34 -0
  158. package/dist/lib/kcv.d.ts.map +1 -0
  159. package/dist/lib/kcv.js +89 -0
  160. package/dist/lib/kcv.js.map +1 -0
  161. package/dist/lib/lmk-escrow-restore.d.ts +6 -2
  162. package/dist/lib/lmk-escrow-restore.d.ts.map +1 -1
  163. package/dist/lib/lmk-escrow-restore.js +1 -1
  164. package/dist/lib/lmk-escrow-restore.js.map +1 -1
  165. package/dist/lib/lmk-escrow.d.ts +14 -1
  166. package/dist/lib/lmk-escrow.d.ts.map +1 -1
  167. package/dist/lib/lmk-escrow.js +5 -1
  168. package/dist/lib/lmk-escrow.js.map +1 -1
  169. package/dist/lib/output.js.map +1 -1
  170. package/dist/lib/preflight.d.ts +93 -0
  171. package/dist/lib/preflight.d.ts.map +1 -0
  172. package/dist/lib/preflight.js +129 -0
  173. package/dist/lib/preflight.js.map +1 -0
  174. package/dist/lib/restore-drill.d.ts +73 -0
  175. package/dist/lib/restore-drill.d.ts.map +1 -0
  176. package/dist/lib/restore-drill.js +185 -0
  177. package/dist/lib/restore-drill.js.map +1 -0
  178. package/dist/lib/sentinel-client.d.ts +26 -0
  179. package/dist/lib/sentinel-client.d.ts.map +1 -0
  180. package/dist/lib/sentinel-client.js +165 -0
  181. package/dist/lib/sentinel-client.js.map +1 -0
  182. package/dist/lib/validation-helpers.d.ts +0 -5
  183. package/dist/lib/validation-helpers.d.ts.map +1 -1
  184. package/dist/lib/validation-helpers.js +6 -1
  185. package/dist/lib/validation-helpers.js.map +1 -1
  186. package/dist/lib/web-login.d.ts.map +1 -1
  187. package/dist/lib/web-login.js +1 -3
  188. package/dist/lib/web-login.js.map +1 -1
  189. package/dist/plugins/loader.d.ts +20 -1
  190. package/dist/plugins/loader.d.ts.map +1 -1
  191. package/dist/plugins/loader.js +47 -33
  192. package/dist/plugins/loader.js.map +1 -1
  193. package/dist/tui/hooks/useApi.js.map +1 -1
  194. package/package.json +2 -2
@@ -5,9 +5,61 @@ import { lstatSync, readFileSync, realpathSync } from 'node:fs';
5
5
  import { LocalDBClient, isLocalDbAvailable } from '../lib/db.js';
6
6
  import { buildLmkEscrowBundle, makeLmkEscrowFilename, readAndVerifyLmkEscrowBundle, verifyLmkEscrowBundleBuffer, writeLmkEscrowBundleDirect, } from '../lib/lmk-escrow.js';
7
7
  import { restoreBootstrapKeyFromBundle } from '../lib/lmk-escrow-restore.js';
8
+ import { resolveBskFromProvider } from '../lib/bsk-source.js';
9
+ import { createSentinelClient } from '../lib/sentinel-client.js';
8
10
  import { getLocalVaultVersion } from '../lib/local.js';
9
11
  import { getVersion } from '../lib/version.js';
10
12
  import * as output from '../lib/output.js';
13
+ /**
14
+ * Obtain the bootstrap key for a snapshot, from a file or from the hardware
15
+ * root, and say which in the receipt.
16
+ *
17
+ * The provider path exists so the ceremony does not have to run wherever the
18
+ * cleartext key happens to live — in practice a production application node —
19
+ * and so that retiring `lmk.bin` does not permanently end the ability to take
20
+ * another escrow. See src/lib/bsk-source.ts.
21
+ */
22
+ async function obtainBsk(options, database) {
23
+ if (options.fromProvider === undefined) {
24
+ const bskPath = resolveBskPath(options.bskPath);
25
+ return { bsk: readBsk(bskPath), source: `file:${bskPath}` };
26
+ }
27
+ if (options.bskPath !== undefined) {
28
+ throw new Error('--from-provider and --bsk-path are mutually exclusive: pick one source.');
29
+ }
30
+ if (options.fromProvider !== 'sentinel') {
31
+ // aws-kms is deliberately not offered. It would need AWS credentials on the
32
+ // ceremony host, which is a materially different trust story from an mTLS
33
+ // client certificate to an appliance sitting in the same room.
34
+ throw new Error(`--from-provider currently supports only 'sentinel', not ` +
35
+ `${JSON.stringify(options.fromProvider)}.`);
36
+ }
37
+ const envelope = await database.getRootKeyEnvelope('sentinel');
38
+ if (!envelope) {
39
+ const available = await database.listRootKeyEnvelopeProviders();
40
+ throw new Error('No root-key envelope recorded for provider \'sentinel\'. Providers with an ' +
41
+ `envelope: ${available.length > 0 ? available.join(', ') : '(none)'}.`);
42
+ }
43
+ const client = createSentinelClient({
44
+ url: requireOption(options.sentinelUrl, '--sentinel-url', 'ROOT_KEY_SENTINEL_URL'),
45
+ caPath: requireOption(options.sentinelCa, '--sentinel-ca', 'ROOT_KEY_SENTINEL_CA'),
46
+ certPath: requireOption(options.sentinelCert, '--sentinel-cert', 'ROOT_KEY_SENTINEL_CERT'),
47
+ keyPath: requireOption(options.sentinelKey, '--sentinel-key', 'ROOT_KEY_SENTINEL_KEY'),
48
+ timeoutMs: options.sentinelTimeoutMs === undefined
49
+ ? undefined
50
+ : Number(options.sentinelTimeoutMs),
51
+ });
52
+ const bsk = await resolveBskFromProvider(envelope, (ciphertext) => client.unwrap(ciphertext));
53
+ return { bsk, source: `provider:sentinel (${envelope.kcv})` };
54
+ }
55
+ /** A ceremony fails loudly on a missing input, never on a silent default. */
56
+ function requireOption(value, flag, envVar) {
57
+ const resolved = value ?? process.env[envVar];
58
+ if (resolved === undefined || resolved === '') {
59
+ throw new Error(`${flag} is required with --from-provider (or set ${envVar}).`);
60
+ }
61
+ return resolved;
62
+ }
11
63
  function resolveBskPath(explicitPath) {
12
64
  if (explicitPath !== undefined)
13
65
  return resolve(explicitPath);
@@ -41,7 +93,7 @@ function printReport(report) {
41
93
  'Historical gaps': report.unrecoverableVersions.length === 0
42
94
  ? 'none'
43
95
  : report.unrecoverableVersions.join(', '),
44
- 'BSK fingerprint': `sha256:${report.bskSha256}`,
96
+ 'BSK fingerprint': report.bskKcv,
45
97
  'Backup binding': report.backupId ?? 'UNBOUND — LAB ONLY',
46
98
  'Active rotation': report.activeRotationId ?? 'none',
47
99
  ...('path' in report ? {
@@ -62,6 +114,14 @@ export function registerLmkEscrowCommands(lmk) {
62
114
  .requiredOption('--mount <path>', 'Root of the mounted removable escrow device')
63
115
  .requiredOption('--copy-label <label>', 'Physical copy label, for example A or B')
64
116
  .option('--bsk-path <path>', 'Override LMK_PATH/DATA_DIR/lmk.bin')
117
+ .option('--from-provider <name>', "Source the BSK from a root-key provider instead of a file ('sentinel'). " +
118
+ 'Lets the ceremony run on a dedicated host, and keeps escrow possible ' +
119
+ 'after lmk.bin is retired.')
120
+ .option('--sentinel-url <url>', 'Sentinel base URL (https only)')
121
+ .option('--sentinel-ca <path>', 'CA bundle that must issue the appliance certificate')
122
+ .option('--sentinel-cert <path>', 'Client certificate presented to the appliance')
123
+ .option('--sentinel-key <path>', 'Its private key')
124
+ .option('--sentinel-timeout-ms <ms>', 'Request timeout (default 5000)')
65
125
  .option('--backup-id <id>', 'Bind the snapshot to a VERIFIED ZnVault backup record')
66
126
  .option('--allow-unbound-lab-snapshot', 'LAB ONLY: allow a snapshot with no verified backup binding')
67
127
  .option('--json', 'Output only the redacted receipt as JSON')
@@ -77,11 +137,13 @@ export function registerLmkEscrowCommands(lmk) {
77
137
  const database = new LocalDBClient();
78
138
  let bsk = null;
79
139
  let bundle = null;
140
+ let bskSource = '';
80
141
  try {
81
142
  // getLocalConfig(), called by LocalDBClient, loads DATA_DIR/LMK_PATH from
82
143
  // the service environment before this path is resolved.
83
- const bskPath = resolveBskPath(options.bskPath);
84
- bsk = readBsk(bskPath);
144
+ const obtained = await obtainBsk(options, database);
145
+ bsk = obtained.bsk;
146
+ bskSource = obtained.source;
85
147
  const snapshot = await database.captureLmkEscrow(options.backupId);
86
148
  bundle = buildLmkEscrowBundle({
87
149
  snapshot,
@@ -101,11 +163,15 @@ export function registerLmkEscrowCommands(lmk) {
101
163
  });
102
164
  spinner.stop();
103
165
  if (options.json === true) {
104
- output.json(receipt);
166
+ // The source belongs in the machine-readable receipt too: an acta
167
+ // that cannot distinguish a file-sourced ceremony from a
168
+ // hardware-root one records the wrong control.
169
+ output.json({ ...receipt, bskSource });
105
170
  return;
106
171
  }
107
172
  output.section('LMK Escrow Snapshot Written and Read-Back Verified');
108
173
  printReport(receipt);
174
+ output.keyValue({ 'BSK source': bskSource });
109
175
  if (receipt.backupId === null) {
110
176
  output.warn('This snapshot is not bound to a verified database backup and is LAB-ONLY evidence.');
111
177
  }
@@ -167,7 +233,7 @@ export function registerLmkEscrowCommands(lmk) {
167
233
  Copy: receipt.copyLabel,
168
234
  Bundle: receipt.bundleId,
169
235
  'Active LMK version': receipt.activeLmkVersion,
170
- 'BSK fingerprint': receipt.bskSha256,
236
+ 'BSK fingerprint': receipt.bskKcv,
171
237
  });
172
238
  output.success(receipt.outcome === 'RESTORED'
173
239
  ? 'Written owner-only and read back. Record this receipt in the drill log.'
@@ -1 +1 @@
1
- {"version":3,"file":"lmk-escrow.js","sourceRoot":"","sources":["../../src/commands/lmk-escrow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lmk-escrow.js","sourceRoot":"","sources":["../../src/commands/lmk-escrow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerLmkPreflightCommand(lmk: Command): void;
3
+ //# sourceMappingURL=lmk-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmk-preflight.d.ts","sourceRoot":"","sources":["../../src/commands/lmk-preflight.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDzC,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAsE9D"}
@@ -0,0 +1,117 @@
1
+ // Path: znvault-cli/src/commands/lmk-preflight.ts
2
+ //
3
+ // `znvault lmk preflight` — read-only, local, and it produces evidence.
4
+ //
5
+ // This is the command that answers "is this deployment in a state where a
6
+ // key-lifecycle operation is safe to start?", and its two hard requirements
7
+ // come from the same place: whoever reads the answer later was not in the room.
8
+ //
9
+ // IT WRITES NOTHING. Not a row, not an audit entry. That is why it goes
10
+ // straight to PostgreSQL instead of through the API: both
11
+ // `/v1/superadmin/rootkey/status` and `.../verify` write an audit row, so
12
+ // asking them would falsify the property being asserted — invisibly.
13
+ //
14
+ // IT PRINTS A VERDICT, AND EXITS ON IT. A preflight that reports problems in
15
+ // prose and exits 0 is a preflight that gets piped into a script and ignored.
16
+ // Any BLOCKING gate failing means exit 1.
17
+ //
18
+ // The evidence file is the input to the detached signature (A2) and to the
19
+ // isolated-restore bench (D2). It carries the gate results AND everything the
20
+ // gates were computed from, so they can be recomputed from the artefact alone.
21
+ import { hostname } from 'node:os';
22
+ import { writeFileSync } from 'node:fs';
23
+ import * as output from '../lib/output.js';
24
+ import { LocalDBClient, isLocalDbAvailable } from '../lib/db/index.js';
25
+ import { buildEvidence } from '../lib/preflight.js';
26
+ import { getVersion } from '../lib/version.js';
27
+ function currentOperator() {
28
+ return (process.env.SUDO_USER ??
29
+ process.env.USER ??
30
+ `uid-${String(process.getuid?.() ?? 'unknown')}`);
31
+ }
32
+ function renderHuman(evidence) {
33
+ output.section('BSK Rotation Preflight');
34
+ output.keyValue({
35
+ Database: evidence.database.databaseName,
36
+ PostgreSQL: evidence.database.postgresVersion,
37
+ 'Latest migration': evidence.database.latestMigration ?? 'unknown',
38
+ 'WAL LSN': evidence.database.walLsn,
39
+ 'Captured at': evidence.capturedAt,
40
+ Operator: `${evidence.operator}@${evidence.hostname}`,
41
+ });
42
+ output.table(['Gate', 'Severity', 'Status', 'Detail'], evidence.gates.map((g) => [g.id, g.severity, g.status, g.detail]));
43
+ if (evidence.verdict === 'GREEN') {
44
+ output.success('GREEN — every blocking gate passed. Informational findings above are ' +
45
+ 'recorded, not ignored.');
46
+ }
47
+ else {
48
+ output.error('RED — at least one blocking gate failed. Do not start a key-lifecycle ' +
49
+ 'operation until every one of them is resolved.');
50
+ }
51
+ }
52
+ export function registerLmkPreflightCommand(lmk) {
53
+ lmk
54
+ .command('preflight')
55
+ .description('Read-only inventory of the key hierarchy with pass/fail gates. Writes ' +
56
+ 'nothing to the database and produces a JSON evidence artefact.')
57
+ .option('--json', 'Output only the evidence artefact as JSON')
58
+ .option('--out <path>', 'Also write the evidence artefact to this path')
59
+ .action(async (options) => {
60
+ if (!isLocalDbAvailable()) {
61
+ throw new Error('The preflight is local-only. Run it on a Vault node with local database ' +
62
+ 'configuration: reading this state through the API would write audit rows, ' +
63
+ 'and "zero writes" is the property being demonstrated.');
64
+ }
65
+ const database = new LocalDBClient();
66
+ let evidence;
67
+ try {
68
+ const snapshot = await database.capturePreflight();
69
+ const body = {
70
+ artifact: 'znvault-preflight-v1',
71
+ capturedAt: snapshot.capturedAt.toISOString(),
72
+ cliVersion: getVersion(),
73
+ operator: currentOperator(),
74
+ hostname: hostname(),
75
+ database: {
76
+ databaseName: snapshot.databaseName,
77
+ postgresVersion: snapshot.postgresVersion,
78
+ walLsn: snapshot.walLsn,
79
+ transactionSnapshot: snapshot.transactionSnapshot,
80
+ latestMigration: snapshot.latestMigration,
81
+ },
82
+ lmkVersions: snapshot.lmkVersions,
83
+ rootKeyEnvelopes: snapshot.rootKeyEnvelopes,
84
+ rootKeyEnvelopesTablePresent: snapshot.rootKeyEnvelopesTablePresent,
85
+ activeRotations: snapshot.activeRotations,
86
+ auditHead: snapshot.auditHead,
87
+ latestVerifiedBackup: snapshot.latestVerifiedBackup,
88
+ };
89
+ evidence = buildEvidence(body);
90
+ }
91
+ finally {
92
+ await database.close();
93
+ }
94
+ // The artefact is written whatever the verdict. A red preflight is
95
+ // exactly the one worth keeping: it is the record of why an operation
96
+ // was not started, and the thing to diff against once it is fixed.
97
+ if (options.out !== undefined) {
98
+ writeFileSync(options.out, `${JSON.stringify(evidence, null, 2)}\n`, {
99
+ encoding: 'utf8',
100
+ mode: 0o600,
101
+ });
102
+ }
103
+ if (options.json === true) {
104
+ output.json(evidence);
105
+ }
106
+ else {
107
+ renderHuman(evidence);
108
+ if (options.out !== undefined) {
109
+ output.info(`Evidence written to ${options.out}`);
110
+ }
111
+ }
112
+ if (evidence.verdict === 'RED') {
113
+ process.exitCode = 1;
114
+ }
115
+ });
116
+ }
117
+ //# sourceMappingURL=lmk-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmk-preflight.js","sourceRoot":"","sources":["../../src/commands/lmk-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerLmkRestoreDrillCommands(lmk: Command): void;
3
+ //# sourceMappingURL=lmk-restore-drill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmk-restore-drill.d.ts","sourceRoot":"","sources":["../../src/commands/lmk-restore-drill.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFzC,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAgGlE"}
@@ -0,0 +1,160 @@
1
+ // Path: znvault-cli/src/commands/lmk-restore-drill.ts
2
+ //
3
+ // `znvault superadmin lmk restore-drill {pre,post}` — the two gates of an
4
+ // isolated restore, wired to a real database and a real health endpoint.
5
+ //
6
+ // The drill it gates answers one question: can this escrow bundle bring back
7
+ // THIS deployment's keys? Everything here exists because the obvious way to
8
+ // answer it — start a vault and see if it comes up — answers a different
9
+ // question and answers it wrong. A vault started against an empty database
10
+ // takes the first-boot path, mints a new LMK, and reports a completely healthy
11
+ // start. See src/lib/restore-drill.ts for the full note.
12
+ //
13
+ // Two phases, because the interesting failure is only visible before the vault
14
+ // runs. Once it mints a replacement key the table holds an ordinary version 1
15
+ // with material and nothing distinguishes it from a successful restore.
16
+ //
17
+ // pre after restoring the dump, BEFORE starting the vault
18
+ // post after the vault is up
19
+ //
20
+ // Both refuse to run against anything that is not loopback: pointed at a live
21
+ // deployment they would compare that deployment against the bundle and record
22
+ // a successful restore in which nothing was restored.
23
+ import { request as httpsRequest } from 'node:https';
24
+ import pg from 'pg';
25
+ import * as output from '../lib/output.js';
26
+ import { readAndVerifyLmkEscrowBundle } from '../lib/lmk-escrow.js';
27
+ import { assertBootedOnRestoredKeys, assertIsolatedTarget, assertRestoredDatabaseIsRecoverable, } from '../lib/restore-drill.js';
28
+ async function readVersions(databaseUrl) {
29
+ const client = new pg.Client({ connectionString: databaseUrl });
30
+ await client.connect();
31
+ try {
32
+ const result = await client.query(`SELECT version, status::text AS status, octet_length(wrapped_lmk) AS wrapped
33
+ FROM lmk_versions ORDER BY version`);
34
+ return result.rows.map((row) => ({
35
+ version: row.version,
36
+ status: row.status,
37
+ hasWrappedLmk: row.wrapped !== null && Number(row.wrapped) > 0,
38
+ }));
39
+ }
40
+ finally {
41
+ await client.end();
42
+ }
43
+ }
44
+ /**
45
+ * Fetch `/v1/health` from the bench node.
46
+ *
47
+ * TLS verification is off, and that is correct here rather than lazy: the bench
48
+ * node runs a self-signed certificate on loopback, and what the drill actually
49
+ * authenticates is the KCV in the body against the escrow bundle. Trusting the
50
+ * certificate would prove the node has a certificate.
51
+ */
52
+ async function readHealth(healthUrl) {
53
+ return await new Promise((resolve, reject) => {
54
+ const req = httpsRequest(healthUrl, { rejectUnauthorized: false, timeout: 10_000 }, (res) => {
55
+ const chunks = [];
56
+ res.on('data', (chunk) => chunks.push(chunk));
57
+ res.on('end', () => {
58
+ try {
59
+ resolve(JSON.parse(Buffer.concat(chunks).toString('utf8')));
60
+ }
61
+ catch (error) {
62
+ reject(new Error(`Health endpoint did not return JSON: ${String(error)}`));
63
+ }
64
+ });
65
+ });
66
+ req.on('timeout', () => {
67
+ req.destroy(new Error('Health endpoint timed out after 10s'));
68
+ });
69
+ req.on('error', reject);
70
+ req.end();
71
+ });
72
+ }
73
+ function reportVersions(versions) {
74
+ output.table(['Version', 'Status', 'Wrapped material'], versions.map((v) => [
75
+ String(v.version),
76
+ v.status,
77
+ v.hasWrappedLmk ? 'yes' : 'no',
78
+ ]));
79
+ }
80
+ export function registerLmkRestoreDrillCommands(lmk) {
81
+ const drill = lmk
82
+ .command('restore-drill')
83
+ .description('Gates for an isolated restore drill. Run "pre" after restoring the dump ' +
84
+ 'and BEFORE starting the vault, then "post" once it is up.');
85
+ drill
86
+ .command('pre')
87
+ .description('Assert the restored database actually carries recoverable key material. ' +
88
+ 'Starting a vault against an empty one mints a new LMK and reports success.')
89
+ .requiredOption('--database-url <url>', 'Restored database (loopback only)')
90
+ .requiredOption('--escrow-bundle <path>', 'The escrow bundle being drilled')
91
+ .option('--json', 'Output the observed inventory as JSON')
92
+ .action(async (options) => {
93
+ assertIsolatedTarget(options.databaseUrl, 'database');
94
+ // Verifying the bundle also authenticates the BSK inside it against every
95
+ // recoverable LMK generation it carries, so a bundle that cannot open its
96
+ // own contents fails here rather than halfway through the drill.
97
+ const bundle = readAndVerifyLmkEscrowBundle(options.escrowBundle);
98
+ const versions = await readVersions(options.databaseUrl);
99
+ if (options.json === true) {
100
+ output.json({ phase: 'pre', bundle, versions });
101
+ }
102
+ else {
103
+ output.section('Restore drill — before starting the vault');
104
+ output.keyValue({
105
+ Bundle: bundle.bundleId,
106
+ 'Copy label': bundle.copyLabel,
107
+ 'BSK fingerprint': bundle.bskKcv,
108
+ 'Expected ACTIVE LMK': bundle.activeLmkVersion,
109
+ });
110
+ reportVersions(versions);
111
+ }
112
+ assertRestoredDatabaseIsRecoverable(versions, bundle.activeLmkVersion);
113
+ if (options.json !== true) {
114
+ output.success('The restored database carries the key material the bundle describes. ' +
115
+ 'Start the vault, then run the "post" phase.');
116
+ }
117
+ });
118
+ drill
119
+ .command('post')
120
+ .description('Assert the running vault came up on the ESCROWED key and the ESCROWED ' +
121
+ 'LMK version — never on an exit code or an HTTP status.')
122
+ .requiredOption('--database-url <url>', 'Restored database (loopback only)')
123
+ .requiredOption('--escrow-bundle <path>', 'The escrow bundle being drilled')
124
+ .requiredOption('--health-url <url>', 'The bench node /v1/health (loopback only)')
125
+ .option('--json', 'Output the observed state as JSON')
126
+ .action(async (options) => {
127
+ assertIsolatedTarget(options.databaseUrl, 'database');
128
+ if (options.healthUrl === undefined)
129
+ throw new Error('--health-url is required');
130
+ assertIsolatedTarget(options.healthUrl, 'health endpoint');
131
+ const bundle = readAndVerifyLmkEscrowBundle(options.escrowBundle);
132
+ const health = await readHealth(options.healthUrl);
133
+ const versions = await readVersions(options.databaseUrl);
134
+ if (options.json === true) {
135
+ output.json({ phase: 'post', bundle, health, versions });
136
+ }
137
+ else {
138
+ output.section('Restore drill — after the vault started');
139
+ output.keyValue({
140
+ 'Bundle BSK fingerprint': bundle.bskKcv,
141
+ 'Node root-key fingerprint': health.rootKey?.kcv ?? '(no rootKey block)',
142
+ 'Node provider': health.rootKey?.provider ?? '(none)',
143
+ Degraded: health.rootKey?.degraded === true ? 'YES' : 'no',
144
+ 'Expected ACTIVE LMK': bundle.activeLmkVersion,
145
+ });
146
+ reportVersions(versions);
147
+ }
148
+ assertBootedOnRestoredKeys({
149
+ health,
150
+ versionsAfterBoot: versions,
151
+ expectedBskKcv: bundle.bskKcv,
152
+ expectedActiveVersion: bundle.activeLmkVersion,
153
+ });
154
+ if (options.json !== true) {
155
+ output.success('The vault booted on the escrowed bootstrap key and on the escrowed LMK ' +
156
+ 'version. Nothing was minted. This bundle restores this deployment.');
157
+ }
158
+ });
159
+ }
160
+ //# sourceMappingURL=lmk-restore-drill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmk-restore-drill.js","sourceRoot":"","sources":["../../src/commands/lmk-restore-drill.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lmk.d.ts","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsV1D"}
1
+ {"version":3,"file":"lmk.d.ts","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA2HzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwV1D"}
@@ -14,11 +14,15 @@ import { client } from '../lib/client.js';
14
14
  import * as output from '../lib/output.js';
15
15
  import { promptConfirm } from '../lib/prompts.js';
16
16
  import { registerLmkEscrowCommands } from './lmk-escrow.js';
17
+ import { registerLmkRestoreDrillCommands } from './lmk-restore-drill.js';
18
+ import { registerLmkPreflightCommand } from './lmk-preflight.js';
17
19
  export function registerLmkCommands(program) {
18
20
  const lmk = program
19
21
  .command('lmk')
20
22
  .description('Local Master Key (LMK) management commands');
21
23
  registerLmkEscrowCommands(lmk);
24
+ registerLmkRestoreDrillCommands(lmk);
25
+ registerLmkPreflightCommand(lmk);
22
26
  const rotation = lmk
23
27
  .command('rotation')
24
28
  .description('LMK rotation operations');
@@ -1 +1 @@
1
- {"version":3,"file":"lmk.js","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lmk.js","sourceRoot":"","sources":["../../src/commands/lmk.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/commands/notification.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAkfzC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6EnE"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/commands/notification.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAwfzC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6EnE"}
@@ -4,6 +4,12 @@ import Table from 'cli-table3';
4
4
  import inquirer from 'inquirer';
5
5
  import { client } from '../lib/client.js';
6
6
  import * as output from '../lib/output.js';
7
+ /** Treat an empty/blank string the same as "not provided" (optional free-text inputs). */
8
+ function nonEmpty(value) {
9
+ if (value === undefined)
10
+ return undefined;
11
+ return value.trim() === '' ? undefined : value;
12
+ }
7
13
  // ============================================================================
8
14
  // Command Implementations
9
15
  // ============================================================================
@@ -116,7 +122,7 @@ async function setupConfig(options) {
116
122
  type: 'input',
117
123
  name: 'fromName',
118
124
  message: 'From Name (optional):',
119
- default: fromName || 'ZnVault',
125
+ default: nonEmpty(fromName) ?? 'ZnVault',
120
126
  },
121
127
  ]);
122
128
  host = answers.host;
@@ -150,7 +156,7 @@ async function setupConfig(options) {
150
156
  pass: password,
151
157
  },
152
158
  from,
153
- fromName: fromName || undefined,
159
+ fromName: nonEmpty(fromName),
154
160
  };
155
161
  const result = await client.patch('/v1/admin/notifications/config', body);
156
162
  spinner.stop();