document-drive 1.29.4-dev.3 → 1.29.4-dev.5

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.
@@ -5,11 +5,16 @@ import { childLogger } from "#utils/logger";
5
5
  import { generateUUID } from "#utils/misc";
6
6
  import { gql } from "graphql-request";
7
7
  const MAX_REVISIONS_PER_ACK = 100;
8
+ // lazily create the static logger so the logging system has time to read
9
+ // configuration values for setting log level
10
+ let _staticLogger;
11
+ const staticLogger = () => {
12
+ if (!_staticLogger) {
13
+ _staticLogger = childLogger(["PullResponderTransmitter", "static"]);
14
+ }
15
+ return _staticLogger;
16
+ };
8
17
  export class PullResponderTransmitter {
9
- static staticLogger = childLogger([
10
- "PullResponderTransmitter",
11
- "static",
12
- ]);
13
18
  logger = childLogger([
14
19
  "PullResponderTransmitter",
15
20
  Math.floor(Math.random() * 999).toString(),
@@ -59,16 +64,22 @@ export class PullResponderTransmitter {
59
64
  }
60
65
  return success;
61
66
  }
62
- static async registerPullResponder(driveId, url, filter) {
63
- PullResponderTransmitter.staticLogger.verbose(`registerPullResponder(url: ${url})`, filter);
67
+ static async registerPullResponder(driveId, url, filter, listenerId) {
68
+ staticLogger().verbose(`registerPullResponder(url: ${url})`, filter);
64
69
  // graphql request to switchboard
65
70
  const result = await requestGraphql(url, gql `
66
- mutation registerPullResponderListener($filter: InputListenerFilter!) {
67
- registerPullResponderListener(filter: $filter) {
71
+ mutation registerPullResponderListener(
72
+ $filter: InputListenerFilter!
73
+ $listenerId: String
74
+ ) {
75
+ registerPullResponderListener(
76
+ filter: $filter
77
+ listenerId: $listenerId
78
+ ) {
68
79
  listenerId
69
80
  }
70
81
  }
71
- `, { filter });
82
+ `, { filter, listenerId });
72
83
  const error = result.errors?.at(0);
73
84
  if (error) {
74
85
  throw error;
@@ -79,7 +90,7 @@ export class PullResponderTransmitter {
79
90
  return result.registerPullResponderListener.listenerId;
80
91
  }
81
92
  static async pullStrands(driveId, url, listenerId, options) {
82
- this.staticLogger.verbose(`[SYNC DEBUG] PullResponderTransmitter.pullStrands called for drive: ${driveId}, url: ${url}, listener: ${listenerId}, options: ${JSON.stringify(options || {})}`);
93
+ staticLogger().verbose(`[SYNC DEBUG] PullResponderTransmitter.pullStrands called for drive: ${driveId}, url: ${url}, listener: ${listenerId}, options: ${JSON.stringify(options || {})}`);
83
94
  const result = await requestGraphql(url, gql `
84
95
  query strands($listenerId: ID!) {
85
96
  system {
@@ -119,11 +130,11 @@ export class PullResponderTransmitter {
119
130
  `, { listenerId });
120
131
  const error = result.errors?.at(0);
121
132
  if (error) {
122
- this.staticLogger.verbose(`[SYNC DEBUG] Error pulling strands for drive: ${driveId}, listener: ${listenerId}, error: ${JSON.stringify(error)}`);
133
+ staticLogger().verbose(`[SYNC DEBUG] Error pulling strands for drive: ${driveId}, listener: ${listenerId}, error: ${JSON.stringify(error)}`);
123
134
  throw error;
124
135
  }
125
136
  if (!result.system) {
126
- this.staticLogger.verbose(`[SYNC DEBUG] No system data returned when pulling strands for drive: ${driveId}, listener: ${listenerId}`);
137
+ staticLogger().verbose(`[SYNC DEBUG] No system data returned when pulling strands for drive: ${driveId}, listener: ${listenerId}`);
127
138
  return [];
128
139
  }
129
140
  const strands = result.system.sync.strands.map((s) => ({
@@ -133,21 +144,21 @@ export class PullResponderTransmitter {
133
144
  input: JSON.parse(o.input),
134
145
  })),
135
146
  }));
136
- this.staticLogger.verbose(`[SYNC DEBUG] PullResponderTransmitter.pullStrands returning ${strands.length} strands for drive: ${driveId}, listener: ${listenerId}`);
147
+ staticLogger().verbose(`[SYNC DEBUG] PullResponderTransmitter.pullStrands returning ${strands.length} strands for drive: ${driveId}, listener: ${listenerId}`);
137
148
  if (strands.length > 0) {
138
- this.staticLogger.verbose(`[SYNC DEBUG] Strands being returned: ${strands.map((s) => `${s.documentId}:${s.scope}`).join(", ")}`);
149
+ staticLogger().verbose(`[SYNC DEBUG] Strands being returned: ${strands.map((s) => `${s.documentId}:${s.scope}`).join(", ")}`);
139
150
  }
140
151
  return strands;
141
152
  }
142
153
  static async acknowledgeStrands(url, listenerId, revisions) {
143
- this.staticLogger.verbose(`acknowledgeStrands(url: ${url}, listener: ${listenerId})`, revisions);
154
+ staticLogger().verbose(`acknowledgeStrands(url: ${url}, listener: ${listenerId})`, revisions);
144
155
  // split revisions into chunks
145
156
  const chunks = [];
146
157
  for (let i = 0; i < revisions.length; i += MAX_REVISIONS_PER_ACK) {
147
158
  chunks.push(revisions.slice(i, i + MAX_REVISIONS_PER_ACK));
148
159
  }
149
160
  if (chunks.length > 1) {
150
- this.staticLogger.verbose(`Breaking strand acknowledgement into ${chunks.length} chunks...`);
161
+ staticLogger().verbose(`Breaking strand acknowledgement into ${chunks.length} chunks...`);
151
162
  }
152
163
  // order does not matter, we can send out requests in parallel
153
164
  const results = await Promise.allSettled(chunks.map(async (chunk) => {
@@ -182,31 +193,31 @@ export class PullResponderTransmitter {
182
193
  * Because of this, `onError` _may be called multiple times_.
183
194
  */
184
195
  static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
185
- this.staticLogger.verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
186
- this.staticLogger.info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
196
+ staticLogger().verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
197
+ staticLogger().info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
187
198
  const { url } = trigger.data;
188
199
  let strands;
189
200
  let error;
201
+ const listenerId = trigger.data.listenerId;
190
202
  try {
191
- strands = await PullResponderTransmitter.pullStrands(driveId, url, trigger.data.listenerId);
203
+ strands = await PullResponderTransmitter.pullStrands(driveId, url, listenerId);
192
204
  }
193
205
  catch (e) {
194
206
  error = e;
195
- const errors = error.response.errors;
196
- for (const error of errors) {
197
- if (error.message === "Listener not found") {
198
- this.staticLogger.verbose(`[SYNC DEBUG] Auto-registering pull responder for drive: ${driveId}`);
199
- // register a new pull responder
200
- const listenerId = await PullResponderTransmitter.registerPullResponder(trigger.driveId, url, trigger.filter);
201
- // update the trigger with the new listenerId
202
- trigger.data.listenerId = listenerId;
207
+ const graphqlError = error;
208
+ const errors = graphqlError.response?.errors ?? [];
209
+ for (const err of errors) {
210
+ if (err.message === "Listener not found") {
211
+ staticLogger().verbose(`[SYNC DEBUG] Auto-registering pull responder for drive: ${driveId}`);
212
+ // register a new pull responder with this id
213
+ await PullResponderTransmitter.registerPullResponder(trigger.driveId, url, trigger.filter, listenerId);
203
214
  // try again
204
215
  try {
205
216
  strands = await PullResponderTransmitter.pullStrands(driveId, url, listenerId);
206
- this.staticLogger.verbose(`Successfully auto-registerd and pulled strands for drive: ${driveId}, listenerId: ${listenerId}`);
217
+ staticLogger().verbose(`Successfully auto-registered and pulled strands for drive: ${driveId}, listenerId: ${listenerId}`);
207
218
  }
208
219
  catch (error) {
209
- this.staticLogger.error(`Could not resolve 'Listener not found' error by registering a new pull responder for drive: ${driveId}, listenerId: ${listenerId}: ${error}`);
220
+ staticLogger().error(`Could not resolve 'Listener not found' error by registering a new pull responder for drive: ${driveId}, listenerId: ${listenerId}: ${error}`);
210
221
  onError(error);
211
222
  return;
212
223
  }
@@ -215,24 +226,24 @@ export class PullResponderTransmitter {
215
226
  }
216
227
  }
217
228
  if (!strands) {
218
- this.staticLogger.error(`Error pulling strands for drive, and could not auto-register: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
229
+ staticLogger().error(`Error pulling strands for drive, and could not auto-register: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
219
230
  onError(error);
220
231
  return;
221
232
  }
222
233
  // if there are no new strands then do nothing
223
234
  if (!strands.length) {
224
- this.staticLogger.verbose(`[SYNC DEBUG] No strands returned in pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
235
+ staticLogger().verbose(`[SYNC DEBUG] No strands returned in pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
225
236
  try {
226
237
  onRevisions?.([]);
227
238
  }
228
239
  catch (error) {
229
- this.staticLogger.error(`Error calling onRevisions for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
240
+ staticLogger().error(`Error calling onRevisions for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
230
241
  // pass the error to the caller
231
242
  onError(error);
232
243
  }
233
244
  return;
234
245
  }
235
- this.staticLogger.verbose(`[SYNC DEBUG] Processing ${strands.length} strands in pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
246
+ staticLogger().verbose(`[SYNC DEBUG] Processing ${strands.length} strands in pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
236
247
  const listenerRevisions = [];
237
248
  // todo: evaluate whether or not we can process strands in parallel
238
249
  for (const strand of strands) {
@@ -241,7 +252,7 @@ export class PullResponderTransmitter {
241
252
  scope: strand.scope,
242
253
  branch: strand.branch,
243
254
  }));
244
- this.staticLogger.verbose(`[SYNC DEBUG] Processing strand for drive: ${strand.driveId}, document: ${strand.documentId}, scope: ${strand.scope}, with ${operations.length} operations`);
255
+ staticLogger().verbose(`[SYNC DEBUG] Processing strand for drive: ${strand.driveId}, document: ${strand.documentId}, scope: ${strand.scope}, with ${operations.length} operations`);
245
256
  let error = undefined;
246
257
  try {
247
258
  const result = await onStrandUpdate(strand, {
@@ -253,7 +264,7 @@ export class PullResponderTransmitter {
253
264
  }
254
265
  }
255
266
  catch (e) {
256
- this.staticLogger.error(`Error processing strand for drive: ${strand.driveId}, document: ${strand.documentId}, scope: ${strand.scope}, with ${operations.length} operations: ${e}`);
267
+ staticLogger().error(`Error processing strand for drive: ${strand.driveId}, document: ${strand.documentId}, scope: ${strand.scope}, with ${operations.length} operations: ${e}`);
257
268
  error = e;
258
269
  onError(error);
259
270
  // continue
@@ -272,17 +283,17 @@ export class PullResponderTransmitter {
272
283
  error,
273
284
  });
274
285
  }
275
- this.staticLogger.verbose("Processed strands...");
286
+ staticLogger().verbose("Processed strands...");
276
287
  // do not let a listener kill the pull loop
277
288
  try {
278
289
  onRevisions?.(listenerRevisions);
279
290
  }
280
291
  catch (error) {
281
- this.staticLogger.error(`Error calling onRevisions for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
292
+ staticLogger().error(`Error calling onRevisions for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
282
293
  // pass the error to the caller
283
294
  onError(error);
284
295
  }
285
- this.staticLogger.verbose(`[SYNC DEBUG] Acknowledging ${listenerRevisions.length} strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
296
+ staticLogger().verbose(`[SYNC DEBUG] Acknowledging ${listenerRevisions.length} strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
286
297
  let success = false;
287
298
  try {
288
299
  await PullResponderTransmitter.acknowledgeStrands(url, trigger.data.listenerId, listenerRevisions.map((revision) => {
@@ -292,28 +303,28 @@ export class PullResponderTransmitter {
292
303
  success = true;
293
304
  }
294
305
  catch (error) {
295
- this.staticLogger.error(`Error acknowledging strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
306
+ staticLogger().error(`Error acknowledging strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
296
307
  // pass the error to the caller
297
308
  onError(error);
298
309
  }
299
310
  if (success) {
300
- this.staticLogger.verbose(`[SYNC DEBUG] Successfully acknowledged strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
311
+ staticLogger().verbose(`[SYNC DEBUG] Successfully acknowledged strands for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
301
312
  }
302
313
  else {
303
- this.staticLogger.error("Failed to acknowledge strands");
314
+ staticLogger().error("Failed to acknowledge strands");
304
315
  }
305
316
  // let this throw separately
306
317
  try {
307
318
  onAcknowledge?.(success);
308
319
  }
309
320
  catch (error) {
310
- this.staticLogger.error(`Error calling onAcknowledge for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
321
+ staticLogger().error(`Error calling onAcknowledge for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
311
322
  // pass the error to the caller
312
323
  onError(error);
313
324
  }
314
325
  }
315
326
  static setupPull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
316
- this.staticLogger.verbose(`[SYNC DEBUG] PullResponderTransmitter.setupPull initiated for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
327
+ staticLogger().verbose(`[SYNC DEBUG] PullResponderTransmitter.setupPull initiated for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
317
328
  const { interval } = trigger.data;
318
329
  let loopInterval = PULL_DRIVE_INTERVAL;
319
330
  if (interval) {
@@ -327,25 +338,25 @@ export class PullResponderTransmitter {
327
338
  // ignore invalid interval
328
339
  }
329
340
  }
330
- this.staticLogger.verbose(`[SYNC DEBUG] Pull interval set to ${loopInterval}ms for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
341
+ staticLogger().verbose(`[SYNC DEBUG] Pull interval set to ${loopInterval}ms for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
331
342
  let isCancelled = false;
332
343
  let timeout;
333
344
  const executeLoop = async () => {
334
345
  while (!isCancelled) {
335
- this.staticLogger.verbose(`[SYNC DEBUG] Starting pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
346
+ staticLogger().verbose(`[SYNC DEBUG] Starting pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
336
347
  await this.executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge);
337
- this.staticLogger.verbose(`[SYNC DEBUG] Completed pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}, waiting ${loopInterval}ms for next cycle`);
348
+ staticLogger().verbose(`[SYNC DEBUG] Completed pull cycle for drive: ${driveId}, listenerId: ${trigger.data.listenerId}, waiting ${loopInterval}ms for next cycle`);
338
349
  await new Promise((resolve) => {
339
- this.staticLogger.verbose(`Scheduling next pull in ${loopInterval} ms`);
350
+ staticLogger().verbose(`Scheduling next pull in ${loopInterval} ms`);
340
351
  timeout = setTimeout(resolve, loopInterval);
341
352
  });
342
353
  }
343
354
  };
344
355
  executeLoop().catch((error) => {
345
- this.staticLogger.error(`Error in executeLoop for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
356
+ staticLogger().error(`Error in executeLoop for drive: ${driveId}, listenerId: ${trigger.data.listenerId}: ${error}`);
346
357
  });
347
358
  return () => {
348
- this.staticLogger.verbose(`[SYNC DEBUG] Cancelling pull loop for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
359
+ staticLogger().verbose(`[SYNC DEBUG] Cancelling pull loop for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
349
360
  isCancelled = true;
350
361
  if (timeout !== undefined) {
351
362
  clearTimeout(timeout);
@@ -353,7 +364,7 @@ export class PullResponderTransmitter {
353
364
  };
354
365
  }
355
366
  static async createPullResponderTrigger(driveId, url, options) {
356
- this.staticLogger.verbose(`createPullResponderTrigger(drive: ${driveId}, url: ${url})`);
367
+ staticLogger().verbose(`createPullResponderTrigger(drive: ${driveId}, url: ${url})`);
357
368
  const { pullFilter, pullInterval } = options;
358
369
  const filter = pullFilter ?? {
359
370
  documentId: ["*"],
@@ -1,4 +1,4 @@
1
- import { ListenerFilter, type PullResponderTriggerData, type Trigger } from "#drive-document-model/gen/types";
1
+ import { type ListenerFilter, type PullResponderTriggerData, type Trigger } from "#drive-document-model/gen/types";
2
2
  import { type ListenerRevision, type StrandUpdate } from "#server/types";
3
3
  export type StrandUpdateSource = {
4
4
  type: "local";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CACP,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AACD,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,OAAO,IAAI,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CACP,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AACD,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,OAAO,IAAI,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/server/sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,uBAAuB;IAM1E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,OAAO,CAAC,UAAU,CAA2C;IAE7D,OAAO,CAAC,MAAM,CAA2C;gBAGtC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACtB,oBAAoB,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,aAAa,YAAA;IAGzC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmB3B,+BAA+B,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,wBAAwB,EAAE,GACzC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAuB3B,0BAA0B,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAmEhC,4BAA4B,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IA4B1C,sBAAsB,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAyBrC,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC;YAoFf,QAAQ;YAiBR,WAAW;IAgBzB,OAAO,CAAC,cAAc;IAuBtB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,EAAE;IAItD,OAAO,CAAC,sBAAsB;IAU9B,yBAAyB,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAoB3E,aAAa,CACX,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,gCAAgC;IAWhD,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAC5C,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAiDP,OAAO,CAAC,cAAc;IAyBhB,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAejB"}
1
+ {"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/server/sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,uBAAuB;IAM1E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,OAAO,CAAC,UAAU,CAA2C;IAE7D,OAAO,CAAC,MAAM,CAA2C;gBAGtC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACtB,oBAAoB,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,aAAa,YAAA;IAGzC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmB3B,+BAA+B,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,wBAAwB,EAAE,GACzC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoC3B,0BAA0B,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAmEhC,4BAA4B,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IA4B1C,sBAAsB,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAyBrC,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC;YAoFf,QAAQ;YAiBR,WAAW;IAgBzB,OAAO,CAAC,cAAc;IAuBtB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,EAAE;IAItD,OAAO,CAAC,sBAAsB;IAU9B,yBAAyB,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAoB3E,aAAa,CACX,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,gCAAgC;IAWhD,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAC5C,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAiDP,OAAO,CAAC,cAAc;IAyBhB,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAejB"}
@@ -25,13 +25,21 @@ export default class SynchronizationManager {
25
25
  const drive = await this.getDrive(driveId);
26
26
  const revisions = await this.storage.getSynchronizationUnitsRevision(syncUnitsQuery);
27
27
  this.logger.verbose(`getSynchronizationUnitsRevision: ${JSON.stringify(revisions)}`);
28
- return syncUnitsQuery.map((s) => ({
28
+ const synchronizationUnits = syncUnitsQuery.map((s) => ({
29
29
  ...s,
30
30
  lastUpdated: drive.created,
31
- revision: revisions.find((r) => r.documentId === s.documentId &&
32
- r.scope === s.scope &&
33
- r.branch === s.branch)?.revision ?? -1,
31
+ revision: -1,
34
32
  }));
33
+ for (const revision of revisions) {
34
+ const syncUnit = synchronizationUnits.find((s) => revision.documentId === s.documentId &&
35
+ revision.scope === s.scope &&
36
+ revision.branch === s.branch);
37
+ if (syncUnit) {
38
+ syncUnit.revision = revision.revision;
39
+ syncUnit.lastUpdated = revision.lastUpdated;
40
+ }
41
+ }
42
+ return synchronizationUnits;
35
43
  }
36
44
  async getSynchronizationUnitsIds(driveId, documentId, scope, branch, documentType) {
37
45
  const drive = await this.getDrive(driveId);
@@ -48,7 +56,7 @@ export default class SynchronizationManager {
48
56
  documentType.includes("powerhouse/document-drive") ||
49
57
  documentType.includes("*"))) {
50
58
  nodes.unshift({
51
- id: drive.state.global.id,
59
+ id: driveId,
52
60
  documentType: "powerhouse/document-drive",
53
61
  synchronizationUnits: [
54
62
  {
@@ -22,6 +22,6 @@ export declare class ConsoleLogger implements ILogger {
22
22
  export declare const logger: ILogger;
23
23
  export declare const setErrorHandler: (handler: LoggerErrorHandler) => void;
24
24
  export declare const setLogLevel: (level: LogLevel | "env") => void;
25
- export declare const childLogger: (tags: string[]) => ConsoleLogger;
25
+ export declare const childLogger: (tags: string[]) => ILogger;
26
26
  export {};
27
27
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3E,MAAM,MAAM,OAAO,GAAG,IAAI,CACxB,OAAO,EACP,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAC5C,GAAG;IACF,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACxB,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAE7C,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAW1D,qBAAa,aAAc,YAAW,OAAO;;gBAK/B,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,kBAAkB;IAa9D,IAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAE5B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,EAEhC;IAED,IAAI,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAEjD;IAED,IAAI,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,EAEvD;IAoBD,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIzB,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ7B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAW5B;AASD,eAAO,MAAM,MAAM,EAAE,OAAwB,CAAC;AAE9C,eAAO,MAAM,eAAe,GAAI,SAAS,kBAAkB,SAG1D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,GAAG,KAAK,SAGlD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,kBAKzC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3E,MAAM,MAAM,OAAO,GAAG,IAAI,CACxB,OAAO,EACP,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAC5C,GAAG;IACF,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACxB,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAE7C,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAW1D,qBAAa,aAAc,YAAW,OAAO;;gBAK/B,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,kBAAkB;IAa9D,IAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAE5B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,EAEhC;IAED,IAAI,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAEjD;IAED,IAAI,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,EAEvD;IAoBD,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIzB,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ7B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ3B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAW5B;AASD,eAAO,MAAM,MAAM,EAAE,OAAwB,CAAC;AAE9C,eAAO,MAAM,eAAe,GAAI,SAAS,kBAAkB,SAG1D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,GAAG,KAAK,SAGlD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,KAAG,OAK5C,CAAC"}