@dbos-inc/dbos-enterprise 5.3.2-preview → 5.4.2-preview

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 (58) hide show
  1. package/README.md +0 -2
  2. package/dist/src/auto_upgrade.d.ts +39 -0
  3. package/dist/src/auto_upgrade.d.ts.map +1 -0
  4. package/dist/src/auto_upgrade.js +229 -0
  5. package/dist/src/auto_upgrade.js.map +1 -0
  6. package/dist/src/cockroach.d.ts +10 -0
  7. package/dist/src/cockroach.d.ts.map +1 -0
  8. package/dist/src/cockroach.js +28 -0
  9. package/dist/src/cockroach.js.map +1 -0
  10. package/dist/src/conductor/conductor.d.ts +8 -5
  11. package/dist/src/conductor/conductor.d.ts.map +1 -1
  12. package/dist/src/conductor/conductor.js +765 -735
  13. package/dist/src/conductor/conductor.js.map +1 -1
  14. package/dist/src/conductor/protocol.d.ts +31 -7
  15. package/dist/src/conductor/protocol.d.ts.map +1 -1
  16. package/dist/src/conductor/protocol.js +84 -17
  17. package/dist/src/conductor/protocol.js.map +1 -1
  18. package/dist/src/export.d.ts +7 -0
  19. package/dist/src/export.d.ts.map +1 -1
  20. package/dist/src/export.js +15 -21
  21. package/dist/src/export.js.map +1 -1
  22. package/dist/src/fork.d.ts +7 -0
  23. package/dist/src/fork.d.ts.map +1 -1
  24. package/dist/src/fork.js +11 -3
  25. package/dist/src/fork.js.map +1 -1
  26. package/dist/src/index.d.ts +9 -0
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +12 -1
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/locks.d.ts +20 -0
  31. package/dist/src/locks.d.ts.map +1 -0
  32. package/dist/src/locks.js +47 -0
  33. package/dist/src/locks.js.map +1 -0
  34. package/dist/src/observability.d.ts +8 -0
  35. package/dist/src/observability.d.ts.map +1 -1
  36. package/dist/src/observability.js +63 -43
  37. package/dist/src/observability.js.map +1 -1
  38. package/dist/src/retention.d.ts +16 -34
  39. package/dist/src/retention.d.ts.map +1 -1
  40. package/dist/src/retention.js +151 -191
  41. package/dist/src/retention.js.map +1 -1
  42. package/dist/src/sharding/index.d.ts +9 -0
  43. package/dist/src/sharding/index.d.ts.map +1 -0
  44. package/dist/src/sharding/index.js +13 -0
  45. package/dist/src/sharding/index.js.map +1 -0
  46. package/dist/src/sharding/migrations.d.ts +20 -0
  47. package/dist/src/sharding/migrations.d.ts.map +1 -0
  48. package/dist/src/sharding/migrations.js +486 -0
  49. package/dist/src/sharding/migrations.js.map +1 -0
  50. package/dist/src/sharding/schema.d.ts +9 -0
  51. package/dist/src/sharding/schema.d.ts.map +1 -0
  52. package/dist/src/sharding/schema.js +12 -0
  53. package/dist/src/sharding/schema.js.map +1 -0
  54. package/dist/src/sharding/sys_db.d.ts +101 -0
  55. package/dist/src/sharding/sys_db.d.ts.map +1 -0
  56. package/dist/src/sharding/sys_db.js +717 -0
  57. package/dist/src/sharding/sys_db.js.map +1 -0
  58. package/package.json +3 -3
@@ -1,29 +1,36 @@
1
+ // Copyright (c) 2026 DBOS, Inc. All rights reserved.
2
+ //
3
+ // This file is part of Transact Enterprise, proprietary software licensed under the
4
+ // DBOS Conductor Software License: https://www.dbos.dev/conductor-license
5
+ // You may not use, copy, modify, or distribute this file except as that license permits.
6
+ // Disabling or circumventing the entitlement checks in @dbos-inc/dbos-sdk's src/enterprise.ts
7
+ // that gate it is a material breach of that license.
1
8
  "use strict";
2
- // Retention and bulk timeout across the whole system database.
3
9
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.globalTimeout = exports.garbageCollect = exports.listTimedOutWorkflowIds = exports.collectStatuses = exports.collectPayloads = exports.acquireRetentionLock = exports.DEFAULT_GC_BATCH_SIZE = exports.retentionLockKey = exports.retryOnSerializationError = void 0;
10
+ exports.globalTimeout = exports.garbageCollect = exports.listTimedOutWorkflowIds = exports.collectStatuses = exports.collectPayloads = exports.acquireRetentionLock = exports.WindowBatches = exports.DEFAULT_GC_BATCH_SIZE = exports.retentionLockKey = exports.retryOnSerializationError = void 0;
11
+ const cockroach_1 = require("./cockroach");
5
12
  const dbos_executor_1 = require("@dbos-inc/dbos-sdk/internal/dbos-executor");
6
13
  const error_1 = require("@dbos-inc/dbos-sdk/internal/error");
14
+ const shard_keys_1 = require("@dbos-inc/dbos-sdk/internal/shard_keys");
15
+ const locks_1 = require("./locks");
7
16
  const system_database_1 = require("@dbos-inc/dbos-sdk/internal/system_database");
8
17
  const utils_1 = require("@dbos-inc/dbos-sdk/internal/utils");
9
18
  const workflow_1 = require("@dbos-inc/dbos-sdk/internal/workflow");
10
- /**
11
- * Bulk maintenance retries these a bounded number of times. 40001 is kept out of core's retryable sets,
12
- * which feed `dbRetry` and so retry forever; every other path runs READ COMMITTED and never sees it.
13
- */
14
19
  const SERIALIZATION_SQLSTATE_CODES = new Set([
15
- '40001', // serialization_failure (MVCC conflict)
16
- '40P01', // deadlock_detected
20
+ '40001',
21
+ '40P01',
17
22
  ]);
18
- function isSerializationError(err) {
23
+ function isSerializationError(err, sysdb) {
19
24
  for (const e of (0, system_database_1.unwrapErrors)(err)) {
25
+ if (sysdb.isSerializationConflict(e)) {
26
+ return true;
27
+ }
20
28
  if ((0, system_database_1.isPgDatabaseError)(e) && SERIALIZATION_SQLSTATE_CODES.has(e.code)) {
21
29
  return true;
22
30
  }
23
31
  }
24
32
  return false;
25
33
  }
26
- /** Borrow a connection for a retention round, so the system database's destroy() can cut it. */
27
34
  async function borrowRetentionClient(sysdb) {
28
35
  if (sysdb.destroyed) {
29
36
  throw new Error('System database shutting down');
@@ -32,18 +39,12 @@ async function borrowRetentionClient(sysdb) {
32
39
  sysdb.retentionClients.add(client);
33
40
  return client;
34
41
  }
35
- /** Return a retention connection, unless destroy() already cut it: a second release would throw. */
36
- function releaseRetentionClient(sysdb, client) {
42
+ function releaseRetentionClient(sysdb, client, destroy = false) {
37
43
  if (sysdb.retentionClients.delete(client)) {
38
- // No error argument: a genuinely dead connection is still evicted by the pool's own check.
39
- client.release();
44
+ client.release(destroy);
40
45
  }
41
46
  }
42
- /**
43
- * Re-run a batch that lost a deadlock or serialization race. The database already rolled it
44
- * back, so replaying it is safe.
45
- */
46
- async function retryOnSerializationError(operation) {
47
+ async function retryOnSerializationError(operation, sysdb) {
47
48
  const maxAttempts = 10;
48
49
  const maxBackoff = 2.0;
49
50
  let backoff = 0.05;
@@ -52,7 +53,7 @@ async function retryOnSerializationError(operation) {
52
53
  return await operation();
53
54
  }
54
55
  catch (e) {
55
- if (!isSerializationError(e)) {
56
+ if (!isSerializationError(e, sysdb)) {
56
57
  throw e;
57
58
  }
58
59
  const message = e instanceof Error ? e.message : String(e);
@@ -60,7 +61,6 @@ async function retryOnSerializationError(operation) {
60
61
  dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Garbage collection failed after ${maxAttempts} attempts: ${message}`);
61
62
  throw e;
62
63
  }
63
- // Jittered backoff, so peers that collided do not collide again
64
64
  const actualBackoff = backoff * (0.5 + Math.random());
65
65
  dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Contention or deadlock detected in workflow garbage collection: ${message}. ` +
66
66
  `Retrying in ${actualBackoff.toFixed(2)}s (attempt ${attempt})`);
@@ -70,89 +70,122 @@ async function retryOnSerializationError(operation) {
70
70
  }
71
71
  }
72
72
  exports.retryOnSerializationError = retryOnSerializationError;
73
- /**
74
- * The pg_try_advisory_lock argument for one schema's retention round: the leading 8 bytes of
75
- * SHA-256 over a fixed string, read as a signed big-endian 64-bit integer. Separate locks for
76
- * separate schemas. Every DBOS SDK derives the key this way, so rounds in different languages
77
- * against one system database contend for the same lock; changing it here changes it everywhere.
78
- */
79
73
  function retentionLockKey(schemaName) {
80
74
  return (0, system_database_1.advisoryLockKey)(`dbos.retention.${schemaName}`);
81
75
  }
82
76
  exports.retentionLockKey = retentionLockKey;
83
- // Rows deleted per transaction by garbage collection.
84
77
  exports.DEFAULT_GC_BATCH_SIZE = 50_000;
85
- // Detecting CockroachDB costs a query, so it is resolved once per system database.
86
- const cockroachBySysDb = new WeakMap();
87
- /** Whether the system database is CockroachDB. */
88
- async function isCockroach(sysdb) {
89
- let cockroach = cockroachBySysDb.get(sysdb);
90
- if (cockroach === undefined) {
91
- const client = await sysdb.connect();
92
- try {
93
- cockroach = await (0, system_database_1.isCockroachDB)(client);
94
- }
95
- finally {
96
- client.release();
78
+ async function kthValue(sysdb, client, column, from, where, params, k, descending = false) {
79
+ if (!Number.isInteger(k) || k < 1) {
80
+ throw new error_1.DBOSError(`Cannot take the ${k}th value: k must be a positive integer`);
81
+ }
82
+ const order = `ORDER BY ${column}${descending ? ' DESC' : ''}`;
83
+ if (!sysdb.sharded) {
84
+ const { rows } = await client.query(`SELECT ${column} AS value FROM ${from} WHERE ${where} ${order} LIMIT 1${k > 1 ? ` OFFSET ${k - 1}` : ''}`, params);
85
+ return rows.length > 0 ? Number(rows[0].value) : undefined;
86
+ }
87
+ const { rows } = await client.query(`SELECT ${column} AS value FROM ${from} WHERE ${where} ${order} LIMIT ${k}`, params);
88
+ const values = rows.map((row) => Number(row.value)).sort((a, b) => (descending ? b - a : a - b));
89
+ return values.length >= k ? values[k - 1] : undefined;
90
+ }
91
+ const INITIAL_BATCH_WINDOW_MS = 1_000;
92
+ class WindowBatches {
93
+ batchSize;
94
+ width = INITIAL_BATCH_WINDOW_MS;
95
+ constructor(batchSize) {
96
+ this.batchSize = batchSize;
97
+ }
98
+ async bound(client, column, from, eligible, watermark, cutoff) {
99
+ const k = this.batchSize;
100
+ let lo = watermark;
101
+ let fits = undefined;
102
+ let fitsCount = 0;
103
+ let overflows = undefined;
104
+ let hi = lo + this.width;
105
+ let final;
106
+ let n;
107
+ for (;;) {
108
+ final = hi >= cutoff;
109
+ const params = [];
110
+ const window = [eligible(params), `${column} > $${params.push(lo)}`];
111
+ if (!final)
112
+ window.push(`${column} <= $${params.push(hi)}`);
113
+ const { rows } = await client.query(`SELECT count(*) AS count FROM ${from} WHERE ${window.join(' AND ')}`, params);
114
+ n = Number(rows[0].count);
115
+ if (n > 2 * k && hi - lo > 1) {
116
+ overflows = Math.min(hi, cutoff);
117
+ const base = fits ?? lo;
118
+ hi = base + Math.floor((overflows - base) / 2);
119
+ if (fits !== undefined && hi <= fits) {
120
+ hi = fits;
121
+ n = fitsCount;
122
+ final = false;
123
+ break;
124
+ }
125
+ continue;
126
+ }
127
+ if (n === 0 && fits === undefined) {
128
+ if (final)
129
+ return undefined;
130
+ const nextParams = [];
131
+ const nextWhere = `${eligible(nextParams)} AND ${column} > $${nextParams.push(lo)}`;
132
+ const { rows: next } = await client.query(`SELECT min(${column}) AS next FROM ${from} WHERE ${nextWhere}`, nextParams);
133
+ if (next[0]?.next === null || next[0]?.next === undefined)
134
+ return undefined;
135
+ lo = Number(next[0].next) - 1;
136
+ hi = lo + this.width;
137
+ continue;
138
+ }
139
+ if (4 * n < k && !final) {
140
+ fits = hi;
141
+ fitsCount = n;
142
+ hi = overflows === undefined ? lo + (hi - lo) * 16 : Math.floor((hi + overflows) / 2);
143
+ if (overflows !== undefined && hi <= fits)
144
+ break;
145
+ continue;
146
+ }
147
+ break;
97
148
  }
98
- cockroachBySysDb.set(sysdb, cockroach);
149
+ if (final)
150
+ return undefined;
151
+ const span = Math.max(1, hi - lo);
152
+ this.width = Math.max(1, Math.min(span * 16, Math.floor((span * k) / Math.max(n, 1))));
153
+ return hi;
99
154
  }
100
- return cockroach;
101
155
  }
102
- /**
103
- * Take a database-wide lock for one retention round, returning how to release it, or
104
- * undefined when another round already holds it. The lock is session-scoped, so a round
105
- * that crashes releases it. CockroachDB has no advisory locks and always takes it, so it
106
- * collects unprotected rather than not at all.
107
- */
156
+ exports.WindowBatches = WindowBatches;
108
157
  async function acquireRetentionLock(sysdb) {
109
- if (await isCockroach(sysdb)) {
158
+ if (sysdb.destroyed) {
159
+ throw new Error('System database shutting down');
160
+ }
161
+ if (await (0, cockroach_1.isCockroach)(sysdb)) {
110
162
  return { release: () => Promise.resolve() };
111
163
  }
112
- const key = retentionLockKey(sysdb.schemaName).toString();
113
- // The round holds this connection until it ends: releasing it would drop the lock.
164
+ const key = retentionLockKey(sysdb.schemaName);
114
165
  const client = await borrowRetentionClient(sysdb);
115
- let acquired = false;
166
+ let lock;
116
167
  try {
117
- const { rows } = await client.query('SELECT pg_try_advisory_lock($1) AS locked', [key]);
118
- acquired = rows[0]?.locked === true;
168
+ lock = await (0, locks_1.tryAdvisoryLock)(client, key, { name: 'retention', discard: sysdb.sharded, logger: sysdb.logger });
119
169
  }
120
170
  catch (e) {
121
- releaseRetentionClient(sysdb, client);
171
+ releaseRetentionClient(sysdb, client, true);
122
172
  throw e;
123
173
  }
124
- if (!acquired) {
125
- releaseRetentionClient(sysdb, client);
174
+ const release = async () => {
175
+ if (!sysdb.retentionClients.has(client)) {
176
+ return;
177
+ }
178
+ releaseRetentionClient(sysdb, client, await lock.release());
179
+ };
180
+ if (!lock.acquired) {
181
+ await release();
126
182
  return undefined;
127
183
  }
128
- return {
129
- release: async () => {
130
- // Already cut by destroy(): the session is gone and took the lock with it.
131
- if (!sysdb.retentionClients.has(client)) {
132
- return;
133
- }
134
- try {
135
- // Explicit, since releasing the client only returns the session to the pool.
136
- const { rows } = await client.query('SELECT pg_advisory_unlock($1) AS released', [key]);
137
- if (rows[0]?.released !== true) {
138
- // False means this session no longer holds it, which a transaction-pooling proxy
139
- // causes by switching backends.
140
- sysdb.logger.warn('Could not release the retention lock: this session no longer holds it. Retention will ' +
141
- 'not proceed until the lock is released, which happens when the holding backend closes. ' +
142
- 'A transaction-pooling proxy in front of Postgres causes this; run DBOS through a ' +
143
- 'session-pooled or direct connection.');
144
- }
145
- }
146
- finally {
147
- releaseRetentionClient(sysdb, client);
148
- }
149
- },
150
- };
184
+ return { release };
151
185
  }
152
186
  exports.acquireRetentionLock = acquireRetentionLock;
153
- /** VACUUM the tables a sweep dirtied. No-op where there is no autovacuum to outrun. */
154
187
  async function vacuumTables(sysdb, tables) {
155
- if (await isCockroach(sysdb)) {
188
+ if (await (0, cockroach_1.isCockroach)(sysdb)) {
156
189
  return;
157
190
  }
158
191
  const client = await borrowRetentionClient(sysdb);
@@ -161,7 +194,6 @@ async function vacuumTables(sysdb, tables) {
161
194
  client.on('notice', onNotice);
162
195
  try {
163
196
  for (const table of tables) {
164
- // Per table, so one refusal does not skip the rest.
165
197
  notices = [];
166
198
  try {
167
199
  await client.query(`VACUUM (INDEX_CLEANUP ON, TRUNCATE OFF, ANALYZE) "${sysdb.schemaName}"."${table}"`);
@@ -173,8 +205,6 @@ async function vacuumTables(sysdb, tables) {
173
205
  sysdb.logger.warn(`Payload retention could not vacuum ${table}: ${e.message}`);
174
206
  continue;
175
207
  }
176
- // A refused or stalled VACUUM does not raise, it says so in a notice; a successful
177
- // one is silent, so anything here is worth surfacing.
178
208
  for (const notice of notices) {
179
209
  sysdb.logger.warn(`Payload retention vacuuming ${table}: ${notice}`);
180
210
  }
@@ -185,45 +215,27 @@ async function vacuumTables(sysdb, tables) {
185
215
  releaseRetentionClient(sysdb, client);
186
216
  }
187
217
  }
188
- /** Delete one payload table's orphans below the cutoff, one batch per transaction. */
189
218
  async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
190
- // A payload below the cutoff belongs to a workflow created before it, so the status side
191
- // is the few such rows still present, not the whole table.
192
219
  const orphaned = `NOT EXISTS (
193
220
  SELECT 1 FROM "${sysdb.schemaName}".workflow_status ws
194
- WHERE ws.workflow_uuid = t.workflow_uuid AND ws.created_at < $1
221
+ WHERE ${sysdb.wfJoin('ws', 't')} AND ws.created_at < $1
195
222
  )`;
196
- // Seed from the oldest row in range.
197
- const oldest = await retryOnSerializationError(async () => {
198
- const { rows } = await sysdb.pool.query(`SELECT retention_timestamp
199
- FROM "${sysdb.schemaName}".${table}
200
- WHERE retention_timestamp < $1
201
- ORDER BY retention_timestamp
202
- LIMIT 1`, [cutoff]);
203
- // retention_timestamp is a bigint, so node-postgres hands it back as a string.
204
- return rows.length > 0 ? Number(rows[0].retention_timestamp) : undefined;
205
- });
223
+ const from = `"${sysdb.schemaName}".${table}`;
224
+ const oldest = await retryOnSerializationError(() => kthValue(sysdb, sysdb.pool, 'retention_timestamp', from, 'retention_timestamp < $1', [cutoff], 1), sysdb);
206
225
  if (oldest === undefined) {
207
226
  return 0;
208
227
  }
209
228
  let total = 0;
210
229
  let watermark = oldest - 1;
230
+ const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
211
231
  for (;;) {
212
232
  const batch = await retryOnSerializationError(async () => {
213
- // Borrowed rather than pool.query'd: that releases with the error, which discards the
214
- // connection on a deadlock, so the retry wrapping this would churn the pool per batch.
215
233
  const client = await borrowRetentionClient(sysdb);
216
234
  try {
217
- // Batches are cut by candidate count, so rows spared by the anti-join only thin one
218
- // out; they are re-checked next round.
219
- const { rows } = await client.query(`SELECT retention_timestamp
220
- FROM "${sysdb.schemaName}".${table}
221
- WHERE retention_timestamp < $1 AND retention_timestamp > $2
222
- ORDER BY retention_timestamp
223
- LIMIT 1 OFFSET ${batchSize - 1}`, [cutoff, watermark]);
224
- const step = rows.length > 0 ? Number(rows[0].retention_timestamp) : undefined;
235
+ const step = windows !== undefined
236
+ ? await windows.bound(client, 'retention_timestamp', from, (params) => `retention_timestamp < $${params.push(cutoff)}`, watermark, cutoff)
237
+ : await kthValue(sysdb, client, 'retention_timestamp', from, 'retention_timestamp < $1 AND retention_timestamp > $2', [cutoff, watermark], batchSize);
225
238
  const params = [cutoff, watermark];
226
- // Timestamp ties may push the batch slightly over batchSize, but never split across two.
227
239
  const upperBound = step === undefined ? '' : `AND t.retention_timestamp <= $${params.push(step)} `;
228
240
  const result = await client.query(`DELETE FROM "${sysdb.schemaName}".${table} t
229
241
  WHERE t.retention_timestamp < $1 AND t.retention_timestamp > $2 ${upperBound}AND ${orphaned}`, params);
@@ -232,7 +244,7 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
232
244
  finally {
233
245
  releaseRetentionClient(sysdb, client);
234
246
  }
235
- });
247
+ }, sysdb);
236
248
  total += batch.deleted;
237
249
  if (batch.step === undefined) {
238
250
  return total;
@@ -240,22 +252,12 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
240
252
  watermark = batch.step;
241
253
  }
242
254
  }
243
- /**
244
- * Delete payload and step rows below the cutoff whose workflow is gone, returning the count
245
- * removed from each table. Runs after the status sweep, whose orphans all fall in range:
246
- * every payload is stamped no later than the completion that made the row collectable.
247
- */
248
255
  async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BATCH_SIZE) {
249
- // A NaN survives a bare `< 1` test and would only fail once it reached SQL.
250
256
  if (!Number.isInteger(batchSize) || batchSize < 1) {
251
257
  throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
252
258
  }
253
259
  const tables = ['workflow_input', 'workflow_output', 'operation_outputs'];
254
- // To optimize performance, vacuum payload tables both before and after collecting them.
255
260
  await vacuumTables(sysdb, ['workflow_status', ...tables]);
256
- // One connection per concurrent sweep, on top of the one the retention lock holds for the
257
- // whole round. A pool too small for all three runs them sequentially rather than leaving
258
- // sweeps waiting on a connection that only the round itself would free.
259
261
  const poolMax = sysdb.pool.options.max ?? system_database_1.DEFAULT_POOL_SIZE;
260
262
  const concurrency = Math.max(1, Math.min(tables.length, poolMax - 1));
261
263
  const deleted = new Array(tables.length).fill(0);
@@ -275,7 +277,6 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
275
277
  }
276
278
  };
277
279
  await Promise.all(Array.from({ length: concurrency }, () => sweep()));
278
- // Only the first can be thrown, so the rest would otherwise be lost.
279
280
  for (const extra of failures.slice(1)) {
280
281
  sysdb.logger.warn(`Payload retention sweep also failed: ${extra instanceof Error ? extra.message : String(extra)}`);
281
282
  }
@@ -287,45 +288,30 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
287
288
  return deleted;
288
289
  }
289
290
  exports.collectPayloads = collectPayloads;
290
- /**
291
- * Rows garbage collection may delete. completed_at is set on every terminal transition and
292
- * cleared on resume, so one predicate covers eligibility: in-flight rows hold NULL and never
293
- * compare true. Unscoped by application: retention is system-wide.
294
- */
295
291
  function gcFilter(sysdb, cutoffEpochTimestampMs, params) {
296
292
  params.push(cutoffEpochTimestampMs);
297
293
  return `completed_at < $${params.length}`;
298
294
  }
299
- /**
300
- * Delete one batch, returning the watermark to resume from, or undefined once the last one ran.
301
- * The delete is its own transaction; it re-checks the filter, so it needs no snapshot shared
302
- * with the select that bounds it.
303
- */
304
- async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark) {
305
- // Borrowed rather than pool.query'd: that releases with the error, which discards the
306
- // connection on a deadlock, so the retry wrapping this would churn the pool per batch.
295
+ async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark, windows) {
307
296
  const client = await borrowRetentionClient(sysdb);
308
297
  try {
309
- // The batchSize-th oldest eligible row above the watermark bounds this range
310
- const stepParams = [];
311
- const stepScope = gcFilter(sysdb, cutoffEpochTimestampMs, stepParams);
312
- stepParams.push(watermark);
313
- const stepResult = await client.query(`SELECT completed_at
314
- FROM "${sysdb.schemaName}".workflow_status
315
- WHERE ${stepScope} AND completed_at > $${stepParams.length}
316
- ORDER BY completed_at
317
- LIMIT 1 OFFSET ${batchSize - 1}`, stepParams);
318
- // completed_at is a bigint, so node-postgres hands it back as a string.
319
- const step = stepResult.rows.length > 0 ? Number(stepResult.rows[0].completed_at) : undefined;
298
+ const from = `"${sysdb.schemaName}".workflow_status`;
299
+ let step;
300
+ if (windows !== undefined) {
301
+ step = await windows.bound(client, 'completed_at', from, (params) => gcFilter(sysdb, cutoffEpochTimestampMs, params), watermark, cutoffEpochTimestampMs);
302
+ }
303
+ else {
304
+ const stepParams = [];
305
+ const stepScope = gcFilter(sysdb, cutoffEpochTimestampMs, stepParams);
306
+ stepParams.push(watermark);
307
+ step = await kthValue(sysdb, client, 'completed_at', from, `${stepScope} AND completed_at > $${stepParams.length}`, stepParams, batchSize);
308
+ }
320
309
  const deleteParams = [];
321
310
  let deleteScope = gcFilter(sysdb, cutoffEpochTimestampMs, deleteParams);
322
311
  if (step !== undefined) {
323
- // Inclusive upper bound: completed_at ties may push a batch over batchSize, but never split across two.
324
312
  deleteParams.push(watermark, step);
325
313
  deleteScope = `${deleteScope} AND completed_at > $${deleteParams.length - 1} AND completed_at <= $${deleteParams.length}`;
326
314
  }
327
- // The final batch drops the watermark: unbounded, since an import can land a
328
- // completed_at below it mid-pass.
329
315
  await client.query(`DELETE FROM "${sysdb.schemaName}".workflow_status WHERE ${deleteScope}`, deleteParams);
330
316
  return step;
331
317
  }
@@ -333,28 +319,15 @@ async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, wate
333
319
  releaseRetentionClient(sysdb, client);
334
320
  }
335
321
  }
336
- /**
337
- * Delete old terminal workflows throughout the system database, returning the cutoff
338
- * actually used, or undefined when there is nothing to collect.
339
- *
340
- * Conductor sends cleared retention thresholds as JSON null, so every param is nullish.
341
- */
342
322
  async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, options = {}) {
343
323
  const batchSize = options.batchSize ?? exports.DEFAULT_GC_BATCH_SIZE;
344
- // A NaN survives a bare `< 1` test and would only fail once it reached SQL, leaving GC half-applied.
345
324
  if (!Number.isInteger(batchSize) || batchSize < 1) {
346
325
  throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
347
326
  }
348
327
  if (rowsThreshold !== undefined && rowsThreshold !== null) {
349
- // The completed_at of the rowsThreshold newest completed row
350
- const result = await retryOnSerializationError(() => sysdb.pool.query(`SELECT completed_at
351
- FROM "${sysdb.schemaName}".workflow_status
352
- WHERE completed_at IS NOT NULL
353
- ORDER BY completed_at DESC
354
- LIMIT 1 OFFSET $1`, [rowsThreshold - 1]));
355
- if (result.rows.length > 0) {
356
- const rowsBasedCutoff = Number(result.rows[0].completed_at);
357
- // Use the more restrictive cutoff (higher timestamp = more recent = more deletion)
328
+ const threshold = rowsThreshold;
329
+ const rowsBasedCutoff = await retryOnSerializationError(() => kthValue(sysdb, sysdb.pool, 'completed_at', `"${sysdb.schemaName}".workflow_status`, 'completed_at IS NOT NULL', [], threshold, true), sysdb);
330
+ if (rowsBasedCutoff !== undefined) {
358
331
  if (cutoffEpochTimestampMs === undefined ||
359
332
  cutoffEpochTimestampMs === null ||
360
333
  rowsBasedCutoff > cutoffEpochTimestampMs) {
@@ -365,34 +338,22 @@ async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, opt
365
338
  if (cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) {
366
339
  return undefined;
367
340
  }
368
- // Narrowed to a constant so the closures below keep it.
369
341
  const cutoff = cutoffEpochTimestampMs;
370
- // Advance a completed_at watermark, one committed transaction per batch, so a long
371
- // history neither deletes in one transaction nor rescans what it already deleted.
372
- const oldest = await retryOnSerializationError(async () => {
342
+ const oldest = await retryOnSerializationError(() => {
373
343
  const params = [];
374
344
  const scope = gcFilter(sysdb, cutoff, params);
375
- const { rows } = await sysdb.pool.query(`SELECT completed_at
376
- FROM "${sysdb.schemaName}".workflow_status
377
- WHERE ${scope}
378
- ORDER BY completed_at
379
- LIMIT 1`, params);
380
- return rows.length > 0 ? Number(rows[0].completed_at) : undefined;
381
- });
345
+ return kthValue(sysdb, sysdb.pool, 'completed_at', `"${sysdb.schemaName}".workflow_status`, scope, params, 1);
346
+ }, sysdb);
382
347
  let watermark = oldest === undefined ? 0 : oldest - 1;
348
+ const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
383
349
  for (;;) {
384
- const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark));
385
- // Fewer than a full batch remained, so that delete took the rest.
350
+ const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark, windows), sysdb);
386
351
  if (next === undefined)
387
352
  return cutoff;
388
353
  watermark = next;
389
354
  }
390
355
  }
391
356
  exports.collectStatuses = collectStatuses;
392
- /**
393
- * IDs of this application's in-flight workflows created at or before the cutoff.
394
- * Claiming-scoped, so an upgrade still times out its own unclaimed workflows.
395
- */
396
357
  async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
397
358
  return (0, system_database_1.withDbRetry)(async () => {
398
359
  const params = [
@@ -402,17 +363,20 @@ async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
402
363
  workflow_1.StatusString.DELAYED,
403
364
  ];
404
365
  const scope = sysdb.appNameFilter('application_name', sysdb.appName, params);
405
- const { rows } = await sysdb.pool.query(`SELECT workflow_uuid
366
+ const key = sysdb.keyColumn(undefined);
367
+ const { rows } = await sysdb.pool.query(`SELECT workflow_uuid, ${key ?? 'NULL'} AS shard_key
406
368
  FROM "${sysdb.schemaName}".workflow_status
407
369
  WHERE created_at <= $1
408
370
  AND status IN ($2, $3, $4)
409
371
  AND ${scope}`, params);
410
- return rows.map((row) => row.workflow_uuid);
372
+ return rows.map((row) => [row.workflow_uuid, row.shard_key ?? undefined]);
411
373
  });
412
374
  }
413
375
  exports.listTimedOutWorkflowIds = listTimedOutWorkflowIds;
414
- /** Enforce retention across the entire system database. */
415
376
  async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, options = {}) {
377
+ if (rowsThreshold !== undefined && rowsThreshold !== null && sysdb.sharded) {
378
+ throw new error_1.DBOSError('A rows threshold is not supported on a sharded system database; use a time cutoff instead');
379
+ }
416
380
  if ((cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) &&
417
381
  (rowsThreshold === undefined || rowsThreshold === null)) {
418
382
  return;
@@ -423,14 +387,11 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
423
387
  return;
424
388
  }
425
389
  try {
426
- // Both sweeps take the same batch size, and both default it the same way when unset.
427
390
  const batchSize = options.batchSize ?? undefined;
428
391
  const cutoff = await collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, { batchSize });
429
392
  if (cutoff === undefined) {
430
393
  return;
431
394
  }
432
- // Strictly after the status sweep: the payload sweep only takes orphans, so this round's
433
- // are only visible to it once that sweep has committed.
434
395
  await collectPayloads(sysdb, cutoff, batchSize);
435
396
  }
436
397
  finally {
@@ -439,9 +400,8 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
439
400
  }
440
401
  exports.garbageCollect = garbageCollect;
441
402
  async function globalTimeout(sysdb, cutoffEpochTimestampMs) {
442
- // IDs only, so a bulk timeout does not deserialize every row's inputs and outputs.
443
- for (const workflowID of await listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs)) {
444
- await sysdb.cancelWorkflows([workflowID]);
403
+ for (const [workflowID, shardKey] of await listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs)) {
404
+ await (0, shard_keys_1.bindShardKeys)([[workflowID, shardKey]], () => sysdb.cancelWorkflows([workflowID]));
445
405
  }
446
406
  }
447
407
  exports.globalTimeout = globalTimeout;
@@ -1 +1 @@
1
- {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/retention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/retention.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,2CAA0C;AAC1C,6EAAyE;AACzE,6DAA8D;AAE9D,uEAAuE;AACvE,mCAA6D;AAC7D,iFAOqD;AACrD,6DAA4D;AAC5D,mEAAoE;AAMpE,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,GAAY,EAAE,KAAqB;IAC/D,KAAK,MAAM,CAAC,IAAI,IAAA,8BAAY,EAAC,GAAG,CAAC,EAAE,CAAC;QAElC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAA,mCAAiB,EAAC,CAAC,CAAC,IAAI,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAK,CAAC,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,KAAK,UAAU,qBAAqB,CAAC,KAAqB;IACxD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,SAAS,sBAAsB,CAAC,KAAqB,EAAE,MAAkB,EAAE,UAAmB,KAAK;IACjG,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAE1C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAMM,KAAK,UAAU,yBAAyB,CAAI,SAA2B,EAAE,KAAqB;IACnG,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,GAAG,CAAC;IACvB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC;YACV,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,4BAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,cAAc,OAAO,EAAE,CAAC,CAAC;gBAChH,MAAM,CAAC,CAAC;YACV,CAAC;YAED,MAAM,aAAa,GAAG,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,4BAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CACtC,mEAAmE,OAAO,IAAI;gBAC5E,eAAe,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,GAAG,CAClE,CAAC;YACF,MAAM,IAAA,eAAO,EAAC,aAAa,GAAG,IAAI,CAAC,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AA1BD,8DA0BC;AAQD,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAA,iCAAe,EAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;AACzD,CAAC;AAFD,4CAEC;AAGY,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAG5C,KAAK,UAAU,QAAQ,CACrB,KAAqB,EACrB,MAAyB,EACzB,MAAc,EACd,IAAY,EACZ,KAAa,EACb,MAAiB,EACjB,CAAS,EACT,aAAsB,KAAK;IAG3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,iBAAS,CAAC,mBAAmB,CAAC,wCAAwC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,MAAM,kBAAkB,IAAI,UAAU,KAAK,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC1G,MAAM,CACP,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,MAAM,kBAAkB,IAAI,UAAU,KAAK,IAAI,KAAK,UAAU,CAAC,EAAE,EAC3E,MAAM,CACP,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAGD,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAGtC,MAAa,aAAa;IAGH;IAFrB,KAAK,GAAG,uBAAuB,CAAC;IAEhC,YAAqB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAG1C,KAAK,CAAC,KAAK,CACT,MAAyB,EACzB,MAAc,EACd,IAAY,EACZ,QAAuC,EACvC,SAAiB,EACjB,MAAc;QAEd,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,EAAE,GAAG,SAAS,CAAC;QAEnB,IAAI,IAAI,GAAuB,SAAS,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAuB,SAAS,CAAC;QAC9C,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAS,CAAC;QACd,SAAS,CAAC;YACR,KAAK,GAAG,EAAE,IAAI,MAAM,CAAC;YACrB,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,iCAAiC,IAAI,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EACrE,MAAM,CACP,CAAC;YACF,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAE7B,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;oBACrC,EAAE,GAAG,IAAI,CAAC;oBACV,CAAC,GAAG,SAAS,CAAC;oBACd,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,KAAK;oBAAE,OAAO,SAAS,CAAC;gBAE5B,MAAM,UAAU,GAAc,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,MAAM,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACvC,cAAc,MAAM,kBAAkB,IAAI,UAAU,SAAS,EAAE,EAC/D,UAAU,CACX,CAAC;gBACF,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBAC5E,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAExB,IAAI,GAAG,EAAE,CAAC;gBACV,SAAS,GAAG,CAAC,CAAC;gBACd,EAAE,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,SAAS,KAAK,SAAS,IAAI,EAAE,IAAI,IAAI;oBAAE,MAAM;gBACjD,SAAS;YACX,CAAC;YACD,MAAM;QACR,CAAC;QACD,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AA5ED,sCA4EC;AAQM,KAAK,UAAU,oBAAoB,CACxC,KAAqB;IAErB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,IAAkB,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACjH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC;IACV,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QAEzB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QAED,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAjCD,oDAiCC;AAGD,KAAK,UAAU,YAAY,CAAC,KAAqB,EAAE,MAAyB;IAC1E,IAAI,MAAM,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,MAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE3B,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,qDAAqD,KAAK,CAAC,UAAU,MAAM,KAAK,GAAG,CAAC,CAAC;YAC1G,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,SAAS;YACX,CAAC;YAGD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,mBAAmB,CAChC,KAAqB,EACrB,KAAa,EACb,MAAc,EACd,SAAiB;IAIjB,MAAM,QAAQ,GAAG;4BACS,KAAK,CAAC,UAAU;mBACzB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;WAC/B,CAAC;IACV,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;IAG9C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EACvG,KAAK,CACN,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,KAAK,IAAI,EAAE;YAGvD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC;gBAGH,MAAM,IAAI,GACR,OAAO,KAAK,SAAS;oBACnB,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CACjB,MAAM,EACN,qBAAqB,EACrB,IAAI,EACJ,CAAC,MAAM,EAAE,EAAE,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAC3D,SAAS,EACT,MAAM,CACP;oBACH,CAAC,CAAC,MAAM,QAAQ,CACZ,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,IAAI,EACJ,uDAAuD,EACvD,CAAC,MAAM,EAAE,SAAS,CAAC,EACnB,SAAS,CACV,CAAC;gBACR,MAAM,MAAM,GAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAE9C,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,gBAAgB,KAAK,CAAC,UAAU,KAAK,KAAK;6EACyB,UAAU,OAAO,QAAQ,EAAE,EAC9F,MAAM,CACP,CAAC;gBACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACjD,CAAC;oBAAS,CAAC;gBACT,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAOM,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,MAAc,EACd,YAAoB,6BAAqB;IAGzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,iBAAS,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAG1E,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAK1D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,mCAAiB,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAa,IAAI,KAAK,CAAS,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrH,OAAO,OAAO,CAAC;AACjB,CAAC;AA9CD,0CA8CC;AAOD,SAAS,QAAQ,CAAC,KAAqB,EAAE,sBAA8B,EAAE,MAAiB;IACxF,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAOD,KAAK,UAAU,kBAAkB,CAC/B,KAAqB,EACrB,sBAA8B,EAC9B,SAAiB,EACjB,SAAiB,EACjB,OAAkC;IAIlC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,mBAAmB,CAAC;QACrD,IAAI,IAAwB,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CACxB,MAAM,EACN,cAAc,EACd,IAAI,EACJ,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAC3D,SAAS,EACT,sBAAsB,CACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,GAAG,MAAM,QAAQ,CACnB,KAAK,EACL,MAAM,EACN,cAAc,EACd,IAAI,EACJ,GAAG,SAAS,wBAAwB,UAAU,CAAC,MAAM,EAAE,EACvD,UAAU,EACV,SAAS,CACV,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAc,EAAE,CAAC;QACnC,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAEvB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnC,WAAW,GAAG,GAAG,WAAW,wBAAwB,YAAY,CAAC,MAAM,GAAG,CAAC,yBAAyB,YAAY,CAAC,MAAM,EAAE,CAAC;QAC5H,CAAC;QAGD,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,UAAU,2BAA2B,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;QAE3G,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAQM,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,sBAAsC,EACtC,aAA6B,EAC7B,UAAyC,EAAE;IAE3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,6BAAqB,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,iBAAS,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAE1D,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,eAAe,GAAG,MAAM,yBAAyB,CACrD,GAAG,EAAE,CACH,QAAQ,CACN,KAAK,EACL,KAAK,CAAC,IAAI,EACV,cAAc,EACd,IAAI,KAAK,CAAC,UAAU,mBAAmB,EACvC,0BAA0B,EAC1B,EAAE,EACF,SAAS,EACT,IAAI,CACL,EACH,KAAK,CACN,CAAC;QAEF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAElC,IACE,sBAAsB,KAAK,SAAS;gBACpC,sBAAsB,KAAK,IAAI;gBAC/B,eAAe,GAAG,sBAAsB,EACxC,CAAC;gBACD,sBAAsB,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,sBAAsB,KAAK,SAAS,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD,MAAM,MAAM,GAAG,sBAAsB,CAAC;IAItC,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE;QAClD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,KAAK,CAAC,UAAU,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAC1C,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EACtE,KAAK,CACN,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACtC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;AACH,CAAC;AApED,0CAoEC;AAMM,KAAK,UAAU,uBAAuB,CAC3C,KAAqB,EACrB,sBAA8B;IAE9B,OAAO,IAAA,6BAAW,EAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,MAAM,GAAc;YACxB,sBAAsB;YACtB,uBAAY,CAAC,OAAO;YACpB,uBAAY,CAAC,QAAQ;YACrB,uBAAY,CAAC,OAAO;SACrB,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CACrC,yBAAyB,GAAG,IAAI,MAAM;eAC7B,KAAK,CAAC,UAAU;;;eAGhB,KAAK,EAAE,EAChB,MAAM,CACP,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,0DAuBC;AAGM,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,sBAAsC,EACtC,aAA6B,EAC7B,UAAyC,EAAE;IAE3C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAE3E,MAAM,IAAI,iBAAS,CAAC,2FAA2F,CAAC,CAAC;IACnH,CAAC;IACD,IACE,CAAC,sBAAsB,KAAK,SAAS,IAAI,sBAAsB,KAAK,IAAI,CAAC;QACzE,CAAC,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAC,EACvD,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAGD,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAlCD,wCAkCC;AAEM,KAAK,UAAU,aAAa,CAAC,KAAqB,EAAE,sBAA8B;IAEvF,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE,CAAC;QAClG,MAAM,IAAA,0BAAa,EAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AALD,sCAKC"}
@@ -0,0 +1,9 @@
1
+ // Copyright (c) 2026 DBOS, Inc. All rights reserved.
2
+ //
3
+ // This file is part of Transact Enterprise, proprietary software licensed under the
4
+ // DBOS Conductor Software License: https://www.dbos.dev/conductor-license
5
+ // You may not use, copy, modify, or distribute this file except as that license permits.
6
+ // Disabling or circumventing the entitlement checks in @dbos-inc/dbos-sdk's src/enterprise.ts
7
+ // that gate it is a material breach of that license.
8
+ export { ShardedSystemDatabase } from './sys_db';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sharding/index.ts"],"names":[],"mappings":";;;;;;;AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}