@dxos/echo-pipeline 0.6.2-main.d41f0d2 → 0.6.2-main.fb91371

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 (40) hide show
  1. package/dist/lib/browser/{chunk-SJUDZ3CQ.mjs → chunk-UJQ5VS5V.mjs} +7 -17
  2. package/dist/lib/browser/chunk-UJQ5VS5V.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +57 -562
  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 +1 -1
  7. package/dist/lib/node/{chunk-NLHNTXVQ.cjs → chunk-RH6TDRML.cjs} +10 -20
  8. package/dist/lib/node/chunk-RH6TDRML.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +79 -582
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +11 -11
  13. package/dist/types/src/automerge/automerge-host.d.ts +2 -17
  14. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  15. package/dist/types/src/automerge/echo-network-adapter.d.ts +1 -1
  16. package/dist/types/src/automerge/index.d.ts +0 -2
  17. package/dist/types/src/automerge/index.d.ts.map +1 -1
  18. package/dist/types/src/db-host/data-service.d.ts +2 -5
  19. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  20. package/dist/types/src/db-host/documents-synchronizer.d.ts +1 -1
  21. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  22. package/package.json +33 -33
  23. package/src/automerge/automerge-host.ts +6 -56
  24. package/src/automerge/automerge-repo.test.ts +124 -1
  25. package/src/automerge/echo-network-adapter.ts +1 -1
  26. package/src/automerge/index.ts +0 -2
  27. package/src/db-host/data-service.ts +3 -20
  28. package/src/db-host/documents-synchronizer.test.ts +1 -1
  29. package/src/db-host/documents-synchronizer.ts +1 -1
  30. package/dist/lib/browser/chunk-SJUDZ3CQ.mjs.map +0 -7
  31. package/dist/lib/node/chunk-NLHNTXVQ.cjs.map +0 -7
  32. package/dist/types/src/automerge/automerge-doc-loader.d.ts +0 -71
  33. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +0 -1
  34. package/dist/types/src/automerge/automerge-doc-loader.test.d.ts +0 -2
  35. package/dist/types/src/automerge/automerge-doc-loader.test.d.ts.map +0 -1
  36. package/dist/types/src/automerge/local-host-network-adapter.d.ts +0 -30
  37. package/dist/types/src/automerge/local-host-network-adapter.d.ts.map +0 -1
  38. package/src/automerge/automerge-doc-loader.test.ts +0 -103
  39. package/src/automerge/automerge-doc-loader.ts +0 -267
  40. package/src/automerge/local-host-network-adapter.ts +0 -115
@@ -18,41 +18,39 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var node_exports = {};
20
20
  __export(node_exports, {
21
- AuthExtension: () => import_chunk_NLHNTXVQ.AuthExtension,
22
- AuthStatus: () => import_chunk_NLHNTXVQ.AuthStatus,
23
- AutomergeDocumentLoaderImpl: () => AutomergeDocumentLoaderImpl,
21
+ AuthExtension: () => import_chunk_RH6TDRML.AuthExtension,
22
+ AuthStatus: () => import_chunk_RH6TDRML.AuthStatus,
24
23
  AutomergeHost: () => AutomergeHost,
25
- CredentialRetrieverExtension: () => import_chunk_NLHNTXVQ.CredentialRetrieverExtension,
26
- CredentialServerExtension: () => import_chunk_NLHNTXVQ.CredentialServerExtension,
27
- DataServiceImpl: () => import_chunk_NLHNTXVQ.DataServiceImpl,
28
- DocumentsSynchronizer: () => import_chunk_NLHNTXVQ.DocumentsSynchronizer,
24
+ CredentialRetrieverExtension: () => import_chunk_RH6TDRML.CredentialRetrieverExtension,
25
+ CredentialServerExtension: () => import_chunk_RH6TDRML.CredentialServerExtension,
26
+ DataServiceImpl: () => import_chunk_RH6TDRML.DataServiceImpl,
27
+ DocumentsSynchronizer: () => import_chunk_RH6TDRML.DocumentsSynchronizer,
29
28
  LevelDBStorageAdapter: () => LevelDBStorageAdapter,
30
- LocalHostNetworkAdapter: () => LocalHostNetworkAdapter,
31
- MOCK_AUTH_PROVIDER: () => import_chunk_NLHNTXVQ.MOCK_AUTH_PROVIDER,
32
- MOCK_AUTH_VERIFIER: () => import_chunk_NLHNTXVQ.MOCK_AUTH_VERIFIER,
29
+ MOCK_AUTH_PROVIDER: () => import_chunk_RH6TDRML.MOCK_AUTH_PROVIDER,
30
+ MOCK_AUTH_VERIFIER: () => import_chunk_RH6TDRML.MOCK_AUTH_VERIFIER,
33
31
  MeshEchoReplicator: () => MeshEchoReplicator,
34
- MetadataStore: () => import_chunk_NLHNTXVQ.MetadataStore,
35
- Pipeline: () => import_chunk_NLHNTXVQ.Pipeline,
36
- SnapshotManager: () => import_chunk_NLHNTXVQ.SnapshotManager,
37
- SnapshotStore: () => import_chunk_NLHNTXVQ.SnapshotStore,
38
- Space: () => import_chunk_NLHNTXVQ.Space,
39
- SpaceManager: () => import_chunk_NLHNTXVQ.SpaceManager,
40
- SpaceProtocol: () => import_chunk_NLHNTXVQ.SpaceProtocol,
41
- SpaceProtocolSession: () => import_chunk_NLHNTXVQ.SpaceProtocolSession,
42
- TimeframeClock: () => import_chunk_NLHNTXVQ.TimeframeClock,
43
- codec: () => import_chunk_NLHNTXVQ.codec,
44
- createIdFromSpaceKey: () => import_chunk_NLHNTXVQ.createIdFromSpaceKey,
45
- createMappedFeedWriter: () => import_chunk_NLHNTXVQ.createMappedFeedWriter,
32
+ MetadataStore: () => import_chunk_RH6TDRML.MetadataStore,
33
+ Pipeline: () => import_chunk_RH6TDRML.Pipeline,
34
+ SnapshotManager: () => import_chunk_RH6TDRML.SnapshotManager,
35
+ SnapshotStore: () => import_chunk_RH6TDRML.SnapshotStore,
36
+ Space: () => import_chunk_RH6TDRML.Space,
37
+ SpaceManager: () => import_chunk_RH6TDRML.SpaceManager,
38
+ SpaceProtocol: () => import_chunk_RH6TDRML.SpaceProtocol,
39
+ SpaceProtocolSession: () => import_chunk_RH6TDRML.SpaceProtocolSession,
40
+ TimeframeClock: () => import_chunk_RH6TDRML.TimeframeClock,
41
+ codec: () => import_chunk_RH6TDRML.codec,
42
+ createIdFromSpaceKey: () => import_chunk_RH6TDRML.createIdFromSpaceKey,
43
+ createMappedFeedWriter: () => import_chunk_RH6TDRML.createMappedFeedWriter,
46
44
  encodingOptions: () => encodingOptions,
47
45
  getSpaceKeyFromDoc: () => getSpaceKeyFromDoc,
48
- hasInvitationExpired: () => import_chunk_NLHNTXVQ.hasInvitationExpired,
49
- mapFeedIndexesToTimeframe: () => import_chunk_NLHNTXVQ.mapFeedIndexesToTimeframe,
50
- mapTimeframeToFeedIndexes: () => import_chunk_NLHNTXVQ.mapTimeframeToFeedIndexes,
51
- startAfter: () => import_chunk_NLHNTXVQ.startAfter,
52
- valueEncoding: () => import_chunk_NLHNTXVQ.valueEncoding
46
+ hasInvitationExpired: () => import_chunk_RH6TDRML.hasInvitationExpired,
47
+ mapFeedIndexesToTimeframe: () => import_chunk_RH6TDRML.mapFeedIndexesToTimeframe,
48
+ mapTimeframeToFeedIndexes: () => import_chunk_RH6TDRML.mapTimeframeToFeedIndexes,
49
+ startAfter: () => import_chunk_RH6TDRML.startAfter,
50
+ valueEncoding: () => import_chunk_RH6TDRML.valueEncoding
53
51
  });
54
52
  module.exports = __toCommonJS(node_exports);
55
- var import_chunk_NLHNTXVQ = require("./chunk-NLHNTXVQ.cjs");
53
+ var import_chunk_RH6TDRML = require("./chunk-RH6TDRML.cjs");
56
54
  var import_async = require("@dxos/async");
57
55
  var import_automerge = require("@dxos/automerge/automerge");
58
56
  var import_automerge_repo = require("@dxos/automerge/automerge-repo");
@@ -70,26 +68,14 @@ var import_invariant2 = require("@dxos/invariant");
70
68
  var import_log2 = require("@dxos/log");
71
69
  var import_indexing = require("@dxos/indexing");
72
70
  var import_context3 = require("@dxos/context");
73
- var import_async3 = require("@dxos/async");
74
- var import_automerge_repo3 = require("@dxos/automerge/automerge-repo");
75
- var import_codec_protobuf = require("@dxos/codec-protobuf");
76
71
  var import_invariant3 = require("@dxos/invariant");
77
- var import_async4 = require("@dxos/async");
78
- var import_automerge_repo4 = require("@dxos/automerge/automerge-repo");
72
+ var import_keys2 = require("@dxos/keys");
73
+ var import_log3 = require("@dxos/log");
74
+ var import_util2 = require("@dxos/util");
75
+ var import_automerge_repo3 = require("@dxos/automerge/automerge-repo");
79
76
  var import_context4 = require("@dxos/context");
80
- var import_debug = require("@dxos/debug");
81
- var import_echo_protocol = require("@dxos/echo-protocol");
82
77
  var import_invariant4 = require("@dxos/invariant");
83
- var import_log3 = require("@dxos/log");
84
- var import_tracing2 = require("@dxos/tracing");
85
- var import_invariant5 = require("@dxos/invariant");
86
- var import_keys2 = require("@dxos/keys");
87
78
  var import_log4 = require("@dxos/log");
88
- var import_util2 = require("@dxos/util");
89
- var import_automerge_repo5 = require("@dxos/automerge/automerge-repo");
90
- var import_context5 = require("@dxos/context");
91
- var import_invariant6 = require("@dxos/invariant");
92
- var import_log5 = require("@dxos/log");
93
79
  var import_teleport_extension_automerge_replicator = require("@dxos/teleport-extension-automerge-replicator");
94
80
  function _ts_decorate(decorators, target, key, desc) {
95
81
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -151,7 +137,7 @@ var EchoNetworkAdapter = class extends import_automerge_repo2.NetworkAdapter {
151
137
  }
152
138
  async close() {
153
139
  if (this._lifecycleState === import_context2.LifecycleState.CLOSED) {
154
- return;
140
+ return this;
155
141
  }
156
142
  for (const replicator of this._replicators) {
157
143
  await replicator.disconnect();
@@ -494,138 +480,6 @@ var encodingOptions = {
494
480
  valueEncoding: "buffer"
495
481
  };
496
482
  var isLevelDbNotFoundError = (err) => err.code === "LEVEL_NOT_FOUND";
497
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts";
498
- var LocalHostNetworkAdapter = class extends import_automerge_repo3.NetworkAdapter {
499
- constructor() {
500
- super(...arguments);
501
- this._peers = /* @__PURE__ */ new Map();
502
- this._connected = new import_async3.Trigger();
503
- this._isConnected = false;
504
- }
505
- /**
506
- * Emits `ready` event. That signals to `Repo` that it can start using the adapter.
507
- */
508
- ready() {
509
- this.emit("ready", {
510
- network: this
511
- });
512
- }
513
- /**
514
- * Called by `Repo` to connect to the network.
515
- *
516
- * @param peerId Our peer Id.
517
- */
518
- connect(peerId) {
519
- this.peerId = peerId;
520
- this._isConnected = true;
521
- this._connected.wake();
522
- }
523
- send(message) {
524
- const peer = this._peers.get(message.targetId);
525
- (0, import_invariant3.invariant)(peer, "Peer not found.", {
526
- F: __dxlog_file2,
527
- L: 51,
528
- S: this,
529
- A: [
530
- "peer",
531
- "'Peer not found.'"
532
- ]
533
- });
534
- peer.send(message);
535
- }
536
- async close() {
537
- this._peers.forEach((peer) => peer.disconnect());
538
- this.emit("close");
539
- }
540
- disconnect() {
541
- }
542
- async whenConnected() {
543
- await this._connected.wait({
544
- timeout: 1e4
545
- });
546
- }
547
- syncRepo({ id, syncMessage }) {
548
- const peerId = this._getPeerId(id);
549
- return new import_codec_protobuf.Stream(({ next, close }) => {
550
- (0, import_invariant3.invariant)(!this._peers.has(peerId), "Peer already connected.", {
551
- F: __dxlog_file2,
552
- L: 73,
553
- S: this,
554
- A: [
555
- "!this._peers.has(peerId)",
556
- "'Peer already connected.'"
557
- ]
558
- });
559
- this._peers.set(peerId, {
560
- connected: true,
561
- send: (message) => {
562
- next({
563
- syncMessage: import_automerge_repo3.cbor.encode(message)
564
- });
565
- },
566
- disconnect: () => {
567
- this._peers.delete(peerId);
568
- close();
569
- this.emit("peer-disconnected", {
570
- peerId
571
- });
572
- }
573
- });
574
- (0, import_invariant3.invariant)(this._isConnected, void 0, {
575
- F: __dxlog_file2,
576
- L: 90,
577
- S: this,
578
- A: [
579
- "this._isConnected",
580
- ""
581
- ]
582
- });
583
- this.emit("peer-candidate", {
584
- peerMetadata: {},
585
- peerId
586
- });
587
- });
588
- }
589
- async sendSyncMessage({ id, syncMessage }) {
590
- (0, import_invariant3.invariant)(this._isConnected, void 0, {
591
- F: __dxlog_file2,
592
- L: 99,
593
- S: this,
594
- A: [
595
- "this._isConnected",
596
- ""
597
- ]
598
- });
599
- const message = import_automerge_repo3.cbor.decode(syncMessage);
600
- this.emit("message", message);
601
- }
602
- async getHostInfo() {
603
- (0, import_invariant3.invariant)(this._isConnected, void 0, {
604
- F: __dxlog_file2,
605
- L: 105,
606
- S: this,
607
- A: [
608
- "this._isConnected",
609
- ""
610
- ]
611
- });
612
- (0, import_invariant3.invariant)(this.peerId, "Peer id not set.", {
613
- F: __dxlog_file2,
614
- L: 106,
615
- S: this,
616
- A: [
617
- "this.peerId",
618
- "'Peer id not set.'"
619
- ]
620
- });
621
- return {
622
- peerId: this.peerId
623
- };
624
- }
625
- _getPeerId(id) {
626
- return id;
627
- }
628
- };
629
483
  function _ts_decorate2(decorators, target, key, desc) {
630
484
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
631
485
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -636,7 +490,7 @@ function _ts_decorate2(decorators, target, key, desc) {
636
490
  r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
637
491
  return c > 3 && r && Object.defineProperty(target, key, r), r;
638
492
  }
639
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
493
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
640
494
  var AutomergeHost = class extends import_context.Resource {
641
495
  constructor({ db, indexMetadataStore }) {
642
496
  super();
@@ -659,26 +513,20 @@ var AutomergeHost = class extends import_context.Resource {
659
513
  async _open() {
660
514
  this._peerId = `host-${import_keys.PublicKey.random().toHex()}`;
661
515
  await this._storage.open?.();
662
- this._clientNetwork = new LocalHostNetworkAdapter();
663
516
  this._repo = new import_automerge_repo.Repo({
664
517
  peerId: this._peerId,
665
518
  sharePolicy: this._sharePolicy.bind(this),
666
519
  storage: this._storage,
667
520
  network: [
668
- // Downstream client.
669
- this._clientNetwork,
670
521
  // Upstream swarm.
671
522
  this._echoNetworkAdapter
672
523
  ]
673
524
  });
674
- this._clientNetwork.ready();
675
525
  await this._echoNetworkAdapter.open();
676
- await this._clientNetwork.whenConnected();
677
526
  await this._echoNetworkAdapter.whenConnected();
678
527
  }
679
528
  async _close() {
680
529
  await this._storage.close?.();
681
- await this._clientNetwork.close();
682
530
  await this._echoNetworkAdapter.close();
683
531
  await this._ctx.dispose();
684
532
  }
@@ -740,8 +588,8 @@ var AutomergeHost = class extends import_context.Resource {
740
588
  return;
741
589
  }
742
590
  const handle = await this.loadDoc(import_context.Context.default(void 0, {
743
- F: __dxlog_file3,
744
- L: 207
591
+ F: __dxlog_file2,
592
+ L: 189
745
593
  }), documentId);
746
594
  await waitForHeads(handle, heads2);
747
595
  }) ?? []);
@@ -752,8 +600,8 @@ var AutomergeHost = class extends import_context.Resource {
752
600
  import_log.log.info("re-indexing heads for document", {
753
601
  documentId
754
602
  }, {
755
- F: __dxlog_file3,
756
- L: 218,
603
+ F: __dxlog_file2,
604
+ L: 200,
757
605
  S: this,
758
606
  C: (f, a) => f(...a)
759
607
  });
@@ -768,8 +616,8 @@ var AutomergeHost = class extends import_context.Resource {
768
616
  import_log.log.warn("document is not available locally, skipping", {
769
617
  documentId
770
618
  }, {
771
- F: __dxlog_file3,
772
- L: 222,
619
+ F: __dxlog_file2,
620
+ L: 204,
773
621
  S: this,
774
622
  C: (f, a) => f(...a)
775
623
  });
@@ -777,8 +625,8 @@ var AutomergeHost = class extends import_context.Resource {
777
625
  }
778
626
  const doc = handle.docSync();
779
627
  (0, import_invariant.invariant)(doc, void 0, {
780
- F: __dxlog_file3,
781
- L: 227,
628
+ F: __dxlog_file2,
629
+ L: 209,
782
630
  S: this,
783
631
  A: [
784
632
  "doc",
@@ -791,8 +639,8 @@ var AutomergeHost = class extends import_context.Resource {
791
639
  await batch.write();
792
640
  }
793
641
  import_log.log.info("done re-indexing heads", void 0, {
794
- F: __dxlog_file3,
795
- L: 234,
642
+ F: __dxlog_file2,
643
+ L: 216,
796
644
  S: this,
797
645
  C: (f, a) => f(...a)
798
646
  });
@@ -885,17 +733,8 @@ var AutomergeHost = class extends import_context.Resource {
885
733
  /**
886
734
  * Flush documents to disk.
887
735
  */
888
- async flush({ states } = {}) {
889
- if (states) {
890
- await Promise.all(states.map(async ({ heads, documentId }) => {
891
- if (!heads) {
892
- return;
893
- }
894
- const handle = this._repo.handles[documentId] ?? this._repo.find(documentId);
895
- await waitForHeads(handle, heads);
896
- }) ?? []);
897
- }
898
- await this._repo.flush(states?.map(({ documentId }) => documentId));
736
+ async flush({ documentIds } = {}) {
737
+ await this._repo.flush(documentIds);
899
738
  }
900
739
  async getHeads(documentId) {
901
740
  const handle = this._repo.handles[documentId];
@@ -909,24 +748,6 @@ var AutomergeHost = class extends import_context.Resource {
909
748
  return this._headsStore.getHeads(documentId);
910
749
  }
911
750
  }
912
- /**
913
- * Host <-> Client sync.
914
- */
915
- syncRepo(request) {
916
- return this._clientNetwork.syncRepo(request);
917
- }
918
- /**
919
- * Host <-> Client sync.
920
- */
921
- sendSyncMessage(request) {
922
- return this._clientNetwork.sendSyncMessage(request);
923
- }
924
- /**
925
- * Host <-> Client sync.
926
- */
927
- async getHostInfo() {
928
- return this._clientNetwork.getHostInfo();
929
- }
930
751
  };
931
752
  _ts_decorate2([
932
753
  import_tracing.trace.info()
@@ -971,331 +792,9 @@ var waitForHeads = async (handle, heads) => {
971
792
  var changeIsPresentInDoc = (doc, changeHash) => {
972
793
  return !!(0, import_automerge.getBackend)(doc).getChangeByHash(changeHash);
973
794
  };
974
- function _ts_decorate3(decorators, target, key, desc) {
975
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
976
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
977
- r = Reflect.decorate(decorators, target, key, desc);
978
- else
979
- for (var i = decorators.length - 1; i >= 0; i--)
980
- if (d = decorators[i])
981
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
982
- return c > 3 && r && Object.defineProperty(target, key, r), r;
983
- }
984
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts";
985
- var AutomergeDocumentLoaderImpl = class {
986
- constructor(_spaceId, _repo, _spaceKey) {
987
- this._spaceId = _spaceId;
988
- this._repo = _repo;
989
- this._spaceKey = _spaceKey;
990
- this._spaceRootDocHandle = null;
991
- this._objectDocumentHandles = /* @__PURE__ */ new Map();
992
- this._objectsPendingDocumentLoad = /* @__PURE__ */ new Set();
993
- this.onObjectDocumentLoaded = new import_async4.Event();
994
- }
995
- getAllHandles() {
996
- return this._spaceRootDocHandle != null ? [
997
- this._spaceRootDocHandle,
998
- ...new Set(this._objectDocumentHandles.values())
999
- ] : [];
1000
- }
1001
- async loadSpaceRootDocHandle(ctx, spaceState) {
1002
- if (this._spaceRootDocHandle != null) {
1003
- return;
1004
- }
1005
- if (!spaceState.rootUrl) {
1006
- throw new Error("Database opened with no rootUrl");
1007
- }
1008
- const existingDocHandle = await this._initDocHandle(ctx, spaceState.rootUrl);
1009
- const doc = existingDocHandle.docSync();
1010
- (0, import_invariant4.invariant)(doc, void 0, {
1011
- F: __dxlog_file4,
1012
- L: 84,
1013
- S: this,
1014
- A: [
1015
- "doc",
1016
- ""
1017
- ]
1018
- });
1019
- (0, import_invariant4.invariant)(doc.version === import_echo_protocol.SpaceDocVersion.CURRENT, void 0, {
1020
- F: __dxlog_file4,
1021
- L: 85,
1022
- S: this,
1023
- A: [
1024
- "doc.version === SpaceDocVersion.CURRENT",
1025
- ""
1026
- ]
1027
- });
1028
- if (doc.access == null) {
1029
- this._initDocAccess(existingDocHandle);
1030
- }
1031
- this._spaceRootDocHandle = existingDocHandle;
1032
- }
1033
- loadObjectDocument(objectIdOrMany) {
1034
- const objectIds = Array.isArray(objectIdOrMany) ? objectIdOrMany : [
1035
- objectIdOrMany
1036
- ];
1037
- let hasUrlsToLoad = false;
1038
- const urlsToLoad = {};
1039
- for (const objectId of objectIds) {
1040
- (0, import_invariant4.invariant)(this._spaceRootDocHandle, void 0, {
1041
- F: __dxlog_file4,
1042
- L: 97,
1043
- S: this,
1044
- A: [
1045
- "this._spaceRootDocHandle",
1046
- ""
1047
- ]
1048
- });
1049
- if (this._objectDocumentHandles.has(objectId) || this._objectsPendingDocumentLoad.has(objectId)) {
1050
- continue;
1051
- }
1052
- const spaceRootDoc = this._spaceRootDocHandle.docSync();
1053
- (0, import_invariant4.invariant)(spaceRootDoc, void 0, {
1054
- F: __dxlog_file4,
1055
- L: 102,
1056
- S: this,
1057
- A: [
1058
- "spaceRootDoc",
1059
- ""
1060
- ]
1061
- });
1062
- const documentUrl = (spaceRootDoc.links ?? {})[objectId];
1063
- if (documentUrl == null) {
1064
- this._objectsPendingDocumentLoad.add(objectId);
1065
- import_log3.log.info("loading delayed until object links are initialized", {
1066
- objectId
1067
- }, {
1068
- F: __dxlog_file4,
1069
- L: 106,
1070
- S: this,
1071
- C: (f, a) => f(...a)
1072
- });
1073
- } else {
1074
- urlsToLoad[objectId] = documentUrl;
1075
- hasUrlsToLoad = true;
1076
- }
1077
- }
1078
- if (hasUrlsToLoad) {
1079
- this._loadLinkedObjects(urlsToLoad);
1080
- }
1081
- }
1082
- getObjectDocumentId(objectId) {
1083
- (0, import_invariant4.invariant)(this._spaceRootDocHandle, void 0, {
1084
- F: __dxlog_file4,
1085
- L: 118,
1086
- S: this,
1087
- A: [
1088
- "this._spaceRootDocHandle",
1089
- ""
1090
- ]
1091
- });
1092
- const spaceRootDoc = this._spaceRootDocHandle.docSync();
1093
- (0, import_invariant4.invariant)(spaceRootDoc, void 0, {
1094
- F: __dxlog_file4,
1095
- L: 120,
1096
- S: this,
1097
- A: [
1098
- "spaceRootDoc",
1099
- ""
1100
- ]
1101
- });
1102
- if (spaceRootDoc.objects?.[objectId]) {
1103
- return this._spaceRootDocHandle.documentId;
1104
- }
1105
- const documentUrl = (spaceRootDoc.links ?? {})[objectId];
1106
- return documentUrl && (0, import_automerge_repo4.interpretAsDocumentId)(documentUrl);
1107
- }
1108
- onObjectLinksUpdated(links) {
1109
- if (!links) {
1110
- return;
1111
- }
1112
- const linksAwaitingLoad = Object.entries(links).filter(([objectId]) => this._objectsPendingDocumentLoad.has(objectId));
1113
- this._loadLinkedObjects(Object.fromEntries(linksAwaitingLoad));
1114
- linksAwaitingLoad.forEach(([objectId]) => this._objectsPendingDocumentLoad.delete(objectId));
1115
- }
1116
- getSpaceRootDocHandle() {
1117
- (0, import_invariant4.invariant)(this._spaceRootDocHandle, void 0, {
1118
- F: __dxlog_file4,
1119
- L: 140,
1120
- S: this,
1121
- A: [
1122
- "this._spaceRootDocHandle",
1123
- ""
1124
- ]
1125
- });
1126
- return this._spaceRootDocHandle;
1127
- }
1128
- createDocumentForObject(objectId) {
1129
- (0, import_invariant4.invariant)(this._spaceRootDocHandle, void 0, {
1130
- F: __dxlog_file4,
1131
- L: 145,
1132
- S: this,
1133
- A: [
1134
- "this._spaceRootDocHandle",
1135
- ""
1136
- ]
1137
- });
1138
- const spaceDocHandle = this._repo.create({
1139
- version: import_echo_protocol.SpaceDocVersion.CURRENT
1140
- });
1141
- this._initDocAccess(spaceDocHandle);
1142
- this.onObjectBoundToDocument(spaceDocHandle, objectId);
1143
- this._spaceRootDocHandle.change((newDoc) => {
1144
- newDoc.links ??= {};
1145
- newDoc.links[objectId] = spaceDocHandle.url;
1146
- });
1147
- return spaceDocHandle;
1148
- }
1149
- onObjectBoundToDocument(handle, objectId) {
1150
- this._objectDocumentHandles.set(objectId, handle);
1151
- }
1152
- clearHandleReferences() {
1153
- const objectsWithHandles = [
1154
- ...this._objectDocumentHandles.keys()
1155
- ];
1156
- this._objectDocumentHandles.clear();
1157
- this._spaceRootDocHandle = null;
1158
- return objectsWithHandles;
1159
- }
1160
- _loadLinkedObjects(links) {
1161
- if (!links) {
1162
- return;
1163
- }
1164
- for (const [objectId, automergeUrl] of Object.entries(links)) {
1165
- const logMeta = {
1166
- objectId,
1167
- automergeUrl
1168
- };
1169
- const objectDocumentHandle = this._objectDocumentHandles.get(objectId);
1170
- if (objectDocumentHandle != null && objectDocumentHandle.url !== automergeUrl) {
1171
- import_log3.log.warn("object already inlined in a different document, ignoring the link", {
1172
- ...logMeta,
1173
- actualDocumentUrl: objectDocumentHandle.url
1174
- }, {
1175
- F: __dxlog_file4,
1176
- L: 177,
1177
- S: this,
1178
- C: (f, a) => f(...a)
1179
- });
1180
- continue;
1181
- }
1182
- if (objectDocumentHandle?.url === automergeUrl) {
1183
- import_log3.log.warn("object document was already loaded", logMeta, {
1184
- F: __dxlog_file4,
1185
- L: 184,
1186
- S: this,
1187
- C: (f, a) => f(...a)
1188
- });
1189
- continue;
1190
- }
1191
- const handle = this._repo.find(automergeUrl);
1192
- import_log3.log.debug("document loading triggered", logMeta, {
1193
- F: __dxlog_file4,
1194
- L: 188,
1195
- S: this,
1196
- C: (f, a) => f(...a)
1197
- });
1198
- this._objectDocumentHandles.set(objectId, handle);
1199
- void this._createObjectOnDocumentLoad(handle, objectId);
1200
- }
1201
- }
1202
- async _initDocHandle(ctx, url) {
1203
- const docHandle = this._repo.find(url);
1204
- while (true) {
1205
- try {
1206
- await (0, import_debug.warnAfterTimeout)(5e3, "Automerge root doc load timeout (CoreDatabase)", async () => {
1207
- await (0, import_context4.cancelWithContext)(ctx, docHandle.whenReady());
1208
- });
1209
- break;
1210
- } catch (err) {
1211
- if (`${err}`.includes("Timeout")) {
1212
- import_log3.log.info("wraparound", {
1213
- id: docHandle.documentId,
1214
- state: docHandle.state
1215
- }, {
1216
- F: __dxlog_file4,
1217
- L: 204,
1218
- S: this,
1219
- C: (f, a) => f(...a)
1220
- });
1221
- continue;
1222
- }
1223
- throw err;
1224
- }
1225
- }
1226
- if (docHandle.state === "unavailable") {
1227
- throw new Error("Automerge document is unavailable");
1228
- }
1229
- return docHandle;
1230
- }
1231
- _initDocAccess(handle) {
1232
- handle.change((newDoc) => {
1233
- newDoc.access ??= {
1234
- spaceKey: this._spaceKey.toHex()
1235
- };
1236
- newDoc.access.spaceKey = this._spaceKey.toHex();
1237
- });
1238
- }
1239
- async _createObjectOnDocumentLoad(handle, objectId) {
1240
- try {
1241
- await handle.whenReady();
1242
- const logMeta = {
1243
- objectId,
1244
- docUrl: handle.url
1245
- };
1246
- if (this.onObjectDocumentLoaded.listenerCount() === 0) {
1247
- import_log3.log.info("document loaded after all listeners were removed", logMeta, {
1248
- F: __dxlog_file4,
1249
- L: 231,
1250
- S: this,
1251
- C: (f, a) => f(...a)
1252
- });
1253
- return;
1254
- }
1255
- const objectDocHandle = this._objectDocumentHandles.get(objectId);
1256
- if (objectDocHandle?.url !== handle.url) {
1257
- import_log3.log.warn("object was rebound while a document was loading, discarding handle", logMeta, {
1258
- F: __dxlog_file4,
1259
- L: 236,
1260
- S: this,
1261
- C: (f, a) => f(...a)
1262
- });
1263
- return;
1264
- }
1265
- this.onObjectDocumentLoaded.emit({
1266
- handle,
1267
- objectId
1268
- });
1269
- } catch (err) {
1270
- const shouldRetryLoading = this.onObjectDocumentLoaded.listenerCount() > 0;
1271
- import_log3.log.warn("failed to load a document", {
1272
- objectId,
1273
- automergeUrl: handle.url,
1274
- retryLoading: shouldRetryLoading,
1275
- err
1276
- }, {
1277
- F: __dxlog_file4,
1278
- L: 242,
1279
- S: this,
1280
- C: (f, a) => f(...a)
1281
- });
1282
- if (shouldRetryLoading) {
1283
- await this._createObjectOnDocumentLoad(handle, objectId);
1284
- }
1285
- }
1286
- }
1287
- };
1288
- _ts_decorate3([
1289
- import_tracing2.trace.span({
1290
- showInBrowserTimeline: true
1291
- })
1292
- ], AutomergeDocumentLoaderImpl.prototype, "loadSpaceRootDocHandle", null);
1293
- AutomergeDocumentLoaderImpl = _ts_decorate3([
1294
- import_tracing2.trace.resource()
1295
- ], AutomergeDocumentLoaderImpl);
1296
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator-connection.ts";
795
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator-connection.ts";
1297
796
  var DEFAULT_FACTORY = (params) => new import_teleport_extension_automerge_replicator.AutomergeReplicator(...params);
1298
- var MeshReplicatorConnection = class extends import_context5.Resource {
797
+ var MeshReplicatorConnection = class extends import_context4.Resource {
1299
798
  constructor(_params) {
1300
799
  super();
1301
800
  this._params = _params;
@@ -1311,8 +810,8 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1311
810
  });
1312
811
  this.writable = new WritableStream({
1313
812
  write: async (message, controller) => {
1314
- (0, import_invariant6.invariant)(this._isEnabled, "Writing to a disabled connection", {
1315
- F: __dxlog_file5,
813
+ (0, import_invariant4.invariant)(this._isEnabled, "Writing to a disabled connection", {
814
+ F: __dxlog_file3,
1316
815
  L: 47,
1317
816
  S: this,
1318
817
  A: [
@@ -1322,7 +821,7 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1322
821
  });
1323
822
  try {
1324
823
  await this.replicatorExtension.sendSyncMessage({
1325
- payload: import_automerge_repo5.cbor.encode(message)
824
+ payload: import_automerge_repo3.cbor.encode(message)
1326
825
  });
1327
826
  } catch (err) {
1328
827
  controller.error(err);
@@ -1339,12 +838,12 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1339
838
  onStartReplication: async (info, remotePeerId) => {
1340
839
  this.remoteDeviceKey = remotePeerId;
1341
840
  this._remotePeerId = info.id;
1342
- (0, import_log5.log)("onStartReplication", {
841
+ (0, import_log4.log)("onStartReplication", {
1343
842
  id: info.id,
1344
843
  thisPeerId: this.peerId,
1345
844
  remotePeerId: remotePeerId.toHex()
1346
845
  }, {
1347
- F: __dxlog_file5,
846
+ F: __dxlog_file3,
1348
847
  L: 81,
1349
848
  S: this,
1350
849
  C: (f, a) => f(...a)
@@ -1355,7 +854,7 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1355
854
  if (!this._isEnabled) {
1356
855
  return;
1357
856
  }
1358
- const message = import_automerge_repo5.cbor.decode(payload);
857
+ const message = import_automerge_repo3.cbor.decode(payload);
1359
858
  readableStreamController.enqueue(message);
1360
859
  },
1361
860
  onClose: async () => {
@@ -1370,8 +869,8 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1370
869
  }
1371
870
  }
1372
871
  get peerId() {
1373
- (0, import_invariant6.invariant)(this._remotePeerId != null, "Remote peer has not connected yet.", {
1374
- F: __dxlog_file5,
872
+ (0, import_invariant4.invariant)(this._remotePeerId != null, "Remote peer has not connected yet.", {
873
+ F: __dxlog_file3,
1375
874
  L: 107,
1376
875
  S: this,
1377
876
  A: [
@@ -1389,8 +888,8 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1389
888
  * Call after the remote peer has connected.
1390
889
  */
1391
890
  enable() {
1392
- (0, import_invariant6.invariant)(this._remotePeerId != null, "Remote peer has not connected yet.", {
1393
- F: __dxlog_file5,
891
+ (0, import_invariant4.invariant)(this._remotePeerId != null, "Remote peer has not connected yet.", {
892
+ F: __dxlog_file3,
1394
893
  L: 120,
1395
894
  S: this,
1396
895
  A: [
@@ -1407,7 +906,7 @@ var MeshReplicatorConnection = class extends import_context5.Resource {
1407
906
  this._isEnabled = false;
1408
907
  }
1409
908
  };
1410
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator.ts";
909
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator.ts";
1411
910
  var MeshEchoReplicator = class {
1412
911
  constructor() {
1413
912
  this._connections = /* @__PURE__ */ new Set();
@@ -1427,8 +926,8 @@ var MeshEchoReplicator = class {
1427
926
  this._context = null;
1428
927
  }
1429
928
  createExtension(extensionFactory) {
1430
- (0, import_invariant5.invariant)(this._context, void 0, {
1431
- F: __dxlog_file6,
929
+ (0, import_invariant3.invariant)(this._context, void 0, {
930
+ F: __dxlog_file4,
1432
931
  L: 51,
1433
932
  S: this,
1434
933
  A: [
@@ -1440,16 +939,16 @@ var MeshEchoReplicator = class {
1440
939
  ownPeerId: this._context.peerId,
1441
940
  replicatorFactory: extensionFactory,
1442
941
  onRemoteConnected: async () => {
1443
- (0, import_log4.log)("onRemoteConnected", {
942
+ (0, import_log3.log)("onRemoteConnected", {
1444
943
  peerId: connection.peerId
1445
944
  }, {
1446
- F: __dxlog_file6,
945
+ F: __dxlog_file4,
1447
946
  L: 57,
1448
947
  S: this,
1449
948
  C: (f, a) => f(...a)
1450
949
  });
1451
- (0, import_invariant5.invariant)(this._context, void 0, {
1452
- F: __dxlog_file6,
950
+ (0, import_invariant3.invariant)(this._context, void 0, {
951
+ F: __dxlog_file4,
1453
952
  L: 58,
1454
953
  S: this,
1455
954
  A: [
@@ -1466,10 +965,10 @@ var MeshEchoReplicator = class {
1466
965
  }
1467
966
  },
1468
967
  onRemoteDisconnected: async () => {
1469
- (0, import_log4.log)("onRemoteDisconnected", {
968
+ (0, import_log3.log)("onRemoteDisconnected", {
1470
969
  peerId: connection.peerId
1471
970
  }, {
1472
- F: __dxlog_file6,
971
+ F: __dxlog_file4,
1473
972
  L: 69,
1474
973
  S: this,
1475
974
  C: (f, a) => f(...a)
@@ -1480,17 +979,17 @@ var MeshEchoReplicator = class {
1480
979
  this._connections.delete(connection);
1481
980
  },
1482
981
  shouldAdvertise: async (params) => {
1483
- (0, import_log4.log)("shouldAdvertise", {
982
+ (0, import_log3.log)("shouldAdvertise", {
1484
983
  peerId: connection.peerId,
1485
984
  documentId: params.documentId
1486
985
  }, {
1487
- F: __dxlog_file6,
986
+ F: __dxlog_file4,
1488
987
  L: 76,
1489
988
  S: this,
1490
989
  C: (f, a) => f(...a)
1491
990
  });
1492
- (0, import_invariant5.invariant)(this._context, void 0, {
1493
- F: __dxlog_file6,
991
+ (0, import_invariant3.invariant)(this._context, void 0, {
992
+ F: __dxlog_file4,
1494
993
  L: 77,
1495
994
  S: this,
1496
995
  A: [
@@ -1501,11 +1000,11 @@ var MeshEchoReplicator = class {
1501
1000
  try {
1502
1001
  const spaceKey = await this._context.getContainingSpaceForDocument(params.documentId);
1503
1002
  if (!spaceKey) {
1504
- (0, import_log4.log)("space key not found for share policy check", {
1003
+ (0, import_log3.log)("space key not found for share policy check", {
1505
1004
  peerId: connection.peerId,
1506
1005
  documentId: params.documentId
1507
1006
  }, {
1508
- F: __dxlog_file6,
1007
+ F: __dxlog_file4,
1509
1008
  L: 81,
1510
1009
  S: this,
1511
1010
  C: (f, a) => f(...a)
@@ -1514,11 +1013,11 @@ var MeshEchoReplicator = class {
1514
1013
  }
1515
1014
  const authorizedDevices = this._authorizedDevices.get(spaceKey);
1516
1015
  if (!connection.remoteDeviceKey) {
1517
- (0, import_log4.log)("device key not found for share policy check", {
1016
+ (0, import_log3.log)("device key not found for share policy check", {
1518
1017
  peerId: connection.peerId,
1519
1018
  documentId: params.documentId
1520
1019
  }, {
1521
- F: __dxlog_file6,
1020
+ F: __dxlog_file4,
1522
1021
  L: 91,
1523
1022
  S: this,
1524
1023
  C: (f, a) => f(...a)
@@ -1526,7 +1025,7 @@ var MeshEchoReplicator = class {
1526
1025
  return false;
1527
1026
  }
1528
1027
  const isAuthorized = authorizedDevices?.has(connection.remoteDeviceKey) ?? false;
1529
- (0, import_log4.log)("share policy check", {
1028
+ (0, import_log3.log)("share policy check", {
1530
1029
  localPeer: this._context.peerId,
1531
1030
  remotePeer: connection.peerId,
1532
1031
  documentId: params.documentId,
@@ -1534,15 +1033,15 @@ var MeshEchoReplicator = class {
1534
1033
  spaceKey,
1535
1034
  isAuthorized
1536
1035
  }, {
1537
- F: __dxlog_file6,
1036
+ F: __dxlog_file4,
1538
1037
  L: 99,
1539
1038
  S: this,
1540
1039
  C: (f, a) => f(...a)
1541
1040
  });
1542
1041
  return isAuthorized;
1543
1042
  } catch (err) {
1544
- import_log4.log.catch(err, void 0, {
1545
- F: __dxlog_file6,
1043
+ import_log3.log.catch(err, void 0, {
1044
+ F: __dxlog_file4,
1546
1045
  L: 109,
1547
1046
  S: this,
1548
1047
  C: (f, a) => f(...a)
@@ -1555,11 +1054,11 @@ var MeshEchoReplicator = class {
1555
1054
  return connection.replicatorExtension;
1556
1055
  }
1557
1056
  authorizeDevice(spaceKey, deviceKey) {
1558
- (0, import_log4.log)("authorizeDevice", {
1057
+ (0, import_log3.log)("authorizeDevice", {
1559
1058
  spaceKey,
1560
1059
  deviceKey
1561
1060
  }, {
1562
- F: __dxlog_file6,
1061
+ F: __dxlog_file4,
1563
1062
  L: 120,
1564
1063
  S: this,
1565
1064
  C: (f, a) => f(...a)
@@ -1578,14 +1077,12 @@ var MeshEchoReplicator = class {
1578
1077
  0 && (module.exports = {
1579
1078
  AuthExtension,
1580
1079
  AuthStatus,
1581
- AutomergeDocumentLoaderImpl,
1582
1080
  AutomergeHost,
1583
1081
  CredentialRetrieverExtension,
1584
1082
  CredentialServerExtension,
1585
1083
  DataServiceImpl,
1586
1084
  DocumentsSynchronizer,
1587
1085
  LevelDBStorageAdapter,
1588
- LocalHostNetworkAdapter,
1589
1086
  MOCK_AUTH_PROVIDER,
1590
1087
  MOCK_AUTH_VERIFIER,
1591
1088
  MeshEchoReplicator,