@zincapp/znvault-cli 4.17.0 → 4.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +22 -0
  2. package/dist/commands/kms/crud.d.ts.map +1 -1
  3. package/dist/commands/kms/crud.js +21 -5
  4. package/dist/commands/kms/crud.js.map +1 -1
  5. package/dist/commands/kms/crypto.js +2 -2
  6. package/dist/commands/kms/crypto.js.map +1 -1
  7. package/dist/commands/kms/helpers.d.ts +12 -0
  8. package/dist/commands/kms/helpers.d.ts.map +1 -1
  9. package/dist/commands/kms/helpers.js +15 -1
  10. package/dist/commands/kms/helpers.js.map +1 -1
  11. package/dist/commands/kms/index.d.ts.map +1 -1
  12. package/dist/commands/kms/index.js +4 -0
  13. package/dist/commands/kms/index.js.map +1 -1
  14. package/dist/commands/kms/lifecycle.js +5 -5
  15. package/dist/commands/kms/lifecycle.js.map +1 -1
  16. package/dist/commands/kms/policy.d.ts.map +1 -1
  17. package/dist/commands/kms/policy.js +5 -4
  18. package/dist/commands/kms/policy.js.map +1 -1
  19. package/dist/commands/kms/prehash.d.ts +13 -0
  20. package/dist/commands/kms/prehash.d.ts.map +1 -0
  21. package/dist/commands/kms/prehash.js +42 -0
  22. package/dist/commands/kms/prehash.js.map +1 -0
  23. package/dist/commands/kms/types.d.ts +6 -0
  24. package/dist/commands/kms/types.d.ts.map +1 -1
  25. package/dist/commands/lmk-escrow.d.ts +3 -0
  26. package/dist/commands/lmk-escrow.d.ts.map +1 -0
  27. package/dist/commands/lmk-escrow.js +141 -0
  28. package/dist/commands/lmk-escrow.js.map +1 -0
  29. package/dist/commands/lmk.d.ts.map +1 -1
  30. package/dist/commands/lmk.js +9 -5
  31. package/dist/commands/lmk.js.map +1 -1
  32. package/dist/lib/db/index.d.ts +4 -0
  33. package/dist/lib/db/index.d.ts.map +1 -1
  34. package/dist/lib/db/index.js +6 -0
  35. package/dist/lib/db/index.js.map +1 -1
  36. package/dist/lib/db/lmk-escrow.d.ts +59 -0
  37. package/dist/lib/db/lmk-escrow.d.ts.map +1 -0
  38. package/dist/lib/db/lmk-escrow.js +119 -0
  39. package/dist/lib/db/lmk-escrow.js.map +1 -0
  40. package/dist/lib/lmk-escrow.d.ts +51 -0
  41. package/dist/lib/lmk-escrow.d.ts.map +1 -0
  42. package/dist/lib/lmk-escrow.js +553 -0
  43. package/dist/lib/lmk-escrow.js.map +1 -0
  44. package/dist/lib/local.d.ts.map +1 -1
  45. package/dist/lib/local.js +4 -0
  46. package/dist/lib/local.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,553 @@
1
+ // Path: src/lib/lmk-escrow.ts
2
+ import { closeSync, constants as fsConstants, fchmodSync, fsyncSync, lstatSync, openSync, readFileSync, realpathSync, statSync, writeSync, } from 'node:fs';
3
+ import { createDecipheriv, createHash, timingSafeEqual, } from 'node:crypto';
4
+ import { dirname, isAbsolute, join, normalize, resolve, sep } from 'node:path';
5
+ const MAGIC = Buffer.from('ZNVAULT-LMK-ESCROW\n', 'ascii');
6
+ const FORMAT_VERSION = 1;
7
+ const DIGEST_BYTES = 32;
8
+ const BSK_BYTES = 32;
9
+ const WRAPPED_LMK_BYTES = 61;
10
+ const MAX_BUNDLE_BYTES = 1024 * 1024;
11
+ const MAX_METADATA_BYTES = 256 * 1024;
12
+ const MAX_LMK_VERSIONS = 4096;
13
+ function toIso(value) {
14
+ if (value === null)
15
+ return null;
16
+ const date = value instanceof Date ? value : new Date(value);
17
+ if (Number.isNaN(date.valueOf())) {
18
+ throw new Error(`Invalid timestamp in LMK escrow source: ${String(value)}`);
19
+ }
20
+ return date.toISOString();
21
+ }
22
+ function sha256(buffer) {
23
+ return createHash('sha256').update(buffer).digest();
24
+ }
25
+ function sha256Hex(buffer) {
26
+ return sha256(buffer).toString('hex');
27
+ }
28
+ function validateCopyLabel(label) {
29
+ if (!/^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$/.test(label)) {
30
+ throw new Error('Copy label must be 1-32 characters: letters, digits, _ or -');
31
+ }
32
+ }
33
+ function validateWrappedLmk(bsk, wrapped, version) {
34
+ if (wrapped.length !== WRAPPED_LMK_BYTES) {
35
+ throw new Error(`LMK version ${String(version)} has ${String(wrapped.length)} wrapped bytes; expected ${String(WRAPPED_LMK_BYTES)}`);
36
+ }
37
+ if (wrapped[0] !== 0x01) {
38
+ throw new Error(`LMK version ${String(version)} uses an unsupported wrap format`);
39
+ }
40
+ const nonce = wrapped.subarray(1, 13);
41
+ const ciphertext = wrapped.subarray(13, 45);
42
+ const tag = wrapped.subarray(45, 61);
43
+ const decipher = createDecipheriv('aes-256-gcm', bsk, nonce);
44
+ decipher.setAAD(Buffer.from(`lmk_version=${String(version)}`, 'utf8'));
45
+ decipher.setAuthTag(tag);
46
+ let material = null;
47
+ let finalBlock = null;
48
+ try {
49
+ material = decipher.update(ciphertext);
50
+ finalBlock = decipher.final();
51
+ if (material.length + finalBlock.length !== BSK_BYTES) {
52
+ throw new Error(`LMK version ${String(version)} did not unwrap to 32 bytes`);
53
+ }
54
+ }
55
+ catch (error) {
56
+ throw new Error(`LMK version ${String(version)} cannot be authenticated with this BSK: ${error instanceof Error ? error.message : String(error)}`);
57
+ }
58
+ finally {
59
+ material?.fill(0);
60
+ finalBlock?.fill(0);
61
+ }
62
+ }
63
+ function buildMetadata(options) {
64
+ const { snapshot } = options;
65
+ validateCopyLabel(options.copyLabel);
66
+ if (options.bsk.length !== BSK_BYTES) {
67
+ throw new Error(`BSK must be exactly ${String(BSK_BYTES)} bytes`);
68
+ }
69
+ if (snapshot.versions.length === 0) {
70
+ throw new Error('No positive LMK versions were found in PostgreSQL');
71
+ }
72
+ if (snapshot.versions.length > MAX_LMK_VERSIONS) {
73
+ throw new Error('LMK version count exceeds the escrow format limit');
74
+ }
75
+ const versions = [...snapshot.versions].sort((left, right) => left.version - right.version);
76
+ const seen = new Set();
77
+ for (const version of versions) {
78
+ if (!Number.isSafeInteger(version.version) || version.version <= 0 || seen.has(version.version)) {
79
+ throw new Error(`Invalid or duplicate LMK version: ${String(version.version)}`);
80
+ }
81
+ seen.add(version.version);
82
+ if (version.wrappedLmk !== null) {
83
+ validateWrappedLmk(options.bsk, version.wrappedLmk, version.version);
84
+ }
85
+ }
86
+ const active = versions.filter((version) => version.status === 'ACTIVE');
87
+ if (active.length !== 1) {
88
+ throw new Error(`Expected exactly one ACTIVE positive LMK version, found ${String(active.length)}`);
89
+ }
90
+ if (active[0]?.wrappedLmk === null) {
91
+ throw new Error(`ACTIVE LMK version ${String(active[0].version)} has no recoverable material`);
92
+ }
93
+ if (snapshot.backup === null && !options.allowUnboundBackup) {
94
+ throw new Error('A VERIFIED backup binding is required (or explicitly use the lab-only unbound mode)');
95
+ }
96
+ if (snapshot.backup !== null &&
97
+ snapshot.activeRotation !== null &&
98
+ snapshot.activeRotation.startedAt !== null &&
99
+ snapshot.backup.completedAt.valueOf() < snapshot.activeRotation.startedAt.valueOf()) {
100
+ throw new Error(`Backup ${snapshot.backup.id} predates active rotation ${snapshot.activeRotation.rotationId}`);
101
+ }
102
+ const backup = snapshot.backup === null
103
+ ? { state: 'UNBOUND_LAB_ONLY' }
104
+ : {
105
+ state: 'VERIFIED',
106
+ id: snapshot.backup.id,
107
+ filename: snapshot.backup.filename,
108
+ checksum: snapshot.backup.checksum,
109
+ encrypted: true,
110
+ completedAt: toIso(snapshot.backup.completedAt) ?? '',
111
+ verifiedAt: toIso(snapshot.backup.verifiedAt) ?? '',
112
+ };
113
+ return {
114
+ format: 'znvault-lmk-escrow',
115
+ formatVersion: 1,
116
+ createdAt: new Date().toISOString(),
117
+ copyLabel: options.copyLabel,
118
+ operator: options.operator,
119
+ source: {
120
+ hostname: options.hostname,
121
+ vaultVersion: options.vaultVersion,
122
+ cliVersion: options.cliVersion,
123
+ nodeVersion: process.version,
124
+ databaseName: snapshot.databaseName,
125
+ postgresVersion: snapshot.postgresVersion,
126
+ capturedAt: toIso(snapshot.capturedAt) ?? '',
127
+ walLsn: snapshot.walLsn,
128
+ transactionSnapshot: snapshot.transactionSnapshot,
129
+ latestMigration: snapshot.latestMigration,
130
+ },
131
+ backup,
132
+ bskSha256: sha256Hex(options.bsk),
133
+ activeLmkVersion: active[0].version,
134
+ allAvailableVersionsRecoverable: versions.every((version) => version.wrappedLmk !== null),
135
+ lmkVersions: versions.map((version) => ({
136
+ version: version.version,
137
+ keyId: version.keyId,
138
+ status: version.status,
139
+ createdAt: toIso(version.createdAt),
140
+ activatedAt: toIso(version.activatedAt),
141
+ deprecatedAt: toIso(version.deprecatedAt),
142
+ retiredAt: toIso(version.retiredAt),
143
+ description: version.description,
144
+ createdBy: version.createdBy,
145
+ rotatedFromVersion: version.rotatedFromVersion,
146
+ deksMigratedCount: version.deksMigratedCount,
147
+ deksPendingCount: version.deksPendingCount,
148
+ materialState: version.wrappedLmk === null ? 'UNRECOVERABLE' : 'WRAPPED',
149
+ wrappedBytes: version.wrappedLmk?.length ?? 0,
150
+ })),
151
+ auditHead: snapshot.auditHead === null ? null : {
152
+ id: snapshot.auditHead.id,
153
+ timestamp: toIso(snapshot.auditHead.timestamp),
154
+ currentHmacBase64: snapshot.auditHead.currentHmac.toString('base64'),
155
+ lmkVersion: snapshot.auditHead.lmkVersion,
156
+ hmacFormatVersion: snapshot.auditHead.hmacFormatVersion,
157
+ },
158
+ activeRotation: snapshot.activeRotation === null ? null : {
159
+ rotationId: snapshot.activeRotation.rotationId,
160
+ oldLmkVersion: snapshot.activeRotation.oldLmkVersion,
161
+ newLmkVersion: snapshot.activeRotation.newLmkVersion,
162
+ status: snapshot.activeRotation.status,
163
+ startedAt: toIso(snapshot.activeRotation.startedAt),
164
+ },
165
+ };
166
+ }
167
+ /**
168
+ * Build the compact binary custody bundle entirely in memory. Callers must
169
+ * overwrite the returned Buffer after the direct write completes.
170
+ */
171
+ export function buildLmkEscrowBundle(options) {
172
+ const metadata = buildMetadata(options);
173
+ const metadataBytes = Buffer.from(JSON.stringify(metadata), 'utf8');
174
+ if (metadataBytes.length > MAX_METADATA_BYTES) {
175
+ throw new Error('LMK escrow metadata exceeds the format limit');
176
+ }
177
+ const versions = [...options.snapshot.versions].sort((left, right) => left.version - right.version);
178
+ const fixed = Buffer.alloc(MAGIC.length + 2 + 4 + 2 + 2);
179
+ let offset = 0;
180
+ MAGIC.copy(fixed, offset);
181
+ offset += MAGIC.length;
182
+ fixed.writeUInt16BE(FORMAT_VERSION, offset);
183
+ offset += 2;
184
+ fixed.writeUInt32BE(metadataBytes.length, offset);
185
+ offset += 4;
186
+ fixed.writeUInt16BE(options.bsk.length, offset);
187
+ offset += 2;
188
+ fixed.writeUInt16BE(versions.length, offset);
189
+ const bskCopy = Buffer.from(options.bsk);
190
+ const rowBuffers = versions.map((version) => {
191
+ const wrappedLength = version.wrappedLmk?.length ?? 0;
192
+ const row = Buffer.alloc(4 + 2 + wrappedLength);
193
+ row.writeUInt32BE(version.version, 0);
194
+ row.writeUInt16BE(wrappedLength, 4);
195
+ version.wrappedLmk?.copy(row, 6);
196
+ return row;
197
+ });
198
+ const body = Buffer.concat([fixed, metadataBytes, bskCopy, ...rowBuffers]);
199
+ const digest = sha256(body);
200
+ const bundle = Buffer.concat([body, digest]);
201
+ bskCopy.fill(0);
202
+ body.fill(0);
203
+ for (const row of rowBuffers)
204
+ row.fill(0);
205
+ if (bundle.length > MAX_BUNDLE_BYTES) {
206
+ bundle.fill(0);
207
+ throw new Error('LMK escrow bundle exceeds the format limit');
208
+ }
209
+ return bundle;
210
+ }
211
+ function isRecord(value) {
212
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
213
+ }
214
+ function isPositiveSafeInteger(value) {
215
+ return Number.isSafeInteger(value) && typeof value === 'number' && value > 0;
216
+ }
217
+ function validateSafeIdentifier(value, field) {
218
+ if (typeof value !== 'string' ||
219
+ !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,255}$/.test(value)) {
220
+ throw new Error(`Invalid ${field} in LMK escrow metadata`);
221
+ }
222
+ }
223
+ function validateIsoTimestamp(value, field) {
224
+ if (typeof value !== 'string' || toIso(value) !== value) {
225
+ throw new Error(`Invalid ${field} in LMK escrow metadata`);
226
+ }
227
+ }
228
+ function validateMetadata(decoded) {
229
+ if (typeof decoded.copyLabel !== 'string') {
230
+ throw new Error('LMK escrow metadata has an invalid copy label');
231
+ }
232
+ validateCopyLabel(decoded.copyLabel);
233
+ validateIsoTimestamp(decoded.createdAt, 'creation timestamp');
234
+ if (typeof decoded.bskSha256 !== 'string' ||
235
+ !/^[a-f0-9]{64}$/.test(decoded.bskSha256)) {
236
+ throw new Error('LMK escrow metadata has an invalid BSK fingerprint');
237
+ }
238
+ if (!isPositiveSafeInteger(decoded.activeLmkVersion)) {
239
+ throw new Error('LMK escrow metadata has an invalid active LMK version');
240
+ }
241
+ if (typeof decoded.allAvailableVersionsRecoverable !== 'boolean') {
242
+ throw new Error('LMK escrow metadata has an invalid recoverability summary');
243
+ }
244
+ if (!Array.isArray(decoded.lmkVersions) || decoded.lmkVersions.length === 0) {
245
+ throw new Error('LMK escrow metadata has no LMK version inventory');
246
+ }
247
+ if (decoded.lmkVersions.length > MAX_LMK_VERSIONS) {
248
+ throw new Error('LMK escrow metadata exceeds the LMK version limit');
249
+ }
250
+ for (const [index, value] of decoded.lmkVersions.entries()) {
251
+ if (!isRecord(value)) {
252
+ throw new Error(`LMK escrow metadata version ${String(index)} is not an object`);
253
+ }
254
+ if (!isPositiveSafeInteger(value.version)) {
255
+ throw new Error(`LMK escrow metadata version ${String(index)} has an invalid number`);
256
+ }
257
+ if (!['ACTIVE', 'DEPRECATED', 'RETIRED'].includes(String(value.status))) {
258
+ throw new Error(`LMK version ${String(value.version)} has an invalid status`);
259
+ }
260
+ if (value.materialState !== 'WRAPPED' && value.materialState !== 'UNRECOVERABLE') {
261
+ throw new Error(`LMK version ${String(value.version)} has an invalid material state`);
262
+ }
263
+ if (!Number.isSafeInteger(value.wrappedBytes) ||
264
+ typeof value.wrappedBytes !== 'number' ||
265
+ value.wrappedBytes < 0) {
266
+ throw new Error(`LMK version ${String(value.version)} has an invalid wrapped byte count`);
267
+ }
268
+ }
269
+ if (!isRecord(decoded.backup)) {
270
+ throw new Error('LMK escrow metadata has an invalid backup binding');
271
+ }
272
+ if (decoded.backup.state === 'VERIFIED') {
273
+ validateSafeIdentifier(decoded.backup.id, 'backup ID');
274
+ }
275
+ else if (decoded.backup.state !== 'UNBOUND_LAB_ONLY') {
276
+ throw new Error('LMK escrow metadata has an invalid backup state');
277
+ }
278
+ if (decoded.activeRotation !== null) {
279
+ if (!isRecord(decoded.activeRotation)) {
280
+ throw new Error('LMK escrow metadata has an invalid active rotation');
281
+ }
282
+ validateSafeIdentifier(decoded.activeRotation.rotationId, 'rotation ID');
283
+ }
284
+ }
285
+ function parseMetadata(bytes) {
286
+ let decoded;
287
+ try {
288
+ decoded = JSON.parse(bytes.toString('utf8'));
289
+ }
290
+ catch (error) {
291
+ throw new Error(`Invalid LMK escrow metadata JSON: ${error instanceof Error ? error.message : String(error)}`);
292
+ }
293
+ if (!isRecord(decoded))
294
+ throw new Error('LMK escrow metadata must be an object');
295
+ if (decoded.format !== 'znvault-lmk-escrow' || decoded.formatVersion !== FORMAT_VERSION) {
296
+ throw new Error('LMK escrow metadata format/version mismatch');
297
+ }
298
+ validateMetadata(decoded);
299
+ return decoded;
300
+ }
301
+ function parseBundle(bundle) {
302
+ if (bundle.length > MAX_BUNDLE_BYTES)
303
+ throw new Error('LMK escrow bundle is too large');
304
+ const minimum = MAGIC.length + 2 + 4 + 2 + 2 + BSK_BYTES + DIGEST_BYTES;
305
+ if (bundle.length < minimum)
306
+ throw new Error('LMK escrow bundle is truncated');
307
+ const bodyEnd = bundle.length - DIGEST_BYTES;
308
+ const actualDigest = bundle.subarray(bodyEnd);
309
+ const expectedDigest = sha256(bundle.subarray(0, bodyEnd));
310
+ if (!timingSafeEqual(actualDigest, expectedDigest)) {
311
+ throw new Error('LMK escrow bundle checksum mismatch');
312
+ }
313
+ let offset = 0;
314
+ if (!timingSafeEqual(bundle.subarray(0, MAGIC.length), MAGIC)) {
315
+ throw new Error('LMK escrow bundle magic mismatch');
316
+ }
317
+ offset += MAGIC.length;
318
+ const version = bundle.readUInt16BE(offset);
319
+ offset += 2;
320
+ if (version !== FORMAT_VERSION) {
321
+ throw new Error(`Unsupported LMK escrow format version: ${String(version)}`);
322
+ }
323
+ const metadataLength = bundle.readUInt32BE(offset);
324
+ offset += 4;
325
+ const bskLength = bundle.readUInt16BE(offset);
326
+ offset += 2;
327
+ const versionCount = bundle.readUInt16BE(offset);
328
+ offset += 2;
329
+ if (metadataLength > MAX_METADATA_BYTES || offset + metadataLength > bodyEnd) {
330
+ throw new Error('Invalid LMK escrow metadata length');
331
+ }
332
+ if (bskLength !== BSK_BYTES)
333
+ throw new Error('Invalid BSK length in LMK escrow bundle');
334
+ if (versionCount === 0 || versionCount > MAX_LMK_VERSIONS) {
335
+ throw new Error('Invalid LMK version count in escrow bundle');
336
+ }
337
+ const metadata = parseMetadata(bundle.subarray(offset, offset + metadataLength));
338
+ offset += metadataLength;
339
+ if (offset + bskLength > bodyEnd)
340
+ throw new Error('LMK escrow bundle is truncated before the BSK');
341
+ const bsk = Buffer.from(bundle.subarray(offset, offset + bskLength));
342
+ offset += bskLength;
343
+ const wrappedLmks = [];
344
+ try {
345
+ for (let index = 0; index < versionCount; index += 1) {
346
+ if (offset + 6 > bodyEnd)
347
+ throw new Error('LMK escrow bundle is truncated in a version record');
348
+ const lmkVersion = bundle.readUInt32BE(offset);
349
+ offset += 4;
350
+ const wrappedLength = bundle.readUInt16BE(offset);
351
+ offset += 2;
352
+ if (wrappedLength !== 0 && wrappedLength !== WRAPPED_LMK_BYTES) {
353
+ throw new Error(`Invalid wrapped length for LMK version ${String(lmkVersion)}`);
354
+ }
355
+ if (offset + wrappedLength > bodyEnd)
356
+ throw new Error('LMK escrow bundle is truncated in wrapped material');
357
+ const wrapped = wrappedLength === 0
358
+ ? null
359
+ : Buffer.from(bundle.subarray(offset, offset + wrappedLength));
360
+ offset += wrappedLength;
361
+ wrappedLmks.push({ version: lmkVersion, wrapped });
362
+ }
363
+ if (offset !== bodyEnd)
364
+ throw new Error('LMK escrow bundle contains trailing data');
365
+ return { metadata, bsk, wrappedLmks, bundleDigest: Buffer.from(actualDigest) };
366
+ }
367
+ catch (error) {
368
+ bsk.fill(0);
369
+ for (const row of wrappedLmks)
370
+ row.wrapped?.fill(0);
371
+ throw error;
372
+ }
373
+ }
374
+ export function verifyLmkEscrowBundleBuffer(bundle) {
375
+ const parsed = parseBundle(bundle);
376
+ try {
377
+ if (parsed.metadata.bskSha256 !== sha256Hex(parsed.bsk)) {
378
+ throw new Error('BSK fingerprint does not match the escrow metadata');
379
+ }
380
+ if (parsed.metadata.lmkVersions.length !== parsed.wrappedLmks.length) {
381
+ throw new Error('LMK inventory count does not match binary records');
382
+ }
383
+ const recoverableVersions = [];
384
+ const unrecoverableVersions = [];
385
+ const seen = new Set();
386
+ let activeCount = 0;
387
+ let activeVersion = null;
388
+ for (let index = 0; index < parsed.wrappedLmks.length; index += 1) {
389
+ const row = parsed.wrappedLmks[index];
390
+ const metadata = parsed.metadata.lmkVersions[index];
391
+ if (row.version !== metadata.version || seen.has(row.version)) {
392
+ throw new Error('LMK inventory order/version mismatch');
393
+ }
394
+ seen.add(row.version);
395
+ if (metadata.status === 'ACTIVE') {
396
+ activeCount += 1;
397
+ activeVersion = row.version;
398
+ }
399
+ if (row.wrapped === null) {
400
+ if (metadata.materialState !== 'UNRECOVERABLE' || metadata.wrappedBytes !== 0) {
401
+ throw new Error(`LMK version ${String(row.version)} material-state mismatch`);
402
+ }
403
+ unrecoverableVersions.push(row.version);
404
+ }
405
+ else {
406
+ if (metadata.materialState !== 'WRAPPED' || metadata.wrappedBytes !== row.wrapped.length) {
407
+ throw new Error(`LMK version ${String(row.version)} wrapped-material mismatch`);
408
+ }
409
+ validateWrappedLmk(parsed.bsk, row.wrapped, row.version);
410
+ recoverableVersions.push(row.version);
411
+ }
412
+ }
413
+ if (activeCount !== 1)
414
+ throw new Error(`Expected one ACTIVE LMK, found ${String(activeCount)}`);
415
+ if (activeVersion !== parsed.metadata.activeLmkVersion) {
416
+ throw new Error('ACTIVE LMK version does not match the escrow metadata summary');
417
+ }
418
+ if (!recoverableVersions.includes(parsed.metadata.activeLmkVersion)) {
419
+ throw new Error('The ACTIVE LMK is not recoverable from this bundle');
420
+ }
421
+ const complete = unrecoverableVersions.length === 0;
422
+ if (parsed.metadata.allAvailableVersionsRecoverable !== complete) {
423
+ throw new Error('Recoverability summary does not match LMK inventory');
424
+ }
425
+ return {
426
+ valid: true,
427
+ formatVersion: 1,
428
+ bundleId: `sha256:${parsed.bundleDigest.toString('hex')}`,
429
+ createdAt: parsed.metadata.createdAt,
430
+ copyLabel: parsed.metadata.copyLabel,
431
+ activeLmkVersion: parsed.metadata.activeLmkVersion,
432
+ recoverability: complete ? 'COMPLETE' : 'KNOWN_HISTORICAL_GAPS',
433
+ recoverableVersions,
434
+ unrecoverableVersions,
435
+ bskSha256: parsed.metadata.bskSha256,
436
+ backupId: parsed.metadata.backup.state === 'VERIFIED' ? parsed.metadata.backup.id : null,
437
+ activeRotationId: parsed.metadata.activeRotation?.rotationId ?? null,
438
+ };
439
+ }
440
+ finally {
441
+ parsed.bsk.fill(0);
442
+ parsed.bundleDigest.fill(0);
443
+ for (const row of parsed.wrappedLmks)
444
+ row.wrapped?.fill(0);
445
+ }
446
+ }
447
+ function assertSafeDestination(mountPath, requireDedicatedMount) {
448
+ if (!isAbsolute(mountPath))
449
+ throw new Error('Escrow mount path must be absolute');
450
+ const normalized = normalize(resolve(mountPath));
451
+ const mountStat = lstatSync(normalized);
452
+ if (mountStat.isSymbolicLink() || !mountStat.isDirectory()) {
453
+ throw new Error('Escrow destination must be a real directory, not a symlink');
454
+ }
455
+ const canonical = realpathSync(normalized);
456
+ if (requireDedicatedMount) {
457
+ const allowedPrefixes = [
458
+ `${sep}Volumes${sep}`,
459
+ `${sep}media${sep}`,
460
+ `${sep}run${sep}media${sep}`,
461
+ `${sep}mnt${sep}`,
462
+ ];
463
+ if (!allowedPrefixes.some((prefix) => normalized.startsWith(prefix))) {
464
+ throw new Error('Escrow destination must be under /Volumes, /media, /run/media or /mnt');
465
+ }
466
+ if (canonical !== normalized) {
467
+ throw new Error('Escrow destination path may not contain symlinks');
468
+ }
469
+ const parent = dirname(normalized);
470
+ if (parent === normalized || statSync(parent).dev === statSync(normalized).dev) {
471
+ throw new Error('Escrow destination is not the root of a dedicated mounted filesystem');
472
+ }
473
+ }
474
+ return requireDedicatedMount ? normalized : canonical;
475
+ }
476
+ export function makeLmkEscrowFilename(report) {
477
+ validateCopyLabel(report.copyLabel);
478
+ const timestamp = report.createdAt.replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
479
+ const digest = report.bundleId.slice('sha256:'.length, 'sha256:'.length + 12);
480
+ return `znvault-lmk-escrow-v1-active-v${String(report.activeLmkVersion)}-${report.copyLabel}-${timestamp}-${digest}.znlmk`;
481
+ }
482
+ /**
483
+ * Write once to the final filename, flush, reopen from the destination and
484
+ * verify. A failed/partial final file is deliberately retained for evidence;
485
+ * the filename can never be reused because O_EXCL is mandatory.
486
+ */
487
+ export function writeLmkEscrowBundleDirect(bundle, options) {
488
+ if (bundle.length > MAX_BUNDLE_BYTES)
489
+ throw new Error('LMK escrow bundle is too large');
490
+ if (options.filename.includes(sep) || options.filename === '' || options.filename === '.' || options.filename === '..') {
491
+ throw new Error('Escrow filename must be a single path component');
492
+ }
493
+ const mountPath = assertSafeDestination(options.mountPath, options.requireDedicatedMount !== false);
494
+ const destination = join(mountPath, options.filename);
495
+ const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL | fsConstants.O_NOFOLLOW;
496
+ let descriptor = null;
497
+ try {
498
+ descriptor = openSync(destination, flags, 0o600);
499
+ fchmodSync(descriptor, 0o600);
500
+ let offset = 0;
501
+ while (offset < bundle.length) {
502
+ const written = writeSync(descriptor, bundle, offset, bundle.length - offset);
503
+ if (written <= 0)
504
+ throw new Error('Escrow device returned a zero-byte write');
505
+ offset += written;
506
+ }
507
+ fsyncSync(descriptor);
508
+ }
509
+ finally {
510
+ if (descriptor !== null)
511
+ closeSync(descriptor);
512
+ }
513
+ const persisted = readFileSync(destination);
514
+ try {
515
+ if (persisted.length !== bundle.length || !timingSafeEqual(persisted, bundle)) {
516
+ throw new Error(`Escrow read-back mismatch; retain the failed file at ${destination}`);
517
+ }
518
+ const report = verifyLmkEscrowBundleBuffer(persisted);
519
+ const directoryDescriptor = openSync(mountPath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
520
+ try {
521
+ fsyncSync(directoryDescriptor);
522
+ }
523
+ finally {
524
+ closeSync(directoryDescriptor);
525
+ }
526
+ return {
527
+ ...report,
528
+ path: destination,
529
+ bytes: persisted.length,
530
+ fullFileSha256: sha256Hex(persisted),
531
+ };
532
+ }
533
+ finally {
534
+ persisted.fill(0);
535
+ }
536
+ }
537
+ export function readAndVerifyLmkEscrowBundle(filePath) {
538
+ const absolute = resolve(filePath);
539
+ const fileStat = lstatSync(absolute);
540
+ if (fileStat.isSymbolicLink() || !fileStat.isFile()) {
541
+ throw new Error('Escrow bundle must be a regular file, not a symlink');
542
+ }
543
+ if (fileStat.size > MAX_BUNDLE_BYTES)
544
+ throw new Error('LMK escrow bundle is too large');
545
+ const bundle = readFileSync(absolute);
546
+ try {
547
+ return verifyLmkEscrowBundleBuffer(bundle);
548
+ }
549
+ finally {
550
+ bundle.fill(0);
551
+ }
552
+ }
553
+ //# sourceMappingURL=lmk-escrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmk-escrow.js","sourceRoot":"","sources":["../../src/lib/lmk-escrow.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,EACL,SAAS,EACT,SAAS,IAAI,WAAW,EACxB,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAG/E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAC3D,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,CAAC;AACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAkH9B,SAAS,KAAK,CAAC,KAA2B;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,MAAc;IAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAe,EAAE,OAAe;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,CAAC,OAAO,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,4BAA4B,MAAM,CAAC,iBAAiB,CAAC,EAAE,CACpH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,CAAC,OAAO,CAAC,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClI,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAoC;IACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAChC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2DAA2D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACzG,CAAC;IACD,IACE,QAAQ,CAAC,MAAM,KAAK,IAAI;QACxB,QAAQ,CAAC,cAAc,KAAK,IAAI;QAChC,QAAQ,CAAC,cAAc,CAAC,SAAS,KAAK,IAAI;QAC1C,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,EACnF,CAAC;QACD,MAAM,IAAI,KAAK,CACb,UAAU,QAAQ,CAAC,MAAM,CAAC,EAAE,6BAA6B,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAkC,QAAQ,CAAC,MAAM,KAAK,IAAI;QACpE,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE;QAC/B,CAAC,CAAC;YACE,KAAK,EAAE,UAAU;YACjB,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YACtB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAClC,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;YACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;SACpD,CAAC;IAEN,OAAO;QACL,MAAM,EAAE,oBAAoB;QAC5B,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE;YAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;YACjD,eAAe,EAAE,QAAQ,CAAC,eAAe;SAC1C;QACD,MAAM;QACN,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QACjC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;QACnC,+BAA+B,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;QACzF,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACnC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YACvC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YACzC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,aAAa,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YACxE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;SAC9C,CAAC,CAAC;QACH,SAAS,EAAE,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;YACzB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;YAC9C,iBAAiB,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpE,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU;YACzC,iBAAiB,EAAE,QAAQ,CAAC,SAAS,CAAC,iBAAiB;SACxD;QACD,cAAc,EAAE,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,UAAU;YAC9C,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa;YACpD,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa;YACpD,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM;YACtC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;SACpD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,IAAI,aAAa,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACpG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACvB,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,CAAC;IACZ,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,CAAC,CAAC;IACZ,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,CAAC;IACZ,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QAChD,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,KAAa;IAC3D,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,EAClD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,yBAAyB,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,yBAAyB,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgC;IACxD,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAE9D,IACE,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QACrC,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EACzC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,+BAA+B,KAAK,SAAS,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACxF,CAAC;QACD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;YACzC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;YACtC,KAAK,CAAC,YAAY,GAAG,CAAC,EACtB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACxC,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,sBAAsB,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,MAAM,KAAK,oBAAoB,IAAI,OAAO,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,OAAyC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC;IACxE,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,cAAc,GAAG,kBAAkB,IAAI,MAAM,GAAG,cAAc,GAAG,OAAO,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACxF,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,GAAG,gBAAgB,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,cAAc,CAAC;IACzB,IAAI,MAAM,GAAG,SAAS,GAAG,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,SAAS,CAAC;IAEpB,MAAM,WAAW,GAAgC,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,MAAM,GAAG,CAAC,GAAG,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAChG,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,CAAC;YACZ,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,aAAa,KAAK,CAAC,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,MAAM,GAAG,aAAa,GAAG,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC5G,MAAM,OAAO,GAAG,aAAa,KAAK,CAAC;gBACjC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;YACjE,MAAM,IAAI,aAAa,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACpF,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,KAAK,MAAM,GAAG,IAAI,WAAW;YAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,mBAAmB,GAAa,EAAE,CAAC;QACzC,MAAM,qBAAqB,GAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAkB,IAAI,CAAC;QAExC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClE,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjC,WAAW,IAAI,CAAC,CAAC;gBACjB,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YAC9B,CAAC;YAED,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACzB,IAAI,QAAQ,CAAC,aAAa,KAAK,eAAe,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;oBAC9E,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;gBAChF,CAAC;gBACD,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACzF,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;gBAClF,CAAC;gBACD,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzD,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,WAAW,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAChG,IAAI,aAAa,KAAK,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,KAAK,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,+BAA+B,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,UAAU,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACpC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACpC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,gBAAgB;YAClD,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB;YAC/D,mBAAmB;YACnB,qBAAqB;YACrB,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YACxF,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;SACrE,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW;YAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,qBAA8B;IAC9E,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG;YACtB,GAAG,GAAG,UAAU,GAAG,EAAE;YACrB,GAAG,GAAG,QAAQ,GAAG,EAAE;YACnB,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG,EAAE;YAC5B,GAAG,GAAG,MAAM,GAAG,EAAE;SAClB,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,OAAO,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAmC;IACvE,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC9E,OAAO,iCAAiC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,MAAM,QAAQ,CAAC;AAC7H,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,OAAoC;IAEpC,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACxF,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvH,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,KAAK,KAAK,CAAC,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC;IACvG,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC,IAAI,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjD,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;YAC9E,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9E,MAAM,IAAI,OAAO,CAAC;QACpB,CAAC;QACD,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,KAAK,IAAI;YAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,wDAAwD,WAAW,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/F,IAAI,CAAC;YACH,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC;SACrC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,QAAgB;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,GAAG,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/lib/local.ts"],"names":[],"mappings":"AA+BA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C;AAiED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAwDnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAUpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAY/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAqCA"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/lib/local.ts"],"names":[],"mappings":"AA+BA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C;AAiED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CA0DnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAUpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAY/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAqCA"}
package/dist/lib/local.js CHANGED
@@ -144,6 +144,10 @@ export function getLocalConfig() {
144
144
  process.env.REDIS_SENTINEL_NODES = serviceEnv.REDIS_SENTINEL_NODES;
145
145
  if (serviceEnv.REDIS_SENTINEL_MASTER)
146
146
  process.env.REDIS_SENTINEL_MASTER = serviceEnv.REDIS_SENTINEL_MASTER;
147
+ if (serviceEnv.DATA_DIR)
148
+ process.env.DATA_DIR = serviceEnv.DATA_DIR;
149
+ if (serviceEnv.LMK_PATH)
150
+ process.env.LMK_PATH = serviceEnv.LMK_PATH;
147
151
  // Check for DATABASE_URL
148
152
  const databaseUrl = serviceEnv.DATABASE_URL;
149
153
  if (!databaseUrl) {
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/lib/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AAEH,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAClD,MAAM,iBAAiB,GAAG;IACxB,kBAAkB;IAClB,oBAAoB,EAAS,2CAA2C;IACxE,mBAAmB;IACnB,2BAA2B;CAC5B,CAAC;AACF,MAAM,gBAAgB,GAAG,iDAAiD,CAAC;AAQ3E;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,mCAAmC;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,OAAO,WAAW,EAAE,IAAI,MAAM,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,GAAG,GAAuC,EAAE,CAAC;IAEnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElD,iDAAiD;QACjD,MAAM,YAAY,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,wDAAwD;QACxD,MAAM,KAAK,GAAG,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,4BAA4B;YAC5B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAuC,EAAE,CAAC;IAExD,sCAAsC;IACtC,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,wDAAwD;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;YACrC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM;YAChD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAEpC,4DAA4D;IAC5D,IAAI,UAAU,CAAC,UAAU;QAAE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAC1E,IAAI,UAAU,CAAC,UAAU;QAAE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAC1E,IAAI,UAAU,CAAC,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvE,IAAI,UAAU,CAAC,oBAAoB;QAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IACxG,IAAI,UAAU,CAAC,qBAAqB;QAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC;IAE3G,yBAAyB;IACzB,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;IAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,kDAAkD;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC;QAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,aAAa,IAAI,MAAM,CAAC;QACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,WAAW,IAAI,SAAS,CAAC;QAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,iBAAiB,CAAC;QAExE,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,OAAO;gBACL,WAAW,EAAE,cAAc,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAC7F,WAAW,EAAE,UAAU,CAAC,YAAY,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM;gBAC/E,MAAM,EAAE,UAAU,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,WAAW;QACX,WAAW,EAAE,UAAU,CAAC,YAAY,KAAK,MAAM;QAC/C,MAAM,EAAE,UAAU,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,kDAAkD,EAAE;YAC1E,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAMhC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO;YACL,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,uCAAuC;YAC/C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,4DAA4D;SACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACd,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,8DAA8D;SACvE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,sDAAsD;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,wCAAwC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,oBAAoB,EAAE,IAAI,SAAS;KAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/lib/local.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": "4.17.0",
3
+ "version": "4.18.1",
4
4
  "description": "Official CLI for ZnVault administration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",