@quereus/sync 3.3.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +17 -7
  2. package/dist/src/clock/hlc.d.ts +43 -3
  3. package/dist/src/clock/hlc.d.ts.map +1 -1
  4. package/dist/src/clock/hlc.js +60 -10
  5. package/dist/src/clock/hlc.js.map +1 -1
  6. package/dist/src/create-sync-module.d.ts +46 -9
  7. package/dist/src/create-sync-module.d.ts.map +1 -1
  8. package/dist/src/create-sync-module.js +11 -8
  9. package/dist/src/create-sync-module.js.map +1 -1
  10. package/dist/src/index.d.ts +10 -8
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +8 -5
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/metadata/basis-lifecycle.d.ts +180 -0
  15. package/dist/src/metadata/basis-lifecycle.d.ts.map +1 -0
  16. package/dist/src/metadata/basis-lifecycle.js +211 -0
  17. package/dist/src/metadata/basis-lifecycle.js.map +1 -0
  18. package/dist/src/metadata/change-log.d.ts +1 -1
  19. package/dist/src/metadata/change-log.d.ts.map +1 -1
  20. package/dist/src/metadata/change-log.js +6 -6
  21. package/dist/src/metadata/change-log.js.map +1 -1
  22. package/dist/src/metadata/column-version.d.ts +14 -5
  23. package/dist/src/metadata/column-version.d.ts.map +1 -1
  24. package/dist/src/metadata/column-version.js +22 -12
  25. package/dist/src/metadata/column-version.js.map +1 -1
  26. package/dist/src/metadata/index.d.ts +2 -0
  27. package/dist/src/metadata/index.d.ts.map +1 -1
  28. package/dist/src/metadata/index.js +2 -0
  29. package/dist/src/metadata/index.js.map +1 -1
  30. package/dist/src/metadata/keys.d.ts +52 -2
  31. package/dist/src/metadata/keys.d.ts.map +1 -1
  32. package/dist/src/metadata/keys.js +99 -14
  33. package/dist/src/metadata/keys.js.map +1 -1
  34. package/dist/src/metadata/peer-state.d.ts +1 -1
  35. package/dist/src/metadata/peer-state.js +5 -5
  36. package/dist/src/metadata/quarantine.d.ts +90 -0
  37. package/dist/src/metadata/quarantine.d.ts.map +1 -0
  38. package/dist/src/metadata/quarantine.js +167 -0
  39. package/dist/src/metadata/quarantine.js.map +1 -0
  40. package/dist/src/metadata/schema-migration.d.ts +1 -1
  41. package/dist/src/metadata/schema-migration.js +7 -7
  42. package/dist/src/metadata/schema-version.d.ts +1 -1
  43. package/dist/src/metadata/schema-version.js +7 -7
  44. package/dist/src/metadata/tombstones.d.ts +26 -9
  45. package/dist/src/metadata/tombstones.d.ts.map +1 -1
  46. package/dist/src/metadata/tombstones.js +42 -19
  47. package/dist/src/metadata/tombstones.js.map +1 -1
  48. package/dist/src/sql/basis-lifecycle-tvf.d.ts +34 -0
  49. package/dist/src/sql/basis-lifecycle-tvf.d.ts.map +1 -0
  50. package/dist/src/sql/basis-lifecycle-tvf.js +101 -0
  51. package/dist/src/sql/basis-lifecycle-tvf.js.map +1 -0
  52. package/dist/src/sync/admission.d.ts +81 -0
  53. package/dist/src/sync/admission.d.ts.map +1 -0
  54. package/dist/src/sync/admission.js +94 -0
  55. package/dist/src/sync/admission.js.map +1 -0
  56. package/dist/src/sync/change-applicator.d.ts +65 -2
  57. package/dist/src/sync/change-applicator.d.ts.map +1 -1
  58. package/dist/src/sync/change-applicator.js +493 -68
  59. package/dist/src/sync/change-applicator.js.map +1 -1
  60. package/dist/src/sync/change-grouping.d.ts +43 -0
  61. package/dist/src/sync/change-grouping.d.ts.map +1 -0
  62. package/dist/src/sync/change-grouping.js +103 -0
  63. package/dist/src/sync/change-grouping.js.map +1 -0
  64. package/dist/src/sync/events.d.ts +159 -1
  65. package/dist/src/sync/events.d.ts.map +1 -1
  66. package/dist/src/sync/events.js +50 -0
  67. package/dist/src/sync/events.js.map +1 -1
  68. package/dist/src/sync/manager.d.ts +87 -0
  69. package/dist/src/sync/manager.d.ts.map +1 -1
  70. package/dist/src/sync/protocol.d.ts +174 -11
  71. package/dist/src/sync/protocol.d.ts.map +1 -1
  72. package/dist/src/sync/protocol.js +4 -1
  73. package/dist/src/sync/protocol.js.map +1 -1
  74. package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
  75. package/dist/src/sync/snapshot-stream.js +89 -19
  76. package/dist/src/sync/snapshot-stream.js.map +1 -1
  77. package/dist/src/sync/snapshot.d.ts.map +1 -1
  78. package/dist/src/sync/snapshot.js +63 -44
  79. package/dist/src/sync/snapshot.js.map +1 -1
  80. package/dist/src/sync/store-adapter.d.ts +117 -15
  81. package/dist/src/sync/store-adapter.d.ts.map +1 -1
  82. package/dist/src/sync/store-adapter.js +247 -91
  83. package/dist/src/sync/store-adapter.js.map +1 -1
  84. package/dist/src/sync/sync-context.d.ts +44 -1
  85. package/dist/src/sync/sync-context.d.ts.map +1 -1
  86. package/dist/src/sync/sync-context.js +26 -0
  87. package/dist/src/sync/sync-context.js.map +1 -1
  88. package/dist/src/sync/sync-manager-impl.d.ts +247 -13
  89. package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
  90. package/dist/src/sync/sync-manager-impl.js +788 -193
  91. package/dist/src/sync/sync-manager-impl.js.map +1 -1
  92. package/package.json +9 -9
@@ -10,6 +10,8 @@
10
10
  * si: - Site identity
11
11
  * hc: - HLC clock state
12
12
  * cl: - Change log (HLC-indexed for efficient delta queries)
13
+ * qt: - Quarantine (held out-of-basis straggler changes)
14
+ * bl: - Basis-table lifecycle (mapped/derivation-source/unreferenced/detached bookkeeping)
13
15
  */
14
16
  import type { SqlValue } from '@quereus/quereus';
15
17
  import type { SiteId } from '../clock/site.js';
@@ -24,6 +26,8 @@ export declare const SYNC_KEY_PREFIX: {
24
26
  readonly SITE_IDENTITY: Uint8Array<ArrayBuffer>;
25
27
  readonly HLC_STATE: Uint8Array<ArrayBuffer>;
26
28
  readonly CHANGE_LOG: Uint8Array<ArrayBuffer>;
29
+ readonly QUARANTINE: Uint8Array<ArrayBuffer>;
30
+ readonly BASIS_LIFECYCLE: Uint8Array<ArrayBuffer>;
27
31
  };
28
32
  /**
29
33
  * Encode a primary key as a string for use in metadata keys.
@@ -143,8 +147,9 @@ export declare function parseSchemaMigrationKey(key: Uint8Array): {
143
147
  */
144
148
  export type ChangeLogEntryType = 'column' | 'delete';
145
149
  /**
146
- * Serialize an HLC to a sortable key component (26 bytes, big-endian).
147
- * This format ensures lexicographic ordering matches HLC ordering.
150
+ * Serialize an HLC to a sortable key component (30 bytes, big-endian).
151
+ * This format ensures lexicographic ordering matches HLC ordering — the opSeq
152
+ * bytes sit after siteId (the last tiebreak), matching compareHLC.
148
153
  */
149
154
  export declare function serializeHLCForKey(hlc: HLC): Uint8Array;
150
155
  /**
@@ -185,4 +190,49 @@ export declare function parseChangeLogKey(key: Uint8Array): {
185
190
  pk: SqlValue[];
186
191
  column?: string;
187
192
  } | null;
193
+ /**
194
+ * Build a quarantine key for a held out-of-basis straggler change.
195
+ * Format: qt:{schema}.{table}: + hlc_bytes(30) + type_byte(1) + :{pk_json}[:{column}]
196
+ *
197
+ * Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
198
+ * range scans by `(schema, table)` for operator inspection. The HLC + type + pk
199
+ * (+ column) suffix make the key idempotent: re-applying the same straggler
200
+ * change (same HLC) overwrites its own entry rather than accumulating. Reuses
201
+ * {@link serializeHLCForKey} / {@link encodePK} for parity with the change-log
202
+ * encoding.
203
+ *
204
+ * The value (not the key) carries the serialized change verbatim, so quarantine
205
+ * keys are written and pruned but never parsed back.
206
+ */
207
+ export declare function buildQuarantineKey(schemaName: string, tableName: string, hlc: HLC, entryType: ChangeLogEntryType, pk: SqlValue[], column?: string): Uint8Array;
208
+ /**
209
+ * Build scan bounds over quarantine entries.
210
+ * - both `schemaName` and `tableName`: a single table's held changes.
211
+ * - `schemaName` only: all held changes in that schema.
212
+ * - neither: every quarantine entry (the GC sweep).
213
+ */
214
+ export declare function buildQuarantineScanBounds(schemaName?: string, tableName?: string): {
215
+ gte: Uint8Array;
216
+ lt: Uint8Array;
217
+ };
218
+ /**
219
+ * Build a basis-table lifecycle key.
220
+ * Format: bl:{schema}.{table} (both lowercased — basis relations are keyed
221
+ * lowercased throughout the lens deployment snapshot, so the lifecycle key
222
+ * matches `relationBacking` / `derivation.sourceTables` keys exactly).
223
+ *
224
+ * One record per basis table; the value carries the full
225
+ * {@link import('./basis-lifecycle.js').BasisTableLifecycleRecord}, so the key
226
+ * is written and iterated but never parsed back.
227
+ */
228
+ export declare function buildBasisLifecycleKey(schemaName: string, tableName: string): Uint8Array;
229
+ /**
230
+ * Build scan bounds over all basis-table lifecycle records (operator
231
+ * introspection / `getBasisTableLifecycle`). The volume is bounded by the basis
232
+ * table count.
233
+ */
234
+ export declare function buildAllBasisLifecycleScanBounds(): {
235
+ gte: Uint8Array;
236
+ lt: Uint8Array;
237
+ };
188
238
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@
10
10
  * si: - Site identity
11
11
  * hc: - HLC clock state
12
12
  * cl: - Change log (HLC-indexed for efficient delta queries)
13
+ * qt: - Quarantine (held out-of-basis straggler changes)
14
+ * bl: - Basis-table lifecycle (mapped/derivation-source/unreferenced/detached bookkeeping)
13
15
  */
14
16
  const encoder = new TextEncoder();
15
17
  /** Key prefix bytes for sync metadata. */
@@ -22,6 +24,8 @@ export const SYNC_KEY_PREFIX = {
22
24
  SITE_IDENTITY: encoder.encode('si:'),
23
25
  HLC_STATE: encoder.encode('hc:'),
24
26
  CHANGE_LOG: encoder.encode('cl:'),
27
+ QUARANTINE: encoder.encode('qt:'),
28
+ BASIS_LIFECYCLE: encoder.encode('bl:'),
25
29
  };
26
30
  /** Separator between key components. */
27
31
  const SEPARATOR = ':';
@@ -262,11 +266,12 @@ export function parseSchemaMigrationKey(key) {
262
266
  return { schema, table, version };
263
267
  }
264
268
  /**
265
- * Serialize an HLC to a sortable key component (26 bytes, big-endian).
266
- * This format ensures lexicographic ordering matches HLC ordering.
269
+ * Serialize an HLC to a sortable key component (30 bytes, big-endian).
270
+ * This format ensures lexicographic ordering matches HLC ordering — the opSeq
271
+ * bytes sit after siteId (the last tiebreak), matching compareHLC.
267
272
  */
268
273
  export function serializeHLCForKey(hlc) {
269
- const buffer = new Uint8Array(26);
274
+ const buffer = new Uint8Array(30);
270
275
  const view = new DataView(buffer.buffer);
271
276
  // Wall time as big-endian 64-bit
272
277
  view.setBigUint64(0, hlc.wallTime, false);
@@ -274,6 +279,8 @@ export function serializeHLCForKey(hlc) {
274
279
  view.setUint16(8, hlc.counter, false);
275
280
  // Site ID (16 bytes)
276
281
  buffer.set(hlc.siteId, 10);
282
+ // Per-transaction sub-order as big-endian 32-bit
283
+ view.setUint32(26, hlc.opSeq, false);
277
284
  return buffer;
278
285
  }
279
286
  /**
@@ -284,7 +291,8 @@ export function deserializeHLCFromKey(buffer) {
284
291
  const wallTime = view.getBigUint64(0, false);
285
292
  const counter = view.getUint16(8, false);
286
293
  const siteId = new Uint8Array(buffer.slice(10, 26));
287
- return { wallTime, counter, siteId };
294
+ const opSeq = view.getUint32(26, false);
295
+ return { wallTime, counter, siteId, opSeq };
288
296
  }
289
297
  /**
290
298
  * Build a change log key.
@@ -300,12 +308,12 @@ export function buildChangeLogKey(hlc, entryType, schemaName, tableName, pk, col
300
308
  ? `${schemaName}.${tableName}${SEPARATOR}${encodePK(pk)}${SEPARATOR}${column}`
301
309
  : `${schemaName}.${tableName}${SEPARATOR}${encodePK(pk)}`;
302
310
  const suffixBytes = encoder.encode(suffix);
303
- // cl: (3) + hlc (26) + type (1) + suffix
304
- const key = new Uint8Array(3 + 26 + 1 + suffixBytes.length);
311
+ // cl: (3) + hlc (30) + type (1) + suffix
312
+ const key = new Uint8Array(3 + 30 + 1 + suffixBytes.length);
305
313
  key.set(SYNC_KEY_PREFIX.CHANGE_LOG, 0);
306
314
  key.set(hlcBytes, 3);
307
- key[29] = typeByte;
308
- key.set(suffixBytes, 30);
315
+ key[33] = typeByte;
316
+ key.set(suffixBytes, 34);
309
317
  return key;
310
318
  }
311
319
  /**
@@ -315,7 +323,7 @@ export function buildChangeLogKey(hlc, entryType, schemaName, tableName, pk, col
315
323
  export function buildChangeLogScanBoundsAfter(sinceHLC) {
316
324
  const hlcBytes = serializeHLCForKey(sinceHLC);
317
325
  // Start just after sinceHLC
318
- const gte = new Uint8Array(3 + 26);
326
+ const gte = new Uint8Array(3 + 30);
319
327
  gte.set(SYNC_KEY_PREFIX.CHANGE_LOG, 0);
320
328
  gte.set(incrementHLCBytes(hlcBytes), 3);
321
329
  return {
@@ -351,17 +359,17 @@ function incrementHLCBytes(hlcBytes) {
351
359
  * Parse a change log key to extract components.
352
360
  */
353
361
  export function parseChangeLogKey(key) {
354
- // Minimum: cl: (3) + hlc (26) + type (1) + some suffix
355
- if (key.length < 31)
362
+ // Minimum: cl: (3) + hlc (30) + type (1) + some suffix
363
+ if (key.length < 35)
356
364
  return null;
357
365
  const prefixStr = new TextDecoder().decode(key.slice(0, 3));
358
366
  if (prefixStr !== 'cl:')
359
367
  return null;
360
- const hlcBytes = key.slice(3, 29);
368
+ const hlcBytes = key.slice(3, 33);
361
369
  const hlc = deserializeHLCFromKey(hlcBytes);
362
- const typeByte = key[29];
370
+ const typeByte = key[33];
363
371
  const entryType = typeByte === 0x01 ? 'column' : 'delete';
364
- const suffixStr = new TextDecoder().decode(key.slice(30));
372
+ const suffixStr = new TextDecoder().decode(key.slice(34));
365
373
  // Parse suffix: {schema}.{table}:{pk_json}:{column?}
366
374
  const firstDot = suffixStr.indexOf('.');
367
375
  if (firstDot === -1)
@@ -398,4 +406,81 @@ export function parseChangeLogKey(key) {
398
406
  }
399
407
  }
400
408
  }
409
+ /**
410
+ * Build a quarantine key for a held out-of-basis straggler change.
411
+ * Format: qt:{schema}.{table}: + hlc_bytes(30) + type_byte(1) + :{pk_json}[:{column}]
412
+ *
413
+ * Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
414
+ * range scans by `(schema, table)` for operator inspection. The HLC + type + pk
415
+ * (+ column) suffix make the key idempotent: re-applying the same straggler
416
+ * change (same HLC) overwrites its own entry rather than accumulating. Reuses
417
+ * {@link serializeHLCForKey} / {@link encodePK} for parity with the change-log
418
+ * encoding.
419
+ *
420
+ * The value (not the key) carries the serialized change verbatim, so quarantine
421
+ * keys are written and pruned but never parsed back.
422
+ */
423
+ export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, column) {
424
+ const prefixBytes = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
425
+ const hlcBytes = serializeHLCForKey(hlc);
426
+ const typeByte = entryType === 'column' ? 0x01 : 0x02;
427
+ const suffix = column
428
+ ? `${SEPARATOR}${encodePK(pk)}${SEPARATOR}${column}`
429
+ : `${SEPARATOR}${encodePK(pk)}`;
430
+ const suffixBytes = encoder.encode(suffix);
431
+ const key = new Uint8Array(prefixBytes.length + 30 + 1 + suffixBytes.length);
432
+ let offset = 0;
433
+ key.set(prefixBytes, offset);
434
+ offset += prefixBytes.length;
435
+ key.set(hlcBytes, offset);
436
+ offset += 30;
437
+ key[offset] = typeByte;
438
+ offset += 1;
439
+ key.set(suffixBytes, offset);
440
+ return key;
441
+ }
442
+ /**
443
+ * Build scan bounds over quarantine entries.
444
+ * - both `schemaName` and `tableName`: a single table's held changes.
445
+ * - `schemaName` only: all held changes in that schema.
446
+ * - neither: every quarantine entry (the GC sweep).
447
+ */
448
+ export function buildQuarantineScanBounds(schemaName, tableName) {
449
+ if (schemaName !== undefined && tableName !== undefined) {
450
+ const prefix = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
451
+ return { gte: prefix, lt: incrementLastByte(prefix) };
452
+ }
453
+ if (schemaName !== undefined) {
454
+ const prefix = encoder.encode(`qt:${schemaName}.`);
455
+ return { gte: prefix, lt: incrementLastByte(prefix) };
456
+ }
457
+ return {
458
+ gte: SYNC_KEY_PREFIX.QUARANTINE,
459
+ lt: incrementLastByte(SYNC_KEY_PREFIX.QUARANTINE),
460
+ };
461
+ }
462
+ /**
463
+ * Build a basis-table lifecycle key.
464
+ * Format: bl:{schema}.{table} (both lowercased — basis relations are keyed
465
+ * lowercased throughout the lens deployment snapshot, so the lifecycle key
466
+ * matches `relationBacking` / `derivation.sourceTables` keys exactly).
467
+ *
468
+ * One record per basis table; the value carries the full
469
+ * {@link import('./basis-lifecycle.js').BasisTableLifecycleRecord}, so the key
470
+ * is written and iterated but never parsed back.
471
+ */
472
+ export function buildBasisLifecycleKey(schemaName, tableName) {
473
+ return encoder.encode(`bl:${schemaName.toLowerCase()}.${tableName.toLowerCase()}`);
474
+ }
475
+ /**
476
+ * Build scan bounds over all basis-table lifecycle records (operator
477
+ * introspection / `getBasisTableLifecycle`). The volume is bounded by the basis
478
+ * table count.
479
+ */
480
+ export function buildAllBasisLifecycleScanBounds() {
481
+ return {
482
+ gte: SYNC_KEY_PREFIX.BASIS_LIFECYCLE,
483
+ lt: incrementLastByte(SYNC_KEY_PREFIX.BASIS_LIFECYCLE),
484
+ };
485
+ }
401
486
  //# sourceMappingURL=keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;CACzB,CAAC;AAEX,wCAAwC;AACxC,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAc;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IAC5F,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,SAAiB,EACjB,EAAc;IAEd,MAAM,GAAG,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACvE,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,0CAA0C;AAC1C,MAAM,eAAe,GAAG,kEAAkE,CAAC;AAE3F;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,kDAAkD;IAClD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QACrD,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,SAAiB,EACjB,OAAe;IAEf,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,SAAiB,EACjB,EAAc;IAEd,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC;IACtF,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAe;IACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,cAAc;QACnC,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,cAAc,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,SAAS;QAC9B,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,gBAAgB;QACrC,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC;KACxD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAe;IAMnD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,yCAAyC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAK/C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAe;IAKrD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,iCAAiC;IACjC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,qBAAqB;IACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAQ,EACR,SAA6B,EAC7B,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAe;IAEf,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE;QAC9E,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C,yCAAyC;IACzC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5D,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IACnB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAa;IACzD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,4BAA4B;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAExC,OAAO;QACL,GAAG;QACH,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,UAAU;QAC/B,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAoB;IAC7C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAQ/C,uDAAuD;IACvD,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,SAAS,GAAuB,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE9E,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,qDAAqD;IACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAElD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export interface PeerState {
16
16
  }
17
17
  /**
18
18
  * Serialize peer state for storage.
19
- * Format: 26 bytes HLC + 8 bytes lastSyncTime
19
+ * Format: 30 bytes HLC + 8 bytes lastSyncTime
20
20
  */
21
21
  export declare function serializePeerState(state: PeerState): Uint8Array;
22
22
  /**
@@ -9,23 +9,23 @@ import { buildPeerStateKey } from './keys.js';
9
9
  import { SYNC_KEY_PREFIX } from './keys.js';
10
10
  /**
11
11
  * Serialize peer state for storage.
12
- * Format: 26 bytes HLC + 8 bytes lastSyncTime
12
+ * Format: 30 bytes HLC + 8 bytes lastSyncTime
13
13
  */
14
14
  export function serializePeerState(state) {
15
- const result = new Uint8Array(34);
15
+ const result = new Uint8Array(38);
16
16
  const hlcBytes = serializeHLC(state.lastSyncHLC);
17
17
  result.set(hlcBytes, 0);
18
18
  const view = new DataView(result.buffer);
19
- view.setBigUint64(26, BigInt(state.lastSyncTime), false);
19
+ view.setBigUint64(30, BigInt(state.lastSyncTime), false);
20
20
  return result;
21
21
  }
22
22
  /**
23
23
  * Deserialize peer state from storage.
24
24
  */
25
25
  export function deserializePeerState(buffer) {
26
- const lastSyncHLC = deserializeHLC(buffer.slice(0, 26));
26
+ const lastSyncHLC = deserializeHLC(buffer.slice(0, 30));
27
27
  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
28
- const lastSyncTime = Number(view.getBigUint64(26, false));
28
+ const lastSyncTime = Number(view.getBigUint64(30, false));
29
29
  return { lastSyncHLC, lastSyncTime };
30
30
  }
31
31
  /**
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Quarantine store for held out-of-basis straggler changes.
3
+ *
4
+ * When a long-offline peer (a "straggler") reconnects and sends changes for a
5
+ * table the receiver has since retired, the apply path diverts those changes
6
+ * here instead of silently dropping them (see `docs/migration.md` § 4 Contract,
7
+ * Unknown-table disposition, and `change-applicator.ts`). The raw wire `Change`
8
+ * is stored verbatim so a manual / late replay has full fidelity.
9
+ *
10
+ * Entries are:
11
+ * - **idempotent** — keyed by the change's HLC (+ type/pk/column), so applying
12
+ * the same straggler batch twice yields exactly one entry per change.
13
+ * - **durable within the admission unit** — `put` stages into a caller-owned
14
+ * {@link WriteBatch} that lands before the apply's clock watermark advances,
15
+ * so a crash never strands a straggler's change with no re-delivery.
16
+ * - **bounded** — {@link pruneOlderThan} GCs entries past the retention horizon
17
+ * (mirroring tombstone TTL), so cost is zero with no stragglers and bounded
18
+ * by the horizon otherwise.
19
+ */
20
+ import type { KVStore, WriteBatch } from '@quereus/store';
21
+ import type { Change } from '../sync/protocol.js';
22
+ /**
23
+ * A held inbound change plus the wall-clock time it was received (for GC).
24
+ */
25
+ export interface QuarantineEntry {
26
+ readonly change: Change;
27
+ readonly receivedAt: number;
28
+ /**
29
+ * Whether this held change is eligible to be re-offered to peers that still
30
+ * have the table (the `store-and-forward` disposition). A plain `quarantine`
31
+ * hold is `false`. The relay (sibling ticket `sync-store-and-forward-relay`)
32
+ * consumes this flag via {@link QuarantineStore.listForwardable}; the change
33
+ * is held identically either way — the flag only governs re-offer eligibility.
34
+ */
35
+ readonly forwardable: boolean;
36
+ }
37
+ /**
38
+ * Serialize a quarantine entry (the raw change + receivedAt) to bytes.
39
+ */
40
+ export declare function serializeQuarantineEntry(entry: QuarantineEntry): Uint8Array;
41
+ /**
42
+ * Deserialize a quarantine entry from bytes.
43
+ */
44
+ export declare function deserializeQuarantineEntry(buffer: Uint8Array): QuarantineEntry;
45
+ /**
46
+ * Quarantine store operations.
47
+ */
48
+ export declare class QuarantineStore {
49
+ private readonly kv;
50
+ constructor(kv: KVStore);
51
+ /**
52
+ * Stage a held change into a caller-owned batch. HLC-keyed, so re-staging the
53
+ * same change overwrites its own entry (idempotent re-apply). The HLC key does
54
+ * NOT include `forwardable`, so re-delivering a change under a different
55
+ * disposition overwrites its own entry with the new flag — last-writer-wins on
56
+ * the flag, which is correct: the latest disposition governs.
57
+ */
58
+ put(batch: WriteBatch, change: Change, receivedAt: number, forwardable: boolean): void;
59
+ /**
60
+ * Stage deletion of a held entry by its change, rebuilding the `qt:` key from
61
+ * the change exactly as {@link put} does (HLC + type + pk (+ column)) — so it
62
+ * is symmetric with `put` and clears precisely the entry that change produced.
63
+ * Used by the drain path (`change-applicator.drainHeldChanges`) to clear a held
64
+ * entry atomically with the apply that replays it into the reappeared table.
65
+ */
66
+ delete(batch: WriteBatch, change: Change): void;
67
+ /**
68
+ * List held changes, optionally scoped to a schema (and table). For operator
69
+ * inspection — the volume is bounded by the retention horizon.
70
+ */
71
+ list(schemaName?: string, tableName?: string): Promise<QuarantineEntry[]>;
72
+ /**
73
+ * Yield held entries marked forwardable (the `store-and-forward` disposition).
74
+ * A full `qt:` scan filtered to {@link QuarantineEntry.forwardable}, so it is
75
+ * bounded by the retention horizon exactly like {@link list} — and zero-cost
76
+ * when no straggler was ever stored forwardable. The relay (sibling ticket
77
+ * `sync-store-and-forward-relay`) filters these further by HLC/origin before
78
+ * re-offering them; this method stays deliberately dumb so it is independently
79
+ * testable here.
80
+ */
81
+ listForwardable(): Promise<QuarantineEntry[]>;
82
+ /**
83
+ * Prune held changes received strictly before `cutoff` (a wall-clock ms
84
+ * timestamp). The caller passes `Date.now() - retentionHorizonMs`, matching
85
+ * the tombstone TTL test (`now - receivedAt > retentionHorizonMs`). Returns
86
+ * the number pruned.
87
+ */
88
+ pruneOlderThan(cutoff: number): Promise<number>;
89
+ }
90
+ //# sourceMappingURL=quarantine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quarantine.d.ts","sourceRoot":"","sources":["../../../src/metadata/quarantine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAwBD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA0B3E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CAwB9E;AAED;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,OAAO;IAExC;;;;;;OAMG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAOtF;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO/C;;;OAGG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAS/E;;;;;;;;OAQG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAUnD;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBtD"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Quarantine store for held out-of-basis straggler changes.
3
+ *
4
+ * When a long-offline peer (a "straggler") reconnects and sends changes for a
5
+ * table the receiver has since retired, the apply path diverts those changes
6
+ * here instead of silently dropping them (see `docs/migration.md` § 4 Contract,
7
+ * Unknown-table disposition, and `change-applicator.ts`). The raw wire `Change`
8
+ * is stored verbatim so a manual / late replay has full fidelity.
9
+ *
10
+ * Entries are:
11
+ * - **idempotent** — keyed by the change's HLC (+ type/pk/column), so applying
12
+ * the same straggler batch twice yields exactly one entry per change.
13
+ * - **durable within the admission unit** — `put` stages into a caller-owned
14
+ * {@link WriteBatch} that lands before the apply's clock watermark advances,
15
+ * so a crash never strands a straggler's change with no re-delivery.
16
+ * - **bounded** — {@link pruneOlderThan} GCs entries past the retention horizon
17
+ * (mirroring tombstone TTL), so cost is zero with no stragglers and bounded
18
+ * by the horizon otherwise.
19
+ */
20
+ import { hlcToJson, hlcFromJson } from '../clock/hlc.js';
21
+ import { encodeSqlValue, decodeSqlValue } from './column-version.js';
22
+ import { buildQuarantineKey, buildQuarantineScanBounds } from './keys.js';
23
+ /**
24
+ * Serialize a quarantine entry (the raw change + receivedAt) to bytes.
25
+ */
26
+ export function serializeQuarantineEntry(entry) {
27
+ const c = entry.change;
28
+ const base = {
29
+ t: c.type,
30
+ s: c.schema,
31
+ tb: c.table,
32
+ pk: c.pk.map(encodeSqlValue),
33
+ h: hlcToJson(c.hlc),
34
+ r: entry.receivedAt,
35
+ };
36
+ // Preserve the before-image verbatim so a late/manual replay keeps the full wire
37
+ // fidelity the module promises: the per-cell prior on column changes, the row
38
+ // image on deletes (each present only when the wire change carried it).
39
+ const prior = c.type === 'column' && c.priorHlc !== undefined
40
+ ? { pv: encodeSqlValue(c.priorValue ?? null), ph: hlcToJson(c.priorHlc) }
41
+ : undefined;
42
+ const priorRow = c.type === 'delete' && c.priorRow !== undefined
43
+ ? { pr: c.priorRow.map(encodeSqlValue) }
44
+ : undefined;
45
+ // Emit the forwardable mark only when set, so plain-quarantine entries stay
46
+ // byte-identical to the pre-store-and-forward encoding (and decode to false).
47
+ const fwd = entry.forwardable ? { f: 1 } : undefined;
48
+ const obj = c.type === 'column'
49
+ ? { ...base, col: c.column, v: encodeSqlValue(c.value), ...prior, ...fwd }
50
+ : { ...base, ...priorRow, ...fwd };
51
+ return new TextEncoder().encode(JSON.stringify(obj));
52
+ }
53
+ /**
54
+ * Deserialize a quarantine entry from bytes.
55
+ */
56
+ export function deserializeQuarantineEntry(buffer) {
57
+ const obj = JSON.parse(new TextDecoder().decode(buffer));
58
+ const hlc = hlcFromJson(obj.h);
59
+ const pk = obj.pk.map(decodeSqlValue);
60
+ if (obj.t === 'column') {
61
+ // Restore the before-image when present (spread only then — keeps prior-less
62
+ // changes free of phantom undefined fields, matching the producer path).
63
+ const prior = obj.ph !== undefined
64
+ ? { priorValue: decodeSqlValue(obj.pv), priorHlc: hlcFromJson(obj.ph) }
65
+ : undefined;
66
+ return {
67
+ change: { type: 'column', schema: obj.s, table: obj.tb, pk, column: obj.col, value: decodeSqlValue(obj.v), hlc, ...prior },
68
+ receivedAt: obj.r,
69
+ forwardable: obj.f === 1,
70
+ };
71
+ }
72
+ // Restore the row before-image when present (spread only then, matching the
73
+ // producer path — a prior-less delete stays free of phantom undefined fields).
74
+ const priorRow = obj.pr !== undefined ? { priorRow: obj.pr.map(decodeSqlValue) } : undefined;
75
+ return {
76
+ change: { type: 'delete', schema: obj.s, table: obj.tb, pk, hlc, ...priorRow },
77
+ receivedAt: obj.r,
78
+ forwardable: obj.f === 1,
79
+ };
80
+ }
81
+ /**
82
+ * Quarantine store operations.
83
+ */
84
+ export class QuarantineStore {
85
+ kv;
86
+ constructor(kv) {
87
+ this.kv = kv;
88
+ }
89
+ /**
90
+ * Stage a held change into a caller-owned batch. HLC-keyed, so re-staging the
91
+ * same change overwrites its own entry (idempotent re-apply). The HLC key does
92
+ * NOT include `forwardable`, so re-delivering a change under a different
93
+ * disposition overwrites its own entry with the new flag — last-writer-wins on
94
+ * the flag, which is correct: the latest disposition governs.
95
+ */
96
+ put(batch, change, receivedAt, forwardable) {
97
+ const entryType = change.type === 'column' ? 'column' : 'delete';
98
+ const column = change.type === 'column' ? change.column : undefined;
99
+ const key = buildQuarantineKey(change.schema, change.table, change.hlc, entryType, change.pk, column);
100
+ batch.put(key, serializeQuarantineEntry({ change, receivedAt, forwardable }));
101
+ }
102
+ /**
103
+ * Stage deletion of a held entry by its change, rebuilding the `qt:` key from
104
+ * the change exactly as {@link put} does (HLC + type + pk (+ column)) — so it
105
+ * is symmetric with `put` and clears precisely the entry that change produced.
106
+ * Used by the drain path (`change-applicator.drainHeldChanges`) to clear a held
107
+ * entry atomically with the apply that replays it into the reappeared table.
108
+ */
109
+ delete(batch, change) {
110
+ const entryType = change.type === 'column' ? 'column' : 'delete';
111
+ const column = change.type === 'column' ? change.column : undefined;
112
+ const key = buildQuarantineKey(change.schema, change.table, change.hlc, entryType, change.pk, column);
113
+ batch.delete(key);
114
+ }
115
+ /**
116
+ * List held changes, optionally scoped to a schema (and table). For operator
117
+ * inspection — the volume is bounded by the retention horizon.
118
+ */
119
+ async list(schemaName, tableName) {
120
+ const bounds = buildQuarantineScanBounds(schemaName, tableName);
121
+ const entries = [];
122
+ for await (const entry of this.kv.iterate(bounds)) {
123
+ entries.push(deserializeQuarantineEntry(entry.value));
124
+ }
125
+ return entries;
126
+ }
127
+ /**
128
+ * Yield held entries marked forwardable (the `store-and-forward` disposition).
129
+ * A full `qt:` scan filtered to {@link QuarantineEntry.forwardable}, so it is
130
+ * bounded by the retention horizon exactly like {@link list} — and zero-cost
131
+ * when no straggler was ever stored forwardable. The relay (sibling ticket
132
+ * `sync-store-and-forward-relay`) filters these further by HLC/origin before
133
+ * re-offering them; this method stays deliberately dumb so it is independently
134
+ * testable here.
135
+ */
136
+ async listForwardable() {
137
+ const bounds = buildQuarantineScanBounds();
138
+ const entries = [];
139
+ for await (const entry of this.kv.iterate(bounds)) {
140
+ const parsed = deserializeQuarantineEntry(entry.value);
141
+ if (parsed.forwardable)
142
+ entries.push(parsed);
143
+ }
144
+ return entries;
145
+ }
146
+ /**
147
+ * Prune held changes received strictly before `cutoff` (a wall-clock ms
148
+ * timestamp). The caller passes `Date.now() - retentionHorizonMs`, matching
149
+ * the tombstone TTL test (`now - receivedAt > retentionHorizonMs`). Returns
150
+ * the number pruned.
151
+ */
152
+ async pruneOlderThan(cutoff) {
153
+ const bounds = buildQuarantineScanBounds();
154
+ const batch = this.kv.batch();
155
+ let count = 0;
156
+ for await (const entry of this.kv.iterate(bounds)) {
157
+ const { receivedAt } = deserializeQuarantineEntry(entry.value);
158
+ if (receivedAt < cutoff) {
159
+ batch.delete(entry.key);
160
+ count++;
161
+ }
162
+ }
163
+ await batch.write();
164
+ return count;
165
+ }
166
+ }
167
+ //# sourceMappingURL=quarantine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quarantine.js","sourceRoot":"","sources":["../../../src/metadata/quarantine.ts"],"names":[],"mappings":"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"}