@zincapp/znvault-cli 4.22.1 → 4.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/lmk-ceremony.d.ts +3 -0
- package/dist/commands/lmk-ceremony.d.ts.map +1 -0
- package/dist/commands/lmk-ceremony.js +597 -0
- package/dist/commands/lmk-ceremony.js.map +1 -0
- package/dist/commands/lmk-escrow.d.ts.map +1 -1
- package/dist/commands/lmk-escrow.js +73 -5
- package/dist/commands/lmk-escrow.js.map +1 -1
- package/dist/commands/lmk-preflight.d.ts +3 -0
- package/dist/commands/lmk-preflight.d.ts.map +1 -0
- package/dist/commands/lmk-preflight.js +117 -0
- package/dist/commands/lmk-preflight.js.map +1 -0
- package/dist/commands/lmk-restore-drill.d.ts +3 -0
- package/dist/commands/lmk-restore-drill.d.ts.map +1 -0
- package/dist/commands/lmk-restore-drill.js +160 -0
- package/dist/commands/lmk-restore-drill.js.map +1 -0
- package/dist/commands/lmk.d.ts.map +1 -1
- package/dist/commands/lmk.js +4 -0
- package/dist/commands/lmk.js.map +1 -1
- package/dist/index.js +35 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/bsk-source.d.ts +21 -0
- package/dist/lib/bsk-source.d.ts.map +1 -0
- package/dist/lib/bsk-source.js +89 -0
- package/dist/lib/bsk-source.js.map +1 -0
- package/dist/lib/ceremony/gates.d.ts +126 -0
- package/dist/lib/ceremony/gates.d.ts.map +1 -0
- package/dist/lib/ceremony/gates.js +270 -0
- package/dist/lib/ceremony/gates.js.map +1 -0
- package/dist/lib/ceremony/system.d.ts +36 -0
- package/dist/lib/ceremony/system.d.ts.map +1 -0
- package/dist/lib/ceremony/system.js +176 -0
- package/dist/lib/ceremony/system.js.map +1 -0
- package/dist/lib/ceremony/workspace.d.ts +54 -0
- package/dist/lib/ceremony/workspace.d.ts.map +1 -0
- package/dist/lib/ceremony/workspace.js +98 -0
- package/dist/lib/ceremony/workspace.js.map +1 -0
- package/dist/lib/config/index.d.ts +1 -1
- package/dist/lib/config/index.d.ts.map +1 -1
- package/dist/lib/config/index.js +1 -1
- package/dist/lib/config/index.js.map +1 -1
- package/dist/lib/config/profile.d.ts +14 -0
- package/dist/lib/config/profile.d.ts.map +1 -1
- package/dist/lib/config/profile.js +22 -0
- package/dist/lib/config/profile.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/db/index.d.ts +9 -1
- package/dist/lib/db/index.d.ts.map +1 -1
- package/dist/lib/db/index.js +9 -0
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/key-lifecycle.d.ts +86 -0
- package/dist/lib/db/key-lifecycle.d.ts.map +1 -0
- package/dist/lib/db/key-lifecycle.js +182 -0
- package/dist/lib/db/key-lifecycle.js.map +1 -0
- package/dist/lib/db/lmk-escrow.d.ts +18 -0
- package/dist/lib/db/lmk-escrow.d.ts.map +1 -1
- package/dist/lib/db/lmk-escrow.js +25 -0
- package/dist/lib/db/lmk-escrow.js.map +1 -1
- package/dist/lib/db/preflight.d.ts +42 -0
- package/dist/lib/db/preflight.d.ts.map +1 -0
- package/dist/lib/db/preflight.js +165 -0
- package/dist/lib/db/preflight.js.map +1 -0
- package/dist/lib/kcv.d.ts +34 -0
- package/dist/lib/kcv.d.ts.map +1 -0
- package/dist/lib/kcv.js +89 -0
- package/dist/lib/kcv.js.map +1 -0
- package/dist/lib/lmk-escrow-restore.d.ts +6 -2
- package/dist/lib/lmk-escrow-restore.d.ts.map +1 -1
- package/dist/lib/lmk-escrow-restore.js +1 -1
- package/dist/lib/lmk-escrow-restore.js.map +1 -1
- package/dist/lib/lmk-escrow.d.ts +14 -1
- package/dist/lib/lmk-escrow.d.ts.map +1 -1
- package/dist/lib/lmk-escrow.js +5 -1
- package/dist/lib/lmk-escrow.js.map +1 -1
- package/dist/lib/preflight.d.ts +93 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +129 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/restore-drill.d.ts +73 -0
- package/dist/lib/restore-drill.d.ts.map +1 -0
- package/dist/lib/restore-drill.js +185 -0
- package/dist/lib/restore-drill.js.map +1 -0
- package/dist/lib/sentinel-client.d.ts +26 -0
- package/dist/lib/sentinel-client.d.ts.map +1 -0
- package/dist/lib/sentinel-client.js +165 -0
- package/dist/lib/sentinel-client.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// Path: src/lib/ceremony/system.ts
|
|
2
|
+
//
|
|
3
|
+
// Facts about this machine, gathered for the ceremony's gates to judge.
|
|
4
|
+
//
|
|
5
|
+
// This module DECIDES NOTHING. It shells out to `hdiutil`, `mount`, `ioreg` and
|
|
6
|
+
// `diskutil` and reports what they said; every refusal lives in `gates.ts` and
|
|
7
|
+
// `workspace.ts`, which are pure and therefore testable. The split is
|
|
8
|
+
// deliberate: this file cannot be unit-tested, so it must not be where the
|
|
9
|
+
// thinking happens.
|
|
10
|
+
//
|
|
11
|
+
// macOS-only by construction. The ceremony runs on the operator's Mac (see
|
|
12
|
+
// `docs/emergency-dr/PROTOCOLO-ceremonia-en-mac.md` for why that is the
|
|
13
|
+
// decision and what it costs); a Linux ceremony host would need its own
|
|
14
|
+
// implementation of exactly these five functions and nothing else.
|
|
15
|
+
import { execFileSync } from 'node:child_process';
|
|
16
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
17
|
+
import { CEREMONY_MOUNT_POINT } from './workspace.js';
|
|
18
|
+
/**
|
|
19
|
+
* Run a command and return stdout, or `null` if it could not run. Never throws.
|
|
20
|
+
*
|
|
21
|
+
* `null` AND NOT `''`. An audit found the earlier version collapsed the two:
|
|
22
|
+
* a `mount` that failed to execute returned the empty string, which reads as
|
|
23
|
+
* "nothing is mounted" — so teardown verification passed on zero evidence and a
|
|
24
|
+
* ceremony closed as COMPLETED over a live RAM disk. Callers now have to decide
|
|
25
|
+
* what silence means, and for teardown it means refuse.
|
|
26
|
+
*/
|
|
27
|
+
function run(cmd, args) {
|
|
28
|
+
try {
|
|
29
|
+
return execFileSync(cmd, args, { encoding: 'utf-8', maxBuffer: 8 * 1024 * 1024 });
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** `run`, for the callers where "could not run" and "said nothing" are the same. */
|
|
36
|
+
function runOrEmpty(cmd, args) {
|
|
37
|
+
return run(cmd, args) ?? '';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Does this `hdiutil info` / `mount` line refer to exactly this device?
|
|
41
|
+
*
|
|
42
|
+
* NOT `startsWith`: `/dev/disk3` is a prefix of `/dev/disk32`, and a Mac with
|
|
43
|
+
* simulators attached routinely has a dozen images listed, so a straddling pair
|
|
44
|
+
* of unit numbers is ordinary rather than exotic. Prefix matching attributed one
|
|
45
|
+
* device's backing to another.
|
|
46
|
+
*/
|
|
47
|
+
function refersTo(line, device) {
|
|
48
|
+
const trimmed = line.trimStart();
|
|
49
|
+
if (!trimmed.startsWith(device))
|
|
50
|
+
return false;
|
|
51
|
+
const next = trimmed.charAt(device.length);
|
|
52
|
+
return next === '' || !/[0-9a-zA-Z]/.test(next);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a RAM-backed volume and report what the system says about it.
|
|
56
|
+
*
|
|
57
|
+
* Returns facts rather than throwing on failure: `assertRamBacked` is what
|
|
58
|
+
* refuses, and it must see the same facts an operator would — including the
|
|
59
|
+
* case where the mount silently did not happen, which is the whole reason the
|
|
60
|
+
* gate exists.
|
|
61
|
+
*
|
|
62
|
+
* `awk '{print $1}'` and NOT `tr -d ' '`: hdiutil pads the device path with
|
|
63
|
+
* TABS, and stripping only spaces yields a malformed path whose mount fails
|
|
64
|
+
* quietly while writes land on the SSD. That was a real hour of this build.
|
|
65
|
+
*/
|
|
66
|
+
export function createRamWorkspace(megabytes) {
|
|
67
|
+
const sectors = megabytes * 2048;
|
|
68
|
+
const attached = runOrEmpty('hdiutil', ['attach', '-nomount', `ram://${String(sectors)}`]);
|
|
69
|
+
const device = attached.trim().split(/\s+/)[0] ?? '';
|
|
70
|
+
if (device === '') {
|
|
71
|
+
return { device: '(hdiutil produced no device)', imagePath: null, mountPoint: null };
|
|
72
|
+
}
|
|
73
|
+
runOrEmpty('newfs_hfs', ['-v', 'CEREMONY', device]);
|
|
74
|
+
if (!existsSync(CEREMONY_MOUNT_POINT))
|
|
75
|
+
mkdirSync(CEREMONY_MOUNT_POINT, { recursive: true });
|
|
76
|
+
runOrEmpty('diskutil', ['mount', '-mountPoint', CEREMONY_MOUNT_POINT, device]);
|
|
77
|
+
return describeDevice(device);
|
|
78
|
+
}
|
|
79
|
+
/** What `hdiutil info` and `mount` currently say about a device. */
|
|
80
|
+
export function describeDevice(device) {
|
|
81
|
+
let imagePath = null;
|
|
82
|
+
let current = null;
|
|
83
|
+
for (const line of runOrEmpty('hdiutil', ['info']).split('\n')) {
|
|
84
|
+
if (line.startsWith('image-path')) {
|
|
85
|
+
// `hdiutil info` prints `image-path : ram://131072`, colon and all. An
|
|
86
|
+
// earlier version kept the colon and the gate refused a perfectly good
|
|
87
|
+
// RAM volume — failing closed on a parsing bug, which is the right
|
|
88
|
+
// direction, but still a bug.
|
|
89
|
+
current = line.replace(/^image-path\s*:?\s*/, '').trim();
|
|
90
|
+
}
|
|
91
|
+
else if (refersTo(line, device)) {
|
|
92
|
+
imagePath = current;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const mountLine = runOrEmpty('mount', []).split('\n').find((l) => l.startsWith(`${device} on `));
|
|
96
|
+
const mountPoint = mountLine === undefined
|
|
97
|
+
? null
|
|
98
|
+
: (/^\S+ on (.+?) \(/.exec(mountLine)?.[1] ?? null);
|
|
99
|
+
return { device, imagePath, mountPoint };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Unmount and detach, then report whether it worked.
|
|
103
|
+
*
|
|
104
|
+
* Reports rather than asserts, for the same reason as above: unmounting does
|
|
105
|
+
* not destroy a RAM device, and `assertTornDown` is what insists on both.
|
|
106
|
+
*/
|
|
107
|
+
export function destroyRamWorkspace(device) {
|
|
108
|
+
runOrEmpty('diskutil', ['unmount', CEREMONY_MOUNT_POINT]);
|
|
109
|
+
runOrEmpty('hdiutil', ['detach', device]);
|
|
110
|
+
// `null` where the command could not run at all: `assertTornDown` refuses
|
|
111
|
+
// rather than reading silence as proof the workspace is gone.
|
|
112
|
+
const mountOut = run('mount', []);
|
|
113
|
+
const infoOut = run('hdiutil', ['info']);
|
|
114
|
+
return {
|
|
115
|
+
device,
|
|
116
|
+
stillMounted: mountOut === null ? null : mountOut.includes(`${device} on `),
|
|
117
|
+
stillAttached: infoOut === null
|
|
118
|
+
? null
|
|
119
|
+
: infoOut.split('\n').some((l) => refersTo(l, device)),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Every mounted datAshur, with the USB serial that actually identifies it.
|
|
124
|
+
*
|
|
125
|
+
* The mapping matters more than it looks: both devices shipped with the same
|
|
126
|
+
* volume label, so the mount path is not an identity. This walks the IO
|
|
127
|
+
* registry to pair each BSD disk with the serial of the USB device it hangs
|
|
128
|
+
* from — the same walk done by hand on 2026-08-25 to tell copy A from copy B.
|
|
129
|
+
*/
|
|
130
|
+
export function listEscrowDevices() {
|
|
131
|
+
const tree = runOrEmpty('ioreg', ['-p', 'IOService', '-n', 'datAshur PRO2', '-r', '-l', '-w', '0']);
|
|
132
|
+
// Serial appears above the BSD names of the disks beneath it.
|
|
133
|
+
const serialByDisk = new Map();
|
|
134
|
+
let serial = null;
|
|
135
|
+
for (const line of tree.split('\n')) {
|
|
136
|
+
const s = /"kUSBSerialNumberString"\s*=\s*"([^"]+)"/.exec(line);
|
|
137
|
+
if (s?.[1] !== undefined) {
|
|
138
|
+
serial = s[1];
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const b = /"BSD Name"\s*=\s*"(disk\d+)"/.exec(line);
|
|
142
|
+
if (b?.[1] !== undefined && serial !== null)
|
|
143
|
+
serialByDisk.set(b[1], serial);
|
|
144
|
+
}
|
|
145
|
+
const devices = [];
|
|
146
|
+
for (const line of runOrEmpty('mount', []).split('\n')) {
|
|
147
|
+
const m = /^\/dev\/(disk\d+)s\d+ on (.+?) \(/.exec(line);
|
|
148
|
+
if (m === null)
|
|
149
|
+
continue;
|
|
150
|
+
// Neither group is optional, so a successful match guarantees both.
|
|
151
|
+
const [, whole, mountPoint] = m;
|
|
152
|
+
if (!mountPoint.startsWith('/Volumes/'))
|
|
153
|
+
continue;
|
|
154
|
+
const serialForDisk = serialByDisk.get(whole);
|
|
155
|
+
if (serialForDisk === undefined)
|
|
156
|
+
continue; // not a datAshur
|
|
157
|
+
devices.push({
|
|
158
|
+
mountPoint,
|
|
159
|
+
usbSerial: serialForDisk,
|
|
160
|
+
volumeLabel: mountPoint.slice('/Volumes/'.length),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return devices;
|
|
164
|
+
}
|
|
165
|
+
/** Is Spotlight indexing this path? Ceremony hygiene, reported not enforced. */
|
|
166
|
+
export function indexingEnabled(path) {
|
|
167
|
+
const out = run('mdutil', ['-s', path]);
|
|
168
|
+
if (out === null || out === '')
|
|
169
|
+
return null;
|
|
170
|
+
if (/Indexing enabled/i.test(out))
|
|
171
|
+
return true;
|
|
172
|
+
if (/Indexing disabled|not (?:supported|eligible)/i.test(out))
|
|
173
|
+
return false;
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/lib/ceremony/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Facts about the workspace device, as reported by the system. */
|
|
2
|
+
export interface DeviceFacts {
|
|
3
|
+
/** e.g. `/dev/disk32` */
|
|
4
|
+
device: string;
|
|
5
|
+
/**
|
|
6
|
+
* `image-path` from `hdiutil info`. `ram://<sectors>` for a RAM device, a
|
|
7
|
+
* filesystem path for a disk image, `null` when hdiutil said nothing.
|
|
8
|
+
*/
|
|
9
|
+
imagePath: string | null;
|
|
10
|
+
/** Where `mount` says it is, or `null` if it is not mounted. */
|
|
11
|
+
mountPoint: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface TeardownFacts {
|
|
14
|
+
device: string;
|
|
15
|
+
/**
|
|
16
|
+
* `null` when it could not be observed at all — `mount` or `hdiutil` failed
|
|
17
|
+
* rather than reported "no". The distinction is load-bearing: see
|
|
18
|
+
* `assertTornDown`.
|
|
19
|
+
*/
|
|
20
|
+
stillMounted: boolean | null;
|
|
21
|
+
stillAttached: boolean | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Where a ceremony workspace is allowed to live.
|
|
25
|
+
*
|
|
26
|
+
* Pinned so teardown can find it and so a workspace cannot be created on top of
|
|
27
|
+
* an escrow device by a mistyped argument.
|
|
28
|
+
*/
|
|
29
|
+
export declare const CEREMONY_MOUNT_POINT = "/private/tmp/ceremony-ram";
|
|
30
|
+
/**
|
|
31
|
+
* Refuse to proceed unless the workspace is demonstrably RAM-backed and mounted
|
|
32
|
+
* where it is supposed to be.
|
|
33
|
+
*
|
|
34
|
+
* @throws with the observed facts named, because this aborts a ceremony that
|
|
35
|
+
* someone scheduled and possibly travelled for.
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertRamBacked(facts: DeviceFacts): void;
|
|
38
|
+
/**
|
|
39
|
+
* Refuse to close a ceremony while the workspace still exists.
|
|
40
|
+
*
|
|
41
|
+
* Unmounted is not destroyed: the RAM still holds the bytes and anyone can
|
|
42
|
+
* remount the device. Both facts have to be observed, and both have to be false.
|
|
43
|
+
*
|
|
44
|
+
* THE `null` CASE IS WHY THIS WAS REWRITTEN. The first version took plain
|
|
45
|
+
* booleans, and the fact-gatherer returned `false` both for "I looked and it is
|
|
46
|
+
* gone" and for "the command failed and I saw nothing". So a `mount` that could
|
|
47
|
+
* not run — ENOENT, a truncated buffer, a signal — read as proof of teardown,
|
|
48
|
+
* and the ceremony closed as COMPLETED over a live RAM disk still holding the
|
|
49
|
+
* bootstrap key. `assertRamBacked` had the opposite, correct policy three
|
|
50
|
+
* functions up ("absence of evidence is not evidence of RAM"); this one applied
|
|
51
|
+
* it backwards at the single moment that ends the ceremony.
|
|
52
|
+
*/
|
|
53
|
+
export declare function assertTornDown(facts: TeardownFacts): void;
|
|
54
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/lib/ceremony/workspace.ts"],"names":[],"mappings":"AA4BA,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gEAAgE;IAChE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAkCxD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAsBzD"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Path: src/lib/ceremony/workspace.ts
|
|
2
|
+
//
|
|
3
|
+
// The scratch volume an escrow ceremony works in, and the proof that it is in
|
|
4
|
+
// RAM rather than on the disk.
|
|
5
|
+
//
|
|
6
|
+
// WHY A GATE AND NOT A CHECK OF THE RETURN CODE. Observed while building this,
|
|
7
|
+
// 2026-08-25:
|
|
8
|
+
//
|
|
9
|
+
// $ diskutil mount ... /dev/disk34<TAB> # malformed path
|
|
10
|
+
// Failed to find disk /dev/disk34
|
|
11
|
+
// $ head -c 32 /dev/urandom > /private/tmp/ceremony-ram/probe
|
|
12
|
+
// 32 bytes written: OK # on the SSD
|
|
13
|
+
//
|
|
14
|
+
// The mount point existed as an ordinary directory, so the write succeeded and
|
|
15
|
+
// nothing complained. Substitute the bootstrap key for random bytes and that is
|
|
16
|
+
// the root of the entire key hierarchy sitting on a general-purpose disk while
|
|
17
|
+
// the operator believes it is in volatile memory — undetectably, because
|
|
18
|
+
// everything downstream keeps working.
|
|
19
|
+
//
|
|
20
|
+
// The proximate cause was mundane (`tr -d ' '` does not strip the TABS that
|
|
21
|
+
// `hdiutil` emits). The lesson is not "use awk". It is that a workspace for key
|
|
22
|
+
// material must PROVE where it lives, from facts the system reports, rather
|
|
23
|
+
// than trust the exit status of the command that created it.
|
|
24
|
+
//
|
|
25
|
+
// HONEST LIMIT: macOS `ram://` is not Linux `tmpfs,noswap`. It is memory, but
|
|
26
|
+
// the system may page it. With FileVault, anything paged is encrypted at rest.
|
|
27
|
+
// This is stated in the ceremony protocol as a residual, not papered over.
|
|
28
|
+
/**
|
|
29
|
+
* Where a ceremony workspace is allowed to live.
|
|
30
|
+
*
|
|
31
|
+
* Pinned so teardown can find it and so a workspace cannot be created on top of
|
|
32
|
+
* an escrow device by a mistyped argument.
|
|
33
|
+
*/
|
|
34
|
+
export const CEREMONY_MOUNT_POINT = '/private/tmp/ceremony-ram';
|
|
35
|
+
/**
|
|
36
|
+
* Refuse to proceed unless the workspace is demonstrably RAM-backed and mounted
|
|
37
|
+
* where it is supposed to be.
|
|
38
|
+
*
|
|
39
|
+
* @throws with the observed facts named, because this aborts a ceremony that
|
|
40
|
+
* someone scheduled and possibly travelled for.
|
|
41
|
+
*/
|
|
42
|
+
export function assertRamBacked(facts) {
|
|
43
|
+
if (facts.imagePath === null) {
|
|
44
|
+
throw new Error(`The backing of ${facts.device} could not be determined — 'hdiutil info' ` +
|
|
45
|
+
'reported nothing for it. Absence of evidence is not evidence of RAM. ' +
|
|
46
|
+
'Refusing to place key material here.');
|
|
47
|
+
}
|
|
48
|
+
if (!facts.imagePath.startsWith('ram://')) {
|
|
49
|
+
throw new Error(`${facts.device} is NOT backed by RAM: its image-path is ${facts.imagePath}, ` +
|
|
50
|
+
'expected something beginning with ram://. A disk image on the SSD mounts ' +
|
|
51
|
+
'and behaves identically, so image-path is the only thing that tells them ' +
|
|
52
|
+
'apart. Refusing to place key material here.');
|
|
53
|
+
}
|
|
54
|
+
if (facts.mountPoint === null) {
|
|
55
|
+
throw new Error(`${facts.device} is ram-backed but NOT mounted. This is the dangerous case: ` +
|
|
56
|
+
`if ${CEREMONY_MOUNT_POINT} exists as an ordinary directory, every write ` +
|
|
57
|
+
'below succeeds and lands on the SSD, with nothing to indicate it. ' +
|
|
58
|
+
'Refusing to proceed.');
|
|
59
|
+
}
|
|
60
|
+
if (facts.mountPoint !== CEREMONY_MOUNT_POINT) {
|
|
61
|
+
throw new Error(`Unexpected mount point: the workspace is at ${facts.mountPoint}, not ` +
|
|
62
|
+
`${CEREMONY_MOUNT_POINT}. The location is pinned so teardown can find it, ` +
|
|
63
|
+
'and so a mistyped argument cannot turn an escrow device into the workspace.');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Refuse to close a ceremony while the workspace still exists.
|
|
68
|
+
*
|
|
69
|
+
* Unmounted is not destroyed: the RAM still holds the bytes and anyone can
|
|
70
|
+
* remount the device. Both facts have to be observed, and both have to be false.
|
|
71
|
+
*
|
|
72
|
+
* THE `null` CASE IS WHY THIS WAS REWRITTEN. The first version took plain
|
|
73
|
+
* booleans, and the fact-gatherer returned `false` both for "I looked and it is
|
|
74
|
+
* gone" and for "the command failed and I saw nothing". So a `mount` that could
|
|
75
|
+
* not run — ENOENT, a truncated buffer, a signal — read as proof of teardown,
|
|
76
|
+
* and the ceremony closed as COMPLETED over a live RAM disk still holding the
|
|
77
|
+
* bootstrap key. `assertRamBacked` had the opposite, correct policy three
|
|
78
|
+
* functions up ("absence of evidence is not evidence of RAM"); this one applied
|
|
79
|
+
* it backwards at the single moment that ends the ceremony.
|
|
80
|
+
*/
|
|
81
|
+
export function assertTornDown(facts) {
|
|
82
|
+
if (facts.stillMounted === null || facts.stillAttached === null) {
|
|
83
|
+
throw new Error(`Could not determine whether ${facts.device} is really gone: the system ` +
|
|
84
|
+
'commands that would have said so did not run. Refusing to record a ' +
|
|
85
|
+
'teardown that has not been observed — check by hand with ' +
|
|
86
|
+
`'mount' and 'hdiutil info' before closing the ceremony.`);
|
|
87
|
+
}
|
|
88
|
+
if (facts.stillMounted) {
|
|
89
|
+
throw new Error(`${facts.device} is still mounted. The workspace held key material; the ` +
|
|
90
|
+
'ceremony is not closed until it is gone.');
|
|
91
|
+
}
|
|
92
|
+
if (facts.stillAttached) {
|
|
93
|
+
throw new Error(`${facts.device} is unmounted but still attached. Unmounting does not ` +
|
|
94
|
+
'destroy it — the RAM still holds the bytes and the device can be ' +
|
|
95
|
+
'remounted. Detach it before closing the ceremony.');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/lib/ceremony/workspace.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,8EAA8E;AAC9E,+BAA+B;AAC/B,EAAE;AACF,+EAA+E;AAC/E,cAAc;AACd,EAAE;AACF,mEAAmE;AACnE,sCAAsC;AACtC,kEAAkE;AAClE,+DAA+D;AAC/D,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,uCAAuC;AACvC,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,4EAA4E;AAC5E,6DAA6D;AAC7D,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AA0B3E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,CAAC,MAAM,4CAA4C;YAC1E,uEAAuE;YACvE,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,MAAM,4CAA4C,KAAK,CAAC,SAAS,IAAI;YAC9E,2EAA2E;YAC3E,2EAA2E;YAC3E,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,MAAM,8DAA8D;YAC7E,MAAM,oBAAoB,gDAAgD;YAC1E,oEAAoE;YACpE,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,KAAK,oBAAoB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,+CAA+C,KAAK,CAAC,UAAU,QAAQ;YACvE,GAAG,oBAAoB,oDAAoD;YAC3E,6EAA6E,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,CAAC,MAAM,8BAA8B;YACzE,qEAAqE;YACrE,2DAA2D;YAC3D,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,MAAM,0DAA0D;YACzE,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,MAAM,wDAAwD;YACvE,mEAAmE;YACnE,mDAAmD,CACpD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -8,7 +8,7 @@ export { CONFIG_DEFAULTS, DEFAULT_PROFILE } from './types.js';
|
|
|
8
8
|
export { store, setRuntimeProfile, resetConfig, getConfigPath, _resetStoreInstance } from './store.js';
|
|
9
9
|
export { ensureMigrated, resetMigrationState } from './migration.js';
|
|
10
10
|
export { invalidateProfileCache, invalidateAllProfileCaches, invalidateConfigCache, invalidateAllCaches, getCacheStats, } from './cache.js';
|
|
11
|
-
export { getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, } from './profile.js';
|
|
11
|
+
export { getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, listProfileNames, profileExists, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, } from './profile.js';
|
|
12
12
|
export { storeCredentials, clearCredentials, getCredentials, isTokenExpired, hasEnvCredentials, getEnvCredentials, decodeRefreshJti, writePendingRefreshMarker, decidePendingRefresh, logPendingRefreshRecovery, type MarkerDecision, } from './credentials.js';
|
|
13
13
|
export { hasApiKey, getApiKey, storeApiKey, getStoredApiKeyInfo, clearApiKey, getStoredApiKey, } from './apikey.js';
|
|
14
14
|
export { getPlugins, addPlugin, removePlugin, setPluginEnabled, clearPlugins, } from './plugins.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAGH,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGvG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EAEjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAGH,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGvG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EAEjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC"}
|
package/dist/lib/config/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { ensureMigrated, resetMigrationState } from './migration.js';
|
|
|
7
7
|
// Cache
|
|
8
8
|
export { invalidateProfileCache, invalidateAllProfileCaches, invalidateConfigCache, invalidateAllCaches, getCacheStats, } from './cache.js';
|
|
9
9
|
// Profile management
|
|
10
|
-
export { getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, } from './profile.js';
|
|
10
|
+
export { getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, listProfileNames, profileExists, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, } from './profile.js';
|
|
11
11
|
// Credentials
|
|
12
12
|
export { storeCredentials, clearCredentials, getCredentials, isTokenExpired, hasEnvCredentials, getEnvCredentials,
|
|
13
13
|
// refresh-token-race-fix §A.1 additions:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAUhC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvG,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErE,QAAQ;AACR,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,qBAAqB;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,cAAc;AACd,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB;AACjB,yCAAyC;AACzC,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAE1B,UAAU;AACV,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,UAAU;AACV,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,yBAAyB;AACzB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,aAAa;AACb,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AAEzB,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,yCAAyC;AACzC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAUhC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvG,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErE,QAAQ;AACR,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,qBAAqB;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,cAAc;AACd,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB;AACjB,yCAAyC;AACzC,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,GAE1B,MAAM,kBAAkB,CAAC;AAE1B,UAAU;AACV,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,UAAU;AACV,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,yBAAyB;AACzB,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,aAAa;AACb,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AAEzB,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,yCAAyC;AACzC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAC"}
|
|
@@ -15,6 +15,20 @@ export declare function saveProfile(profileName: string, profile: Profile): void
|
|
|
15
15
|
* List all profiles
|
|
16
16
|
*/
|
|
17
17
|
export declare function listProfiles(): ProfileInfo[];
|
|
18
|
+
/**
|
|
19
|
+
* Names of every configured profile, sorted.
|
|
20
|
+
*/
|
|
21
|
+
export declare function listProfileNames(): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Whether a profile with this exact name is configured.
|
|
24
|
+
*
|
|
25
|
+
* Used to fail closed on an explicitly requested profile that does not exist.
|
|
26
|
+
* `getCurrentProfile()` deliberately falls back to CONFIG_DEFAULTS for a
|
|
27
|
+
* missing profile so a fresh install still works; that fallback points at
|
|
28
|
+
* localhost, which is the right default and the wrong answer when an operator
|
|
29
|
+
* typed `--profile <name>` for a remote deployment.
|
|
30
|
+
*/
|
|
31
|
+
export declare function profileExists(name: string): boolean;
|
|
18
32
|
/**
|
|
19
33
|
* Create a new profile
|
|
20
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/lib/config/profile.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoC,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9F;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAqB3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOvE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAW5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiClH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmBhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBpE"}
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/lib/config/profile.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoC,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9F;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAqB3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOvE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAW5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAI3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiClH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmBhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBpE"}
|
|
@@ -59,6 +59,28 @@ export function listProfiles() {
|
|
|
59
59
|
hasApiKey: !!profile.apiKey,
|
|
60
60
|
}));
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Names of every configured profile, sorted.
|
|
64
|
+
*/
|
|
65
|
+
export function listProfileNames() {
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed for test mocks
|
|
67
|
+
const profiles = store.get('profiles') ?? {};
|
|
68
|
+
return Object.keys(profiles).sort();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Whether a profile with this exact name is configured.
|
|
72
|
+
*
|
|
73
|
+
* Used to fail closed on an explicitly requested profile that does not exist.
|
|
74
|
+
* `getCurrentProfile()` deliberately falls back to CONFIG_DEFAULTS for a
|
|
75
|
+
* missing profile so a fresh install still works; that fallback points at
|
|
76
|
+
* localhost, which is the right default and the wrong answer when an operator
|
|
77
|
+
* typed `--profile <name>` for a remote deployment.
|
|
78
|
+
*/
|
|
79
|
+
export function profileExists(name) {
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed for test mocks
|
|
81
|
+
const profiles = store.get('profiles') ?? {};
|
|
82
|
+
return Object.prototype.hasOwnProperty.call(profiles, name);
|
|
83
|
+
}
|
|
62
84
|
/**
|
|
63
85
|
* Create a new profile
|
|
64
86
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/lib/config/profile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/lib/config/profile.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* This file maintains backward compatibility by re-exporting from the
|
|
5
5
|
* modularized config/ directory structure.
|
|
6
6
|
*/
|
|
7
|
-
export { type Profile, type ConfigStore, type ProfileInfo, type ApiKeyInfo, CONFIG_DEFAULTS, DEFAULT_PROFILE, store, setRuntimeProfile, resetConfig, getConfigPath, ensureMigrated, resetMigrationState, invalidateProfileCache, invalidateAllProfileCaches, invalidateConfigCache, invalidateAllCaches, getCacheStats, getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, storeCredentials, clearCredentials, getCredentials, isTokenExpired, hasEnvCredentials, getEnvCredentials, decodeRefreshJti, writePendingRefreshMarker, decidePendingRefresh, logPendingRefreshRecovery, type MarkerDecision, hasApiKey, getApiKey, storeApiKey, getStoredApiKeyInfo, clearApiKey, getStoredApiKey, getPlugins, addPlugin, removePlugin, setPluginEnabled, clearPlugins, getConfig, getConfigValue, setConfigValue, getEffectiveUrl, getAllConfig, validateEnvironment, assertValidEnvironment, getValidatedEnvCredentials, getValidatedApiKey, getValidatedUrl, type ValidationResult, storeAutoUnsealSecret, getAutoUnsealSecret, hasAutoUnsealSecret, clearAutoUnsealSecret, generateTOTPCode, parseOTPAuthURI, } from './config/index.js';
|
|
7
|
+
export { type Profile, type ConfigStore, type ProfileInfo, type ApiKeyInfo, CONFIG_DEFAULTS, DEFAULT_PROFILE, store, setRuntimeProfile, resetConfig, getConfigPath, ensureMigrated, resetMigrationState, invalidateProfileCache, invalidateAllProfileCaches, invalidateConfigCache, invalidateAllCaches, getCacheStats, getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, listProfileNames, profileExists, createProfile, deleteProfile, switchProfile, getProfile, renameProfile, storeCredentials, clearCredentials, getCredentials, isTokenExpired, hasEnvCredentials, getEnvCredentials, decodeRefreshJti, writePendingRefreshMarker, decidePendingRefresh, logPendingRefreshRecovery, type MarkerDecision, hasApiKey, getApiKey, storeApiKey, getStoredApiKeyInfo, clearApiKey, getStoredApiKey, getPlugins, addPlugin, removePlugin, setPluginEnabled, clearPlugins, getConfig, getConfigValue, setConfigValue, getEffectiveUrl, getAllConfig, validateEnvironment, assertValidEnvironment, getValidatedEnvCredentials, getValidatedApiKey, getValidatedUrl, type ValidationResult, storeAutoUnsealSecret, getAutoUnsealSecret, hasAutoUnsealSecret, clearAutoUnsealSecret, generateTOTPCode, parseOTPAuthURI, } from './config/index.js';
|
|
8
8
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,eAAe,EACf,eAAe,EAGf,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,aAAa,EAGb,cAAc,EACd,mBAAmB,EAGnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EAGb,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EAGb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,cAAc,EAGnB,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,EAGf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EAGZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EAGZ,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,EAGrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,eAAe,EACf,eAAe,EAGf,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,aAAa,EAGb,cAAc,EACd,mBAAmB,EAGnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EAGb,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EAGb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,cAAc,EAGnB,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe,EAGf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EAGZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EAGZ,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,KAAK,gBAAgB,EAGrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -13,7 +13,7 @@ ensureMigrated, resetMigrationState,
|
|
|
13
13
|
// Cache
|
|
14
14
|
invalidateProfileCache, invalidateAllProfileCaches, invalidateConfigCache, invalidateAllCaches, getCacheStats,
|
|
15
15
|
// Profile management
|
|
16
|
-
getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, createProfile, deleteProfile, switchProfile, getProfile, renameProfile,
|
|
16
|
+
getActiveProfileName, getCurrentProfile, saveProfile, listProfiles, listProfileNames, profileExists, createProfile, deleteProfile, switchProfile, getProfile, renameProfile,
|
|
17
17
|
// Credentials
|
|
18
18
|
storeCredentials, clearCredentials, getCredentials, isTokenExpired, hasEnvCredentials, getEnvCredentials, decodeRefreshJti, writePendingRefreshMarker, decidePendingRefresh, logPendingRefreshRecovery,
|
|
19
19
|
// API key
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B;;;;;GAKG;AAEH,OAAO,EAML,eAAe,EACf,eAAe;AAEf,QAAQ;AACR,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,aAAa;AAEb,YAAY;AACZ,cAAc,EACd,mBAAmB;AAEnB,QAAQ;AACR,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa;AAEb,qBAAqB;AACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa;AAEb,cAAc;AACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB;AAGzB,UAAU;AACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe;AAEf,UAAU;AACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY;AAEZ,yBAAyB;AACzB,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY;AAEZ,aAAa;AACb,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe;AAGf,cAAc;AACd,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B;;;;;GAKG;AAEH,OAAO,EAML,eAAe,EACf,eAAe;AAEf,QAAQ;AACR,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,aAAa;AAEb,YAAY;AACZ,cAAc,EACd,mBAAmB;AAEnB,QAAQ;AACR,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa;AAEb,qBAAqB;AACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa;AAEb,cAAc;AACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB;AAGzB,UAAU;AACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,eAAe;AAEf,UAAU;AACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY;AAEZ,yBAAyB;AACzB,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY;AAEZ,aAAa;AACb,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe;AAGf,cAAc;AACd,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
package/dist/lib/db/index.d.ts
CHANGED
|
@@ -2,8 +2,12 @@ import { TenantOperations } from './tenants.js';
|
|
|
2
2
|
import { UserOperations } from './users.js';
|
|
3
3
|
import { LockdownOperations } from './lockdown.js';
|
|
4
4
|
import { AuditOperations } from './audit.js';
|
|
5
|
-
import type { LmkEscrowDatabaseSnapshot } from './lmk-escrow.js';
|
|
5
|
+
import type { LmkEscrowDatabaseSnapshot, RootKeyEnvelopeRow } from './lmk-escrow.js';
|
|
6
|
+
import type { PreflightDatabaseSnapshot } from './preflight.js';
|
|
6
7
|
export * from './types.js';
|
|
8
|
+
export type { RootKeyEnvelopeRow } from './lmk-escrow.js';
|
|
9
|
+
export type { PreflightDatabaseSnapshot } from './preflight.js';
|
|
10
|
+
export { PreflightOperations } from './preflight.js';
|
|
7
11
|
export type { LmkEscrowActiveRotation, LmkEscrowAuditHead, LmkEscrowBackupBinding, LmkEscrowDatabaseSnapshot, LmkEscrowVersionRow, } from './lmk-escrow.js';
|
|
8
12
|
/**
|
|
9
13
|
* Composite database client that combines all operation modules.
|
|
@@ -17,6 +21,7 @@ export declare class LocalDBClient {
|
|
|
17
21
|
private auditOps;
|
|
18
22
|
private emergencyOps;
|
|
19
23
|
private lmkEscrowOps;
|
|
24
|
+
private preflightOps;
|
|
20
25
|
constructor();
|
|
21
26
|
connect(): Promise<void>;
|
|
22
27
|
close(): Promise<void>;
|
|
@@ -41,6 +46,9 @@ export declare class LocalDBClient {
|
|
|
41
46
|
unlockUser: (username: string) => Promise<import("./emergency.js").OperationResult>;
|
|
42
47
|
disableTotp: (username: string) => Promise<import("./emergency.js").OperationResult>;
|
|
43
48
|
captureLmkEscrow: (backupId?: string) => Promise<LmkEscrowDatabaseSnapshot>;
|
|
49
|
+
getRootKeyEnvelope: (providerId: string) => Promise<RootKeyEnvelopeRow | null>;
|
|
50
|
+
listRootKeyEnvelopeProviders: () => Promise<string[]>;
|
|
51
|
+
capturePreflight: () => Promise<PreflightDatabaseSnapshot>;
|
|
44
52
|
}
|
|
45
53
|
/**
|
|
46
54
|
* Legacy EmergencyDBClient class (alias for LocalDBClient)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/db/index.js
CHANGED
|
@@ -15,8 +15,10 @@ import { LockdownOperations } from './lockdown.js';
|
|
|
15
15
|
import { AuditOperations } from './audit.js';
|
|
16
16
|
import { EmergencyOperations } from './emergency.js';
|
|
17
17
|
import { LmkEscrowOperations } from './lmk-escrow.js';
|
|
18
|
+
import { PreflightOperations } from './preflight.js';
|
|
18
19
|
// Re-export types
|
|
19
20
|
export * from './types.js';
|
|
21
|
+
export { PreflightOperations } from './preflight.js';
|
|
20
22
|
/**
|
|
21
23
|
* Composite database client that combines all operation modules.
|
|
22
24
|
* Uses composition pattern to delegate to specialized operation classes.
|
|
@@ -29,6 +31,7 @@ export class LocalDBClient {
|
|
|
29
31
|
auditOps;
|
|
30
32
|
emergencyOps;
|
|
31
33
|
lmkEscrowOps;
|
|
34
|
+
preflightOps;
|
|
32
35
|
constructor() {
|
|
33
36
|
// All operations share the same connection strategy via BaseDBClient
|
|
34
37
|
this.healthOps = new HealthOperations();
|
|
@@ -38,6 +41,7 @@ export class LocalDBClient {
|
|
|
38
41
|
this.auditOps = new AuditOperations();
|
|
39
42
|
this.emergencyOps = new EmergencyOperations();
|
|
40
43
|
this.lmkEscrowOps = new LmkEscrowOperations();
|
|
44
|
+
this.preflightOps = new PreflightOperations();
|
|
41
45
|
}
|
|
42
46
|
// Connection management - delegate to health ops (or any op, they all have the same base)
|
|
43
47
|
async connect() {
|
|
@@ -53,6 +57,7 @@ export class LocalDBClient {
|
|
|
53
57
|
this.auditOps.close(),
|
|
54
58
|
this.emergencyOps.close(),
|
|
55
59
|
this.lmkEscrowOps.close(),
|
|
60
|
+
this.preflightOps.close(),
|
|
56
61
|
]);
|
|
57
62
|
}
|
|
58
63
|
async disconnect() {
|
|
@@ -85,6 +90,10 @@ export class LocalDBClient {
|
|
|
85
90
|
disableTotp = (username) => this.emergencyOps.disableTotp(username);
|
|
86
91
|
// ============ Local LMK Escrow (read-only DB capture) ============
|
|
87
92
|
captureLmkEscrow = (backupId) => this.lmkEscrowOps.capture(backupId);
|
|
93
|
+
getRootKeyEnvelope = (providerId) => this.lmkEscrowOps.getRootKeyEnvelope(providerId);
|
|
94
|
+
listRootKeyEnvelopeProviders = () => this.lmkEscrowOps.listRootKeyEnvelopeProviders();
|
|
95
|
+
// ============ BSK rotation preflight (read-only DB capture) ============
|
|
96
|
+
capturePreflight = () => this.preflightOps.capture();
|
|
88
97
|
}
|
|
89
98
|
// ============ Legacy exports for backward compatibility ============
|
|
90
99
|
/**
|
package/dist/lib/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/db/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B;;;mGAGmG;AAEnG;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/db/index.ts"],"names":[],"mappings":"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"}
|