@dxos/echo-pipeline 0.5.9-main.a2de4fa → 0.5.9-main.a75fa71

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 (31) hide show
  1. package/dist/lib/browser/{chunk-I2J5TTHJ.mjs → chunk-HS77A4I4.mjs} +174 -23
  2. package/dist/lib/browser/{chunk-I2J5TTHJ.mjs.map → chunk-HS77A4I4.mjs.map} +4 -4
  3. package/dist/lib/browser/index.mjs +91 -42
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +11 -7
  7. package/dist/lib/browser/testing/index.mjs.map +1 -1
  8. package/dist/lib/node/{chunk-QPCNQ4ZK.cjs → chunk-Y5U7UXEL.cjs} +185 -34
  9. package/dist/lib/node/{chunk-QPCNQ4ZK.cjs.map → chunk-Y5U7UXEL.cjs.map} +4 -4
  10. package/dist/lib/node/index.cjs +126 -77
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +21 -17
  14. package/dist/lib/node/testing/index.cjs.map +1 -1
  15. package/dist/types/src/automerge/automerge-host.d.ts +40 -2
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/echo-network-adapter.d.ts +2 -0
  18. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  19. package/dist/types/src/space/admission-discovery-extension.d.ts +30 -0
  20. package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -0
  21. package/dist/types/src/space/index.d.ts +1 -0
  22. package/dist/types/src/space/index.d.ts.map +1 -1
  23. package/dist/types/src/space/space-manager.d.ts +8 -0
  24. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  25. package/package.json +33 -33
  26. package/src/automerge/automerge-host.ts +96 -18
  27. package/src/automerge/echo-network-adapter.ts +10 -4
  28. package/src/automerge/mesh-echo-replicator.ts +1 -1
  29. package/src/space/admission-discovery-extension.ts +90 -0
  30. package/src/space/index.ts +1 -0
  31. package/src/space/space-manager.ts +46 -1
@@ -3,6 +3,8 @@ import {
3
3
  AuthExtension,
4
4
  AuthStatus,
5
5
  Buffer,
6
+ CredentialRetrieverExtension,
7
+ CredentialServerExtension,
6
8
  DataServiceImpl,
7
9
  MOCK_AUTH_PROVIDER,
8
10
  MOCK_AUTH_VERIFIER,
@@ -23,14 +25,13 @@ import {
23
25
  mapTimeframeToFeedIndexes,
24
26
  startAfter,
25
27
  valueEncoding
26
- } from "./chunk-I2J5TTHJ.mjs";
28
+ } from "./chunk-HS77A4I4.mjs";
27
29
 
28
30
  // packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts
29
- import { Event } from "@dxos/async";
30
- import { next as automerge, getBackend, getHeads } from "@dxos/automerge/automerge";
31
+ import { Event, asyncTimeout } from "@dxos/async";
32
+ import { next as automerge, getBackend, getHeads, isAutomerge, save } from "@dxos/automerge/automerge";
31
33
  import { Repo } from "@dxos/automerge/automerge-repo";
32
- import { Context } from "@dxos/context";
33
- import { invariant as invariant3 } from "@dxos/invariant";
34
+ import { Context, cancelWithContext } from "@dxos/context";
34
35
  import { PublicKey } from "@dxos/keys";
35
36
  import { objectPointerCodec } from "@dxos/protocols";
36
37
  import { trace } from "@dxos/tracing";
@@ -318,10 +319,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
318
319
  _emitPeerCandidate(connection) {
319
320
  this.emit("peer-candidate", {
320
321
  peerId: connection.peerId,
321
- peerMetadata: {
322
- // TODO(dmaretskyi): Refactor this.
323
- dxos_peerSource: "EchoNetworkAdapter"
324
- }
322
+ peerMetadata: createEchoPeerMetadata()
325
323
  });
326
324
  }
327
325
  };
@@ -337,6 +335,11 @@ _ts_decorate([
337
335
  _ts_decorate([
338
336
  synchronized
339
337
  ], EchoNetworkAdapter.prototype, "removeReplicator", null);
338
+ var createEchoPeerMetadata = () => ({
339
+ // TODO(dmaretskyi): Refactor this.
340
+ dxos_peerSource: "EchoNetworkAdapter"
341
+ });
342
+ var isEchoPeerMetadata = (metadata) => metadata?.dxos_peerSource === "EchoNetworkAdapter";
340
343
 
341
344
  // packages/core/echo/echo-pipeline/src/automerge/leveldb-storage-adapter.ts
342
345
  import { LifecycleState as LifecycleState2, Resource } from "@dxos/context";
@@ -586,7 +589,10 @@ function _ts_decorate2(decorators, target, key, desc) {
586
589
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
587
590
  var AutomergeHost = class {
588
591
  constructor({ db, indexMetadataStore }) {
589
- this._ctx = new Context();
592
+ this._ctx = new Context(void 0, {
593
+ F: __dxlog_file3,
594
+ L: 71
595
+ });
590
596
  this._echoNetworkAdapter = new EchoNetworkAdapter({
591
597
  getContainingSpaceForDocument: this._getContainingSpaceForDocument.bind(this)
592
598
  });
@@ -625,6 +631,9 @@ var AutomergeHost = class {
625
631
  await this._echoNetworkAdapter.close();
626
632
  await this._ctx.dispose();
627
633
  }
634
+ /**
635
+ * @deprecated To be abstracted away.
636
+ */
628
637
  get repo() {
629
638
  return this._repo;
630
639
  }
@@ -634,6 +643,39 @@ var AutomergeHost = class {
634
643
  async removeReplicator(replicator) {
635
644
  await this._echoNetworkAdapter.removeReplicator(replicator);
636
645
  }
646
+ /**
647
+ * Loads the document handle from the repo and waits for it to be ready.
648
+ */
649
+ async loadDoc(ctx, documentId, opts) {
650
+ let handle;
651
+ if (typeof documentId === "string") {
652
+ handle = this._repo.handles[documentId];
653
+ }
654
+ if (!handle) {
655
+ handle = this._repo.find(documentId);
656
+ }
657
+ if (!handle.isReady()) {
658
+ if (!opts?.timeout) {
659
+ await cancelWithContext(ctx, handle.whenReady());
660
+ } else {
661
+ await cancelWithContext(ctx, asyncTimeout(handle.whenReady(), opts.timeout));
662
+ }
663
+ }
664
+ return handle;
665
+ }
666
+ /**
667
+ * Create new persisted document.
668
+ */
669
+ createDoc(initialValue, opts) {
670
+ if (opts?.preserveHistory) {
671
+ if (!isAutomerge(initialValue)) {
672
+ throw new TypeError("Initial value must be an Automerge document");
673
+ }
674
+ return this._repo.import(save(initialValue));
675
+ } else {
676
+ return this._repo.create(initialValue);
677
+ }
678
+ }
637
679
  // TODO(dmaretskyi): Share based on HALO permissions and space affinity.
638
680
  // Hosts, running in the worker, don't share documents unless requested by other peers.
639
681
  // NOTE: If both peers return sharePolicy=false the replication will not happen
@@ -646,7 +688,7 @@ var AutomergeHost = class {
646
688
  return false;
647
689
  }
648
690
  const peerMetadata = this.repo.peerMetadataByPeerId[peerId];
649
- if (peerMetadata?.dxos_peerSource === "EchoNetworkAdapter") {
691
+ if (isEchoPeerMetadata(peerMetadata)) {
650
692
  return this._echoNetworkAdapter.shouldAdvertize(peerId, {
651
693
  documentId
652
694
  });
@@ -718,31 +760,36 @@ var AutomergeHost = class {
718
760
  }
719
761
  return PublicKey.from(spaceKeyHex);
720
762
  }
721
- //
722
- // Methods for client-services.
723
- //
763
+ /**
764
+ * Flush documents to disk.
765
+ */
724
766
  async flush({ states }) {
725
- await Promise.all(states?.map(async ({ heads, documentId }) => {
726
- invariant3(heads, "heads are required for flush", {
727
- F: __dxlog_file3,
728
- L: 223,
729
- S: this,
730
- A: [
731
- "heads",
732
- "'heads are required for flush'"
733
- ]
734
- });
735
- const handle = this.repo.handles[documentId] ?? this._repo.find(documentId);
736
- await waitForHeads(handle, heads);
737
- }) ?? []);
767
+ if (states) {
768
+ await Promise.all(states.map(async ({ heads, documentId }) => {
769
+ if (!heads) {
770
+ return;
771
+ }
772
+ const handle = this.repo.handles[documentId] ?? this._repo.find(documentId);
773
+ await waitForHeads(handle, heads);
774
+ }) ?? []);
775
+ }
738
776
  await this._repo.flush(states?.map(({ documentId }) => documentId));
739
777
  }
778
+ /**
779
+ * Host <-> Client sync.
780
+ */
740
781
  syncRepo(request) {
741
782
  return this._clientNetwork.syncRepo(request);
742
783
  }
784
+ /**
785
+ * Host <-> Client sync.
786
+ */
743
787
  sendSyncMessage(request) {
744
788
  return this._clientNetwork.sendSyncMessage(request);
745
789
  }
790
+ /**
791
+ * Host <-> Client sync.
792
+ */
746
793
  async getHostInfo() {
747
794
  return this._clientNetwork.getHostInfo();
748
795
  }
@@ -796,10 +843,10 @@ var changeIsPresentInDoc = (doc, changeHash) => {
796
843
 
797
844
  // packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts
798
845
  import { Event as Event2 } from "@dxos/async";
799
- import { cancelWithContext } from "@dxos/context";
846
+ import { cancelWithContext as cancelWithContext2 } from "@dxos/context";
800
847
  import { warnAfterTimeout } from "@dxos/debug";
801
848
  import { SpaceDocVersion } from "@dxos/echo-protocol";
802
- import { invariant as invariant4 } from "@dxos/invariant";
849
+ import { invariant as invariant3 } from "@dxos/invariant";
803
850
  import { log as log2 } from "@dxos/log";
804
851
  import { trace as trace2 } from "@dxos/tracing";
805
852
  function _ts_decorate3(decorators, target, key, desc) {
@@ -846,7 +893,7 @@ var AutomergeDocumentLoaderImpl = class {
846
893
  } else {
847
894
  const existingDocHandle = await this._initDocHandle(ctx, spaceState.rootUrl);
848
895
  const doc = existingDocHandle.docSync();
849
- invariant4(doc, void 0, {
896
+ invariant3(doc, void 0, {
850
897
  F: __dxlog_file4,
851
898
  L: 77,
852
899
  S: this,
@@ -868,7 +915,7 @@ var AutomergeDocumentLoaderImpl = class {
868
915
  let hasUrlsToLoad = false;
869
916
  const urlsToLoad = {};
870
917
  for (const objectId of objectIds) {
871
- invariant4(this._spaceRootDocHandle, void 0, {
918
+ invariant3(this._spaceRootDocHandle, void 0, {
872
919
  F: __dxlog_file4,
873
920
  L: 90,
874
921
  S: this,
@@ -881,7 +928,7 @@ var AutomergeDocumentLoaderImpl = class {
881
928
  continue;
882
929
  }
883
930
  const spaceRootDoc = this._spaceRootDocHandle.docSync();
884
- invariant4(spaceRootDoc, void 0, {
931
+ invariant3(spaceRootDoc, void 0, {
885
932
  F: __dxlog_file4,
886
933
  L: 95,
887
934
  S: this,
@@ -919,7 +966,7 @@ var AutomergeDocumentLoaderImpl = class {
919
966
  linksAwaitingLoad.forEach(([objectId]) => this._objectsPendingDocumentLoad.delete(objectId));
920
967
  }
921
968
  getSpaceRootDocHandle() {
922
- invariant4(this._spaceRootDocHandle, void 0, {
969
+ invariant3(this._spaceRootDocHandle, void 0, {
923
970
  F: __dxlog_file4,
924
971
  L: 122,
925
972
  S: this,
@@ -931,7 +978,7 @@ var AutomergeDocumentLoaderImpl = class {
931
978
  return this._spaceRootDocHandle;
932
979
  }
933
980
  createDocumentForObject(objectId) {
934
- invariant4(this._spaceRootDocHandle, void 0, {
981
+ invariant3(this._spaceRootDocHandle, void 0, {
935
982
  F: __dxlog_file4,
936
983
  L: 127,
937
984
  S: this,
@@ -1009,7 +1056,7 @@ var AutomergeDocumentLoaderImpl = class {
1009
1056
  while (true) {
1010
1057
  try {
1011
1058
  await warnAfterTimeout(5e3, "Automerge root doc load timeout (CoreDatabase)", async () => {
1012
- await cancelWithContext(ctx, docHandle.whenReady());
1059
+ await cancelWithContext2(ctx, docHandle.whenReady());
1013
1060
  });
1014
1061
  break;
1015
1062
  } catch (err) {
@@ -1112,7 +1159,7 @@ AutomergeDocumentLoaderImpl = _ts_decorate3([
1112
1159
  // packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator.ts
1113
1160
  import { cbor as cbor2 } from "@dxos/automerge/automerge-repo";
1114
1161
  import { Resource as Resource2 } from "@dxos/context";
1115
- import { invariant as invariant5 } from "@dxos/invariant";
1162
+ import { invariant as invariant4 } from "@dxos/invariant";
1116
1163
  import { PublicKey as PublicKey2 } from "@dxos/keys";
1117
1164
  import { log as log3 } from "@dxos/log";
1118
1165
  import { AutomergeReplicator } from "@dxos/teleport-extension-automerge-replicator";
@@ -1143,7 +1190,7 @@ var MeshEchoReplicator = class {
1143
1190
  this._context = null;
1144
1191
  }
1145
1192
  createExtension() {
1146
- invariant5(this._context, void 0, {
1193
+ invariant4(this._context, void 0, {
1147
1194
  F: __dxlog_file5,
1148
1195
  L: 54,
1149
1196
  S: this,
@@ -1163,7 +1210,7 @@ var MeshEchoReplicator = class {
1163
1210
  S: this,
1164
1211
  C: (f, a) => f(...a)
1165
1212
  });
1166
- invariant5(this._context, void 0, {
1213
+ invariant4(this._context, void 0, {
1167
1214
  F: __dxlog_file5,
1168
1215
  L: 60,
1169
1216
  S: this,
@@ -1190,8 +1237,8 @@ var MeshEchoReplicator = class {
1190
1237
  C: (f, a) => f(...a)
1191
1238
  });
1192
1239
  this._context?.onConnectionClosed(connection);
1193
- await connection.disable();
1194
1240
  this._connectionsPerPeer.delete(connection.peerId);
1241
+ await connection.disable();
1195
1242
  this._connections.delete(connection);
1196
1243
  },
1197
1244
  shouldAdvertize: async (params) => {
@@ -1204,7 +1251,7 @@ var MeshEchoReplicator = class {
1204
1251
  S: this,
1205
1252
  C: (f, a) => f(...a)
1206
1253
  });
1207
- invariant5(this._context, void 0, {
1254
+ invariant4(this._context, void 0, {
1208
1255
  F: __dxlog_file5,
1209
1256
  L: 79,
1210
1257
  S: this,
@@ -1344,7 +1391,7 @@ var MeshReplicatorConnection = class extends Resource2 {
1344
1391
  });
1345
1392
  }
1346
1393
  get peerId() {
1347
- invariant5(this._remotePeerId != null, "Remote peer has not connected yet.", {
1394
+ invariant4(this._remotePeerId != null, "Remote peer has not connected yet.", {
1348
1395
  F: __dxlog_file5,
1349
1396
  L: 215,
1350
1397
  S: this,
@@ -1363,7 +1410,7 @@ var MeshReplicatorConnection = class extends Resource2 {
1363
1410
  * Call after the remote peer has connected.
1364
1411
  */
1365
1412
  async enable() {
1366
- invariant5(this._remotePeerId != null, "Remote peer has not connected yet.", {
1413
+ invariant4(this._remotePeerId != null, "Remote peer has not connected yet.", {
1367
1414
  F: __dxlog_file5,
1368
1415
  L: 228,
1369
1416
  S: this,
@@ -1386,6 +1433,8 @@ export {
1386
1433
  AuthStatus,
1387
1434
  AutomergeDocumentLoaderImpl,
1388
1435
  AutomergeHost,
1436
+ CredentialRetrieverExtension,
1437
+ CredentialServerExtension,
1389
1438
  DataServiceImpl,
1390
1439
  LevelDBStorageAdapter,
1391
1440
  LocalHostNetworkAdapter,