@dxos/echo-pipeline 0.3.11-main.4eab977 → 0.3.11-main.4faaf44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-W3SSYW3X.mjs → chunk-AUYVKEFF.mjs} +162 -40
- package/dist/lib/browser/chunk-AUYVKEFF.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +30 -8
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node/{chunk-KTFCZMAY.cjs → chunk-ETE7TCKN.cjs} +161 -42
- package/dist/lib/node/chunk-ETE7TCKN.cjs.map +7 -0
- package/dist/lib/node/index.cjs +26 -26
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +43 -22
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/types/src/automerge/automerge-host.d.ts +35 -2
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/index.d.ts +1 -1
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +1 -3
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +2 -2
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/testing/change-metadata.d.ts +8 -0
- package/dist/types/src/testing/change-metadata.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/automerge/automerge-host.test.ts +319 -34
- package/src/automerge/automerge-host.ts +115 -20
- package/src/automerge/index.ts +1 -1
- package/src/metadata/metadata-store.ts +12 -2
- package/src/space/space-manager.ts +3 -3
- package/src/testing/change-metadata.ts +27 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/test-agent-builder.ts +1 -1
- package/dist/lib/browser/chunk-W3SSYW3X.mjs.map +0 -7
- package/dist/lib/node/chunk-KTFCZMAY.cjs.map +0 -7
|
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var chunk_ETE7TCKN_exports = {};
|
|
30
|
+
__export(chunk_ETE7TCKN_exports, {
|
|
31
31
|
AuthExtension: () => AuthExtension,
|
|
32
32
|
AuthStatus: () => AuthStatus,
|
|
33
33
|
AutomergeHost: () => AutomergeHost,
|
|
@@ -54,7 +54,7 @@ __export(chunk_KTFCZMAY_exports, {
|
|
|
54
54
|
startAfter: () => startAfter,
|
|
55
55
|
valueEncoding: () => valueEncoding
|
|
56
56
|
});
|
|
57
|
-
module.exports = __toCommonJS(
|
|
57
|
+
module.exports = __toCommonJS(chunk_ETE7TCKN_exports);
|
|
58
58
|
var import_hypercore = require("@dxos/hypercore");
|
|
59
59
|
var import_protocols = require("@dxos/protocols");
|
|
60
60
|
var import_invariant = require("@dxos/invariant");
|
|
@@ -147,10 +147,14 @@ var import_keys7 = require("@dxos/keys");
|
|
|
147
147
|
var import_log12 = require("@dxos/log");
|
|
148
148
|
var import_protocols7 = require("@dxos/protocols");
|
|
149
149
|
var import_util9 = require("@dxos/util");
|
|
150
|
+
var import_async10 = require("@dxos/async");
|
|
150
151
|
var import_automerge_repo = require("@dxos/automerge/automerge-repo");
|
|
152
|
+
var import_automerge_repo_storage_indexeddb = require("@dxos/automerge/automerge-repo-storage-indexeddb");
|
|
151
153
|
var import_codec_protobuf2 = require("@dxos/codec-protobuf");
|
|
152
154
|
var import_invariant10 = require("@dxos/invariant");
|
|
155
|
+
var import_keys8 = require("@dxos/keys");
|
|
153
156
|
var import_log13 = require("@dxos/log");
|
|
157
|
+
var import_random_access_storage = require("@dxos/random-access-storage");
|
|
154
158
|
var import_teleport_extension_automerge_replicator = require("@dxos/teleport-extension-automerge-replicator");
|
|
155
159
|
var import_util10 = require("@dxos/util");
|
|
156
160
|
var codec = import_protocols.schema.getCodecForType("dxos.echo.feed.FeedMessage");
|
|
@@ -619,12 +623,12 @@ var emptyLargeSpaceMetadata = () => ({});
|
|
|
619
623
|
var EchoMetadata = import_protocols4.schema.getCodecForType("dxos.echo.metadata.EchoMetadata");
|
|
620
624
|
var LargeSpaceMetadata = import_protocols4.schema.getCodecForType("dxos.echo.metadata.LargeSpaceMetadata");
|
|
621
625
|
var MetadataStore = class {
|
|
622
|
-
constructor(
|
|
623
|
-
this._directory = _directory;
|
|
626
|
+
constructor(directory) {
|
|
624
627
|
this._metadata = emptyEchoMetadata();
|
|
625
628
|
this._spaceLargeMetadata = new import_util3.ComplexMap(import_keys3.PublicKey.hash);
|
|
626
629
|
this._metadataFile = void 0;
|
|
627
630
|
this.update = new import_async2.Event();
|
|
631
|
+
this._directory = directory;
|
|
628
632
|
}
|
|
629
633
|
get metadata() {
|
|
630
634
|
return this._metadata;
|
|
@@ -653,7 +657,7 @@ var MetadataStore = class {
|
|
|
653
657
|
name: file.filename
|
|
654
658
|
}, {
|
|
655
659
|
F: __dxlog_file4,
|
|
656
|
-
L:
|
|
660
|
+
L: 85,
|
|
657
661
|
S: this,
|
|
658
662
|
C: (f, a) => f(...a)
|
|
659
663
|
});
|
|
@@ -673,6 +677,9 @@ var MetadataStore = class {
|
|
|
673
677
|
await file.close();
|
|
674
678
|
}
|
|
675
679
|
}
|
|
680
|
+
/**
|
|
681
|
+
* @internal
|
|
682
|
+
*/
|
|
676
683
|
async _writeFile(file, codec2, data) {
|
|
677
684
|
const encoded = (0, import_util3.arrayToBuffer)(codec2.encode(data));
|
|
678
685
|
const checksum = import_crc_32.default.buf(encoded);
|
|
@@ -686,7 +693,7 @@ var MetadataStore = class {
|
|
|
686
693
|
checksum
|
|
687
694
|
}, {
|
|
688
695
|
F: __dxlog_file4,
|
|
689
|
-
L:
|
|
696
|
+
L: 120,
|
|
690
697
|
S: this,
|
|
691
698
|
C: (f, a) => f(...a)
|
|
692
699
|
});
|
|
@@ -718,7 +725,7 @@ var MetadataStore = class {
|
|
|
718
725
|
err
|
|
719
726
|
}, {
|
|
720
727
|
F: __dxlog_file4,
|
|
721
|
-
L:
|
|
728
|
+
L: 151,
|
|
722
729
|
S: this,
|
|
723
730
|
C: (f, a) => f(...a)
|
|
724
731
|
});
|
|
@@ -735,7 +742,7 @@ var MetadataStore = class {
|
|
|
735
742
|
err
|
|
736
743
|
}, {
|
|
737
744
|
F: __dxlog_file4,
|
|
738
|
-
L:
|
|
745
|
+
L: 163,
|
|
739
746
|
S: this,
|
|
740
747
|
C: (f, a) => f(...a)
|
|
741
748
|
});
|
|
@@ -765,7 +772,7 @@ var MetadataStore = class {
|
|
|
765
772
|
err
|
|
766
773
|
}, {
|
|
767
774
|
F: __dxlog_file4,
|
|
768
|
-
L:
|
|
775
|
+
L: 192,
|
|
769
776
|
S: this,
|
|
770
777
|
C: (f, a) => f(...a)
|
|
771
778
|
});
|
|
@@ -786,7 +793,7 @@ var MetadataStore = class {
|
|
|
786
793
|
const space = this.spaces.find((space2) => space2.key === spaceKey);
|
|
787
794
|
(0, import_invariant4.invariant)(space, "Space not found", {
|
|
788
795
|
F: __dxlog_file4,
|
|
789
|
-
L:
|
|
796
|
+
L: 214,
|
|
790
797
|
S: this,
|
|
791
798
|
A: [
|
|
792
799
|
"space",
|
|
@@ -810,7 +817,7 @@ var MetadataStore = class {
|
|
|
810
817
|
async clear() {
|
|
811
818
|
(0, import_log3.log)("clearing all metadata", void 0, {
|
|
812
819
|
F: __dxlog_file4,
|
|
813
|
-
L:
|
|
820
|
+
L: 233,
|
|
814
821
|
S: this,
|
|
815
822
|
C: (f, a) => f(...a)
|
|
816
823
|
});
|
|
@@ -823,7 +830,7 @@ var MetadataStore = class {
|
|
|
823
830
|
async setIdentityRecord(record) {
|
|
824
831
|
(0, import_invariant4.invariant)(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
|
|
825
832
|
F: __dxlog_file4,
|
|
826
|
-
L:
|
|
833
|
+
L: 243,
|
|
827
834
|
S: this,
|
|
828
835
|
A: [
|
|
829
836
|
"!this._metadata.identity",
|
|
@@ -837,7 +844,7 @@ var MetadataStore = class {
|
|
|
837
844
|
async addSpace(record) {
|
|
838
845
|
(0, import_invariant4.invariant)(!(this._metadata.spaces ?? []).find((space) => space.key === record.key), "Cannot overwrite existing space in metadata", {
|
|
839
846
|
F: __dxlog_file4,
|
|
840
|
-
L:
|
|
847
|
+
L: 251,
|
|
841
848
|
S: this,
|
|
842
849
|
A: [
|
|
843
850
|
"!(this._metadata.spaces ?? []).find((space) => space.key === record.key)",
|
|
@@ -1531,7 +1538,7 @@ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipelin
|
|
|
1531
1538
|
var MESSAGES_PER_SNAPSHOT = 10;
|
|
1532
1539
|
var AUTOMATIC_SNAPSHOT_DEBOUNCE_INTERVAL = 5e3;
|
|
1533
1540
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL = 5e3;
|
|
1534
|
-
var DataPipeline = class
|
|
1541
|
+
var DataPipeline = class {
|
|
1535
1542
|
constructor(_params) {
|
|
1536
1543
|
this._params = _params;
|
|
1537
1544
|
this._ctx = new import_context5.Context();
|
|
@@ -1986,7 +1993,7 @@ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeli
|
|
|
1986
1993
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL2 = 500;
|
|
1987
1994
|
var CONTROL_PIPELINE_SNAPSHOT_DELAY = 1e4;
|
|
1988
1995
|
var USE_SNAPSHOTS = true;
|
|
1989
|
-
var ControlPipeline = class
|
|
1996
|
+
var ControlPipeline = class {
|
|
1990
1997
|
constructor({ spaceKey, genesisFeed, feedProvider, metadataStore }) {
|
|
1991
1998
|
this._ctx = new import_context6.Context();
|
|
1992
1999
|
this._lastTimeframeSaveTime = Date.now();
|
|
@@ -2230,7 +2237,7 @@ function _ts_decorate6(decorators, target, key, desc) {
|
|
|
2230
2237
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2231
2238
|
}
|
|
2232
2239
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space.ts";
|
|
2233
|
-
var Space = class
|
|
2240
|
+
var Space = class {
|
|
2234
2241
|
constructor(params) {
|
|
2235
2242
|
this._addFeedLock = new import_async7.Lock();
|
|
2236
2243
|
this.onCredentialProcessed = new import_util6.Callback();
|
|
@@ -2603,7 +2610,7 @@ var SpaceProtocolSession = class {
|
|
|
2603
2610
|
this.replicator = new import_teleport_extension_replicator.ReplicatorExtension().setOptions({
|
|
2604
2611
|
upload: true
|
|
2605
2612
|
});
|
|
2606
|
-
this._authStatus =
|
|
2613
|
+
this._authStatus = "INITIAL";
|
|
2607
2614
|
this._wireParams = wireParams;
|
|
2608
2615
|
this._swarmIdentity = swarmIdentity;
|
|
2609
2616
|
this._onSessionAuth = onSessionAuth;
|
|
@@ -2632,11 +2639,11 @@ var SpaceProtocolSession = class {
|
|
|
2632
2639
|
S: this,
|
|
2633
2640
|
C: (f, a) => f(...a)
|
|
2634
2641
|
});
|
|
2635
|
-
this._authStatus =
|
|
2642
|
+
this._authStatus = "SUCCESS";
|
|
2636
2643
|
this._onSessionAuth?.(this._teleport);
|
|
2637
2644
|
},
|
|
2638
2645
|
onAuthFailure: () => {
|
|
2639
|
-
this._authStatus =
|
|
2646
|
+
this._authStatus = "FAILURE";
|
|
2640
2647
|
this._onAuthFailure?.(this._teleport);
|
|
2641
2648
|
}
|
|
2642
2649
|
}));
|
|
@@ -2673,7 +2680,7 @@ function _ts_decorate8(decorators, target, key, desc) {
|
|
|
2673
2680
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2674
2681
|
}
|
|
2675
2682
|
var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space-manager.ts";
|
|
2676
|
-
var SpaceManager = class
|
|
2683
|
+
var SpaceManager = class {
|
|
2677
2684
|
constructor({ feedStore, networkManager, modelFactory, metadataStore, snapshotStore, blobStore }) {
|
|
2678
2685
|
this._spaces = new import_util9.ComplexMap(import_keys7.PublicKey.hash);
|
|
2679
2686
|
this._instanceId = import_keys7.PublicKey.random().toHex();
|
|
@@ -2695,7 +2702,7 @@ var SpaceManager = class SpaceManager2 {
|
|
|
2695
2702
|
...this._spaces.values()
|
|
2696
2703
|
].map((space) => space.close()));
|
|
2697
2704
|
}
|
|
2698
|
-
async constructSpace({ metadata, swarmIdentity,
|
|
2705
|
+
async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, memberKey }) {
|
|
2699
2706
|
import_log12.log.trace("dxos.echo.space-manager.construct-space", import_protocols7.trace.begin({
|
|
2700
2707
|
id: this._instanceId
|
|
2701
2708
|
}), {
|
|
@@ -2718,7 +2725,7 @@ var SpaceManager = class SpaceManager2 {
|
|
|
2718
2725
|
topic: spaceKey,
|
|
2719
2726
|
swarmIdentity,
|
|
2720
2727
|
networkManager: this._networkManager,
|
|
2721
|
-
onSessionAuth:
|
|
2728
|
+
onSessionAuth: onAuthorizedConnection,
|
|
2722
2729
|
onAuthFailure,
|
|
2723
2730
|
blobStore: this._blobStore
|
|
2724
2731
|
});
|
|
@@ -2757,17 +2764,80 @@ SpaceManager = _ts_decorate8([
|
|
|
2757
2764
|
var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
|
|
2758
2765
|
var AutomergeHost = class {
|
|
2759
2766
|
constructor(storageDirectory) {
|
|
2767
|
+
this._authorizedDevices = new import_util10.ComplexMap(import_keys8.PublicKey.hash);
|
|
2760
2768
|
this._meshNetwork = new MeshNetworkAdapter();
|
|
2761
2769
|
this._clientNetwork = new LocalHostNetworkAdapter();
|
|
2762
|
-
this._storage = new AutomergeStorageAdapter(storageDirectory);
|
|
2770
|
+
this._storage = storageDirectory.type === import_random_access_storage.StorageType.IDB ? new import_automerge_repo_storage_indexeddb.IndexedDBStorageAdapter(storageDirectory.path, "data") : new AutomergeStorageAdapter(storageDirectory);
|
|
2763
2771
|
this._repo = new import_automerge_repo.Repo({
|
|
2772
|
+
peerId: `host-${import_keys8.PublicKey.random().toHex()}`,
|
|
2764
2773
|
network: [
|
|
2765
2774
|
this._clientNetwork,
|
|
2766
2775
|
this._meshNetwork
|
|
2767
2776
|
],
|
|
2768
2777
|
storage: this._storage,
|
|
2769
2778
|
// TODO(dmaretskyi): Share based on HALO permissions and space affinity.
|
|
2770
|
-
|
|
2779
|
+
// Hosts, running in the worker, don't share documents unless requested by other peers.
|
|
2780
|
+
sharePolicy: async (peerId, documentId) => {
|
|
2781
|
+
if (peerId.startsWith("client-")) {
|
|
2782
|
+
return true;
|
|
2783
|
+
}
|
|
2784
|
+
if (!documentId) {
|
|
2785
|
+
return false;
|
|
2786
|
+
}
|
|
2787
|
+
const doc = this._repo.handles[documentId]?.docSync();
|
|
2788
|
+
if (!doc) {
|
|
2789
|
+
(0, import_log13.log)("doc not found for share policy check", {
|
|
2790
|
+
peerId,
|
|
2791
|
+
documentId
|
|
2792
|
+
}, {
|
|
2793
|
+
F: __dxlog_file14,
|
|
2794
|
+
L: 65,
|
|
2795
|
+
S: this,
|
|
2796
|
+
C: (f, a) => f(...a)
|
|
2797
|
+
});
|
|
2798
|
+
return false;
|
|
2799
|
+
}
|
|
2800
|
+
try {
|
|
2801
|
+
const spaceKey = import_keys8.PublicKey.from(doc.experimental_spaceKey);
|
|
2802
|
+
const authorizedDevices = this._authorizedDevices.get(spaceKey);
|
|
2803
|
+
const deviceKeyHex = this.repo.peerMetadataByPeerId[peerId]?.dxos_deviceKey;
|
|
2804
|
+
if (!deviceKeyHex) {
|
|
2805
|
+
import_log13.log.warn("device key not found for share policy check", {
|
|
2806
|
+
peerId,
|
|
2807
|
+
documentId
|
|
2808
|
+
}, {
|
|
2809
|
+
F: __dxlog_file14,
|
|
2810
|
+
L: 76,
|
|
2811
|
+
S: this,
|
|
2812
|
+
C: (f, a) => f(...a)
|
|
2813
|
+
});
|
|
2814
|
+
return false;
|
|
2815
|
+
}
|
|
2816
|
+
const deviceKey = import_keys8.PublicKey.from(deviceKeyHex);
|
|
2817
|
+
const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;
|
|
2818
|
+
import_log13.log.info("share policy check", {
|
|
2819
|
+
peerId,
|
|
2820
|
+
documentId,
|
|
2821
|
+
deviceKey,
|
|
2822
|
+
spaceKey,
|
|
2823
|
+
isAuthorized
|
|
2824
|
+
}, {
|
|
2825
|
+
F: __dxlog_file14,
|
|
2826
|
+
L: 82,
|
|
2827
|
+
S: this,
|
|
2828
|
+
C: (f, a) => f(...a)
|
|
2829
|
+
});
|
|
2830
|
+
return isAuthorized;
|
|
2831
|
+
} catch (err) {
|
|
2832
|
+
import_log13.log.catch(err, void 0, {
|
|
2833
|
+
F: __dxlog_file14,
|
|
2834
|
+
L: 85,
|
|
2835
|
+
S: this,
|
|
2836
|
+
C: (f, a) => f(...a)
|
|
2837
|
+
});
|
|
2838
|
+
return false;
|
|
2839
|
+
}
|
|
2840
|
+
}
|
|
2771
2841
|
});
|
|
2772
2842
|
this._clientNetwork.ready();
|
|
2773
2843
|
this._meshNetwork.ready();
|
|
@@ -2776,6 +2846,7 @@ var AutomergeHost = class {
|
|
|
2776
2846
|
return this._repo;
|
|
2777
2847
|
}
|
|
2778
2848
|
async close() {
|
|
2849
|
+
this._storage instanceof AutomergeStorageAdapter && await this._storage.close();
|
|
2779
2850
|
await this._clientNetwork.close();
|
|
2780
2851
|
}
|
|
2781
2852
|
//
|
|
@@ -2787,7 +2858,7 @@ var AutomergeHost = class {
|
|
|
2787
2858
|
sendSyncMessage(request) {
|
|
2788
2859
|
return this._clientNetwork.sendSyncMessage(request);
|
|
2789
2860
|
}
|
|
2790
|
-
getHostInfo() {
|
|
2861
|
+
async getHostInfo() {
|
|
2791
2862
|
return this._clientNetwork.getHostInfo();
|
|
2792
2863
|
}
|
|
2793
2864
|
//
|
|
@@ -2796,11 +2867,15 @@ var AutomergeHost = class {
|
|
|
2796
2867
|
createExtension() {
|
|
2797
2868
|
return this._meshNetwork.createExtension();
|
|
2798
2869
|
}
|
|
2870
|
+
authorizeDevice(spaceKey, deviceKey) {
|
|
2871
|
+
(0, import_util10.defaultMap)(this._authorizedDevices, spaceKey, () => new import_util10.ComplexSet(import_keys8.PublicKey.hash)).add(deviceKey);
|
|
2872
|
+
}
|
|
2799
2873
|
};
|
|
2800
2874
|
var LocalHostNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
2801
2875
|
constructor() {
|
|
2802
2876
|
super(...arguments);
|
|
2803
2877
|
this._peers = /* @__PURE__ */ new Map();
|
|
2878
|
+
this._connected = new import_async10.Trigger();
|
|
2804
2879
|
}
|
|
2805
2880
|
/**
|
|
2806
2881
|
* Emits `ready` event. That signals to `Repo` that it can start using the adapter.
|
|
@@ -2812,12 +2887,13 @@ var LocalHostNetworkAdapter = class extends import_automerge_repo.NetworkAdapter
|
|
|
2812
2887
|
}
|
|
2813
2888
|
connect(peerId) {
|
|
2814
2889
|
this.peerId = peerId;
|
|
2890
|
+
this._connected.wake();
|
|
2815
2891
|
}
|
|
2816
2892
|
send(message) {
|
|
2817
2893
|
const peer = this._peers.get(message.targetId);
|
|
2818
2894
|
(0, import_invariant10.invariant)(peer, "Peer not found.", {
|
|
2819
2895
|
F: __dxlog_file14,
|
|
2820
|
-
L:
|
|
2896
|
+
L: 165,
|
|
2821
2897
|
S: this,
|
|
2822
2898
|
A: [
|
|
2823
2899
|
"peer",
|
|
@@ -2837,7 +2913,7 @@ var LocalHostNetworkAdapter = class extends import_automerge_repo.NetworkAdapter
|
|
|
2837
2913
|
return new import_codec_protobuf2.Stream(({ next, close }) => {
|
|
2838
2914
|
(0, import_invariant10.invariant)(!this._peers.has(peerId), "Peer already connected.", {
|
|
2839
2915
|
F: __dxlog_file14,
|
|
2840
|
-
L:
|
|
2916
|
+
L: 183,
|
|
2841
2917
|
S: this,
|
|
2842
2918
|
A: [
|
|
2843
2919
|
"!this._peers.has(peerId)",
|
|
@@ -2859,19 +2935,35 @@ var LocalHostNetworkAdapter = class extends import_automerge_repo.NetworkAdapter
|
|
|
2859
2935
|
});
|
|
2860
2936
|
}
|
|
2861
2937
|
});
|
|
2862
|
-
this.
|
|
2863
|
-
|
|
2864
|
-
})
|
|
2938
|
+
this._connected.wait({
|
|
2939
|
+
timeout: 1e3
|
|
2940
|
+
}).then(() => {
|
|
2941
|
+
this.emit("peer-candidate", {
|
|
2942
|
+
peerMetadata: {},
|
|
2943
|
+
peerId
|
|
2944
|
+
});
|
|
2945
|
+
}).catch((err) => import_log13.log.catch(err, void 0, {
|
|
2946
|
+
F: __dxlog_file14,
|
|
2947
|
+
L: 208,
|
|
2948
|
+
S: this,
|
|
2949
|
+
C: (f, a) => f(...a)
|
|
2950
|
+
}));
|
|
2865
2951
|
});
|
|
2866
2952
|
}
|
|
2867
2953
|
async sendSyncMessage({ id, syncMessage }) {
|
|
2954
|
+
await this._connected.wait({
|
|
2955
|
+
timeout: 1e3
|
|
2956
|
+
});
|
|
2868
2957
|
const message = import_automerge_repo.cbor.decode(syncMessage);
|
|
2869
2958
|
this.emit("message", message);
|
|
2870
2959
|
}
|
|
2871
|
-
getHostInfo() {
|
|
2960
|
+
async getHostInfo() {
|
|
2961
|
+
await this._connected.wait({
|
|
2962
|
+
timeout: 1e3
|
|
2963
|
+
});
|
|
2872
2964
|
(0, import_invariant10.invariant)(this.peerId, "Peer id not set.", {
|
|
2873
2965
|
F: __dxlog_file14,
|
|
2874
|
-
L:
|
|
2966
|
+
L: 220,
|
|
2875
2967
|
S: this,
|
|
2876
2968
|
A: [
|
|
2877
2969
|
"this.peerId",
|
|
@@ -2907,7 +2999,7 @@ var MeshNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
|
2907
2999
|
const extension = this._extensions.get(receiverId);
|
|
2908
3000
|
(0, import_invariant10.invariant)(extension, "Extension not found.", {
|
|
2909
3001
|
F: __dxlog_file14,
|
|
2910
|
-
L:
|
|
3002
|
+
L: 255,
|
|
2911
3003
|
S: this,
|
|
2912
3004
|
A: [
|
|
2913
3005
|
"extension",
|
|
@@ -2918,7 +3010,7 @@ var MeshNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
|
2918
3010
|
payload: import_automerge_repo.cbor.encode(message)
|
|
2919
3011
|
}).catch((err) => import_log13.log.catch(err, void 0, {
|
|
2920
3012
|
F: __dxlog_file14,
|
|
2921
|
-
L:
|
|
3013
|
+
L: 256,
|
|
2922
3014
|
S: this,
|
|
2923
3015
|
C: (f, a) => f(...a)
|
|
2924
3016
|
}));
|
|
@@ -2928,7 +3020,7 @@ var MeshNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
|
2928
3020
|
createExtension() {
|
|
2929
3021
|
(0, import_invariant10.invariant)(this.peerId, "Peer id not set.", {
|
|
2930
3022
|
F: __dxlog_file14,
|
|
2931
|
-
L:
|
|
3023
|
+
L: 264,
|
|
2932
3024
|
S: this,
|
|
2933
3025
|
A: [
|
|
2934
3026
|
"this.peerId",
|
|
@@ -2939,13 +3031,17 @@ var MeshNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
|
2939
3031
|
const extension = new import_teleport_extension_automerge_replicator.AutomergeReplicator({
|
|
2940
3032
|
peerId: this.peerId
|
|
2941
3033
|
}, {
|
|
2942
|
-
onStartReplication: async (info) => {
|
|
3034
|
+
onStartReplication: async (info, remotePeerId) => {
|
|
2943
3035
|
if (this._extensions.has(info.id)) {
|
|
2944
3036
|
return;
|
|
2945
3037
|
}
|
|
2946
3038
|
peerInfo = info;
|
|
2947
3039
|
this._extensions.set(info.id, extension);
|
|
2948
3040
|
this.emit("peer-candidate", {
|
|
3041
|
+
// TODO(mykola): Hack, stop abusing `peerMetadata` field.
|
|
3042
|
+
peerMetadata: {
|
|
3043
|
+
dxos_deviceKey: remotePeerId.toHex()
|
|
3044
|
+
},
|
|
2949
3045
|
peerId: info.id
|
|
2950
3046
|
});
|
|
2951
3047
|
},
|
|
@@ -2954,9 +3050,13 @@ var MeshNetworkAdapter = class extends import_automerge_repo.NetworkAdapter {
|
|
|
2954
3050
|
this.emit("message", message);
|
|
2955
3051
|
},
|
|
2956
3052
|
onClose: async () => {
|
|
2957
|
-
|
|
3053
|
+
if (!peerInfo) {
|
|
3054
|
+
return;
|
|
3055
|
+
}
|
|
3056
|
+
this.emit("peer-disconnected", {
|
|
2958
3057
|
peerId: peerInfo.id
|
|
2959
3058
|
});
|
|
3059
|
+
this._extensions.delete(peerInfo.id);
|
|
2960
3060
|
}
|
|
2961
3061
|
});
|
|
2962
3062
|
return extension;
|
|
@@ -2966,8 +3066,12 @@ var AutomergeStorageAdapter = class extends import_automerge_repo.StorageAdapter
|
|
|
2966
3066
|
constructor(_directory) {
|
|
2967
3067
|
super();
|
|
2968
3068
|
this._directory = _directory;
|
|
3069
|
+
this._state = "opened";
|
|
2969
3070
|
}
|
|
2970
3071
|
async load(key) {
|
|
3072
|
+
if (this._state !== "opened") {
|
|
3073
|
+
return void 0;
|
|
3074
|
+
}
|
|
2971
3075
|
const filename = this._getFilename(key);
|
|
2972
3076
|
const file = this._directory.getOrCreateFile(filename);
|
|
2973
3077
|
const { size } = await file.stat();
|
|
@@ -2978,6 +3082,9 @@ var AutomergeStorageAdapter = class extends import_automerge_repo.StorageAdapter
|
|
|
2978
3082
|
return (0, import_util10.bufferToArray)(buffer);
|
|
2979
3083
|
}
|
|
2980
3084
|
async save(key, data) {
|
|
3085
|
+
if (this._state !== "opened") {
|
|
3086
|
+
return void 0;
|
|
3087
|
+
}
|
|
2981
3088
|
const filename = this._getFilename(key);
|
|
2982
3089
|
const file = this._directory.getOrCreateFile(filename);
|
|
2983
3090
|
await file.write(0, (0, import_util10.arrayToBuffer)(data));
|
|
@@ -2985,11 +3092,17 @@ var AutomergeStorageAdapter = class extends import_automerge_repo.StorageAdapter
|
|
|
2985
3092
|
await file.flush?.();
|
|
2986
3093
|
}
|
|
2987
3094
|
async remove(key) {
|
|
3095
|
+
if (this._state !== "opened") {
|
|
3096
|
+
return void 0;
|
|
3097
|
+
}
|
|
2988
3098
|
const filename = this._getFilename(key);
|
|
2989
3099
|
const file = this._directory.getOrCreateFile(filename);
|
|
2990
|
-
await file.
|
|
3100
|
+
await file.destroy();
|
|
2991
3101
|
}
|
|
2992
3102
|
async loadRange(keyPrefix) {
|
|
3103
|
+
if (this._state !== "opened") {
|
|
3104
|
+
return [];
|
|
3105
|
+
}
|
|
2993
3106
|
const filename = this._getFilename(keyPrefix);
|
|
2994
3107
|
const entries = await this._directory.list();
|
|
2995
3108
|
return Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
@@ -3003,13 +3116,19 @@ var AutomergeStorageAdapter = class extends import_automerge_repo.StorageAdapter
|
|
|
3003
3116
|
}));
|
|
3004
3117
|
}
|
|
3005
3118
|
async removeRange(keyPrefix) {
|
|
3119
|
+
if (this._state !== "opened") {
|
|
3120
|
+
return void 0;
|
|
3121
|
+
}
|
|
3006
3122
|
const filename = this._getFilename(keyPrefix);
|
|
3007
3123
|
const entries = await this._directory.list();
|
|
3008
3124
|
await Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
3009
|
-
const file = this._directory.getOrCreateFile(
|
|
3010
|
-
await file.
|
|
3125
|
+
const file = this._directory.getOrCreateFile(entry);
|
|
3126
|
+
await file.destroy();
|
|
3011
3127
|
}));
|
|
3012
3128
|
}
|
|
3129
|
+
async close() {
|
|
3130
|
+
this._state = "closed";
|
|
3131
|
+
}
|
|
3013
3132
|
_getFilename(key) {
|
|
3014
3133
|
return key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-");
|
|
3015
3134
|
}
|
|
@@ -3045,4 +3164,4 @@ var AutomergeStorageAdapter = class extends import_automerge_repo.StorageAdapter
|
|
|
3045
3164
|
startAfter,
|
|
3046
3165
|
valueEncoding
|
|
3047
3166
|
});
|
|
3048
|
-
//# sourceMappingURL=chunk-
|
|
3167
|
+
//# sourceMappingURL=chunk-ETE7TCKN.cjs.map
|