@harperfast/harper-pro 5.1.0-beta.3 → 5.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 (59) hide show
  1. package/core/DESIGN.md +24 -0
  2. package/core/bin/copyDb.ts +16 -3
  3. package/core/package-lock.json +44 -54
  4. package/core/resources/Table.ts +41 -4
  5. package/core/resources/databases.ts +134 -42
  6. package/core/resources/graphql.ts +3 -0
  7. package/core/resources/replayLogs.ts +114 -42
  8. package/core/resources/replayLogsGuards.ts +58 -9
  9. package/core/server/nodeName.ts +9 -3
  10. package/core/server/operationsServer.ts +17 -0
  11. package/core/utility/install/installer.ts +12 -5
  12. package/dist/core/bin/copyDb.js +16 -3
  13. package/dist/core/bin/copyDb.js.map +1 -1
  14. package/dist/core/resources/Table.js +43 -4
  15. package/dist/core/resources/Table.js.map +1 -1
  16. package/dist/core/resources/databases.js +135 -41
  17. package/dist/core/resources/databases.js.map +1 -1
  18. package/dist/core/resources/graphql.js +3 -0
  19. package/dist/core/resources/graphql.js.map +1 -1
  20. package/dist/core/resources/replayLogs.js +100 -40
  21. package/dist/core/resources/replayLogs.js.map +1 -1
  22. package/dist/core/resources/replayLogsGuards.js +50 -10
  23. package/dist/core/resources/replayLogsGuards.js.map +1 -1
  24. package/dist/core/server/nodeName.js +9 -3
  25. package/dist/core/server/nodeName.js.map +1 -1
  26. package/dist/core/server/operationsServer.js +20 -0
  27. package/dist/core/server/operationsServer.js.map +1 -1
  28. package/dist/core/utility/install/installer.js +12 -6
  29. package/dist/core/utility/install/installer.js.map +1 -1
  30. package/dist/replication/knownNodes.js +106 -17
  31. package/dist/replication/knownNodes.js.map +1 -1
  32. package/dist/replication/replicator.js +6 -3
  33. package/dist/replication/replicator.js.map +1 -1
  34. package/npm-shrinkwrap.json +43 -52
  35. package/package.json +3 -3
  36. package/replication/knownNodes.ts +104 -14
  37. package/replication/replicator.ts +7 -3
  38. package/studio/web/assets/{Chat-BdFickL8.js → Chat-DMBW4pI2.js} +2 -2
  39. package/studio/web/assets/{Chat-BdFickL8.js.map → Chat-DMBW4pI2.js.map} +1 -1
  40. package/studio/web/assets/{FloatingChat-CaAoco8I.js → FloatingChat-DTmhPsrm.js} +4 -4
  41. package/studio/web/assets/{FloatingChat-CaAoco8I.js.map → FloatingChat-DTmhPsrm.js.map} +1 -1
  42. package/studio/web/assets/{applications-C3y3xwyG.js → applications-CigxJarn.js} +2 -2
  43. package/studio/web/assets/{applications-C3y3xwyG.js.map → applications-CigxJarn.js.map} +1 -1
  44. package/studio/web/assets/{index-Cd3Zh3nK.js → index-oRZw5GW3.js} +6 -6
  45. package/studio/web/assets/index-oRZw5GW3.js.map +1 -0
  46. package/studio/web/assets/{index.lazy-0hLbh5Fo.js → index.lazy-DY3VcR86.js} +4 -4
  47. package/studio/web/assets/{index.lazy-0hLbh5Fo.js.map → index.lazy-DY3VcR86.js.map} +1 -1
  48. package/studio/web/assets/{profile-CwBWGuVt.js → profile-DiV60L50.js} +2 -2
  49. package/studio/web/assets/{profile-CwBWGuVt.js.map → profile-DiV60L50.js.map} +1 -1
  50. package/studio/web/assets/{setComponentFile-Dhrmd8eR.js → setComponentFile-Bz6WI4jy.js} +2 -2
  51. package/studio/web/assets/{setComponentFile-Dhrmd8eR.js.map → setComponentFile-Bz6WI4jy.js.map} +1 -1
  52. package/studio/web/assets/{status-Bykq6QcD.js → status-fW6PBpPM.js} +2 -2
  53. package/studio/web/assets/{status-Bykq6QcD.js.map → status-fW6PBpPM.js.map} +1 -1
  54. package/studio/web/assets/{swagger-ui-react-CF94s29D.js → swagger-ui-react-DRYf7G3J.js} +2 -2
  55. package/studio/web/assets/{swagger-ui-react-CF94s29D.js.map → swagger-ui-react-DRYf7G3J.js.map} +1 -1
  56. package/studio/web/assets/{useEntityRestURL-D7vuaG2W.js → useEntityRestURL-14jWKu9J.js} +2 -2
  57. package/studio/web/assets/{useEntityRestURL-D7vuaG2W.js.map → useEntityRestURL-14jWKu9J.js.map} +1 -1
  58. package/studio/web/index.html +1 -1
  59. package/studio/web/assets/index-Cd3Zh3nK.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { RocksDatabase, Transaction as RocksTransaction } from '@harperfast/rocksdb-js';
1
+ import { RocksDatabase } from '@harperfast/rocksdb-js';
2
2
  import { Resource } from './Resource.ts';
3
3
  import type { Context } from './ResourceInterface.ts';
4
4
  import * as logger from '../utility/logging/harper_logger.js';
@@ -6,10 +6,36 @@ import { DatabaseTransaction } from './DatabaseTransaction.ts';
6
6
  import { RocksTransactionLogStore } from './RocksTransactionLogStore.ts';
7
7
  import { isMainThread } from 'node:worker_threads';
8
8
  import { RequestTarget } from './RequestTarget.ts';
9
- import { classifyAuditEntryForReplay, isUndecodableValidatedWrite } from './replayLogsGuards.ts';
9
+ import {
10
+ classifyAuditEntryForReplay,
11
+ isUndecodableValidatedWrite,
12
+ shouldAbortStalledReplay,
13
+ } from './replayLogsGuards.ts';
10
14
  import { purgeAgedLogs } from './auditStore.ts';
11
15
 
12
16
  let warnedReplayHappening = false;
17
+
18
+ // True when `updated` would DROP shared structures relative to `existing` — for either the classic
19
+ // array form or the {named, typed} Map form, and for a form change between the two. Shared
20
+ // structures only ever grow (ids are stable and append-only), so a shorter replayed buffer is a
21
+ // stale/older entry. Used to refuse a downgrade of the durable structures dictionary during replay:
22
+ // since the composite key is the one RecordEncoder.getStructures reads, overwriting it with fewer
23
+ // structures would drop ids the decoder still needs and make existing records decode to null. This
24
+ // mirrors saveStructures' compatibility reject (RecordEncoder.ts). See harper-pro#362.
25
+ export function structuresWouldShrink(existing: any, updated: any): boolean {
26
+ if (Array.isArray(existing)) {
27
+ return !Array.isArray(updated) || updated.length < existing.length;
28
+ }
29
+ if (existing && typeof existing.get === 'function') {
30
+ if (!updated || typeof updated.get !== 'function') return true;
31
+ return (
32
+ (updated.get('named')?.length ?? 0) < (existing.get('named')?.length ?? 0) ||
33
+ (updated.get('typed')?.length ?? 0) < (existing.get('typed')?.length ?? 0)
34
+ );
35
+ }
36
+ return false;
37
+ }
38
+
13
39
  export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void> {
14
40
  if (!isMainThread) return; // ideally we don't do it like this, but for now this is predictable
15
41
  return new Promise((resolve) => {
@@ -49,8 +75,21 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
49
75
  let lastTimestamp = 0;
50
76
  let writes = 0;
51
77
  let skipped = 0;
78
+ // Track forward progress so a backlog of unwritable entries can't grind the boot thread
79
+ // forever (harper#1266). `noProgressRun` counts every entry processed without a successful
80
+ // write since the last one — undecodable/corrupt skips AND entries for a dropped table — and
81
+ // is reset to 0 the moment a write succeeds, so the stall bound only fires on a genuinely
82
+ // write-free run.
83
+ let noProgressRun = 0;
84
+ let lastProgressTime = performance.now();
52
85
  const txnLog: RocksTransactionLogStore = (rootStore as any).auditStore;
53
86
  for (const auditRecord of txnLog.getRange({ startFromLastFlushed: true, readUncommitted: true }) as any) {
87
+ if (noProgressRun > 0 && shouldAbortStalledReplay(noProgressRun, performance.now() - lastProgressTime)) {
88
+ logger.fatal(
89
+ `Aborting transaction-log replay in ${(rootStore as any).databaseName} database: ${noProgressRun} consecutive audit entries with no successful write (${skipped} skipped as unrecoverable, ${writes} replayed so far). This backlog is making no forward progress and was blocking startup (harper#1266) — typically a peer transaction log whose values reference unresolvable shared structures (harper#1163), or a backlog for a dropped table. Continuing boot without replaying the remainder; shed or relocate the oversized/undecodable peer transaction log(s), or re-clone this node, to recover the unreplayed data.`
90
+ );
91
+ break;
92
+ }
54
93
  const {
55
94
  type,
56
95
  tableId,
@@ -66,27 +105,18 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
66
105
  try {
67
106
  if (classifyAuditEntryForReplay(extendedType, tableId, true) === 'corrupt-header') {
68
107
  skipped++;
108
+ noProgressRun++;
69
109
  continue;
70
110
  }
71
111
  const Table = tableById.get(tableId);
72
- if (!Table) continue;
73
- const context: Context = {
74
- nodeId,
75
- alreadyLogged: true,
76
- version,
77
- expiresAt,
78
- user: { username },
79
- } as any;
80
- const { primaryStore } = Table as any;
81
- const target = new RequestTarget();
82
- target.id = null;
83
- const tableInstance: any = Table.getResource(target, context, {});
84
- // TODO: If this throws an error due to being unable to access structures, we need to iterate through
85
- // other transaction logs to get the latest structure. Ultimately we may have to skip records
86
- if (!warnedReplayHappening) {
87
- warnedReplayHappening = true;
88
- console.warn('Harper was not properly shutdown, replaying transaction logs to synchronize database');
112
+ if (!Table) {
113
+ // Entry for a table this node no longer has (dropped/foreign). Not an
114
+ // unrecoverable skip, but still a no-progress entry — a large backlog of them
115
+ // must trip the stall bound rather than grind the boot thread.
116
+ noProgressRun++;
117
+ continue;
89
118
  }
119
+ const { primaryStore } = Table as any;
90
120
  let record: any;
91
121
  try {
92
122
  record = auditRecord.getValue(primaryStore);
@@ -97,6 +127,7 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
97
127
  // (millions of these were observed in prod). The total skip count is logged
98
128
  // once at the end of replay.
99
129
  skipped++;
130
+ noProgressRun++;
100
131
  continue;
101
132
  }
102
133
  if (
@@ -104,8 +135,27 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
104
135
  isUndecodableValidatedWrite(type, record)
105
136
  ) {
106
137
  skipped++;
138
+ noProgressRun++;
107
139
  continue;
108
140
  }
141
+ // Entry is replayable: build the context and instantiate the resource only now, so
142
+ // the skip paths above never pay those per-entry allocations (harper#1266).
143
+ const context: Context = {
144
+ nodeId,
145
+ alreadyLogged: true,
146
+ version,
147
+ expiresAt,
148
+ user: { username },
149
+ } as any;
150
+ const target = new RequestTarget();
151
+ target.id = null;
152
+ const tableInstance: any = Table.getResource(target, context, {});
153
+ // TODO: If this throws an error due to being unable to access structures, we need to iterate through
154
+ // other transaction logs to get the latest structure. Ultimately we may have to skip records
155
+ if (!warnedReplayHappening) {
156
+ warnedReplayHappening = true;
157
+ console.warn('Harper was not properly shutdown, replaying transaction logs to synchronize database');
158
+ }
109
159
  if (lastTimestamp !== version) {
110
160
  lastTimestamp = version;
111
161
  try {
@@ -145,40 +195,62 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
145
195
  tableInstance._writeInvalidate(recordId, record, options);
146
196
  break;
147
197
  case 'structures': {
148
- const rocksTransaction = new RocksTransaction(primaryStore.store);
149
198
  const structuresAsBinary = auditRecord.getBinaryValue(primaryStore);
150
199
  const updatedStructures = structuresAsBinary ? primaryStore.decoder.decode(structuresAsBinary) : undefined;
151
- const existingStructures = primaryStore.getSync(Symbol.for('structures'), {
152
- transaction: rocksTransaction,
153
- });
154
- if (existingStructures) {
155
- if (existingStructures instanceof Array) {
156
- if (updatedStructures.length < existingStructures.length) {
157
- logger.warn(
158
- `Found ${existingStructures.length} structures in audit store, but ${updatedStructures.length} in replay log. Using ${updatedStructures.length} structures.`
159
- );
160
- }
161
- } else {
162
- if (existingStructures.get('named').length > updatedStructures.get('named').length) {
200
+ // Persist replayed structures where the decoder actually reads them: the RocksDB decode
201
+ // path (RecordEncoder.getStructures) reads `rootStore` at the COMPOSITE key
202
+ // [Symbol.for('structures'), name], and saveStructures writes there. This previously wrote
203
+ // `primaryStore` at the PLAIN key Symbol.for('structures'), which getStructures never
204
+ // consults so a structure delivered only via replication stayed invisible to the decoder
205
+ // (records referencing it decoded to null) until a full-copy resync rewrote the row through
206
+ // saveStructures. See harper-pro#362 (and the #352 auth-path wedge). Because this is now the
207
+ // authoritative key the decoder reads, it must carry saveStructures' guards: never poison the
208
+ // dictionary with an undecodable value, and never downgrade it to fewer structures.
209
+ const encoder = primaryStore.decoder;
210
+ const sharedStructuresKey = [Symbol.for('structures'), encoder.name];
211
+ encoder.rootStore.transactionSync(
212
+ (txn) => {
213
+ // A torn/corrupt/empty structures log value decodes to null/undefined; writing it to
214
+ // the key the decoder reads would poison the whole table's structure dictionary.
215
+ if (!updatedStructures) {
163
216
  logger.warn(
164
- `Found named ${existingStructures.length} structures in audit store, but ${updatedStructures.length} in replay log. Using named ${updatedStructures.length} structures.`
217
+ `Skipping a structures replay entry that did not decode to a valid structures buffer (table ${encoder.name}).`
165
218
  );
219
+ return;
166
220
  }
167
- if (existingStructures.get('typed').length > updatedStructures.get('typed').length) {
221
+ const existingStructuresBuffer = txn.getBinarySync(sharedStructuresKey);
222
+ const existingStructures = existingStructuresBuffer
223
+ ? encoder.decode(existingStructuresBuffer)
224
+ : undefined;
225
+ // Refuse to overwrite a longer/newer durable buffer with an older/shorter replayed
226
+ // one — dropping ids the decoder still needs would make existing records decode to
227
+ // null. saveStructures rejects incompatible writes the same way (RecordEncoder.ts).
228
+ if (existingStructures && structuresWouldShrink(existingStructures, updatedStructures)) {
168
229
  logger.warn(
169
- `Found named ${existingStructures.length} structures in audit store, but ${updatedStructures.length} in replay log. Using named ${updatedStructures.length} structures.`
230
+ `Replay log structures for table ${encoder.name} are fewer than the durable buffer; keeping the durable structures.`
170
231
  );
232
+ return;
171
233
  }
172
- }
173
- }
174
- primaryStore.putSync(Symbol.for('structures'), asBinary(structuresAsBinary), {
175
- transaction: rocksTransaction,
176
- });
177
- rocksTransaction.commitSync();
178
- primaryStore.decoder.structure = updatedStructures;
234
+ txn.putSync(sharedStructuresKey, asBinary(structuresAsBinary));
235
+ },
236
+ { retryOnBusy: true }
237
+ );
238
+ // No in-memory assignment is needed: the remainder of the replay decodes through
239
+ // getStructures/loadStructures, which re-reads this composite key (now correct) whenever a
240
+ // record references a not-yet-loaded structure id. We deliberately do NOT route through
241
+ // saveStructures, which would set structureUpdate and re-log the structure during replay.
179
242
  }
180
243
  }
244
+ // Forward progress: a write was staged successfully, so reset the no-progress
245
+ // trackers. Doing this AFTER the switch (not before) means a slow or throwing
246
+ // write is neither counted as progress nor charged to the stall bound (harper#1266).
247
+ noProgressRun = 0;
248
+ lastProgressTime = performance.now();
181
249
  } catch (err) {
250
+ // A write that threw made no forward progress either — count it toward the stall
251
+ // bound so a continuous stream of throwing writes can't grind the boot thread
252
+ // indefinitely (and the per-entry error log below can't spam unboundedly). harper#1266
253
+ noProgressRun++;
182
254
  logger.error(`Error writing from replay of log`, err, {
183
255
  version,
184
256
  });
@@ -42,22 +42,71 @@ export function classifyAuditEntryForReplay(
42
42
  }
43
43
 
44
44
  /**
45
- * Whether an audit entry is a validated write (`put`/`patch`) whose record body failed to
46
- * decode, and so must be skipped during replay.
45
+ * Whether an audit entry runs `validate()` during replay but its record body failed to decode,
46
+ * and so must be skipped.
47
47
  *
48
48
  * `RecordEncoder.decode` returns `null` (not `undefined`, and it does not throw) when a value
49
49
  * fails to decode — e.g. structure-dictionary divergence, which surfaces as msgpackr's
50
50
  * "Data read, but end of buffer not reached". `classifyAuditEntryForReplay` only catches a
51
- * `undefined` body, so a `null` slips through; for `put`/`patch` the replay path then calls
52
- * `save()` → `validate()`, which dereferences the record and crashes on the missing body.
51
+ * `undefined` body, so a `null` slips through; the replay path then calls `validate()`, which
52
+ * dereferences the record and crashes on the missing body.
53
53
  *
54
- * This is deliberately scoped to `put`/`patch` (the only replay actions that run `validate()`).
55
- * Other record-bearing actions must NOT be skipped on a `null` body notably `invalidate`,
56
- * which legitimately stores a `null` partial record on a table with no index fields and never
57
- * reaches `validate()`. See harper#1255.
54
+ * Scoped to the actions whose replay reaches `validate()`: `put`/`patch` (via `_writeUpdate`
55
+ * `save()`) and `message` (via `_writePublish` `transaction.addWrite` `save()`; the publish
56
+ * `validate` hook fires whenever the replay context has no `source`, which it never does). Other
57
+ * record-bearing actions must NOT be skipped on a `null` body — notably `invalidate`, which
58
+ * legitimately stores a `null` partial record on a table with no index fields and never reaches
59
+ * `validate()`; `relocate`/`delete` ignore the body entirely. See harper#1255.
58
60
  */
59
61
  export function isUndecodableValidatedWrite(type: string | undefined, record: unknown): boolean {
60
- return record == null && (type === 'put' || type === 'patch');
62
+ return record == null && (type === 'put' || type === 'patch' || type === 'message');
63
+ }
64
+
65
+ // A node that crashed unclean replays its unflushed audit backlog on boot. When that backlog is
66
+ // dominated by entries that can't be written — undecodable values (the #1163 structure-dictionary
67
+ // divergence), corrupt headers, or entries for a dropped table — every iteration makes no forward
68
+ // progress. A large enough backlog then grinds the main thread for minutes with zero progress,
69
+ // blocking startup entirely (harper#1266). These bounds let replay give up on a run that is making
70
+ // no progress so boot can proceed; the operator then sheds/relocates the offending peer log (or
71
+ // re-clones). They are deliberately conservative: a healthy replay produces writes, which reset
72
+ // the progress tracking, so neither bound can trip on it.
73
+
74
+ // Max consecutive no-progress entries (since the last successful write) before the replay is
75
+ // treated as stalled. ~100k contiguous unwritable entries is unambiguously degenerate and caps the
76
+ // wasted grind well below the multi-minute hangs observed in prod.
77
+ export const REPLAY_NO_PROGRESS_COUNT_LIMIT = 100_000;
78
+
79
+ // Max wall-clock time (ms) since the last successful write before the replay is treated as stalled.
80
+ // Belt-and-suspenders for the count bound: if individual entries are slow enough that fewer than the
81
+ // count limit still burns minutes, this still bounds the hang.
82
+ export const REPLAY_NO_PROGRESS_TIME_LIMIT_MS = 60_000;
83
+
84
+ // The time bound only applies once a substantial no-progress run has built up. Without this floor a
85
+ // single skipped entry followed by an unrelated latency spike (a GC pause, disk throttling, one
86
+ // slow write) would trip the time bound and abort an otherwise-healthy replay; requiring a real run
87
+ // of no-progress entries keeps the time bound a signal of a genuine grind, not a transient stall.
88
+ export const REPLAY_NO_PROGRESS_TIME_SKIP_FLOOR = 1_000;
89
+
90
+ /**
91
+ * Whether boot replay should abort because it is making no forward progress — a backlog of
92
+ * unwritable entries (undecodable/corrupt, or for a dropped table) that produces no writes
93
+ * (harper#1266). Returns `true` once the contiguous run of no-progress entries since the last
94
+ * successful write crosses the count bound, or once it has both built up past the time-skip floor
95
+ * AND burned the time bound. All inputs are measured since the last write, so a productive replay
96
+ * (which keeps resetting them) never trips this; only a genuinely stalled, write-free grind does.
97
+ *
98
+ * @param noProgressRun consecutive entries processed without a successful write
99
+ * @param msSinceProgress wall-clock ms elapsed since the last successful write
100
+ */
101
+ export function shouldAbortStalledReplay(
102
+ noProgressRun: number,
103
+ msSinceProgress: number,
104
+ countLimit = REPLAY_NO_PROGRESS_COUNT_LIMIT,
105
+ timeLimitMs = REPLAY_NO_PROGRESS_TIME_LIMIT_MS,
106
+ timeSkipFloor = REPLAY_NO_PROGRESS_TIME_SKIP_FLOOR
107
+ ): boolean {
108
+ if (noProgressRun >= countLimit) return true;
109
+ return noProgressRun >= timeSkipFloor && msSinceProgress >= timeLimitMs;
61
110
  }
62
111
 
63
112
  /**
@@ -29,10 +29,16 @@ export function getThisNodeName(): string {
29
29
  if (nodeName) return nodeName; // if already determined, just return
30
30
  nodeName = env.get(CONFIG_PARAMS.NODE_HOSTNAME); // standard config
31
31
  if (nodeName) {
32
- if (env.get('replication_hostname') && env.get('replication_hostname') !== nodeName) {
33
- // if these are both set, it can be very confusing, make sure to warn
32
+ const replicationHostname = env.get('replication_hostname');
33
+ if (replicationHostname && replicationHostname !== nodeName) {
34
+ // If these are both set and differ, the node identity is ambiguous. node.hostname
35
+ // wins (it is what this node identifies as), but if it doesn't match the name this
36
+ // node is registered under in hdb_nodes, replication for that name silently turns
37
+ // off (harper-pro#351). Do NOT blindly recommend cementing the already-picked
38
+ // node.hostname value — that's how a wrong identity (e.g. 'localhost') gets locked
39
+ // in. Steer the operator to reconcile against the registered node name instead.
34
40
  logger.warn?.(
35
- `The node.hostname and replication.hostname configuration values are both set and are different. It is recommended that you set the node.hostname, using node.hostname: ${nodeName})`
41
+ `The node.hostname (${nodeName}) and replication.hostname (${replicationHostname}) configuration values are both set and differ. This node will identify as "${nodeName}". Ensure that name matches this node's row in system.hdb_nodes; if it does not, set node.hostname (or remove it to fall back to replication.hostname) to match the registered node name, otherwise replication for this node will be disabled.`
36
42
  );
37
43
  }
38
44
  return nodeName;
@@ -16,6 +16,7 @@ import { PACKAGE_ROOT } from '../utility/packageUtils.js';
16
16
  import * as globalSchema from '../utility/globalSchema.ts';
17
17
  import * as commonUtils from '../utility/common_utils.ts';
18
18
  import * as userSchema from '../security/user.ts';
19
+ import { authentication } from '../security/auth.ts';
19
20
  import { server as serverRegistration, type ServerOptions } from '../server/Server.ts';
20
21
  import {
21
22
  authHandler,
@@ -74,6 +75,22 @@ async function operationsServer(options: ServerOptions & { resources?: Resources
74
75
  // now that server is fully loaded/ready, start listening on port provided in config settings or just use
75
76
  // zero to wait for sockets from the main thread
76
77
  serverRegistration.http(server.server, options);
78
+ // The operations API runs only on the main thread, where auth's worker-only
79
+ // handleApplication never registers the authentication middleware. Register it here
80
+ // (after the node server, so its port already exists) so operations requests get
81
+ // `request.login`/`session`/`user` set up — without it the `login` operation that
82
+ // Studio uses to bootstrap a new instance fails with "No session for login".
83
+ // Node only: on Bun the ops API is served by delegating to Fastify via inject(), and
84
+ // auth is applied through fastifyAuth's Bun shim (there is no `_nodeRequest` for the
85
+ // auth middleware to attach the resolved user to). Register per port because `http()`
86
+ // tags each responder entry with `options.port || port`, so passing both ports in one
87
+ // call would mis-tag the secure entry with the plain port and leave the secure
88
+ // listener's chain without authentication.
89
+ if (typeof globalThis.Bun === 'undefined') {
90
+ if (options.port) serverRegistration.http(authentication, { port: options.port });
91
+ if (options.securePort) serverRegistration.http(authentication, { securePort: options.securePort });
92
+ if (!options.port && !options.securePort) serverRegistration.http(authentication, { port: 'all' });
93
+ }
77
94
  // On Bun, register the Fastify instance so requests can be delegated via inject()
78
95
  if (typeof globalThis.Bun !== 'undefined') {
79
96
  const port = options.port || options.securePort || env.get(CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);
@@ -41,7 +41,13 @@ const ABORT_MSG = 'Aborting install';
41
41
  const PROCESS_HOME = os.homedir();
42
42
  const DEFAULT_HDB_ROOT = path.join(PROCESS_HOME, hdbTerms.HDB_ROOT_DIR_NAME);
43
43
  const DEFAULT_ADMIN_USERNAME = 'admin';
44
- const DEFAULT_NODE_HOSTNAME = 'localhost';
44
+ // Intentionally null (not 'localhost'). Persisting a concrete node.hostname here cements a
45
+ // wrong identity: getThisNodeName() prefers node.hostname over replication.hostname, so a
46
+ // planted 'localhost' makes the node fail to find its own hdb_nodes self-row and silently
47
+ // disable user-DB replication (harper-pro#351 — exposed by in-place v4->v5 upgrades, where
48
+ // the install/migration boot would otherwise default this to 'localhost'). Leaving it unset
49
+ // preserves the working fallback chain (replication.hostname -> cert CN -> listening port).
50
+ const DEFAULT_NODE_HOSTNAME = null;
45
51
  const DEFAULT_CONFIG_MODE = 'dev';
46
52
 
47
53
  const DEV_MODE_CONFIG = {
@@ -270,10 +276,11 @@ async function installPrompts(promptOverride) {
270
276
  name: hdbTerms.INSTALL_PROMPTS.NODE_HOSTNAME,
271
277
  prefix: PROMPT_PREFIX,
272
278
  default: DEFAULT_NODE_HOSTNAME,
273
- validate: (value) => {
274
- if (checkForEmptyValue(value)) return checkForEmptyValue(value);
275
- return true;
276
- },
279
+ // node.hostname is OPTIONAL — an unset value is valid and preferred when the operator
280
+ // hasn't got a stable name to pin (it falls back to replication.hostname / cert CN /
281
+ // listening port). Accept empty/unset rather than forcing a value, which is what used
282
+ // to cement 'localhost' (harper-pro#351).
283
+ validate: () => true,
277
284
  message: HDB_PROMPT_MSG(INSTALL_PROMPTS.NODE_HOSTNAME),
278
285
  },
279
286
  {
@@ -395,18 +395,31 @@ async function copyDbToRocks(sourceRootStore, sourceDatabase, targetPath) {
395
395
  console.log(`Migrating database ${sourceDatabase} to RocksDB at ${targetPath}`);
396
396
  const sourceDbisDb = sourceRootStore.dbisDb;
397
397
  const targetRootStore = openRocksDb(targetPath, { disableWAL: false });
398
+ // sharedStructuresKey wires the rocksdb-js getStructures/saveStructures closures
399
+ // so that the plain msgpackr.Encoder used here persists structures within the
400
+ // __dbis__ CF at Symbol.for('structures'). The runtime attributesDbi RecordEncoder
401
+ // takes the non-isRocksDB path (handleLocalTimeForGets is never called on it) and
402
+ // reads from the same CF key via superGetStructures. Without this, own structure
403
+ // IDs starting at 0x40 are minted in-memory and silently lost on restart →
404
+ // runtime decoder interprets 0x40 as fixint 64 → "Data read, but end of buffer
405
+ // not reached 64" (harper#1260).
398
406
  const targetDbisDb = openRocksDb(targetPath, {
399
407
  disableWAL: false,
400
408
  name: terms_ts_1.INTERNAL_DBIS_NAME,
409
+ sharedStructuresKey: Symbol.for('structures'),
401
410
  });
402
411
  const STRUCTURES_KEY = Symbol.for('structures');
403
- const copyStructures = (sourceDbi, storeName) => {
412
+ const copyStructures = (sourceDbi, storeName, extraTarget) => {
404
413
  const buffer = sourceDbi.getBinary?.(STRUCTURES_KEY);
405
414
  if (buffer) {
406
- targetRootStore.putSync([STRUCTURES_KEY, storeName], (0, lmdb_1.asBinary)(buffer));
415
+ const binaryBuffer = (0, lmdb_1.asBinary)(buffer);
416
+ targetRootStore.putSync([STRUCTURES_KEY, storeName], binaryBuffer);
417
+ // Also write to the extra target CF when provided (e.g. __dbis__ CF,
418
+ // which the runtime RecordEncoder reads via its superGetStructures path).
419
+ extraTarget?.putSync(STRUCTURES_KEY, binaryBuffer);
407
420
  }
408
421
  };
409
- copyStructures(sourceDbisDb, terms_ts_1.INTERNAL_DBIS_NAME);
422
+ copyStructures(sourceDbisDb, terms_ts_1.INTERNAL_DBIS_NAME, targetDbisDb);
410
423
  let written;
411
424
  let outstandingWrites = 0;
412
425
  const transaction = sourceDbisDb.useReadTransaction();
@@ -1 +1 @@
1
- {"version":3,"file":"copyDb.js","sourceRoot":"","sources":["../../../core/bin/copyDb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copyDb.js","sourceRoot":"","sources":["../../../core/bin/copyDb.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,wCAuGC;AAiBD,wBAiJC;AAiBD,wCA2EC;AAED,sCA4NC;AAtlBD,4DAAgG;AAChG,+BAAsC;AACtC,+BAA4B;AAC5B,uCAAwC;AACxC,qCAAgD;AAChD,wFAAmE;AACnE,wGAA6E;AAC7E,uEAAiE;AACjE,uDAAgF;AAChF,wDAA2E;AAC3E,8DAAiE;AACjE,sEAAgE;AAChE,6DAA6D;AAC7D,+EAAiE;AACjE,uDAAkF;AAClF,wEAAkE;AAClE,kDAA+D;AAC/D,oEAAuG;AAEhG,KAAK,UAAU,cAAc;IACnC,SAAS,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAA,2BAAG,EAAC,2BAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAA,2BAAY,GAAE,CAAC;IAEjC,IAAA,kCAAiB,EAAC,2BAAa,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC,iHAAiH;IAEjL,IAAI,CAAC;QACJ,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;YACtC,IAAI,YAAY,KAAK,QAAQ;gBAAE,SAAS;YACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS,CAAC,sBAAsB;YACpE,IAAI,MAAM,CAAC;YACX,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC9D,MAAM;YACP,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;gBAClE,SAAS;YACV,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,gCAAkB,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC;YAChF,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC;gBACJ,WAAW,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,4CAA4C,EAAE,WAAW,CAAC,CAAC;YAClG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,SAAS,CAAC,KAAK,CAAC,yCAAyC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;gBAChF,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAC/E,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC7B,MAAM;gBACN,QAAQ;gBACR,UAAU;gBACV,WAAW;aACX,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAErC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACJ,MAAM,IAAA,eAAI,EAAC,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;YACD,gDAAgD;YAChD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACjE,MAAM,IAAA,eAAI,EAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,IAAA,iBAAM,EAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,gCAAkB,EAAE,GAAG,YAAY,gBAAgB,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC;YACJ,IAAA,6BAAc,GAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC;YACJ,IAAA,6BAAc,GAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACjD,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAExE,IAAA,kCAAiB,EAAC,2BAAa,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAE/D,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC;gBACJ,MAAM,IAAA,eAAI,EAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACF,CAAC;QACD,IAAA,6BAAc,GAAE,CAAC;QAEjB,MAAM,GAAG,CAAC;IACX,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7D,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,2CAA2C,EAAE,kBAAkB,CAAC,CAAC;QAE7F,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,iFAAiF,EAAE,4CAA4C,WAAW,kBAAkB,kBAAkB,kEAAkE,UAAU,EAAE,CAAC;YAC5Q,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,IAAA,2BAAG,EAAC,2BAAa,CAAC,gCAAgC,CAAC,KAAK,IAAI;YAAE,SAAS;QAC3E,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAA,iBAAM,EAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,UAAU,GAAG,MAAM,IAAA,kCAAc,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAChC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,+FAA+F;AAC/F,SAAS,IAAI;IACZ,4DAA4D;AAC7D,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,cAAsB,EAAE,kBAA0B;IAC9E,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,OAAO,kBAAkB,EAAE,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAA,2BAAY,GAAE,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,cAAc,EAAE,CAAC,CAAC;IAC/E,IAAI,SAAS,CAAC;IACd,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,sCAAsC;QACtC,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC;QAC9B,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;QACjC,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;YACjB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC;YAC5B,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,cAAc,EAAE,CAAC,CAAC;IAC/F,yCAAyC;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;IACtC,MAAM,gBAAgB,GAAG,SAAS,CAAC,UAAU,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,IAAI,kCAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,6BAAkB,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC;IACZ,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,kGAAkG;IAClG,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC;IACtD,IAAI,CAAC;QACJ,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAChF,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;YACzC,IAAI,mBAAmB,EAAE,cAAc,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACf,mBAAmB,GAAG,SAAS,CAAC,WAAW,CAAC;gBAC5C,cAAc,GAAG,IAAA,oCAAqB,GAAE,CAAC;gBACzC,IAAI,cAAc;oBAAE,SAAS,CAAC,WAAW,GAAG,cAAc,CAAC;;oBACtD,OAAO,SAAS,CAAC,WAAW,CAAC;gBAClC,IAAI,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;oBAC5F,gHAAgH;oBAChH,mBAAmB,GAAG,IAAI,CAAC;oBAC3B,cAAc,GAAG,IAAI,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC;gBAAE,SAAS;YAChD,MAAM,OAAO,GAAG,IAAI,gCAAa,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzD,kEAAkE;YAClE,wBAAwB;YACxB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC;YAC1C,iCAAiC;YACjC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACjD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;YAChC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC9B,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC;YACrC,MAAM,SAAS,GAAI,SAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzD,SAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC9E,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,2BAAgB,EAAE,mCAAmB,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC/E,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,UAAU,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW;YAClE,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,OAAO,GAAG,QAAQ,CAAC;YACvB,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,OAAO,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACJ,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;wBAC7D,IAAI,CAAC;4BACJ,KAAK,GAAG,GAAG,CAAC;4BACZ,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;4BACpE,+GAA+G;4BAC/G,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE,IAAI,SAAS,EAAE,CAAC;gCACrC,aAAa,EAAE,CAAC;gCAChB,SAAS;4BACV,CAAC;4BACD,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;4BACrE,aAAa,EAAE,CAAC;4BAChB,IAAI,WAAW,CAAC,SAAS;gCAAE,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,6CAA6C;4BACnG,WAAW,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;4BAClD,IAAI,iBAAiB,EAAE,GAAG,IAAI,EAAE,CAAC;gCAChC,MAAM,OAAO,CAAC;gCACd,OAAO,CAAC,GAAG,CACV,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,OAAO,CACP,CAAC;gCACF,iBAAiB,GAAG,CAAC,CAAC;4BACvB,CAAC;wBACF,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,OAAO,CAAC,KAAK,CACZ,sBAAsB,EACtB,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EACxC,MAAM,EACN,cAAc,EACd,IAAI,EACJ,kBAAkB,EAClB,KAAK,CACL,CAAC;wBACH,CAAC;oBACF,CAAC;oBACD,OAAO,CAAC,GAAG,CACV,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,OAAO,CACP,CAAC;oBACF,OAAO;gBACR,CAAC;gBAAC,MAAM,CAAC;oBACR,kCAAkC;oBAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC/B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;4BACnB,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;wBACpG,CAAC;wBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBAClC,CAAC;yBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;wBAAE,KAAK,EAAE,CAAC;;wBACzC,OAAO,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBACvG,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,OAAO,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,cAAc,GAAG,MAAM,GAAG,kBAAkB,CAAC,CAAC;IAChF,CAAC;YAAS,CAAC;QACV,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,SAAS,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,UAAwD,EAAE;IAC5F,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC;IAC7B,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAA,mBAAS,EAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,EAAE,CAAC;IACP,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,EAAE,GAAG,IAAK,oCAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,CAAC;SAAM,CAAC;QACP,EAAE,GAAG,0BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,cAAc;IACnC,SAAS,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAA,2BAAG,EAAC,2BAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAA,2BAAY,GAAE,CAAC;IAEjC,IAAI,CAAC;QACJ,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,+DAA+D;QAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC7C,IAAI,SAAS,CAAC;YACd,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;gBACjD,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC;gBAC9B,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;gBACjC,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBAC3C,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;oBACjB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,CAAC;gBACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACtB,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC;oBAC5B,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;gBAChC,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;gBAClE,SAAS;YACV,CAAC;YACD,IAAI,SAAS,YAAY,0BAAa,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,8BAA8B,CAAC,CAAC;gBACtE,SAAS;YACV,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,gCAAkB,EAAE,YAAY,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;YAChC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;YAEnE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,yBAAyB,EAAE,UAAU,CAAC,CAAC;YAE9E,MAAM,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YAEzD,iCAAiC;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACJ,MAAM,IAAA,eAAI,EAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC;YACD,uBAAuB;YACvB,IAAI,CAAC;gBACJ,MAAM,IAAA,iBAAM,EAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACR,0BAA0B;YAC3B,CAAC;QACF,CAAC;QAED,qEAAqE;QACrE,IAAA,kCAAiB,EAAC,2BAAa,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC;YACJ,IAAA,6BAAc,GAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,SAAS,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,eAAe,EAAE,cAAsB,EAAE,UAAkB;IAC9F,OAAO,CAAC,GAAG,CAAC,sBAAsB,cAAc,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;IAE5C,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,iFAAiF;IACjF,8EAA8E;IAC9E,mFAAmF;IACnF,kFAAkF;IAClF,iFAAiF;IACjF,2EAA2E;IAC3E,+EAA+E;IAC/E,iCAAiC;IACjC,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,EAAE;QAC5C,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,6BAAkB;QACxB,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;KAC7C,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,SAAiB,EAAE,WAA2B,EAAE,EAAE;QACpF,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,CAAC;YACtC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;YACnE,qEAAqE;YACrE,0EAA0E;YAC1E,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;IACF,CAAC,CAAC;IAEF,cAAc,CAAC,YAAY,EAAE,6BAAkB,EAAE,YAAY,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC;IACZ,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC;IACtD,IAAI,CAAC;QACJ,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAChF,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;YACzC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC;gBAAE,SAAS;YAEhD,oEAAoE;YACpE,8EAA8E;YAC9E,kFAAkF;YAClF,oFAAoF;YACpF,kFAAkF;YAClF,MAAM,OAAO,GAAG,IAAI,gCAAa,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzD,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;YAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,0FAA0F;YAC1F,0FAA0F;YAC1F,8FAA8F;YAC9F,iFAAiF;YACjF,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO;gBAAE,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC;YAElF,IAAI,SAAS,CAAC;YACd,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACP,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnD,sGAAsG;gBACtG,wGAAwG;gBACxG,MAAM,eAAe,GAAG,SAAS,CAAC,OAAc,CAAC;gBACjD,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC;gBACjC,eAAe,CAAC,SAAS,GAAG,eAAe,CAAC;gBAC5C,MAAM,WAAW,GAAG,IAAI,gCAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAQ,CAAC;gBAC5D,6EAA6E;gBAC7E,8EAA8E;gBAC9E,6EAA6E;gBAC7E,iFAAiF;gBACjF,2EAA2E;gBAC3E,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC;gBACvB,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC7B,WAAW,CAAC,SAAS,GAAG,eAAe,CAAC;gBACxC,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAC5C,eAAe,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;gBAC1D,yEAAyE;gBACzE,gFAAgF;gBAChF,mFAAmF;gBACnF,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;gBACtC,eAAe,CAAC,cAAc,GAAG,kBAAkB,CAAC;gBACpD,WAAW,CAAC,cAAc,GAAG,kBAAkB,CAAC;YACjD,CAAC;YAED,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAE/B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YACpE,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;QAED,yFAAyF;QACzF,yGAAyG;QACzG,uFAAuF;QAEvF,MAAM,OAAO,CAAC;QAEd,mFAAmF;QACnF,yEAAyE;QACzE,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACpF,IAAI,cAAc,EAAE,CAAC;YACpB,eAAe,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAA,eAAQ,EAAC,cAAc,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAC,CAAC;IACpE,CAAC;YAAS,CAAC;QACV,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,eAAe,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW;QACzE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,GAAG,WAAW,CAAC;QAC1B,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,OAAO,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC;gBACJ,IAAI,SAAS,EAAE,CAAC;oBACf,KAAK,MAAM,EACV,GAAG,EACH,KAAK,EACL,OAAO,EACP,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,gBAAgB,EAC7B,aAAa,EAAE,kBAAkB,GACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBACjE,IAAI,CAAC;4BACJ,KAAK,GAAG,GAAG,CAAC;4BACZ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gCAC7B,aAAa,EAAE,CAAC;gCAChB,SAAS;4BACV,CAAC;4BACD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gCACnB,aAAa,EAAE,CAAC;gCAChB,SAAS;4BACV,CAAC;4BACD,oEAAoE;4BACpE,oEAAoE;4BACpE,MAAM,UAAU,GAAG,+BAAY,CAAC;4BAChC,IAAA,kCAAe,EACd,OAAO,EACP,kBAAkB,IAAI,UAAU,EAAE,CAAC,2BAAQ,CAAC,IAAI,CAAC,EACjD,cAAc,IAAI,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,EAC7C,WAAW,IAAI,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,EACvC,gBAAgB,IAAI,UAAU,EAAE,WAAW,IAAI,CAAC,CAChD,CAAC;4BACF,OAAO,GAAG,IAAA,iCAAuB,EAChC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,EACxC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAC7C,eAAe,CACf,CAAC;4BACF,aAAa,EAAE,CAAC;4BAChB,IAAI,WAAW,CAAC,SAAS;gCAAE,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;4BACrD,IAAI,iBAAiB,EAAE,GAAG,IAAI,EAAE,CAAC;gCAChC,MAAM,OAAO,CAAC;gCACd,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;gCAC5F,iBAAiB,GAAG,CAAC,CAAC;4BACvB,CAAC;wBACF,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,OAAO,CAAC,KAAK,CACZ,wBAAwB,EACxB,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EACxC,MAAM,EACN,cAAc,EACd,KAAK,CACL,CAAC;wBACH,CAAC;oBACF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;wBACzE,IAAI,CAAC;4BACJ,KAAK,GAAG,GAAG,CAAC;4BACZ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gCAC7B,SAAS;4BACV,CAAC;4BACD,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;4BACpC,aAAa,EAAE,CAAC;4BAChB,IAAI,WAAW,CAAC,SAAS;gCAAE,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;4BACrD,IAAI,iBAAiB,EAAE,GAAG,IAAI,EAAE,CAAC;gCAChC,MAAM,OAAO,CAAC;gCACd,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;gCACxD,iBAAiB,GAAG,CAAC,CAAC;4BACvB,CAAC;wBACF,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,OAAO,CAAC,KAAK,CACZ,8BAA8B,EAC9B,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EACxC,MAAM,EACN,cAAc,EACd,KAAK,CACL,CAAC;wBACH,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;gBAC5G,OAAO;YACR,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CACZ,2BAA2B,cAAc,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,OAAO,iBAAiB,EAClH,GAAG,CACH,CAAC;gBACF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC/B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;wBACnB,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;oBAC1E,CAAC;oBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAClC,CAAC;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,KAAK,EAAE,CAAC;;oBACzC,OAAO,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAC7E,CAAC;QACF,CAAC;QACD,kFAAkF;QAClF,4EAA4E;QAC5E,MAAM,IAAI,KAAK,CACd,gBAAgB,cAAc,aAAa,WAAW,8BAA8B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC3G,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -935,6 +935,30 @@ function makeTable(options) {
935
935
  return coerceType(id, primaryKeyAttribute);
936
936
  }
937
937
  static async dropTable() {
938
+ if (databaseName === databasePath) {
939
+ // Persist a drop tombstone on the primary catalog entry BEFORE any
940
+ // destructive work. If the process dies or a column family drop fails
941
+ // partway through, the tombstone survives with the catalog rows, and
942
+ // the next startup (or a same-name create) completes the drop via
943
+ // completeInterruptedDrop in databases.ts instead of resurrecting
944
+ // the table.
945
+ const primaryCatalogKey = TableResource.tableName + '/';
946
+ const primaryMeta = dbisDb.getSync(primaryCatalogKey);
947
+ if (primaryMeta && !primaryMeta.dropping) {
948
+ primaryMeta.dropping = true;
949
+ // put is rebound to putSync on RocksDB stores; on LMDB it returns
950
+ // a promise, so await it to make the tombstone durable before the
951
+ // destructive work below
952
+ const tombstoneWrite = dbisDb.put(primaryCatalogKey, primaryMeta);
953
+ if (tombstoneWrite?.then)
954
+ await tombstoneWrite;
955
+ }
956
+ }
957
+ // Remove the table from the in-memory schema immediately so concurrent
958
+ // requests get "table does not exist" instead of racing the column
959
+ // family drops below. If a drop fails past this point the table stays
960
+ // invisible, and the tombstone guarantees the drop completes on the
961
+ // next startup (or on a same-name create).
938
962
  delete databases_ts_1.databases[databaseName][tableName];
939
963
  for (const entry of primaryStore.getRange({ versions: true, snapshot: false, lazy: true })) {
940
964
  if (entry.metadataFlags & auditStore_ts_1.HAS_BLOBS && entry.value) {
@@ -942,14 +966,29 @@ function makeTable(options) {
942
966
  }
943
967
  }
944
968
  if (databaseName === databasePath) {
945
- // part of a database
969
+ // part of a database.
970
+ // Drop the column families and AWAIT them. Previously the catalog
971
+ // metadata was removed (synchronous removeSync) before primaryStore.drop(),
972
+ // and the drops were fire-and-forget (their rejections swallowed). If a
973
+ // column family was corrupt/half-initialized the drop would fail, yet the
974
+ // catalog entry was already gone - an orphaned "ghost" column family that
975
+ // poisons same-name recreates. By awaiting the drops before touching the
976
+ // catalog, a failed drop surfaces as the operation's error and the
977
+ // tombstoned catalog rows survive for the startup reconcile.
978
+ const drops = [];
946
979
  for (const attribute of attributes) {
947
- dbisDb.remove(TableResource.tableName + '/' + attribute.name);
948
980
  const index = indices[attribute.name];
949
- index?.drop();
981
+ if (index)
982
+ drops.push(index.drop());
983
+ }
984
+ drops.push(primaryStore.drop());
985
+ await Promise.all(drops);
986
+ // Column families are gone; remove the catalog metadata (including
987
+ // the tombstoned primary entry).
988
+ for (const attribute of attributes) {
989
+ dbisDb.remove(TableResource.tableName + '/' + attribute.name);
950
990
  }
951
991
  dbisDb.remove(TableResource.tableName + '/');
952
- primaryStore.drop();
953
992
  await dbisDb.committed;
954
993
  }
955
994
  else {