@lossless.org/nosqldb 10.11.0 → 11.0.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 (55) hide show
  1. package/.smartconfig.json +117 -0
  2. package/dist_rust/rustdb_linux_amd64 +0 -0
  3. package/dist_rust/rustdb_linux_amd64.tsrust-build.json +5 -5
  4. package/dist_rust/rustdb_linux_amd64_musl +0 -0
  5. package/dist_rust/rustdb_linux_amd64_musl.tsrust-build.json +5 -5
  6. package/dist_rust/rustdb_linux_arm64 +0 -0
  7. package/dist_rust/rustdb_linux_arm64.tsrust-build.json +5 -5
  8. package/dist_rust/rustdb_linux_arm64_musl +0 -0
  9. package/dist_rust/rustdb_linux_arm64_musl.tsrust-build.json +5 -5
  10. package/dist_rust/rustdb_macos_amd64 +0 -0
  11. package/dist_rust/rustdb_macos_amd64.tsrust-build.json +5 -5
  12. package/dist_rust/rustdb_macos_arm64 +0 -0
  13. package/dist_rust/rustdb_macos_arm64.tsrust-build.json +5 -5
  14. package/dist_ts/00_commitinfo_data.js +2 -2
  15. package/dist_ts/ts_local/classes.localnosqldb.d.ts +15 -4
  16. package/dist_ts/ts_local/classes.localnosqldb.js +31 -11
  17. package/dist_ts/ts_nosqldb/index.d.ts +3 -3
  18. package/dist_ts/ts_nosqldb/index.js +5 -4
  19. package/dist_ts/ts_nosqldb/rust-db-bridge.d.ts +125 -2
  20. package/dist_ts/ts_nosqldb/rust-db-bridge.js +261 -46
  21. package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.d.ts +69 -3
  22. package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.js +91 -12
  23. package/dist_ts/ts_nosqldb/server/index.d.ts +2 -2
  24. package/dist_ts/ts_nosqldb/server/index.js +2 -2
  25. package/dist_ts/ts_nosqldb/stopped-storage.d.ts +9 -1
  26. package/dist_ts/ts_nosqldb/stopped-storage.js +1 -1
  27. package/dist_ts/ts_nosqldb/storage-rehearsal.js +1 -1
  28. package/dist_ts/ts_nosqldb/storage-root-alignment.js +7 -3
  29. package/dist_ts/ts_nosqldb/storage-root-relocation.js +2 -2
  30. package/dist_ts_debugserver/bundled.js +6 -2
  31. package/package.json +28 -15
  32. package/readme.md +470 -730
  33. package/third-party-notices.md +40 -8
  34. package/third_party_licenses/inventory.json +6 -6
  35. package/ts/00_commitinfo_data.ts +8 -0
  36. package/ts/index.ts +85 -0
  37. package/ts/ts_local/classes.localnosqldb.ts +631 -0
  38. package/ts/ts_local/index.ts +19 -0
  39. package/ts/ts_local/plugins.ts +1 -0
  40. package/ts/ts_nosqldb/classes.storagerehearsal.ts +109 -0
  41. package/ts/ts_nosqldb/committed-writes.ts +38 -0
  42. package/ts/ts_nosqldb/file-storage-options.ts +33 -0
  43. package/ts/ts_nosqldb/file-storage-startup.ts +10 -0
  44. package/ts/ts_nosqldb/index.ts +132 -0
  45. package/ts/ts_nosqldb/offline-inspection.ts +375 -0
  46. package/ts/ts_nosqldb/plugins.ts +12 -0
  47. package/ts/ts_nosqldb/resource-fencing.ts +368 -0
  48. package/ts/ts_nosqldb/rust-db-bridge.ts +1309 -0
  49. package/ts/ts_nosqldb/server/classes.nosqldbserver.ts +874 -0
  50. package/ts/ts_nosqldb/server/index.ts +4 -0
  51. package/ts/ts_nosqldb/service-types.ts +499 -0
  52. package/ts/ts_nosqldb/stopped-storage.ts +116 -0
  53. package/ts/ts_nosqldb/storage-rehearsal.ts +215 -0
  54. package/ts/ts_nosqldb/storage-root-alignment.ts +180 -0
  55. package/ts/ts_nosqldb/storage-root-relocation.ts +279 -0
@@ -9,6 +9,85 @@ import { normalizeNoSqlDbStorageRehearsalInput, } from './storage-rehearsal.js';
9
9
  import { normalizeNoSqlDbAllocationReadAccessGrantError, normalizeNoSqlDbResourceFenceError, } from './service-types.js';
10
10
  import { normalizeLocalNoSqlDbOfflinePhysicalNamespaceInspectionInput, normalizeLocalNoSqlDbOfflineInspectionInput, validateNoSqlDbManagementOperationOptions, } from './offline-inspection.js';
11
11
  import { normalizeLocalNoSqlDbStoppedStorageRootRelocationInput, } from './storage-root-relocation.js';
12
+ /**
13
+ * Bounds of the engine standard-error tail that start failures, unexpected
14
+ * engine exits and failed management calls carry: the engine's last 64 lines.
15
+ * A longer line keeps its first 1,024 characters, followed by
16
+ * ` [<n> more characters]`.
17
+ */
18
+ export const noSqlDbEngineStderrTailLimits = Object.freeze({ lines: 64, lineCharacters: 1024 });
19
+ /**
20
+ * Attach the engine's last standard-error lines to an error as its own field
21
+ * `engineStderrTail`, leaving its message and cause unchanged. Values that
22
+ * cannot carry a field (primitives, frozen objects) are left as they are.
23
+ */
24
+ export function attachNoSqlDbEngineStderrTail(errorArg, tailArg) {
25
+ if (errorArg === null || (typeof errorArg !== 'object' && typeof errorArg !== 'function'))
26
+ return;
27
+ if (!Object.isExtensible(errorArg) && !Object.prototype.hasOwnProperty.call(errorArg, 'engineStderrTail'))
28
+ return;
29
+ try {
30
+ Object.defineProperty(errorArg, 'engineStderrTail', {
31
+ value: Object.freeze([...tailArg]),
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: false,
35
+ });
36
+ }
37
+ catch {
38
+ // A non-configurable field of the same name stays as the caller made it.
39
+ }
40
+ }
41
+ /**
42
+ * The engine process exited with a non-zero status or by a signal while its
43
+ * server was running and no stop was in progress. `engineStderrTail` holds
44
+ * its last standard-error lines.
45
+ */
46
+ export class NoSqlDbEngineExitError extends Error {
47
+ constructor(exitCode, signal, engineStderrTailArg) {
48
+ super(`nosqldb Rust process exited unexpectedly (code=${exitCode}, signal=${signal})`);
49
+ this.exitCode = exitCode;
50
+ this.signal = signal;
51
+ this.name = 'NoSqlDbEngineExitError';
52
+ this.engineStderrTail = Object.freeze([...engineStderrTailArg]);
53
+ }
54
+ }
55
+ /**
56
+ * A start that the engine refused because the storage root, or a feature it
57
+ * carries, comes from a later NoSQLDB release than this one: the engine's
58
+ * management reply carried the code `UNKNOWN_ROOT`. The engine wrote nothing
59
+ * into the root (storage-root-names-and-start.md, "Roots of later releases";
60
+ * requirements A300 and A319). `code` holds the code, and `cause` the
61
+ * management error that carried it.
62
+ */
63
+ export class NoSqlDbUnknownRootError extends Error {
64
+ constructor(options) {
65
+ super('NoSQLDB refuses this storage root: the root, or a feature it carries, comes from a later NoSQLDB release than this one', options);
66
+ this.code = 'UNKNOWN_ROOT';
67
+ this.responseErrorCode = 'UNKNOWN_ROOT';
68
+ this.name = 'NoSqlDbUnknownRootError';
69
+ }
70
+ }
71
+ /** The bounded record of one engine process's last standard-error lines. */
72
+ class EngineStderrTail {
73
+ constructor() {
74
+ this.lines = [];
75
+ }
76
+ add(lineArg) {
77
+ const limit = noSqlDbEngineStderrTailLimits.lineCharacters;
78
+ this.lines.push(lineArg.length > limit
79
+ ? `${lineArg.slice(0, limit)} [${lineArg.length - limit} more characters]`
80
+ : lineArg);
81
+ if (this.lines.length > noSqlDbEngineStderrTailLimits.lines)
82
+ this.lines.shift();
83
+ }
84
+ clear() {
85
+ this.lines = [];
86
+ }
87
+ snapshot() {
88
+ return [...this.lines];
89
+ }
90
+ }
12
91
  export class NoSqlDbManagementOperationTerminationError extends AggregateError {
13
92
  constructor(operationErrorArg, terminationErrorArg) {
14
93
  super([operationErrorArg, terminationErrorArg], 'NoSQLDB management operation failed and Rust engine termination was incomplete', { cause: operationErrorArg });
@@ -28,8 +107,8 @@ function getPackageRoot() {
28
107
  return path.resolve(thisDir, '..', '..');
29
108
  }
30
109
  /**
31
- * Map Node.js process.platform/process.arch to tsrust's friendly name suffix.
32
- * tsrust names cross-compiled binaries as: rustdb_linux_amd64, rustdb_linux_arm64, etc.
110
+ * Map Node.js process.platform/process.arch to rsrepo's friendly name suffix.
111
+ * rsrepo names cross-compiled binaries as: rustdb_linux_amd64, rustdb_linux_arm64, etc.
33
112
  */
34
113
  function getTsrustPlatformSuffix() {
35
114
  const archMap = { x64: 'amd64', arm64: 'arm64' };
@@ -44,13 +123,13 @@ function getTsrustPlatformSuffix() {
44
123
  }
45
124
  /**
46
125
  * Build local search paths for the Rust binary, including dist_rust/ candidates
47
- * (built by tsrust) and local development build paths.
126
+ * (built by rsrepo) and local development build paths.
48
127
  */
49
128
  function buildLocalPaths() {
50
129
  const packageRoot = getPackageRoot();
51
130
  const suffix = getTsrustPlatformSuffix();
52
131
  const paths = [];
53
- // dist_rust/ candidates (tsrust cross-compiled output)
132
+ // dist_rust/ candidates (rsrepo cross-compiled output)
54
133
  if (suffix) {
55
134
  paths.push(path.join(packageRoot, 'dist_rust', `rustdb_${suffix}`));
56
135
  }
@@ -60,11 +139,23 @@ function buildLocalPaths() {
60
139
  paths.push(path.resolve(process.cwd(), 'rust', 'target', 'debug', 'rustdb'));
61
140
  return paths;
62
141
  }
63
- export function getRustDbAllocatorEnv(environment = process.env) {
64
- return {
65
- MIMALLOC_ARENA_EAGER_COMMIT: environment.MIMALLOC_ARENA_EAGER_COMMIT ?? '0',
66
- MIMALLOC_ALLOW_LARGE_OS_PAGES: environment.MIMALLOC_ALLOW_LARGE_OS_PAGES ?? '0',
67
- };
142
+ const binaryHelp = 'Set NOSQLDB_RUST_BINARY env var, install the platform package, or build locally with `rsrepo`.';
143
+ /**
144
+ * What a spawn() that returned false after `waitedMs` means, stating only what
145
+ * is known. Smartrust refuses a `binaryPath` that does not pass its validation
146
+ * before spawn() can return false, so with one the engine there passed
147
+ * Smartrust's validation and did not report ready within the bridge's limit,
148
+ * and its path is given as the caller gave it.
149
+ * Without one, whatever NOSQLDB_RUST_BINARY holds (one of the places that
150
+ * Smartrust's search looks), either the search found no engine or the engine
151
+ * it found did not report ready, and nothing tells which.
152
+ */
153
+ export function describeRefusedSpawn(binaryPath, waitedMs) {
154
+ if (binaryPath !== undefined) {
155
+ return `the nosqldb engine at ${binaryPath} did not report ready within the bridge's limit: it waited ${waitedMs} ms`;
156
+ }
157
+ return `the nosqldb engine did not start: spawn() returned false after ${waitedMs} ms, which means either that no nosqldb Rust binary `
158
+ + `was found (${binaryHelp}) or that the engine found did not report ready within the bridge's limit`;
68
159
  }
69
160
  /**
70
161
  * Bridge between TypeScript NoSqlDbServer and the Rust binary.
@@ -77,12 +168,89 @@ export class RustDbBridge extends EventEmitter {
77
168
  * termination, or when the bridge is connected to an external process.
78
169
  */
79
170
  get processId() {
171
+ return this.childProcess?.pid;
172
+ }
173
+ /** The engine child process of the latest spawn, while the bridge holds it. */
174
+ get childProcess() {
80
175
  const transport = this.bridge.transport;
81
- return transport?.childProcess?.pid;
176
+ return transport?.childProcess ?? undefined;
177
+ }
178
+ /** Records the exit of the engine process that a spawn has just started. */
179
+ watchEngineExit() {
180
+ const child = this.childProcess;
181
+ if (!child)
182
+ return;
183
+ this.engineExitPromise = new Promise((resolveArg) => {
184
+ const record = (code, signal) => {
185
+ this.engineExit = { code, signal };
186
+ resolveArg();
187
+ };
188
+ if (child.exitCode !== null || child.signalCode !== null)
189
+ record(child.exitCode, child.signalCode);
190
+ else
191
+ child.once('exit', record);
192
+ });
193
+ }
194
+ /**
195
+ * The exit code and signal of the engine process of the latest spawn, as its
196
+ * process exit reported them, each null where it reported none; or null
197
+ * while that process has not exited, or no spawn started one.
198
+ */
199
+ get lastEngineExit() {
200
+ return this.engineExit;
201
+ }
202
+ /** Whether the engine process of the latest spawn exists and has not exited. */
203
+ get engineProcessAlive() {
204
+ return this.engineExitPromise !== undefined && this.engineExit === null;
205
+ }
206
+ /** Waits up to `timeoutMs` for the engine process to exit by itself; resolves whether it has. */
207
+ async waitForEngineExit(timeoutMs) {
208
+ if (!this.engineExitPromise)
209
+ return false;
210
+ let timer;
211
+ await Promise.race([
212
+ this.engineExitPromise,
213
+ new Promise((resolveArg) => { timer = setTimeout(resolveArg, timeoutMs); }),
214
+ ]);
215
+ if (timer)
216
+ clearTimeout(timer);
217
+ return this.engineExit !== null;
218
+ }
219
+ /**
220
+ * Closes the engine's management input, the end of the management protocol
221
+ * after an acknowledged `stop`, on which the engine exits by itself. This is
222
+ * neither a signal nor a kill. Returns whether there was an input to close.
223
+ */
224
+ endManagementInput() {
225
+ const input = this.childProcess?.stdin;
226
+ if (!input || input.writableEnded)
227
+ return false;
228
+ input.end();
229
+ return true;
230
+ }
231
+ /**
232
+ * Why Smartrust's spawn() returned false, as far as the bridge knows. Each
233
+ * spawn() clears it as it starts, and sets it when Smartrust's spawn()
234
+ * returns false before this spawn()'s own `timeoutMs` or `signal` cuts it
235
+ * short, before the engine is ended. That spawn() then returns false, or
236
+ * throws if ending the engine fails. After any other spawn() it is
237
+ * undefined, including one cut short by its own `timeoutMs` or `signal`.
238
+ * Smartrust's spawn() returns false both when it finds no engine and when
239
+ * the engine it starts does not report ready within its limit; a
240
+ * `binaryPath` tells the two apart, as Smartrust refuses one that does not
241
+ * pass its validation with RustBinaryLocatorError before spawn() can return
242
+ * false.
243
+ */
244
+ get spawnFailureMessage() {
245
+ return this.spawnRefusal;
82
246
  }
83
247
  constructor(options = {}) {
84
248
  super();
249
+ /** How the engine process of the latest spawn exited, once it has. */
250
+ this.engineExit = null;
85
251
  this.terminationConfirmed = true;
252
+ this.stderrTail = new EngineStderrTail();
253
+ this.binaryPath = options.binaryPath;
86
254
  this.bridge = new plugins.smartrust.RustBridge({
87
255
  binaryName: 'rustdb',
88
256
  binaryPath: options.binaryPath,
@@ -90,7 +258,14 @@ export class RustDbBridge extends EventEmitter {
90
258
  platformPackagePrefix: '@lossless.org/nosqldb',
91
259
  localPaths: buildLocalPaths(),
92
260
  maxPayloadSize: 100 * 1024 * 1024, // database exports/imports can be larger than command replies
93
- env: getRustDbAllocatorEnv(),
261
+ });
262
+ // Smartrust delivers the engine's standard error one line at a time.
263
+ const engineLog = options.engineLog;
264
+ this.bridge.on('stderr', (line) => {
265
+ this.stderrTail.add(line);
266
+ // Microtasks run in order, so the lines keep their order.
267
+ if (engineLog)
268
+ queueMicrotask(() => engineLog(line));
94
269
  });
95
270
  // Forward events from the inner bridge
96
271
  this.bridge.on('exit', (code, signal) => {
@@ -98,11 +273,39 @@ export class RustDbBridge extends EventEmitter {
98
273
  this.emit('exit', code, signal);
99
274
  });
100
275
  }
276
+ /**
277
+ * The last standard-error lines of the running or most recently spawned
278
+ * engine process, within `noSqlDbEngineStderrTailLimits`.
279
+ */
280
+ get engineStderrTail() {
281
+ return this.stderrTail.snapshot();
282
+ }
283
+ /**
284
+ * Send one management command. A failure while no engine runs (it exited
285
+ * or never started) carries the engine's last standard-error lines.
286
+ */
287
+ async send(methodArg, paramsArg, optionsArg) {
288
+ try {
289
+ return await this.bridge.sendCommand(methodArg, paramsArg, optionsArg);
290
+ }
291
+ catch (error) {
292
+ if (!this.bridge.running)
293
+ attachNoSqlDbEngineStderrTail(error, this.stderrTail.snapshot());
294
+ throw error;
295
+ }
296
+ }
101
297
  /**
102
298
  * Spawn the Rust binary in management mode.
103
- * Returns true if the binary was found and spawned successfully.
299
+ * Returns true once the engine reported ready. Returns false when
300
+ * Smartrust's spawn() returned false: no engine was found, or the one found
301
+ * did not report ready within the bridge's limit. spawnFailureMessage then
302
+ * says what that means, as far as the bridge knows, and still says it if
303
+ * ending that engine fails and this throws instead. After any other
304
+ * outcome, including a throw on this spawn()'s own `timeoutMs` or `signal`,
305
+ * spawnFailureMessage is undefined.
104
306
  */
105
307
  async spawn(optionsArg) {
308
+ this.spawnRefusal = undefined;
106
309
  validateNoSqlDbManagementOperationOptions(optionsArg);
107
310
  if (optionsArg?.signal?.aborted) {
108
311
  throw new plugins.smartrust.RustBridgeRequestError('NoSQLDB Rust sidecar spawn was aborted before it started', {
@@ -113,6 +316,11 @@ export class RustDbBridge extends EventEmitter {
113
316
  }
114
317
  this.terminationConfirmed = false;
115
318
  this.terminationFailure = undefined;
319
+ this.stderrTail.clear();
320
+ const spawnStartedAt = performance.now();
321
+ // The previous engine's exit belongs to it, also when this spawn fails.
322
+ this.engineExit = null;
323
+ this.engineExitPromise = undefined;
116
324
  const spawnPromise = this.bridge.spawn();
117
325
  let timeout;
118
326
  let abortHandler;
@@ -138,7 +346,10 @@ export class RustDbBridge extends EventEmitter {
138
346
  });
139
347
  try {
140
348
  const spawned = await Promise.race([spawnPromise, cancellationPromise]);
349
+ if (spawned)
350
+ this.watchEngineExit();
141
351
  if (!spawned) {
352
+ this.spawnRefusal = describeRefusedSpawn(this.binaryPath, Math.round(performance.now() - spawnStartedAt));
142
353
  await this.terminate({ gracePeriodMs: 0 });
143
354
  }
144
355
  return spawned;
@@ -229,7 +440,7 @@ export class RustDbBridge extends EventEmitter {
229
440
  const request = normalizeNoSqlDbStorageRehearsalInput(inputArg);
230
441
  validateNoSqlDbManagementOperationOptions(optionsArg);
231
442
  try {
232
- return await this.bridge.sendCommand('createStoppedStorageRehearsal', { request, timeoutMs: optionsArg.timeoutMs }, optionsArg);
443
+ return await this.send('createStoppedStorageRehearsal', { request, timeoutMs: optionsArg.timeoutMs }, optionsArg);
233
444
  }
234
445
  catch (error) {
235
446
  await this.awaitManagementOperationTermination(error);
@@ -240,7 +451,7 @@ export class RustDbBridge extends EventEmitter {
240
451
  const input = normalizeLocalNoSqlDbStoppedStorageRootRelocationInput(inputArg);
241
452
  validateNoSqlDbManagementOperationOptions(optionsArg);
242
453
  try {
243
- return await this.bridge.sendCommand('relocateStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
454
+ return await this.send('relocateStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
244
455
  }
245
456
  catch (error) {
246
457
  await this.awaitManagementOperationTermination(error);
@@ -257,7 +468,7 @@ export class RustDbBridge extends EventEmitter {
257
468
  const input = normalizeStoppedStorageRootAlignmentInput(inputArg);
258
469
  validateNoSqlDbManagementOperationOptions(optionsArg);
259
470
  try {
260
- return await this.bridge.sendCommand(method, { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
471
+ return await this.send(method, { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
261
472
  }
262
473
  catch (error) {
263
474
  await this.awaitManagementOperationTermination(error);
@@ -268,7 +479,7 @@ export class RustDbBridge extends EventEmitter {
268
479
  const input = normalizeStoppedStorageRootInspectionInput(inputArg);
269
480
  validateNoSqlDbManagementOperationOptions(optionsArg);
270
481
  try {
271
- return await this.bridge.sendCommand('inspectStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
482
+ return await this.send('inspectStoppedStorageRoot', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
272
483
  }
273
484
  catch (error) {
274
485
  await this.awaitManagementOperationTermination(error);
@@ -284,7 +495,7 @@ export class RustDbBridge extends EventEmitter {
284
495
  timeoutMs: optionsArg?.timeoutMs,
285
496
  };
286
497
  try {
287
- return await this.bridge.sendCommand('inspectOfflinePhysicalNamespaces', params, optionsArg);
498
+ return await this.send('inspectOfflinePhysicalNamespaces', params, optionsArg);
288
499
  }
289
500
  catch (error) {
290
501
  await this.awaitManagementOperationTermination(error);
@@ -295,7 +506,7 @@ export class RustDbBridge extends EventEmitter {
295
506
  const input = normalizeLocalNoSqlDbOfflineInspectionInput(inputArg);
296
507
  validateNoSqlDbManagementOperationOptions(optionsArg);
297
508
  try {
298
- return await this.bridge.sendCommand('inspectOfflineStringValue', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
509
+ return await this.send('inspectOfflineStringValue', { ...input, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
299
510
  }
300
511
  catch (error) {
301
512
  await this.awaitManagementOperationTermination(error);
@@ -306,25 +517,29 @@ export class RustDbBridge extends EventEmitter {
306
517
  normalizeNoSqlDbFileStorageOptions(config);
307
518
  validateNoSqlDbManagementOperationOptions(optionsArg);
308
519
  try {
309
- return await this.bridge.sendCommand('start', { config, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
520
+ return await this.send('start', { config, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
310
521
  }
311
522
  catch (error) {
312
523
  await this.awaitManagementOperationTermination(error);
524
+ // The unknown-root refusal is told apart by its code, never by its message.
525
+ if (error instanceof Error && 'responseErrorCode' in error && error.responseErrorCode === 'UNKNOWN_ROOT') {
526
+ throw new NoSqlDbUnknownRootError({ cause: error });
527
+ }
313
528
  throw error;
314
529
  }
315
530
  }
316
531
  async stopDb() {
317
- await this.bridge.sendCommand('stop', {});
532
+ await this.send('stop', {});
318
533
  }
319
534
  async getStatus() {
320
- return await this.bridge.sendCommand('getStatus', {});
535
+ return await this.send('getStatus', {});
321
536
  }
322
537
  async getMetrics() {
323
- return this.bridge.sendCommand('getMetrics', {});
538
+ return this.send('getMetrics', {});
324
539
  }
325
540
  async getHealth(optionsArg) {
326
541
  try {
327
- return await this.bridge.sendCommand('getHealth', {}, optionsArg);
542
+ return await this.send('getHealth', {}, optionsArg);
328
543
  }
329
544
  catch (error) {
330
545
  await this.awaitManagementOperationTermination(error);
@@ -333,7 +548,7 @@ export class RustDbBridge extends EventEmitter {
333
548
  }
334
549
  async createDatabaseTenant(params) {
335
550
  try {
336
- return await this.bridge.sendCommand('createDatabaseTenant', params);
551
+ return await this.send('createDatabaseTenant', params);
337
552
  }
338
553
  catch (error) {
339
554
  throw normalizeNoSqlDbResourceFenceError(error);
@@ -341,7 +556,7 @@ export class RustDbBridge extends EventEmitter {
341
556
  }
342
557
  async ensureDatabaseTenant(params, optionsArg) {
343
558
  try {
344
- return await this.bridge.sendCommand('ensureDatabaseTenant', params, optionsArg);
559
+ return await this.send('ensureDatabaseTenant', params, optionsArg);
345
560
  }
346
561
  catch (error) {
347
562
  await this.awaitManagementOperationTermination(error);
@@ -350,7 +565,7 @@ export class RustDbBridge extends EventEmitter {
350
565
  }
351
566
  async attestDatabaseTenant(params, optionsArg) {
352
567
  try {
353
- return await this.bridge.sendCommand('attestDatabaseTenant', params, optionsArg);
568
+ return await this.send('attestDatabaseTenant', params, optionsArg);
354
569
  }
355
570
  catch (error) {
356
571
  await this.awaitManagementOperationTermination(error);
@@ -359,7 +574,7 @@ export class RustDbBridge extends EventEmitter {
359
574
  }
360
575
  async allocateDatabaseTenant(params, optionsArg) {
361
576
  try {
362
- return await this.bridge.sendCommand('allocateDatabaseTenant', params, optionsArg);
577
+ return await this.send('allocateDatabaseTenant', params, optionsArg);
363
578
  }
364
579
  catch (error) {
365
580
  await this.awaitManagementOperationTermination(error);
@@ -368,7 +583,7 @@ export class RustDbBridge extends EventEmitter {
368
583
  }
369
584
  async deleteDatabaseTenant(params, optionsArg) {
370
585
  try {
371
- return await this.bridge.sendCommand('deleteDatabaseTenant', params, optionsArg);
586
+ return await this.send('deleteDatabaseTenant', params, optionsArg);
372
587
  }
373
588
  catch (error) {
374
589
  await this.awaitManagementOperationTermination(error);
@@ -377,7 +592,7 @@ export class RustDbBridge extends EventEmitter {
377
592
  }
378
593
  async issueDatabaseAllocationReadAccessGrant(params, optionsArg) {
379
594
  try {
380
- return await this.bridge.sendCommand('issueDatabaseAllocationReadAccessGrant', params, optionsArg);
595
+ return await this.send('issueDatabaseAllocationReadAccessGrant', params, optionsArg);
381
596
  }
382
597
  catch (error) {
383
598
  await this.awaitManagementOperationTermination(error);
@@ -388,7 +603,7 @@ export class RustDbBridge extends EventEmitter {
388
603
  }
389
604
  async revokeDatabaseAllocationReadAccessGrant(params, optionsArg) {
390
605
  try {
391
- return await this.bridge.sendCommand('revokeDatabaseAllocationReadAccessGrant', params, optionsArg);
606
+ return await this.send('revokeDatabaseAllocationReadAccessGrant', params, optionsArg);
392
607
  }
393
608
  catch (error) {
394
609
  await this.awaitManagementOperationTermination(error);
@@ -398,18 +613,18 @@ export class RustDbBridge extends EventEmitter {
398
613
  }
399
614
  }
400
615
  async rotateDatabaseTenantPassword(params) {
401
- return this.bridge.sendCommand('rotateDatabaseTenantPassword', params);
616
+ return this.send('rotateDatabaseTenantPassword', params);
402
617
  }
403
618
  async listDatabaseTenants() {
404
- const result = await this.bridge.sendCommand('listDatabaseTenants', {});
619
+ const result = await this.send('listDatabaseTenants', {});
405
620
  return result.tenants;
406
621
  }
407
622
  async getDatabaseTenantDescriptor(params) {
408
- return this.bridge.sendCommand('getDatabaseTenantDescriptor', params);
623
+ return this.send('getDatabaseTenantDescriptor', params);
409
624
  }
410
625
  async getDatabaseResourceFenceState(params, optionsArg) {
411
626
  try {
412
- return await this.bridge.sendCommand('getDatabaseResourceFenceState', params, optionsArg);
627
+ return await this.send('getDatabaseResourceFenceState', params, optionsArg);
413
628
  }
414
629
  catch (error) {
415
630
  await this.awaitManagementOperationTermination(error);
@@ -418,7 +633,7 @@ export class RustDbBridge extends EventEmitter {
418
633
  }
419
634
  async exportDatabase(params, optionsArg) {
420
635
  try {
421
- return await this.bridge.sendCommand('exportDatabase', params, optionsArg);
636
+ return await this.send('exportDatabase', params, optionsArg);
422
637
  }
423
638
  catch (error) {
424
639
  await this.awaitManagementOperationTermination(error);
@@ -427,7 +642,7 @@ export class RustDbBridge extends EventEmitter {
427
642
  }
428
643
  async exportHeldDatabase(params, optionsArg) {
429
644
  try {
430
- return await this.bridge.sendCommand('exportHeldDatabase', params, optionsArg);
645
+ return await this.send('exportHeldDatabase', params, optionsArg);
431
646
  }
432
647
  catch (error) {
433
648
  await this.awaitManagementOperationTermination(error);
@@ -436,7 +651,7 @@ export class RustDbBridge extends EventEmitter {
436
651
  }
437
652
  async getDatabaseContentDigest(params, optionsArg) {
438
653
  try {
439
- return await this.bridge.sendCommand('getDatabaseContentDigest', params, optionsArg);
654
+ return await this.send('getDatabaseContentDigest', params, optionsArg);
440
655
  }
441
656
  catch (error) {
442
657
  await this.awaitManagementOperationTermination(error);
@@ -445,7 +660,7 @@ export class RustDbBridge extends EventEmitter {
445
660
  }
446
661
  async importDatabase(params, optionsArg) {
447
662
  try {
448
- return await this.bridge.sendCommand('importDatabase', { ...params, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
663
+ return await this.send('importDatabase', { ...params, timeoutMs: optionsArg?.timeoutMs }, optionsArg);
449
664
  }
450
665
  catch (error) {
451
666
  await this.awaitManagementOperationTermination(error);
@@ -454,7 +669,7 @@ export class RustDbBridge extends EventEmitter {
454
669
  }
455
670
  async commitDatabasePublication(params, optionsArg) {
456
671
  try {
457
- return await this.bridge.sendCommand('commitDatabasePublication', params, optionsArg);
672
+ return await this.send('commitDatabasePublication', params, optionsArg);
458
673
  }
459
674
  catch (error) {
460
675
  await this.awaitManagementOperationTermination(error);
@@ -462,23 +677,23 @@ export class RustDbBridge extends EventEmitter {
462
677
  }
463
678
  }
464
679
  async getOpLog(params = {}) {
465
- return this.bridge.sendCommand('getOpLog', params);
680
+ return this.send('getOpLog', params);
466
681
  }
467
682
  async getCommittedWrites(params) {
468
- return this.bridge.sendCommand('getCommittedWrites', params);
683
+ return this.send('getCommittedWrites', params);
469
684
  }
470
685
  async getOpLogStats() {
471
- return this.bridge.sendCommand('getOpLogStats', {});
686
+ return this.send('getOpLogStats', {});
472
687
  }
473
688
  async revertToSeq(seq, dryRun = false) {
474
- return this.bridge.sendCommand('revertToSeq', { seq, dryRun });
689
+ return this.send('revertToSeq', { seq, dryRun });
475
690
  }
476
691
  async getCollections(db) {
477
- const result = await this.bridge.sendCommand('getCollections', db ? { db } : {});
692
+ const result = await this.send('getCollections', db ? { db } : {});
478
693
  return result.collections;
479
694
  }
480
695
  async getDocuments(db, collection, limit = 50, skip = 0) {
481
- return this.bridge.sendCommand('getDocuments', { db, collection, limit, skip });
696
+ return this.send('getDocuments', { db, collection, limit, skip });
482
697
  }
483
698
  }
484
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5Q0FBeUMsRUFBcUssTUFBTSw2QkFBNkIsQ0FBQztBQUMzUCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQXVHLE1BQU0sc0JBQXNCLENBQUM7QUFDL04sT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wscUNBQXFDLEdBSXRDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsc0RBQXNELEdBR3ZELE1BQU0sOEJBQThCLENBQUM7QUF5SXRDLE1BQU0sT0FBTywwQ0FBMkMsU0FBUSxjQUFjO0lBQzVFLFlBQVksaUJBQTBCLEVBQUUsbUJBQTRCO1FBQ2xFLEtBQUssQ0FDSCxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLEVBQ3hDLGdGQUFnRixFQUNoRixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUE0QkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdB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
699
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5Q0FBeUMsRUFBcUssTUFBTSw2QkFBNkIsQ0FBQztBQUMzUCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQXVHLE1BQU0sc0JBQXNCLENBQUM7QUFDL04sT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQ0wscUNBQXFDLEdBSXRDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsc0RBQXNELEdBR3ZELE1BQU0sOEJBQThCLENBQUM7QUF5SXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFaEc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFpQixFQUFFLE9BQTBCO0lBQ3pGLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFB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