graphvault-studio 0.1.2 → 0.1.3

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.
@@ -6,9 +6,13 @@ import { StorageWriter } from "@sprengmeister/graphvault/internal/storage/storag
6
6
  import { verifyStorage } from "@sprengmeister/graphvault/internal/storage/storage-verifier";
7
7
  import { buildParentIndexRecord } from "@sprengmeister/graphvault/internal/storage/storage-parent-index";
8
8
  import { executeGvqlStatement, parseGvql } from "@sprengmeister/graphvault/internal/gvql/gvql";
9
+ import { envelopeHash, transactionRecordHash, transactionHashPayload, verifyAdminIntegrity, } from "./admin-integrity.js";
10
+ import { graphvaultLibraryCompatibility } from "./admin-compatibility.js";
9
11
  import { referencedChildren, summarizeNode, visitNode } from "./admin-inspection.js";
10
12
  import { encodeAdminValue, getNodePath, setNodePath } from "./admin-mutation.js";
11
13
  import { pathFromObjectToRoot } from "./admin-parent-index.js";
14
+ import { loadAdminSubtree } from "./admin-subtree.js";
15
+ import { envelopeFromAdminManifest, readAdminObjectRecord, writeAdminManifest, writeAdminObjectRecords, } from "./admin-storage-io.js";
12
16
  export class StorageAdminClient {
13
17
  options;
14
18
  target;
@@ -38,8 +42,11 @@ export class StorageAdminClient {
38
42
  transactionId: manifest.transactionId,
39
43
  ...(currentSnapshot ? { currentSnapshot } : {}),
40
44
  objectCount: manifest.objectIds.length,
45
+ library: graphvaultLibraryCompatibility(),
41
46
  ...(latestTransaction ? { latestTransaction } : {}),
42
47
  ...(typeDictionary ? { typeDictionary } : {}),
48
+ hardening: this.hardening(),
49
+ operations: await this.operations(manifest, latestTransaction),
43
50
  ...(verification ? { verification } : { verificationSkipped: true }),
44
51
  };
45
52
  }
@@ -52,7 +59,7 @@ export class StorageAdminClient {
52
59
  const offset = Math.max(0, options.offset ?? 0);
53
60
  const limit = Math.min(500, Math.max(1, options.limit ?? manifest.objectIds.length));
54
61
  for (const objectId of manifest.objectIds.slice(offset, offset + limit)) {
55
- const record = await this.reader.readObjectRecord(objectId);
62
+ const record = await this.readObjectRecord(manifest, objectId);
56
63
  items.push({
57
64
  objectId,
58
65
  kind: record.node.kind,
@@ -64,7 +71,7 @@ export class StorageAdminClient {
64
71
  return { offset, limit, total: manifest.objectIds.length, items };
65
72
  }
66
73
  async getObject(objectId) {
67
- return this.reader.readObjectRecord(objectId);
74
+ return this.readObjectRecord(await this.requireManifest(), objectId);
68
75
  }
69
76
  async rootReference() {
70
77
  const manifest = await this.requireManifest();
@@ -74,10 +81,11 @@ export class StorageAdminClient {
74
81
  };
75
82
  }
76
83
  async listObjectChildren(objectId) {
77
- const record = await this.reader.readObjectRecord(objectId);
84
+ const manifest = await this.requireManifest();
85
+ const record = await this.readObjectRecord(manifest, objectId);
78
86
  const children = [];
79
87
  for (const [path, to] of referencedChildren(record.node)) {
80
- const child = await this.reader.readObjectRecord(to);
88
+ const child = await this.readObjectRecord(manifest, to);
81
89
  children.push({
82
90
  from: objectId,
83
91
  to,
@@ -92,11 +100,11 @@ export class StorageAdminClient {
92
100
  async hierarchyPath(targetObjectId) {
93
101
  const manifest = await this.requireManifest();
94
102
  const index = await this.parentIndexFor(manifest);
95
- return pathFromObjectToRoot(index, targetObjectId, (objectId) => this.reader.readObjectRecord(objectId));
103
+ return pathFromObjectToRoot(index, targetObjectId, (objectId) => this.readObjectRecord(manifest, objectId));
96
104
  }
97
105
  async graph() {
98
106
  const manifest = await this.requireManifest();
99
- const envelope = await this.reader.envelopeFromManifest(manifest);
107
+ const envelope = await this.envelopeFromManifest(manifest);
100
108
  const nodes = [];
101
109
  const edges = [];
102
110
  for (const [objectId, node] of Object.entries(envelope.nodes)) {
@@ -113,6 +121,10 @@ export class StorageAdminClient {
113
121
  }
114
122
  return { root: envelope.root, nodes, edges };
115
123
  }
124
+ async subtree(options = {}) {
125
+ const manifest = await this.requireManifest();
126
+ return loadAdminSubtree(manifest, (objectId) => this.readObjectRecord(manifest, objectId), options);
127
+ }
116
128
  async search(query, options = {}) {
117
129
  const manifest = await this.requireManifest();
118
130
  const needle = query.trim().toLowerCase();
@@ -122,7 +134,7 @@ export class StorageAdminClient {
122
134
  const limit = Math.min(500, Math.max(1, options.limit ?? 500));
123
135
  const results = [];
124
136
  for (const objectId of manifest.objectIds) {
125
- const record = await this.reader.readObjectRecord(objectId);
137
+ const record = await this.readObjectRecord(manifest, objectId);
126
138
  visitNode(record.node, (path, value) => {
127
139
  if (results.length >= limit) {
128
140
  return;
@@ -140,31 +152,14 @@ export class StorageAdminClient {
140
152
  }
141
153
  async gvql(query, options = {}) {
142
154
  const manifest = await this.requireManifest();
143
- const envelope = await this.reader.envelopeFromManifest(manifest);
155
+ const envelope = await this.envelopeFromManifest(manifest);
144
156
  const statement = parseGvql(query);
145
157
  const result = executeGvqlStatement(envelope, statement, {
146
158
  ...options,
147
159
  allowMutations: this.allowMutations && statement.kind === "update" && !options.dryRun,
148
160
  });
149
161
  if (result.kind === "update" && !result.dryRun) {
150
- const transactionId = manifest.transactionId + 1;
151
- const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
152
- const changedObjectIds = Array.from(new Set(result.changes.map((change) => change.objectId))).sort((a, b) => Number(a) - Number(b));
153
- await this.writer.writeObjectRecords(envelope, transactionId, changedObjectIds);
154
- await this.writer.writeManifest(envelope, transactionId);
155
- await this.writer.writeParentIndex(envelope, transactionId);
156
- await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
157
- await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
158
- await this.writer.writeTransactionRecord({
159
- format: "graphvault-transaction",
160
- version: 1,
161
- transactionId,
162
- committedAt: new Date().toISOString(),
163
- snapshotFile,
164
- objectIds: Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b)),
165
- mode: "standard",
166
- targetCount: changedObjectIds.length,
167
- });
162
+ await this.commitEnvelope(manifest.transactionId, envelope, "standard", result.changes.length, options.metadata);
168
163
  this.parentIndex = undefined;
169
164
  }
170
165
  return result;
@@ -207,13 +202,39 @@ export class StorageAdminClient {
207
202
  }
208
203
  }
209
204
  async verify() {
210
- return verifyStorage({
205
+ let manifest;
206
+ const result = await verifyStorage({
211
207
  target: this.target,
212
208
  lazyDirectory: this.layout.lazyDirectory,
213
- readManifest: () => this.reader.readManifest(),
209
+ readManifest: async () => {
210
+ manifest = await this.reader.readManifest();
211
+ return manifest;
212
+ },
214
213
  readLatestTransactionRecord: () => this.reader.readLatestTransactionRecord(),
215
- readObjectRecord: (objectId) => this.reader.readObjectRecord(objectId),
214
+ readObjectRecord: (objectId) => {
215
+ if (!manifest) {
216
+ throw new Error("Storage manifest not found or unreadable.");
217
+ }
218
+ return this.readObjectRecord(manifest, objectId);
219
+ },
216
220
  });
221
+ result.warnings ??= [];
222
+ if (manifest) {
223
+ const integrity = await verifyAdminIntegrity({
224
+ target: this.target,
225
+ layout: this.layout,
226
+ manifest,
227
+ transactions: await this.listTransactions(),
228
+ });
229
+ result.checkedIntegrityHashes = (result.checkedIntegrityHashes ?? 0) + integrity.checkedIntegrityHashes;
230
+ result.warnings.push(...integrity.warnings);
231
+ result.errors.push(...integrity.errors);
232
+ result.ok = result.errors.length === 0;
233
+ }
234
+ else {
235
+ result.checkedIntegrityHashes ??= 0;
236
+ }
237
+ return result;
217
238
  }
218
239
  async maintain(options = {}) {
219
240
  this.assertMutationsAllowed();
@@ -228,7 +249,7 @@ export class StorageAdminClient {
228
249
  }
229
250
  async previewMutation(mutation) {
230
251
  const manifest = await this.requireManifest();
231
- const envelope = await this.reader.envelopeFromManifest(manifest);
252
+ const envelope = await this.envelopeFromManifest(manifest);
232
253
  const node = envelope.nodes[mutation.objectId];
233
254
  if (!node) {
234
255
  throw new Error(`Object ${mutation.objectId} does not exist.`);
@@ -243,33 +264,83 @@ export class StorageAdminClient {
243
264
  async mutate(mutation) {
244
265
  this.assertMutationsAllowed();
245
266
  const manifest = await this.requireManifest();
246
- const envelope = await this.reader.envelopeFromManifest(manifest);
267
+ const envelope = await this.envelopeFromManifest(manifest);
247
268
  const node = envelope.nodes[mutation.objectId];
248
269
  if (!node) {
249
270
  throw new Error(`Object ${mutation.objectId} does not exist.`);
250
271
  }
251
272
  setNodePath(node, mutation.path, encodeAdminValue(mutation.value));
252
- const transactionId = manifest.transactionId + 1;
253
- const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
254
- await this.writer.writeObjectRecords(envelope, transactionId, Object.keys(envelope.nodes));
255
- await this.writer.writeManifest(envelope, transactionId);
256
- await this.writer.writeParentIndex(envelope, transactionId);
257
- await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
258
- await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
259
- const record = {
260
- format: "graphvault-transaction",
261
- version: 1,
262
- transactionId,
263
- committedAt: new Date().toISOString(),
264
- snapshotFile,
265
- objectIds: Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b)),
266
- mode: "standard",
267
- targetCount: 1,
268
- };
269
- await this.writer.writeTransactionRecord(record);
273
+ const record = await this.commitEnvelope(manifest.transactionId, envelope, "standard", 1, mutation.metadata);
270
274
  this.parentIndex = undefined;
271
275
  return record;
272
276
  }
277
+ async commitEnvelope(expectedTransactionId, envelope, mode, targetCount, metadata) {
278
+ await this.target.ensureDirectory(this.walDirectory);
279
+ const lock = await this.acquireWriteLock();
280
+ try {
281
+ const latestManifest = await this.requireManifest();
282
+ if (latestManifest.transactionId !== expectedTransactionId) {
283
+ throw new Error(`Store changed concurrently. Expected transaction ${expectedTransactionId}, found ${latestManifest.transactionId}.`);
284
+ }
285
+ const transactionId = expectedTransactionId + 1;
286
+ const snapshotFile = `snapshot-${String(transactionId).padStart(12, "0")}.json`;
287
+ const objectIds = Object.keys(envelope.nodes).sort((a, b) => Number(a) - Number(b));
288
+ const prepareFile = `transaction-${String(transactionId).padStart(12, "0")}.prepare.json`;
289
+ if (this.transactionLogEnabled) {
290
+ await this.writeWalJson(prepareFile, {
291
+ format: "graphvault-wal",
292
+ version: 1,
293
+ status: "prepared",
294
+ transactionId,
295
+ preparedAt: new Date().toISOString(),
296
+ snapshotFile,
297
+ objectIds,
298
+ mode,
299
+ targetCount,
300
+ envelope,
301
+ });
302
+ }
303
+ await writeAdminObjectRecords(this.target, this.layout, envelope, transactionId, objectIds);
304
+ await this.writer.writeJson(join(this.layout.snapshotsDirectory, snapshotFile), envelope);
305
+ await this.assertLockValid(lock);
306
+ if (this.transactionLogEnabled) {
307
+ await this.writeWalJson(`transaction-${String(transactionId).padStart(12, "0")}.commit.json`, {
308
+ format: "graphvault-wal",
309
+ version: 1,
310
+ status: "committed",
311
+ transactionId,
312
+ committedAt: new Date().toISOString(),
313
+ prepareFile,
314
+ });
315
+ }
316
+ await this.assertLockValid(lock);
317
+ const previousTransaction = (await this.listTransactions())[0];
318
+ const record = {
319
+ format: "graphvault-transaction",
320
+ version: 1,
321
+ transactionId,
322
+ committedAt: new Date().toISOString(),
323
+ snapshotFile,
324
+ objectIds,
325
+ mode,
326
+ targetCount,
327
+ ...(metadata ? { metadata } : {}),
328
+ envelopeHash: envelopeHash(envelope),
329
+ ...(previousTransaction?.transactionHash ? { previousHash: previousTransaction.transactionHash } : {}),
330
+ };
331
+ record.transactionHash = transactionRecordHash(transactionHashPayload(record));
332
+ await this.writer.writeTransactionRecord(record);
333
+ await this.assertLockValid(lock);
334
+ await this.writer.writeParentIndex(envelope, transactionId);
335
+ await this.assertLockValid(lock);
336
+ await this.target.writeTextAtomic(this.layout.currentFile, snapshotFile);
337
+ await writeAdminManifest(this.target, this.layout, envelope, transactionId, record.transactionHash);
338
+ return record;
339
+ }
340
+ finally {
341
+ await lock.release();
342
+ }
343
+ }
273
344
  async requireManifest() {
274
345
  const manifest = await this.reader.readManifest();
275
346
  if (!manifest) {
@@ -277,6 +348,79 @@ export class StorageAdminClient {
277
348
  }
278
349
  return manifest;
279
350
  }
351
+ readObjectRecord(manifest, objectId) {
352
+ return readAdminObjectRecord(this.target, this.layout, manifest, objectId);
353
+ }
354
+ envelopeFromManifest(manifest) {
355
+ return envelopeFromAdminManifest(this.target, this.layout, manifest);
356
+ }
357
+ get walDirectory() {
358
+ return join(this.options.storageDirectory, "wal");
359
+ }
360
+ get transactionLogEnabled() {
361
+ return (this.options.transactionLog ?? "full") === "full";
362
+ }
363
+ hardening() {
364
+ return {
365
+ mutationsAllowed: this.allowMutations,
366
+ transactionLog: this.options.transactionLog ?? "full",
367
+ writerLock: "enabled",
368
+ fencingTokens: "used-when-supported",
369
+ staleLockRecovery: typeof this.options.staleLockTimeoutMs === "number",
370
+ };
371
+ }
372
+ async operations(manifest, latestTransaction) {
373
+ const walFiles = await this.reader.readDirectoryIfExists(this.walDirectory);
374
+ const prepareFiles = walFiles.filter((file) => file.endsWith(".prepare.json"));
375
+ const commitFiles = walFiles.filter((file) => file.endsWith(".commit.json"));
376
+ const publishedTransactionId = manifest.transactionId;
377
+ let latestWalTransactionId = 0;
378
+ let pendingWalCommits = 0;
379
+ for (const file of commitFiles) {
380
+ try {
381
+ const record = JSON.parse(await this.target.readText(join(this.walDirectory, file)));
382
+ if (record.format !== "graphvault-wal" || record.status !== "committed") {
383
+ continue;
384
+ }
385
+ latestWalTransactionId = Math.max(latestWalTransactionId, record.transactionId);
386
+ if (record.transactionId > publishedTransactionId) {
387
+ pendingWalCommits++;
388
+ }
389
+ }
390
+ catch {
391
+ // Verification surfaces malformed WAL; the operations pane stays lightweight.
392
+ }
393
+ }
394
+ return {
395
+ transactionLog: this.options.transactionLog ?? "full",
396
+ mutationsAllowed: this.allowMutations,
397
+ lockTimeoutMs: this.options.lockTimeoutMs ?? 5_000,
398
+ ...(typeof this.options.staleLockTimeoutMs === "number" ? { staleLockTimeoutMs: this.options.staleLockTimeoutMs } : {}),
399
+ walPrepareFiles: prepareFiles.length,
400
+ walCommitFiles: commitFiles.length,
401
+ latestWalTransactionId,
402
+ latestJournalTransactionId: latestTransaction?.transactionId ?? 0,
403
+ publishedTransactionId,
404
+ pendingWalCommits,
405
+ checkedIntegrityHashes: manifest.latestTransactionHash ? 1 : 0,
406
+ status: pendingWalCommits > 0 ? "recovery-pending" : "healthy",
407
+ };
408
+ }
409
+ async acquireWriteLock() {
410
+ const acquireLock = this.target.acquireLock;
411
+ return acquireLock(this.layout.lockFile, this.options.lockTimeoutMs ?? 5_000, this.lockOptions());
412
+ }
413
+ lockOptions() {
414
+ return typeof this.options.staleLockTimeoutMs === "number" ? { staleLockTimeoutMs: this.options.staleLockTimeoutMs } : {};
415
+ }
416
+ async assertLockValid(lock) {
417
+ if (lock.assertValid) {
418
+ await lock.assertValid();
419
+ }
420
+ }
421
+ async writeWalJson(file, value) {
422
+ await this.target.writeTextAtomic(join(this.walDirectory, file), `${JSON.stringify(value, null, 2)}\n`);
423
+ }
280
424
  async compact(keepLatest) {
281
425
  const current = await this.reader.readCurrentPointer();
282
426
  if (!current) {
@@ -298,7 +442,8 @@ export class StorageAdminClient {
298
442
  }
299
443
  async collectGarbage() {
300
444
  const manifest = await this.requireManifest();
301
- const liveObjects = new Set(manifest.objectIds);
445
+ const liveJsonRecords = liveObjectRecordFiles(manifest, "json");
446
+ const liveBinaryRecords = liveObjectRecordFiles(manifest, "bin");
302
447
  let keptObjects = 0;
303
448
  let removedObjects = 0;
304
449
  let keptBinaryObjects = 0;
@@ -307,8 +452,7 @@ export class StorageAdminClient {
307
452
  for (const file of await this.reader.readDirectoryIfExists(directory)) {
308
453
  if (!file.endsWith(".json"))
309
454
  continue;
310
- const objectId = file.slice(0, -".json".length);
311
- if (liveObjects.has(objectId))
455
+ if (liveJsonRecords.has(file))
312
456
  keptObjects++;
313
457
  else {
314
458
  await this.target.remove(join(directory, file));
@@ -320,8 +464,7 @@ export class StorageAdminClient {
320
464
  for (const file of await this.reader.readDirectoryIfExists(directory)) {
321
465
  if (!file.endsWith(".bin"))
322
466
  continue;
323
- const objectId = file.slice(0, -".bin".length);
324
- if (liveObjects.has(objectId))
467
+ if (liveBinaryRecords.has(file))
325
468
  keptBinaryObjects++;
326
469
  else {
327
470
  await this.target.remove(join(directory, file));
@@ -343,10 +486,18 @@ export class StorageAdminClient {
343
486
  this.parentIndex = storedIndex;
344
487
  }
345
488
  else {
346
- this.parentIndex = buildParentIndexRecord(await this.reader.envelopeFromManifest(manifest), manifest.transactionId);
489
+ this.parentIndex = buildParentIndexRecord(await this.envelopeFromManifest(manifest), manifest.transactionId);
347
490
  }
348
491
  }
349
492
  return this.parentIndex;
350
493
  }
351
494
  }
495
+ function liveObjectRecordFiles(manifest, extension) {
496
+ const files = new Set();
497
+ for (const objectId of manifest.objectIds) {
498
+ files.add(`${objectId}.${extension}`);
499
+ files.add(`${objectId}.${manifest.objectVersions?.[objectId] ?? manifest.transactionId}.${extension}`);
500
+ }
501
+ return files;
502
+ }
352
503
  //# sourceMappingURL=admin-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../src/admin-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,6DAA6D,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,iEAAiE,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAmD/D,MAAM,OAAO,kBAAkB;IAQA;IAPZ,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,cAAc,CAAU;IACjC,WAAW,CAAgC;IAEnD,YAA6B,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAC7D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,qBAAqB,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAgC,EAAE;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,CAAC,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YACzC,IAAI,CAAC,kBAAkB,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAChF,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;YACtC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;SACrE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAA+C,EAAE;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/H,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,EAAE;gBACF,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,cAAsB;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;YACH,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC9B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAA8B,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5D,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClF,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC5B,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,UAAgC,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE;YACvD,GAAG,OAAO;YACV,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM;SACtF,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,YAAY,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;YAChF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpI,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;YAChF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1F,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACzE,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;gBACvC,MAAM,EAAE,wBAAwB;gBAChC,OAAO,EAAE,CAAC;gBACV,aAAa;gBACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,YAAY;gBACZ,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5E,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,gBAAgB,CAAC,MAAM;aACrC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAsB,CAAC;gBAC1H,IAAI,MAAM,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;oBAC/C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6EAA6E;YAC/E,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;gBAChE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAmB,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,aAAa,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC9C,2BAA2B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;YAC5E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAsC,EAAE;QACrD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAwE;QACnF,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAC7C,IAAI,CAAC,MAAM,EACX,WAAW,CAAC,aAAa,IAAI,IAAI,qBAAqB,EAAE,EACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAC7B,WAAW,CAAC,gBAAgB,CAC7B,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAuB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QACjE,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACxC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,QAAQ,kBAAkB,CAAC,CAAC;QACjE,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,YAAY,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC;QAChF,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACzE,MAAM,MAAM,GAAsB;YAChC,MAAM,EAAE,wBAAwB;YAChC,OAAO,EAAE,CAAC;YACV,aAAa;YACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,YAAY;YACZ,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,CAAC;SACf,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,UAAkB;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;aACvE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACxE,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,WAAW,EAAE,CAAC;qBACxC,CAAC;oBACJ,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,cAAc,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,iBAAiB,EAAE,CAAC;qBAC9C,CAAC;oBACJ,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,oBAAoB,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACzH,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAyB;QACpD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;YACnF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,WAAW,EAAE,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YACtH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../src/admin-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AdminLibraryCompatibility } from "./admin-types.js";
2
+ export declare function graphvaultLibraryCompatibility(): AdminLibraryCompatibility;
@@ -0,0 +1,53 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join } from "node:path";
4
+ const RECOMMENDED_GRAPHVAULT_VERSION = "0.2.0";
5
+ export function graphvaultLibraryCompatibility() {
6
+ const installedVersion = readInstalledGraphVaultVersion();
7
+ const warnings = [];
8
+ if (!installedVersion) {
9
+ warnings.push("Could not determine installed GraphVault Library version.");
10
+ }
11
+ else if (compareSemver(installedVersion, RECOMMENDED_GRAPHVAULT_VERSION) < 0) {
12
+ warnings.push(`GraphVault Library ${installedVersion} is older than the recommended ${RECOMMENDED_GRAPHVAULT_VERSION}.`);
13
+ }
14
+ return {
15
+ packageName: "@sprengmeister/graphvault",
16
+ recommendedVersion: RECOMMENDED_GRAPHVAULT_VERSION,
17
+ status: warnings.length ? "warning" : "ok",
18
+ warnings,
19
+ ...(installedVersion ? { installedVersion } : {}),
20
+ };
21
+ }
22
+ function readInstalledGraphVaultVersion() {
23
+ try {
24
+ const require = createRequire(import.meta.url);
25
+ const entry = require.resolve("@sprengmeister/graphvault");
26
+ const packageJsonPath = join(dirname(dirname(entry)), "package.json");
27
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
28
+ return typeof packageJson.version === "string" ? packageJson.version : undefined;
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ function compareSemver(left, right) {
35
+ const leftParts = parseSemver(left);
36
+ const rightParts = parseSemver(right);
37
+ for (let index = 0; index < 3; index++) {
38
+ const diff = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
39
+ if (diff !== 0) {
40
+ return diff;
41
+ }
42
+ }
43
+ return 0;
44
+ }
45
+ function parseSemver(value) {
46
+ return value
47
+ .replace(/^[^\d]*/, "")
48
+ .split(/[.-]/)
49
+ .slice(0, 3)
50
+ .map((part) => Number.parseInt(part, 10))
51
+ .map((part) => (Number.isFinite(part) ? part : 0));
52
+ }
53
+ //# sourceMappingURL=admin-compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-compatibility.js","sourceRoot":"","sources":["../src/admin-compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAE/C,MAAM,UAAU,8BAA8B;IAC5C,MAAM,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,kCAAkC,8BAA8B,GAAG,CAAC,CAAC;IAC3H,CAAC;IACD,OAAO;QACL,WAAW,EAAE,2BAA2B;QACxC,kBAAkB,EAAE,8BAA8B;QAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QAC1C,QAAQ;QACR,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAA0B,CAAC;QAC/F,OAAO,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,KAAK,CAAC,MAAM,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { SerializedEnvelope, StorageTarget, TransactionRecord } from "@sprengmeister/graphvault/internal/core/types";
2
+ import type { StorageLayout } from "@sprengmeister/graphvault/internal/storage/storage-layout";
3
+ import type { VersionedStorageManifest } from "./admin-storage-io.js";
4
+ import type { AdminTransactionMetadata } from "./admin-types.js";
5
+ export type IntegrityTransactionRecord = TransactionRecord & {
6
+ envelopeHash?: string;
7
+ previousHash?: string;
8
+ transactionHash?: string;
9
+ metadata?: AdminTransactionMetadata;
10
+ };
11
+ export type IntegrityStorageManifest = VersionedStorageManifest & {
12
+ latestTransactionHash?: string;
13
+ };
14
+ export declare function envelopeHash(envelope: SerializedEnvelope): string;
15
+ export declare function transactionRecordHash(record: Omit<IntegrityTransactionRecord, "transactionHash">): string;
16
+ export declare function transactionHashPayload(record: IntegrityTransactionRecord): Omit<IntegrityTransactionRecord, "transactionHash">;
17
+ export declare function verifyAdminIntegrity(options: {
18
+ target: StorageTarget;
19
+ layout: StorageLayout;
20
+ manifest: IntegrityStorageManifest;
21
+ transactions: IntegrityTransactionRecord[];
22
+ }): Promise<{
23
+ checkedIntegrityHashes: number;
24
+ warnings: string[];
25
+ errors: string[];
26
+ }>;
@@ -0,0 +1,76 @@
1
+ import { createHash } from "node:crypto";
2
+ import { join } from "node:path";
3
+ export function envelopeHash(envelope) {
4
+ return sha256Hex(canonicalJson(envelope));
5
+ }
6
+ export function transactionRecordHash(record) {
7
+ return sha256Hex(canonicalJson(record));
8
+ }
9
+ export function transactionHashPayload(record) {
10
+ const { transactionHash: _transactionHash, ...payload } = record;
11
+ return payload;
12
+ }
13
+ export async function verifyAdminIntegrity(options) {
14
+ const warnings = [];
15
+ const errors = [];
16
+ let checkedIntegrityHashes = 0;
17
+ let previousHash;
18
+ const records = [...options.transactions].sort((a, b) => a.transactionId - b.transactionId);
19
+ for (const record of records) {
20
+ if (record.previousHash || record.transactionHash) {
21
+ if (record.previousHash !== previousHash) {
22
+ errors.push(`Transaction ${record.transactionId} has an invalid previousHash.`);
23
+ }
24
+ if (!record.transactionHash) {
25
+ errors.push(`Transaction ${record.transactionId} is missing transactionHash.`);
26
+ }
27
+ else {
28
+ checkedIntegrityHashes++;
29
+ if (record.transactionHash !== transactionRecordHash(transactionHashPayload(record))) {
30
+ errors.push(`Transaction ${record.transactionId} has an invalid transactionHash.`);
31
+ }
32
+ }
33
+ }
34
+ if (record.envelopeHash) {
35
+ try {
36
+ const snapshot = JSON.parse(await options.target.readText(join(options.layout.snapshotsDirectory, record.snapshotFile)));
37
+ checkedIntegrityHashes++;
38
+ if (record.envelopeHash !== envelopeHash(snapshot)) {
39
+ errors.push(`Transaction ${record.transactionId} envelopeHash does not match ${record.snapshotFile}.`);
40
+ }
41
+ }
42
+ catch {
43
+ // Snapshot-free write profiles are valid.
44
+ }
45
+ }
46
+ previousHash = record.transactionHash ?? previousHash;
47
+ }
48
+ const published = records.find((record) => record.transactionId === options.manifest.transactionId);
49
+ if (options.manifest.latestTransactionHash) {
50
+ checkedIntegrityHashes++;
51
+ if (published?.transactionHash && options.manifest.latestTransactionHash !== published.transactionHash) {
52
+ errors.push(`Manifest latestTransactionHash does not match transaction ${published.transactionId}.`);
53
+ }
54
+ }
55
+ if (records.length > 0 && !records.at(-1)?.transactionHash) {
56
+ warnings.push("Latest transaction record has no transactionHash; integrity-chain verification is limited for legacy data.");
57
+ }
58
+ return { checkedIntegrityHashes, warnings, errors };
59
+ }
60
+ function canonicalJson(value) {
61
+ return JSON.stringify(canonicalValue(value));
62
+ }
63
+ function sha256Hex(value) {
64
+ return createHash("sha256").update(value).digest("hex");
65
+ }
66
+ function canonicalValue(value) {
67
+ if (Array.isArray(value)) {
68
+ return value.map((item) => canonicalValue(item));
69
+ }
70
+ if (!value || typeof value !== "object") {
71
+ return value;
72
+ }
73
+ const record = value;
74
+ return Object.fromEntries(Object.keys(record).sort().map((key) => [key, canonicalValue(record[key])]));
75
+ }
76
+ //# sourceMappingURL=admin-integrity.js.map