@dxos/echo-pipeline 0.4.10-main.c42bfdb → 0.4.10-main.ccba876

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 (45) hide show
  1. package/dist/lib/browser/{chunk-RA6MLCZM.mjs → chunk-SYE4EK33.mjs} +17 -9
  2. package/dist/lib/browser/chunk-SYE4EK33.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +237 -141
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +8 -2
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node/{chunk-KGIYLJBT.cjs → chunk-WCTX6RNS.cjs} +19 -11
  9. package/dist/lib/node/chunk-WCTX6RNS.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +241 -150
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +18 -13
  14. package/dist/lib/node/testing/index.cjs.map +4 -4
  15. package/dist/types/src/automerge/automerge-host.d.ts +18 -9
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/level.test.d.ts +2 -0
  18. package/dist/types/src/automerge/level.test.d.ts.map +1 -0
  19. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +27 -0
  20. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -0
  21. package/dist/types/src/automerge/migrations.d.ts +7 -0
  22. package/dist/types/src/automerge/migrations.d.ts.map +1 -0
  23. package/dist/types/src/automerge/storage-adapter.test.d.ts +2 -0
  24. package/dist/types/src/automerge/storage-adapter.test.d.ts.map +1 -0
  25. package/dist/types/src/automerge/types.d.ts +5 -0
  26. package/dist/types/src/automerge/types.d.ts.map +1 -1
  27. package/dist/types/src/metadata/metadata-store.d.ts +2 -1
  28. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  29. package/dist/types/src/testing/index.d.ts +1 -0
  30. package/dist/types/src/testing/index.d.ts.map +1 -1
  31. package/dist/types/src/testing/level.d.ts +3 -0
  32. package/dist/types/src/testing/level.d.ts.map +1 -0
  33. package/package.json +33 -30
  34. package/src/automerge/automerge-host.test.ts +19 -5
  35. package/src/automerge/automerge-host.ts +37 -27
  36. package/src/automerge/level.test.ts +43 -0
  37. package/src/automerge/leveldb-storage-adapter.ts +105 -0
  38. package/src/automerge/migrations.ts +41 -0
  39. package/src/automerge/storage-adapter.test.ts +90 -0
  40. package/src/automerge/types.ts +5 -3
  41. package/src/metadata/metadata-store.ts +17 -8
  42. package/src/testing/index.ts +1 -0
  43. package/src/testing/level.ts +11 -0
  44. package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +0 -7
  45. package/dist/lib/node/chunk-KGIYLJBT.cjs.map +0 -7
@@ -2,6 +2,7 @@ import "@dxos/node-std/globals";
2
2
  import {
3
3
  AuthExtension,
4
4
  AuthStatus,
5
+ Buffer,
5
6
  DataServiceImpl,
6
7
  MOCK_AUTH_PROVIDER,
7
8
  MOCK_AUTH_VERIFIER,
@@ -16,128 +17,105 @@ import {
16
17
  TimeframeClock,
17
18
  codec,
18
19
  createMappedFeedWriter,
20
+ hasInvitationExpired,
19
21
  mapFeedIndexesToTimeframe,
20
22
  mapTimeframeToFeedIndexes,
21
23
  startAfter,
22
24
  valueEncoding
23
- } from "./chunk-RA6MLCZM.mjs";
25
+ } from "./chunk-SYE4EK33.mjs";
24
26
 
25
27
  // packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts
26
28
  import { next as automerge, getHeads } from "@dxos/automerge/automerge";
27
29
  import { Repo } from "@dxos/automerge/automerge-repo";
28
- import { IndexedDBStorageAdapter } from "@dxos/automerge/automerge-repo-storage-indexeddb";
29
30
  import { Context } from "@dxos/context";
30
31
  import { PublicKey } from "@dxos/keys";
31
- import { log as log3 } from "@dxos/log";
32
+ import { log as log4 } from "@dxos/log";
32
33
  import { idCodec } from "@dxos/protocols";
33
- import { StorageType } from "@dxos/random-access-storage";
34
34
  import { trace } from "@dxos/tracing";
35
35
  import { ComplexMap, ComplexSet, defaultMap, mapValues } from "@dxos/util";
36
36
 
37
- // packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts
38
- import { arrayToBuffer, bufferToArray } from "@dxos/util";
39
- var AutomergeStorageAdapter = class {
40
- constructor(_directory) {
41
- this._directory = _directory;
37
+ // packages/core/echo/echo-pipeline/src/automerge/leveldb-storage-adapter.ts
38
+ var LevelDBStorageAdapter = class {
39
+ constructor(_params) {
40
+ this._params = _params;
42
41
  this._state = "opened";
43
42
  }
44
- async load(key) {
43
+ async load(keyArray) {
45
44
  if (this._state !== "opened") {
46
45
  return void 0;
47
46
  }
48
- const filename = this._getFilename(key);
49
- const file = this._directory.getOrCreateFile(filename);
50
- const { size } = await file.stat();
51
- if (!size || size === 0) {
52
- return void 0;
53
- }
54
- const buffer = await file.read(0, size);
55
- return bufferToArray(buffer);
47
+ return this._params.db.get(keyArray, {
48
+ ...encodingOptions
49
+ }).catch((err) => err.code === "LEVEL_NOT_FOUND" ? void 0 : Promise.reject(err));
56
50
  }
57
- async save(key, data) {
51
+ async save(keyArray, binary) {
58
52
  if (this._state !== "opened") {
59
53
  return void 0;
60
54
  }
61
- const filename = this._getFilename(key);
62
- const file = this._directory.getOrCreateFile(filename);
63
- await file.write(0, arrayToBuffer(data));
64
- await file.truncate?.(data.length);
65
- await file.flush?.();
55
+ await this._params.callbacks?.beforeSave?.(keyArray);
56
+ await this._params.db.put(keyArray, Buffer.from(binary), {
57
+ ...encodingOptions
58
+ });
59
+ await this._params.callbacks?.afterSave?.(keyArray);
66
60
  }
67
- async remove(key) {
61
+ async remove(keyArray) {
68
62
  if (this._state !== "opened") {
69
63
  return void 0;
70
64
  }
71
- const filename = this._getFilename(key);
72
- const file = this._directory.getOrCreateFile(filename);
73
- await file.destroy();
65
+ await this._params.db.del(keyArray, {
66
+ ...encodingOptions
67
+ });
74
68
  }
75
69
  async loadRange(keyPrefix) {
76
70
  if (this._state !== "opened") {
77
71
  return [];
78
72
  }
79
- const filename = this._getFilename(keyPrefix);
80
- const entries = await this._directory.list();
81
- return Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
82
- const file = this._directory.getOrCreateFile(entry);
83
- const { size } = await file.stat();
84
- const buffer = await file.read(0, size);
85
- return {
86
- key: this._getKeyFromFilename(entry),
87
- data: bufferToArray(buffer)
88
- };
89
- }));
73
+ const result = [];
74
+ for await (const [key, value] of this._params.db.iterator({
75
+ gte: keyPrefix,
76
+ lte: [
77
+ ...keyPrefix,
78
+ "\uFFFF"
79
+ ],
80
+ ...encodingOptions
81
+ })) {
82
+ result.push({
83
+ key,
84
+ data: value
85
+ });
86
+ }
87
+ return result;
90
88
  }
91
89
  async removeRange(keyPrefix) {
92
90
  if (this._state !== "opened") {
93
91
  return void 0;
94
92
  }
95
- const filename = this._getFilename(keyPrefix);
96
- const entries = await this._directory.list();
97
- await Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
98
- const file = this._directory.getOrCreateFile(entry);
99
- await file.destroy();
100
- }));
93
+ const batch = this._params.db.batch();
94
+ for await (const [key] of this._params.db.iterator({
95
+ gte: keyPrefix,
96
+ lte: [
97
+ ...keyPrefix,
98
+ "\uFFFF"
99
+ ],
100
+ ...encodingOptions
101
+ })) {
102
+ batch.del(key, {
103
+ ...encodingOptions
104
+ });
105
+ }
106
+ await batch.write();
101
107
  }
102
- async close() {
108
+ close() {
103
109
  this._state = "closed";
104
110
  }
105
- _getFilename(key) {
106
- return key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-");
107
- }
108
- _getKeyFromFilename(filename) {
109
- return filename.split("-").map((k) => k.replaceAll("%2D", "-").replaceAll("%25", "%"));
110
- }
111
111
  };
112
-
113
- // packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts
114
- var AutomergeStorageWrapper = class {
115
- constructor({ storage, callbacks }) {
116
- this._storage = storage;
117
- this._callbacks = callbacks;
118
- }
119
- async load(key) {
120
- return this._storage.load(key);
121
- }
122
- async save(key, value) {
123
- await this._callbacks.beforeSave?.(key);
124
- await this._storage.save(key, value);
125
- await this._callbacks.afterSave?.(key);
126
- }
127
- async remove(key) {
128
- return this._storage.remove(key);
129
- }
130
- async loadRange(keyPrefix) {
131
- return this._storage.loadRange(keyPrefix);
132
- }
133
- async removeRange(keyPrefix) {
134
- return this._storage.removeRange(keyPrefix);
135
- }
136
- async close() {
137
- if (this._storage instanceof AutomergeStorageAdapter) {
138
- return this._storage.close();
139
- }
140
- }
112
+ var keyEncoder = {
113
+ encode: (key) => Buffer.from(key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-")),
114
+ decode: (key) => Buffer.from(key).toString().split("-").map((k) => k.replaceAll("%2D", "-").replaceAll("%25", "%"))
115
+ };
116
+ var encodingOptions = {
117
+ keyEncoding: keyEncoder,
118
+ valueEncoding: "buffer"
141
119
  };
142
120
 
143
121
  // packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts
@@ -372,6 +350,118 @@ var MeshNetworkAdapter = class extends NetworkAdapter2 {
372
350
  }
373
351
  };
374
352
 
353
+ // packages/core/echo/echo-pipeline/src/automerge/migrations.ts
354
+ import { IndexedDBStorageAdapter } from "@dxos/automerge/automerge-repo-storage-indexeddb";
355
+ import { log as log3 } from "@dxos/log";
356
+ import { StorageType } from "@dxos/random-access-storage";
357
+
358
+ // packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts
359
+ import { arrayToBuffer, bufferToArray } from "@dxos/util";
360
+ var AutomergeStorageAdapter = class {
361
+ constructor(_directory) {
362
+ this._directory = _directory;
363
+ this._state = "opened";
364
+ }
365
+ async load(key) {
366
+ if (this._state !== "opened") {
367
+ return void 0;
368
+ }
369
+ const filename = this._getFilename(key);
370
+ const file = this._directory.getOrCreateFile(filename);
371
+ const { size } = await file.stat();
372
+ if (!size || size === 0) {
373
+ return void 0;
374
+ }
375
+ const buffer = await file.read(0, size);
376
+ return bufferToArray(buffer);
377
+ }
378
+ async save(key, data) {
379
+ if (this._state !== "opened") {
380
+ return void 0;
381
+ }
382
+ const filename = this._getFilename(key);
383
+ const file = this._directory.getOrCreateFile(filename);
384
+ await file.write(0, arrayToBuffer(data));
385
+ await file.truncate?.(data.length);
386
+ await file.flush?.();
387
+ }
388
+ async remove(key) {
389
+ if (this._state !== "opened") {
390
+ return void 0;
391
+ }
392
+ const filename = this._getFilename(key);
393
+ const file = this._directory.getOrCreateFile(filename);
394
+ await file.destroy();
395
+ }
396
+ async loadRange(keyPrefix) {
397
+ if (this._state !== "opened") {
398
+ return [];
399
+ }
400
+ const filename = this._getFilename(keyPrefix);
401
+ const entries = await this._directory.list();
402
+ return Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
403
+ const file = this._directory.getOrCreateFile(entry);
404
+ const { size } = await file.stat();
405
+ const buffer = await file.read(0, size);
406
+ return {
407
+ key: this._getKeyFromFilename(entry),
408
+ data: bufferToArray(buffer)
409
+ };
410
+ }));
411
+ }
412
+ async removeRange(keyPrefix) {
413
+ if (this._state !== "opened") {
414
+ return void 0;
415
+ }
416
+ const filename = this._getFilename(keyPrefix);
417
+ const entries = await this._directory.list();
418
+ await Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
419
+ const file = this._directory.getOrCreateFile(entry);
420
+ await file.destroy();
421
+ }));
422
+ }
423
+ async close() {
424
+ this._state = "closed";
425
+ }
426
+ _getFilename(key) {
427
+ return key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-");
428
+ }
429
+ _getKeyFromFilename(filename) {
430
+ return filename.split("-").map((k) => k.replaceAll("%2D", "-").replaceAll("%25", "%"));
431
+ }
432
+ };
433
+
434
+ // packages/core/echo/echo-pipeline/src/automerge/migrations.ts
435
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/migrations.ts";
436
+ var levelMigration = async ({ db, directory }) => {
437
+ const isNewLevel = !await db.iterator({
438
+ ...encodingOptions
439
+ }).next();
440
+ if (!isNewLevel) {
441
+ return;
442
+ }
443
+ const oldStorageAdapter = directory.type === StorageType.IDB ? new IndexedDBStorageAdapter(directory.path, "data") : new AutomergeStorageAdapter(directory);
444
+ const chunks = await oldStorageAdapter.loadRange([]);
445
+ if (chunks.length === 0) {
446
+ return;
447
+ }
448
+ const batch = db.batch();
449
+ log3.info("found chunks on old storage adapter", {
450
+ chunks: chunks.length
451
+ }, {
452
+ F: __dxlog_file3,
453
+ L: 36,
454
+ S: void 0,
455
+ C: (f, a) => f(...a)
456
+ });
457
+ for (const { key, data } of await oldStorageAdapter.loadRange([])) {
458
+ data && batch.put(key, data, {
459
+ ...encodingOptions
460
+ });
461
+ }
462
+ await batch.write();
463
+ };
464
+
375
465
  // packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts
376
466
  function _ts_decorate(decorators, target, key, desc) {
377
467
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -383,9 +473,9 @@ function _ts_decorate(decorators, target, key, desc) {
383
473
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
384
474
  return c > 3 && r && Object.defineProperty(target, key, r), r;
385
475
  }
386
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
476
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
387
477
  var AutomergeHost = class {
388
- constructor({ directory, metadata }) {
478
+ constructor({ directory, db, metadata }) {
389
479
  this._ctx = new Context();
390
480
  /**
391
481
  * spaceKey -> deviceKey[]
@@ -393,19 +483,24 @@ var AutomergeHost = class {
393
483
  this._authorizedDevices = new ComplexMap(PublicKey.hash);
394
484
  this._updatingMetadata = /* @__PURE__ */ new Map();
395
485
  this._requestedDocs = /* @__PURE__ */ new Set();
486
+ this._directory = directory;
487
+ this._db = db;
396
488
  this._metadata = metadata;
397
- this._meshNetwork = new MeshNetworkAdapter();
398
- this._clientNetwork = new LocalHostNetworkAdapter();
399
- this._storage = new AutomergeStorageWrapper({
400
- storage: (
401
- // TODO(mykola): Delete specific handling of IDB storage.
402
- directory.type === StorageType.IDB ? new IndexedDBStorageAdapter(directory.path, "data") : new AutomergeStorageAdapter(directory)
403
- ),
489
+ }
490
+ async open() {
491
+ this._directory && await levelMigration({
492
+ db: await this._db,
493
+ directory: this._directory
494
+ });
495
+ this._storage = new LevelDBStorageAdapter({
496
+ db: await this._db,
404
497
  callbacks: {
405
498
  beforeSave: (params) => this._beforeSave(params)
406
499
  }
407
500
  });
408
501
  this._peerId = `host-${PublicKey.random().toHex()}`;
502
+ this._meshNetwork = new MeshNetworkAdapter();
503
+ this._clientNetwork = new LocalHostNetworkAdapter();
409
504
  this._repo = new Repo({
410
505
  peerId: this._peerId,
411
506
  network: [
@@ -425,13 +520,13 @@ var AutomergeHost = class {
425
520
  const doc = this._repo.handles[documentId]?.docSync();
426
521
  if (!doc) {
427
522
  const isRequested = this._requestedDocs.has(`automerge:${documentId}`);
428
- log3("doc share policy check", {
523
+ log4("doc share policy check", {
429
524
  peerId,
430
525
  documentId,
431
526
  isRequested
432
527
  }, {
433
- F: __dxlog_file3,
434
- L: 101,
528
+ F: __dxlog_file4,
529
+ L: 111,
435
530
  S: this,
436
531
  C: (f, a) => f(...a)
437
532
  });
@@ -440,12 +535,12 @@ var AutomergeHost = class {
440
535
  try {
441
536
  const spaceKey = getSpaceKeyFromDoc(doc);
442
537
  if (!spaceKey) {
443
- log3("space key not found for share policy check", {
538
+ log4("space key not found for share policy check", {
444
539
  peerId,
445
540
  documentId
446
541
  }, {
447
- F: __dxlog_file3,
448
- L: 108,
542
+ F: __dxlog_file4,
543
+ L: 118,
449
544
  S: this,
450
545
  C: (f, a) => f(...a)
451
546
  });
@@ -454,12 +549,12 @@ var AutomergeHost = class {
454
549
  const authorizedDevices = this._authorizedDevices.get(PublicKey.from(spaceKey));
455
550
  const deviceKeyHex = this.repo.peerMetadataByPeerId[peerId]?.dxos_deviceKey;
456
551
  if (!deviceKeyHex) {
457
- log3("device key not found for share policy check", {
552
+ log4("device key not found for share policy check", {
458
553
  peerId,
459
554
  documentId
460
555
  }, {
461
- F: __dxlog_file3,
462
- L: 117,
556
+ F: __dxlog_file4,
557
+ L: 127,
463
558
  S: this,
464
559
  C: (f, a) => f(...a)
465
560
  });
@@ -467,7 +562,7 @@ var AutomergeHost = class {
467
562
  }
468
563
  const deviceKey = PublicKey.from(deviceKeyHex);
469
564
  const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;
470
- log3("share policy check", {
565
+ log4("share policy check", {
471
566
  localPeer: this._peerId,
472
567
  remotePeer: peerId,
473
568
  documentId,
@@ -475,16 +570,16 @@ var AutomergeHost = class {
475
570
  spaceKey,
476
571
  isAuthorized
477
572
  }, {
478
- F: __dxlog_file3,
479
- L: 123,
573
+ F: __dxlog_file4,
574
+ L: 133,
480
575
  S: this,
481
576
  C: (f, a) => f(...a)
482
577
  });
483
578
  return isAuthorized;
484
579
  } catch (err) {
485
- log3.catch(err, void 0, {
486
- F: __dxlog_file3,
487
- L: 133,
580
+ log4.catch(err, void 0, {
581
+ F: __dxlog_file4,
582
+ L: 143,
488
583
  S: this,
489
584
  C: (f, a) => f(...a)
490
585
  });
@@ -503,6 +598,11 @@ var AutomergeHost = class {
503
598
  });
504
599
  }
505
600
  }
601
+ async close() {
602
+ this._storage.close?.();
603
+ await this._clientNetwork.close();
604
+ await this._ctx.dispose();
605
+ }
506
606
  get repo() {
507
607
  return this._repo;
508
608
  }
@@ -540,9 +640,9 @@ var AutomergeHost = class {
540
640
  const markingDirtyPromise = this._metadata.markDirty(idToLastHash).then(() => {
541
641
  this._updatingMetadata.delete(event.handle.documentId);
542
642
  }).catch((err) => {
543
- this._ctx.disposed && log3.catch(err, void 0, {
544
- F: __dxlog_file3,
545
- L: 191,
643
+ this._ctx.disposed && log4.catch(err, void 0, {
644
+ F: __dxlog_file4,
645
+ L: 207,
546
646
  S: this,
547
647
  C: (f, a) => f(...a)
548
648
  });
@@ -574,11 +674,6 @@ var AutomergeHost = class {
574
674
  _automergePeers() {
575
675
  return this._repo.peers;
576
676
  }
577
- async close() {
578
- await this._storage.close();
579
- await this._clientNetwork.close();
580
- await this._ctx.dispose();
581
- }
582
677
  //
583
678
  // Methods for client-services.
584
679
  //
@@ -602,12 +697,12 @@ var AutomergeHost = class {
602
697
  return this._meshNetwork.createExtension();
603
698
  }
604
699
  authorizeDevice(spaceKey, deviceKey) {
605
- log3("authorizeDevice", {
700
+ log4("authorizeDevice", {
606
701
  spaceKey,
607
702
  deviceKey
608
703
  }, {
609
- F: __dxlog_file3,
610
- L: 264,
704
+ F: __dxlog_file4,
705
+ L: 274,
611
706
  S: this,
612
707
  C: (f, a) => f(...a)
613
708
  });
@@ -661,8 +756,8 @@ import { Event } from "@dxos/async";
661
756
  import { cancelWithContext } from "@dxos/context";
662
757
  import { warnAfterTimeout } from "@dxos/debug";
663
758
  import { invariant as invariant3 } from "@dxos/invariant";
664
- import { log as log4 } from "@dxos/log";
665
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts";
759
+ import { log as log5 } from "@dxos/log";
760
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts";
666
761
  var AutomergeDocumentLoaderImpl = class {
667
762
  constructor(_spaceKey, _repo) {
668
763
  this._spaceKey = _spaceKey;
@@ -682,10 +777,10 @@ var AutomergeDocumentLoaderImpl = class {
682
777
  return;
683
778
  }
684
779
  if (!spaceState.rootUrl) {
685
- log4.error("Database opened with no rootUrl", {
780
+ log5.error("Database opened with no rootUrl", {
686
781
  spaceKey: this._spaceKey
687
782
  }, {
688
- F: __dxlog_file4,
783
+ F: __dxlog_file5,
689
784
  L: 66,
690
785
  S: this,
691
786
  C: (f, a) => f(...a)
@@ -695,7 +790,7 @@ var AutomergeDocumentLoaderImpl = class {
695
790
  const existingDocHandle = await this._initDocHandle(ctx, spaceState.rootUrl);
696
791
  const doc = existingDocHandle.docSync();
697
792
  invariant3(doc, void 0, {
698
- F: __dxlog_file4,
793
+ F: __dxlog_file5,
699
794
  L: 71,
700
795
  S: this,
701
796
  A: [
@@ -711,7 +806,7 @@ var AutomergeDocumentLoaderImpl = class {
711
806
  }
712
807
  loadObjectDocument(objectId) {
713
808
  invariant3(this._spaceRootDocHandle, void 0, {
714
- F: __dxlog_file4,
809
+ F: __dxlog_file5,
715
810
  L: 80,
716
811
  S: this,
717
812
  A: [
@@ -724,7 +819,7 @@ var AutomergeDocumentLoaderImpl = class {
724
819
  }
725
820
  const spaceRootDoc = this._spaceRootDocHandle.docSync();
726
821
  invariant3(spaceRootDoc, void 0, {
727
- F: __dxlog_file4,
822
+ F: __dxlog_file5,
728
823
  L: 85,
729
824
  S: this,
730
825
  A: [
@@ -735,10 +830,10 @@ var AutomergeDocumentLoaderImpl = class {
735
830
  const documentUrl = (spaceRootDoc.links ?? {})[objectId];
736
831
  if (documentUrl == null) {
737
832
  this._objectsPendingDocumentLoad.add(objectId);
738
- log4.info("loading delayed until object links are initialized", {
833
+ log5.info("loading delayed until object links are initialized", {
739
834
  objectId
740
835
  }, {
741
- F: __dxlog_file4,
836
+ F: __dxlog_file5,
742
837
  L: 89,
743
838
  S: this,
744
839
  C: (f, a) => f(...a)
@@ -759,7 +854,7 @@ var AutomergeDocumentLoaderImpl = class {
759
854
  }
760
855
  getSpaceRootDocHandle() {
761
856
  invariant3(this._spaceRootDocHandle, void 0, {
762
- F: __dxlog_file4,
857
+ F: __dxlog_file5,
763
858
  L: 107,
764
859
  S: this,
765
860
  A: [
@@ -771,7 +866,7 @@ var AutomergeDocumentLoaderImpl = class {
771
866
  }
772
867
  createDocumentForObject(objectId) {
773
868
  invariant3(this._spaceRootDocHandle, void 0, {
774
- F: __dxlog_file4,
869
+ F: __dxlog_file5,
775
870
  L: 112,
776
871
  S: this,
777
872
  A: [
@@ -810,11 +905,11 @@ var AutomergeDocumentLoaderImpl = class {
810
905
  };
811
906
  const objectDocumentHandle = this._objectDocumentHandles.get(objectId);
812
907
  if (objectDocumentHandle != null && objectDocumentHandle.url !== automergeUrl) {
813
- log4.warn("object already inlined in a different document, ignoring the link", {
908
+ log5.warn("object already inlined in a different document, ignoring the link", {
814
909
  ...logMeta,
815
910
  actualDocumentUrl: objectDocumentHandle.url
816
911
  }, {
817
- F: __dxlog_file4,
912
+ F: __dxlog_file5,
818
913
  L: 142,
819
914
  S: this,
820
915
  C: (f, a) => f(...a)
@@ -822,8 +917,8 @@ var AutomergeDocumentLoaderImpl = class {
822
917
  continue;
823
918
  }
824
919
  if (objectDocumentHandle?.url === automergeUrl) {
825
- log4.warn("object document was already loaded", logMeta, {
826
- F: __dxlog_file4,
920
+ log5.warn("object document was already loaded", logMeta, {
921
+ F: __dxlog_file5,
827
922
  L: 149,
828
923
  S: this,
829
924
  C: (f, a) => f(...a)
@@ -831,8 +926,8 @@ var AutomergeDocumentLoaderImpl = class {
831
926
  continue;
832
927
  }
833
928
  const handle = this._repo.find(automergeUrl);
834
- log4.debug("document loading triggered", logMeta, {
835
- F: __dxlog_file4,
929
+ log5.debug("document loading triggered", logMeta, {
930
+ F: __dxlog_file5,
836
931
  L: 153,
837
932
  S: this,
838
933
  C: (f, a) => f(...a)
@@ -851,11 +946,11 @@ var AutomergeDocumentLoaderImpl = class {
851
946
  break;
852
947
  } catch (err) {
853
948
  if (`${err}`.includes("Timeout")) {
854
- log4.info("wraparound", {
949
+ log5.info("wraparound", {
855
950
  id: docHandle.documentId,
856
951
  state: docHandle.state
857
952
  }, {
858
- F: __dxlog_file4,
953
+ F: __dxlog_file5,
859
954
  L: 169,
860
955
  S: this,
861
956
  C: (f, a) => f(...a)
@@ -896,8 +991,8 @@ var AutomergeDocumentLoaderImpl = class {
896
991
  docUrl: handle.url
897
992
  };
898
993
  if (this.onObjectDocumentLoaded.listenerCount() === 0) {
899
- log4.info("document loaded after all listeners were removed", logMeta, {
900
- F: __dxlog_file4,
994
+ log5.info("document loaded after all listeners were removed", logMeta, {
995
+ F: __dxlog_file5,
901
996
  L: 205,
902
997
  S: this,
903
998
  C: (f, a) => f(...a)
@@ -906,8 +1001,8 @@ var AutomergeDocumentLoaderImpl = class {
906
1001
  }
907
1002
  const objectDocHandle = this._objectDocumentHandles.get(objectId);
908
1003
  if (objectDocHandle?.url !== handle.url) {
909
- log4.warn("object was rebound while a document was loading, discarding handle", logMeta, {
910
- F: __dxlog_file4,
1004
+ log5.warn("object was rebound while a document was loading, discarding handle", logMeta, {
1005
+ F: __dxlog_file5,
911
1006
  L: 210,
912
1007
  S: this,
913
1008
  C: (f, a) => f(...a)
@@ -920,13 +1015,13 @@ var AutomergeDocumentLoaderImpl = class {
920
1015
  });
921
1016
  } catch (err) {
922
1017
  const shouldRetryLoading = this.onObjectDocumentLoaded.listenerCount() > 0;
923
- log4.warn("failed to load a document", {
1018
+ log5.warn("failed to load a document", {
924
1019
  objectId,
925
1020
  automergeUrl: handle.url,
926
1021
  retryLoading: shouldRetryLoading,
927
1022
  err
928
1023
  }, {
929
- F: __dxlog_file4,
1024
+ F: __dxlog_file5,
930
1025
  L: 216,
931
1026
  S: this,
932
1027
  C: (f, a) => f(...a)
@@ -976,6 +1071,7 @@ export {
976
1071
  decodeReference,
977
1072
  encodeReference,
978
1073
  getSpaceKeyFromDoc,
1074
+ hasInvitationExpired,
979
1075
  isEncodedReferenceObject,
980
1076
  mapFeedIndexesToTimeframe,
981
1077
  mapTimeframeToFeedIndexes,