@powerhousedao/reactor 6.2.0-dev.3 → 6.2.0-dev.30

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.
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { A as parsePagingOptions, C as DuplicateManifestError, D as DocumentDeletedError, E as ModuleNotFoundError, O as DocumentNotFoundError, S as CollectionMembershipCache, T as InvalidModuleError, _ as KyselyWriteCache, a as createForwardingPoolInstrumentation, b as createConsistencyToken, c as DuplicateOperationError, d as KyselyKeyframeStore, f as DocumentModelRegistry, g as EventBus, h as KyselyExecutionScope, i as runMigrations, j as throwIfAborted, k as matchesScope, l as OptimisticLockError, m as driveCollectionId, n as REACTOR_SCHEMA, o as instrumentPgPool, p as SimpleJobExecutor, r as getMigrationStatus, s as KyselyOperationStore, t as DEFAULT_DRIVE_CONTAINER_TYPES, u as RevisionMismatchError, v as KyselyOperationIndex, w as DuplicateModuleError, x as createEmptyConsistencyToken, y as DocumentMetaCache } from "./drive-container-types-BNpMlgT_.js";
1
+ import { A as parsePagingOptions, C as DuplicateManifestError, D as DocumentDeletedError, E as ModuleNotFoundError, O as DocumentNotFoundError, S as CollectionMembershipCache, T as InvalidModuleError, _ as KyselyWriteCache, a as createForwardingPoolInstrumentation, b as createConsistencyToken, c as DuplicateOperationError, d as KyselyKeyframeStore, f as DocumentModelRegistry, g as EventBus, h as KyselyExecutionScope, i as runMigrations, j as throwIfAborted, k as matchesScope, l as OptimisticLockError, m as DriveCollectionId, n as REACTOR_SCHEMA, o as instrumentPgPool, p as SimpleJobExecutor, r as getMigrationStatus, s as KyselyOperationStore, t as DEFAULT_DRIVE_CONTAINER_TYPES, u as RevisionMismatchError, v as KyselyOperationIndex, w as DuplicateModuleError, x as createEmptyConsistencyToken, y as DocumentMetaCache } from "./drive-container-types-BxnXaOAp.js";
2
2
  import { n as ReactorEventTypes, t as EventBusAggregateError } from "./types-CxSpmNGK.js";
3
3
  import { i as WorkerInitFailedError, r as WorkerExitedError, t as WorkerAbortTimeoutError } from "./errors-D3S6Eysd.js";
4
4
  import { a as ReadModelCoordinator, i as KyselyDocumentView, n as ConsistencyTracker, o as BaseReadModel, r as makeConsistencyKey, t as KyselyDocumentIndexer } from "./document-indexer-B2iLRB0o.js";
5
5
  import { n as errorToInfo, r as sanitizeArg, t as createForwardingLogger } from "./forwarding-logger-BBkMSxuJ.js";
6
- import { t as workerEntryPath } from "./worker-SUoDhurA.js";
6
+ import { t as workerEntryPath } from "./worker-XYrQaEmt.js";
7
7
  import { actions, actions as documentActions, createPresignedHeader, generateId, hashDocumentStateForScope, replayDocument } from "@powerhousedao/shared/document-model";
8
8
  import { addFile, addFolder, copyNode, deleteNode, driveCreateDocument, generateNodesCopy, getDescendants, handleTargetNameCollisions, isFileNode, isFolderNode, moveNode, updateNode } from "@powerhousedao/shared/document-drive";
9
9
  import { v4 } from "uuid";
@@ -737,6 +737,14 @@ var ReactorClient = class {
737
737
  return await this.reactor.getByIdOrSlug(identifier, view, void 0, signal);
738
738
  }
739
739
  /**
740
+ * Resolves an identifier (id or slug) to the canonical document id, using the
741
+ * same lookup as the data path. Resolves against the "main" branch. Throws if
742
+ * the identifier cannot be resolved or is ambiguous.
743
+ */
744
+ async resolveIdOrSlug(identifier, signal) {
745
+ return this.documentView.resolveIdOrSlug(identifier, void 0, void 0, signal);
746
+ }
747
+ /**
740
748
  * Retrieves operations for a document
741
749
  */
742
750
  async getOperations(documentIdentifier, view, filter, paging, signal) {
@@ -1858,6 +1866,7 @@ var InMemoryJobTracker = class {
1858
1866
  if (!job) {
1859
1867
  this.jobs.set(jobId, {
1860
1868
  id: jobId,
1869
+ documentId: "",
1861
1870
  status: JobStatus.RUNNING,
1862
1871
  createdAtUtcIso: (/* @__PURE__ */ new Date()).toISOString(),
1863
1872
  consistencyToken: createEmptyConsistencyToken(),
@@ -1878,6 +1887,7 @@ var InMemoryJobTracker = class {
1878
1887
  if (!existing) {
1879
1888
  this.jobs.set(jobId, {
1880
1889
  id: jobId,
1890
+ documentId: job?.documentId ?? "",
1881
1891
  status: JobStatus.FAILED,
1882
1892
  createdAtUtcIso: (/* @__PURE__ */ new Date()).toISOString(),
1883
1893
  completedAtUtcIso: (/* @__PURE__ */ new Date()).toISOString(),
@@ -3295,6 +3305,20 @@ var GraphQLRequestError = class extends Error {
3295
3305
  this.statusCode = statusCode;
3296
3306
  }
3297
3307
  };
3308
+ /** Auth-rejection message fragments the switchboard emits. Shared with
3309
+ * reactor-api so server throws and this client check can't drift. */
3310
+ const DRIVE_AUTH_ERROR_MESSAGES = {
3311
+ forbidden: "Forbidden: insufficient permissions",
3312
+ authenticationRequired: "Forbidden: authentication required"
3313
+ };
3314
+ /** True when the remote rejected the caller as unauthenticated/unauthorized:
3315
+ * an HTTP 401/403, or a Forbidden/Unauthorized GraphQL error. */
3316
+ function isDriveAuthError(error) {
3317
+ if (!(error instanceof GraphQLRequestError)) return false;
3318
+ if (error.category === "http") return error.statusCode === 401 || error.statusCode === 403;
3319
+ if (error.category === "graphql") return Object.values(DRIVE_AUTH_ERROR_MESSAGES).some((m) => error.message.includes(m));
3320
+ return false;
3321
+ }
3298
3322
  var PollingChannelError = class extends Error {
3299
3323
  constructor(message) {
3300
3324
  super(message);
@@ -3792,12 +3816,27 @@ var IntervalPollTimer = class {
3792
3816
  let syncOpCounter = 0;
3793
3817
  /**
3794
3818
  * Serializes an action for GraphQL transport, converting signature tuples to strings.
3819
+ *
3820
+ * Only the fields declared by the GraphQL `ActionInput` type are forwarded. This
3821
+ * guards against stale runtime-only fields (e.g. a legacy `attachments` array on
3822
+ * operations persisted before the attachment-system removal) leaking into the
3823
+ * mutation variables, where the tightened schema would reject them.
3795
3824
  */
3796
3825
  function serializeAction(action) {
3826
+ const base = {
3827
+ id: action.id,
3828
+ type: action.type,
3829
+ timestampUtcMs: action.timestampUtcMs,
3830
+ input: action.input,
3831
+ scope: action.scope
3832
+ };
3797
3833
  const signer = action.context?.signer;
3798
- if (!signer?.signatures) return action;
3834
+ if (!signer?.signatures) return action.context ? {
3835
+ ...base,
3836
+ context: action.context
3837
+ } : base;
3799
3838
  return {
3800
- ...action,
3839
+ ...base,
3801
3840
  context: {
3802
3841
  ...action.context,
3803
3842
  signer: {
@@ -3931,7 +3970,10 @@ var GqlRequestChannel = class {
3931
3970
  isPushing = false;
3932
3971
  pendingDrain = false;
3933
3972
  receivingPages = false;
3973
+ isRecovering = false;
3934
3974
  connectionState = "connecting";
3975
+ /** Latest unrecoverable error was an auth rejection; cleared on connect. */
3976
+ requiresAuth = false;
3935
3977
  connectionStateCallbacks = /* @__PURE__ */ new Set();
3936
3978
  constructor(logger, channelId, remoteName, cursorStorage, config, operationIndex, pollTimer) {
3937
3979
  this.logger = logger;
@@ -4023,7 +4065,8 @@ var GqlRequestChannel = class {
4023
4065
  lastFailureUtcMs: this.lastFailureUtcMs ?? 0,
4024
4066
  pushBlocked: this.pushBlocked,
4025
4067
  pushFailureCount: this.pushFailureCount,
4026
- receivingPages: this.receivingPages
4068
+ receivingPages: this.receivingPages,
4069
+ requiresAuth: this.requiresAuth
4027
4070
  };
4028
4071
  }
4029
4072
  onConnectionStateChange(callback) {
@@ -4054,6 +4097,7 @@ var GqlRequestChannel = class {
4054
4097
  this.transitionConnectionState("connected");
4055
4098
  }
4056
4099
  transitionConnectionState(next) {
4100
+ if (next === "connected") this.requiresAuth = false;
4057
4101
  if (this.connectionState === next) return;
4058
4102
  this.connectionState = next;
4059
4103
  const snapshot = this.getConnectionState();
@@ -4128,6 +4172,7 @@ var GqlRequestChannel = class {
4128
4172
  this.logger.error("GqlChannel poll error (@FailureCount, @Classification): @Error", this.failureCount, classification, channelError);
4129
4173
  if (classification === "unrecoverable") {
4130
4174
  this.pollTimer.stop();
4175
+ this.requiresAuth = isDriveAuthError(err);
4131
4176
  this.transitionConnectionState("error");
4132
4177
  return true;
4133
4178
  }
@@ -4139,16 +4184,23 @@ var GqlRequestChannel = class {
4139
4184
  * Self-retries with backoff instead of restarting the poll timer on failure.
4140
4185
  */
4141
4186
  recoverFromChannelNotFound() {
4187
+ if (this.isRecovering) return;
4188
+ this.isRecovering = true;
4142
4189
  this.logger.info("GqlChannel @ChannelId not found on remote, re-registering...", this.channelId);
4143
4190
  this.pollTimer.stop();
4144
4191
  const attemptRecovery = (attempt) => {
4145
- if (this.isShutdown) return;
4192
+ if (this.isShutdown) {
4193
+ this.isRecovering = false;
4194
+ return;
4195
+ }
4146
4196
  this.touchRemoteChannel().then(({ ackOrdinal }) => {
4147
4197
  this.logger.info("GqlChannel @ChannelId re-registered successfully", this.channelId);
4198
+ this.isRecovering = false;
4148
4199
  this.failureCount = 0;
4149
4200
  if (ackOrdinal > 0) trimMailboxFromAckOrdinal(this.outbox, ackOrdinal);
4150
4201
  this.pollTimer.start();
4151
4202
  this.transitionConnectionState("connected");
4203
+ this.resumePushAfterRecovery();
4152
4204
  }).catch((recoveryError) => {
4153
4205
  const err = recoveryError instanceof Error ? recoveryError : new Error(String(recoveryError));
4154
4206
  const classification = this.classifyError(err);
@@ -4156,6 +4208,8 @@ var GqlRequestChannel = class {
4156
4208
  this.failureCount++;
4157
4209
  this.lastFailureUtcMs = Date.now();
4158
4210
  if (classification === "unrecoverable") {
4211
+ this.isRecovering = false;
4212
+ this.requiresAuth = isDriveAuthError(err);
4159
4213
  this.transitionConnectionState("error");
4160
4214
  return;
4161
4215
  }
@@ -4167,6 +4221,22 @@ var GqlRequestChannel = class {
4167
4221
  attemptRecovery(1);
4168
4222
  }
4169
4223
  /**
4224
+ * Resumes pushing outbox items that were blocked while the channel was being
4225
+ * recreated. Called after a successful re-registration.
4226
+ */
4227
+ resumePushAfterRecovery() {
4228
+ if (this.isShutdown) return;
4229
+ if (!this.pushBlocked) return;
4230
+ if (this.pushRetryTimer) {
4231
+ clearTimeout(this.pushRetryTimer);
4232
+ this.pushRetryTimer = null;
4233
+ }
4234
+ this.pushBlocked = false;
4235
+ this.pushFailureCount = 0;
4236
+ const items = this.outbox.items;
4237
+ if (items.length > 0) this.attemptPush([...items]);
4238
+ }
4239
+ /**
4170
4240
  * Queries the remote GraphQL endpoint for sync envelopes.
4171
4241
  */
4172
4242
  async pollSyncEnvelopes(ackOrdinal, latestOrdinal) {
@@ -4192,13 +4262,6 @@ var GqlRequestChannel = class {
4192
4262
  timestampUtcMs
4193
4263
  input
4194
4264
  scope
4195
- attachments {
4196
- data
4197
- mimeType
4198
- hash
4199
- extension
4200
- fileName
4201
- }
4202
4265
  context {
4203
4266
  signer {
4204
4267
  user {
@@ -4264,7 +4327,7 @@ var GqlRequestChannel = class {
4264
4327
  async touchRemoteChannel() {
4265
4328
  let sinceTimestampUtcMs = "0";
4266
4329
  try {
4267
- const result = await this.operationIndex.getLatestTimestampForCollection(this.config.collectionId);
4330
+ const result = await this.operationIndex.getLatestTimestampForCollection(this.config.collectionId.key);
4268
4331
  if (result) sinceTimestampUtcMs = result;
4269
4332
  } catch {}
4270
4333
  const mutation = `
@@ -4278,7 +4341,7 @@ var GqlRequestChannel = class {
4278
4341
  const variables = { input: {
4279
4342
  id: this.channelId,
4280
4343
  name: this.channelId,
4281
- collectionId: this.config.collectionId,
4344
+ collectionId: this.config.collectionId.key,
4282
4345
  filter: {
4283
4346
  documentId: this.config.filter.documentId,
4284
4347
  scope: this.config.filter.scope,
@@ -4309,6 +4372,12 @@ var GqlRequestChannel = class {
4309
4372
  this.pendingDrain = false;
4310
4373
  if (this.isShutdown) return;
4311
4374
  const err = error instanceof Error ? error : new Error(String(error));
4375
+ if (err.message.includes("Channel not found")) {
4376
+ this.pushBlocked = true;
4377
+ this.transitionConnectionState("reconnecting");
4378
+ this.recoverFromChannelNotFound();
4379
+ return;
4380
+ }
4312
4381
  if (this.classifyError(err) === "recoverable") {
4313
4382
  this.pushFailureCount++;
4314
4383
  this.pushBlocked = true;
@@ -4320,6 +4389,7 @@ var GqlRequestChannel = class {
4320
4389
  for (const syncOp of syncOps) syncOp.failed(channelError);
4321
4390
  this.deadLetter.add(...syncOps);
4322
4391
  this.outbox.remove(...syncOps);
4392
+ this.requiresAuth = isDriveAuthError(err);
4323
4393
  this.transitionConnectionState("error");
4324
4394
  }
4325
4395
  });
@@ -4612,7 +4682,8 @@ var GqlResponseChannel = class {
4612
4682
  lastFailureUtcMs: 0,
4613
4683
  pushBlocked: false,
4614
4684
  pushFailureCount: 0,
4615
- receivingPages: false
4685
+ receivingPages: false,
4686
+ requiresAuth: false
4616
4687
  };
4617
4688
  }
4618
4689
  onConnectionStateChange(callback) {
@@ -4811,7 +4882,7 @@ function rowToRemoteRecord(row) {
4811
4882
  return {
4812
4883
  id: row.channel_id,
4813
4884
  name: row.name,
4814
- collectionId: row.collection_id,
4885
+ collectionId: DriveCollectionId.fromKey(row.collection_id),
4815
4886
  channelConfig: {
4816
4887
  type: row.channel_type,
4817
4888
  parameters: row.channel_parameters ?? {}
@@ -4841,7 +4912,7 @@ function rowToRemoteRecord(row) {
4841
4912
  function remoteRecordToRow(remote) {
4842
4913
  return {
4843
4914
  name: remote.name,
4844
- collection_id: remote.collectionId,
4915
+ collection_id: remote.collectionId.key,
4845
4916
  channel_type: remote.channelConfig.type,
4846
4917
  channel_id: remote.id,
4847
4918
  remote_name: remote.name,
@@ -4994,7 +5065,7 @@ var BatchAggregator = class {
4994
5065
  if (!this.driveContainerTypes.has(op.context.documentType)) continue;
4995
5066
  const input = action.input;
4996
5067
  if (!input?.sourceId || !input.targetId) continue;
4997
- const collectionId = driveCollectionId(op.context.branch, input.sourceId);
5068
+ const collectionId = DriveCollectionId.forDrive(input.sourceId, op.context.branch).key;
4998
5069
  if (!(input.targetId in mergedMemberships)) mergedMemberships[input.targetId] = [];
4999
5070
  if (!mergedMemberships[input.targetId].includes(collectionId)) mergedMemberships[input.targetId].push(collectionId);
5000
5071
  }
@@ -5361,7 +5432,7 @@ var SyncManager = class {
5361
5432
  }, options = { sinceTimestampUtcMs: "0" }, id) {
5362
5433
  if (this.isShutdown) throw new Error("SyncManager is shutdown and cannot add remotes");
5363
5434
  if (this.remotes.has(name)) throw new Error(`Remote with name '${name}' already exists`);
5364
- this.logger.debug("Adding remote (@name, @collectionId, @channelConfig, @filter, @options, @id)", name, collectionId, channelConfig, filter, options, id);
5435
+ this.logger.debug("Adding remote (@name, @collectionId, @channelConfig, @filter, @options, @id)", name, collectionId.key, channelConfig, filter, options, id);
5365
5436
  const remoteId = id ?? crypto.randomUUID();
5366
5437
  const remoteRecord = {
5367
5438
  id: remoteId,
@@ -5519,7 +5590,7 @@ var SyncManager = class {
5519
5590
  this.logger.debug("Loaded @count persisted dead letters for remote @name", records.length, remote.name);
5520
5591
  }
5521
5592
  getRemotesForCollection(collectionId) {
5522
- return Array.from(this.remotes.values()).filter((remote) => remote.collectionId === collectionId);
5593
+ return Array.from(this.remotes.values()).filter((remote) => remote.collectionId.key === collectionId);
5523
5594
  }
5524
5595
  async processCompleteBatch(batch) {
5525
5596
  if (this.isShutdown) return;
@@ -5702,7 +5773,7 @@ var SyncManager = class {
5702
5773
  }
5703
5774
  remote.channel.outbox.add(...syncOps);
5704
5775
  };
5705
- let page = await this.operationIndex.find(remote.collectionId, ackOrdinal, { excludeSourceRemote: remote.name }, void 0, composedSignal);
5776
+ let page = await this.operationIndex.find(remote.collectionId.key, ackOrdinal, { excludeSourceRemote: remote.name }, void 0, composedSignal);
5706
5777
  let carry = [];
5707
5778
  let hasMore;
5708
5779
  do {
@@ -6021,6 +6092,7 @@ var Reactor = class {
6021
6092
  };
6022
6093
  const jobInfo = {
6023
6094
  id: jobId,
6095
+ documentId: job.documentId,
6024
6096
  status: JobStatus.PENDING,
6025
6097
  createdAtUtcIso,
6026
6098
  consistencyToken: {
@@ -6059,6 +6131,7 @@ var Reactor = class {
6059
6131
  };
6060
6132
  const jobInfo = {
6061
6133
  id: jobId,
6134
+ documentId: job.documentId,
6062
6135
  status: JobStatus.PENDING,
6063
6136
  createdAtUtcIso,
6064
6137
  consistencyToken: {
@@ -6096,6 +6169,7 @@ var Reactor = class {
6096
6169
  };
6097
6170
  const jobInfo = {
6098
6171
  id: jobId,
6172
+ documentId: job.documentId,
6099
6173
  status: JobStatus.PENDING,
6100
6174
  createdAtUtcIso,
6101
6175
  consistencyToken: {
@@ -6135,6 +6209,7 @@ var Reactor = class {
6135
6209
  };
6136
6210
  const jobInfo = {
6137
6211
  id: jobId,
6212
+ documentId: job.documentId,
6138
6213
  status: JobStatus.PENDING,
6139
6214
  createdAtUtcIso,
6140
6215
  consistencyToken: {
@@ -6169,6 +6244,7 @@ var Reactor = class {
6169
6244
  for (const jobPlan of request.jobs) {
6170
6245
  const jobInfo = {
6171
6246
  id: planKeyToJobId.get(jobPlan.key),
6247
+ documentId: jobPlan.documentId,
6172
6248
  status: JobStatus.PENDING,
6173
6249
  createdAtUtcIso,
6174
6250
  consistencyToken: {
@@ -6238,6 +6314,7 @@ var Reactor = class {
6238
6314
  for (const jobPlan of request.jobs) {
6239
6315
  const jobInfo = {
6240
6316
  id: planKeyToJobId.get(jobPlan.key),
6317
+ documentId: jobPlan.documentId,
6241
6318
  status: JobStatus.PENDING,
6242
6319
  createdAtUtcIso,
6243
6320
  consistencyToken: {
@@ -6310,6 +6387,7 @@ var Reactor = class {
6310
6387
  const now = (/* @__PURE__ */ new Date()).toISOString();
6311
6388
  return Promise.resolve({
6312
6389
  id: jobId,
6390
+ documentId: "",
6313
6391
  status: JobStatus.FAILED,
6314
6392
  createdAtUtcIso: now,
6315
6393
  completedAtUtcIso: now,
@@ -6785,7 +6863,7 @@ var ReactorBuilder = class {
6785
6863
  const [{ WorkerHandle }, { createThreadTransport }, { workerEntryPath }] = await Promise.all([
6786
6864
  import("./worker-handle-B1w03nRA.js"),
6787
6865
  import("./transport-ByGviWdZ.js"),
6788
- import("./worker-SUoDhurA.js").then((n) => n.n)
6866
+ import("./worker-XYrQaEmt.js").then((n) => n.n)
6789
6867
  ]);
6790
6868
  const db = this.workerDbConfig;
6791
6869
  const signatureVerifier = this.workerSignatureVerifierSpec;
@@ -7152,6 +7230,6 @@ var DocumentIntegrityService = class {
7152
7230
  }
7153
7231
  };
7154
7232
  //#endregion
7155
- export { BaseReadModel, ChannelError, ChannelErrorSource, ChannelScheme, ConsistencyTracker, DEFAULT_DRIVE_CONTAINER_TYPES, DefaultSubscriptionErrorHandler, DocumentChangeType, DocumentIntegrityService, DocumentModelRegistry, DocumentModelResolver, DriveClient, DuplicateManifestError, DuplicateModuleError, DuplicateOperationError, EventBus, EventBusAggregateError, GqlRequestChannel, GqlRequestChannelFactory, GqlResponseChannel, GqlResponseChannelFactory, SimpleJobExecutor as InMemoryJobExecutor, SimpleJobExecutor, InMemoryJobTracker, InMemoryQueue, IntervalPollTimer, InvalidModuleError, JobAwaiter, JobExecutorEventTypes, JobStatus, KyselyDocumentIndexer, KyselyDocumentView, KyselyKeyframeStore, KyselyOperationStore, KyselySyncCursorStorage, KyselySyncRemoteStorage, KyselyWriteCache, Mailbox, ModuleNotFoundError, NullDocumentModelResolver, OptimisticLockError, PollBehavior, PollingChannelError, ProcessorManager, PropagationMode, QueueEventTypes, REACTOR_SCHEMA, Reactor, ReactorBuilder, ReactorClient, ReactorClientBuilder, ReactorEventTypes, ReactorSubscriptionManager, ReadModelCoordinator, RelationalDbProcessor, RelationshipChangeType, RevisionMismatchError, SimpleJobExecutorManager, SyncBuilder, SyncEventTypes, SyncOperation, SyncOperationAggregateError, SyncOperationStatus, SyncStatus, SyncStatusTracker, addRelationshipAction, batchOperationsByDocument, consolidateSyncOperations, createDocumentAction, createForwardingLogger, createMutableShutdownStatus, createRelationalDb, deleteDocumentAction, documentActions, driveCollectionId, driveIdFromUrl, envelopesToSyncOperations, errorToInfo, getMigrationStatus, instrumentPgPool, makeConsistencyKey, parseDriveUrl, parsePagingOptions, removeRelationshipAction, runMigrations, sanitizeArg, trimMailboxFromAckOrdinal, updateRelationshipAction, upgradeDocumentAction, workerEntryPath };
7233
+ export { BaseReadModel, ChannelError, ChannelErrorSource, ChannelScheme, ConsistencyTracker, DEFAULT_DRIVE_CONTAINER_TYPES, DRIVE_AUTH_ERROR_MESSAGES, DefaultSubscriptionErrorHandler, DocumentChangeType, DocumentIntegrityService, DocumentModelRegistry, DocumentModelResolver, DriveClient, DriveCollectionId, DuplicateManifestError, DuplicateModuleError, DuplicateOperationError, EventBus, EventBusAggregateError, GqlRequestChannel, GqlRequestChannelFactory, GqlResponseChannel, GqlResponseChannelFactory, SimpleJobExecutor as InMemoryJobExecutor, SimpleJobExecutor, InMemoryJobTracker, InMemoryQueue, IntervalPollTimer, InvalidModuleError, JobAwaiter, JobExecutorEventTypes, JobStatus, KyselyDocumentIndexer, KyselyDocumentView, KyselyKeyframeStore, KyselyOperationStore, KyselySyncCursorStorage, KyselySyncRemoteStorage, KyselyWriteCache, Mailbox, ModuleNotFoundError, NullDocumentModelResolver, OptimisticLockError, PollBehavior, PollingChannelError, ProcessorManager, PropagationMode, QueueEventTypes, REACTOR_SCHEMA, Reactor, ReactorBuilder, ReactorClient, ReactorClientBuilder, ReactorEventTypes, ReactorSubscriptionManager, ReadModelCoordinator, RelationalDbProcessor, RelationshipChangeType, RevisionMismatchError, SimpleJobExecutorManager, SyncBuilder, SyncEventTypes, SyncOperation, SyncOperationAggregateError, SyncOperationStatus, SyncStatus, SyncStatusTracker, addRelationshipAction, batchOperationsByDocument, consolidateSyncOperations, createDocumentAction, createForwardingLogger, createMutableShutdownStatus, createRelationalDb, deleteDocumentAction, documentActions, driveIdFromUrl, envelopesToSyncOperations, errorToInfo, getMigrationStatus, instrumentPgPool, isDriveAuthError, makeConsistencyKey, parseDriveUrl, parsePagingOptions, removeRelationshipAction, runMigrations, sanitizeArg, trimMailboxFromAckOrdinal, updateRelationshipAction, upgradeDocumentAction, workerEntryPath };
7156
7234
 
7157
7235
  //# sourceMappingURL=index.js.map