@dxos/echo-pipeline 0.3.11-main.dafb7f2 → 0.3.11-main.df1e30a
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-PB5T4DLC.mjs} +174 -40
- package/dist/lib/browser/chunk-PB5T4DLC.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-WGNVVL2H.cjs} +173 -42
- package/dist/lib/node/chunk-WGNVVL2H.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 +120 -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
|
@@ -519,12 +519,12 @@ var emptyLargeSpaceMetadata = () => ({});
|
|
|
519
519
|
var EchoMetadata = schema4.getCodecForType("dxos.echo.metadata.EchoMetadata");
|
|
520
520
|
var LargeSpaceMetadata = schema4.getCodecForType("dxos.echo.metadata.LargeSpaceMetadata");
|
|
521
521
|
var MetadataStore = class {
|
|
522
|
-
constructor(
|
|
523
|
-
this._directory = _directory;
|
|
522
|
+
constructor(directory) {
|
|
524
523
|
this._metadata = emptyEchoMetadata();
|
|
525
524
|
this._spaceLargeMetadata = new ComplexMap3(PublicKey3.hash);
|
|
526
525
|
this._metadataFile = void 0;
|
|
527
526
|
this.update = new Event();
|
|
527
|
+
this._directory = directory;
|
|
528
528
|
}
|
|
529
529
|
get metadata() {
|
|
530
530
|
return this._metadata;
|
|
@@ -553,7 +553,7 @@ var MetadataStore = class {
|
|
|
553
553
|
name: file.filename
|
|
554
554
|
}, {
|
|
555
555
|
F: __dxlog_file4,
|
|
556
|
-
L:
|
|
556
|
+
L: 85,
|
|
557
557
|
S: this,
|
|
558
558
|
C: (f, a) => f(...a)
|
|
559
559
|
});
|
|
@@ -573,6 +573,9 @@ var MetadataStore = class {
|
|
|
573
573
|
await file.close();
|
|
574
574
|
}
|
|
575
575
|
}
|
|
576
|
+
/**
|
|
577
|
+
* @internal
|
|
578
|
+
*/
|
|
576
579
|
async _writeFile(file, codec2, data) {
|
|
577
580
|
const encoded = arrayToBuffer(codec2.encode(data));
|
|
578
581
|
const checksum = CRC32.buf(encoded);
|
|
@@ -586,7 +589,7 @@ var MetadataStore = class {
|
|
|
586
589
|
checksum
|
|
587
590
|
}, {
|
|
588
591
|
F: __dxlog_file4,
|
|
589
|
-
L:
|
|
592
|
+
L: 120,
|
|
590
593
|
S: this,
|
|
591
594
|
C: (f, a) => f(...a)
|
|
592
595
|
});
|
|
@@ -618,7 +621,7 @@ var MetadataStore = class {
|
|
|
618
621
|
err
|
|
619
622
|
}, {
|
|
620
623
|
F: __dxlog_file4,
|
|
621
|
-
L:
|
|
624
|
+
L: 151,
|
|
622
625
|
S: this,
|
|
623
626
|
C: (f, a) => f(...a)
|
|
624
627
|
});
|
|
@@ -635,7 +638,7 @@ var MetadataStore = class {
|
|
|
635
638
|
err
|
|
636
639
|
}, {
|
|
637
640
|
F: __dxlog_file4,
|
|
638
|
-
L:
|
|
641
|
+
L: 163,
|
|
639
642
|
S: this,
|
|
640
643
|
C: (f, a) => f(...a)
|
|
641
644
|
});
|
|
@@ -665,7 +668,7 @@ var MetadataStore = class {
|
|
|
665
668
|
err
|
|
666
669
|
}, {
|
|
667
670
|
F: __dxlog_file4,
|
|
668
|
-
L:
|
|
671
|
+
L: 192,
|
|
669
672
|
S: this,
|
|
670
673
|
C: (f, a) => f(...a)
|
|
671
674
|
});
|
|
@@ -686,7 +689,7 @@ var MetadataStore = class {
|
|
|
686
689
|
const space = this.spaces.find((space2) => space2.key === spaceKey);
|
|
687
690
|
invariant4(space, "Space not found", {
|
|
688
691
|
F: __dxlog_file4,
|
|
689
|
-
L:
|
|
692
|
+
L: 214,
|
|
690
693
|
S: this,
|
|
691
694
|
A: [
|
|
692
695
|
"space",
|
|
@@ -710,7 +713,7 @@ var MetadataStore = class {
|
|
|
710
713
|
async clear() {
|
|
711
714
|
log3("clearing all metadata", void 0, {
|
|
712
715
|
F: __dxlog_file4,
|
|
713
|
-
L:
|
|
716
|
+
L: 233,
|
|
714
717
|
S: this,
|
|
715
718
|
C: (f, a) => f(...a)
|
|
716
719
|
});
|
|
@@ -723,7 +726,7 @@ var MetadataStore = class {
|
|
|
723
726
|
async setIdentityRecord(record) {
|
|
724
727
|
invariant4(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
|
|
725
728
|
F: __dxlog_file4,
|
|
726
|
-
L:
|
|
729
|
+
L: 243,
|
|
727
730
|
S: this,
|
|
728
731
|
A: [
|
|
729
732
|
"!this._metadata.identity",
|
|
@@ -737,7 +740,7 @@ var MetadataStore = class {
|
|
|
737
740
|
async addSpace(record) {
|
|
738
741
|
invariant4(!(this._metadata.spaces ?? []).find((space) => space.key === record.key), "Cannot overwrite existing space in metadata", {
|
|
739
742
|
F: __dxlog_file4,
|
|
740
|
-
L:
|
|
743
|
+
L: 251,
|
|
741
744
|
S: this,
|
|
742
745
|
A: [
|
|
743
746
|
"!(this._metadata.spaces ?? []).find((space) => space.key === record.key)",
|
|
@@ -1478,7 +1481,7 @@ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipelin
|
|
|
1478
1481
|
var MESSAGES_PER_SNAPSHOT = 10;
|
|
1479
1482
|
var AUTOMATIC_SNAPSHOT_DEBOUNCE_INTERVAL = 5e3;
|
|
1480
1483
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL = 5e3;
|
|
1481
|
-
var DataPipeline = class
|
|
1484
|
+
var DataPipeline = class {
|
|
1482
1485
|
constructor(_params) {
|
|
1483
1486
|
this._params = _params;
|
|
1484
1487
|
this._ctx = new Context4();
|
|
@@ -1952,7 +1955,7 @@ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeli
|
|
|
1952
1955
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL2 = 500;
|
|
1953
1956
|
var CONTROL_PIPELINE_SNAPSHOT_DELAY = 1e4;
|
|
1954
1957
|
var USE_SNAPSHOTS = true;
|
|
1955
|
-
var ControlPipeline = class
|
|
1958
|
+
var ControlPipeline = class {
|
|
1956
1959
|
constructor({ spaceKey, genesisFeed, feedProvider, metadataStore }) {
|
|
1957
1960
|
this._ctx = new Context5();
|
|
1958
1961
|
this._lastTimeframeSaveTime = Date.now();
|
|
@@ -2198,7 +2201,7 @@ function _ts_decorate6(decorators, target, key, desc) {
|
|
|
2198
2201
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2199
2202
|
}
|
|
2200
2203
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space.ts";
|
|
2201
|
-
var Space = class
|
|
2204
|
+
var Space = class {
|
|
2202
2205
|
constructor(params) {
|
|
2203
2206
|
this._addFeedLock = new Lock();
|
|
2204
2207
|
this.onCredentialProcessed = new Callback2();
|
|
@@ -2582,7 +2585,7 @@ var SpaceProtocolSession = class {
|
|
|
2582
2585
|
this.replicator = new ReplicatorExtension().setOptions({
|
|
2583
2586
|
upload: true
|
|
2584
2587
|
});
|
|
2585
|
-
this._authStatus =
|
|
2588
|
+
this._authStatus = "INITIAL";
|
|
2586
2589
|
this._wireParams = wireParams;
|
|
2587
2590
|
this._swarmIdentity = swarmIdentity;
|
|
2588
2591
|
this._onSessionAuth = onSessionAuth;
|
|
@@ -2611,11 +2614,11 @@ var SpaceProtocolSession = class {
|
|
|
2611
2614
|
S: this,
|
|
2612
2615
|
C: (f, a) => f(...a)
|
|
2613
2616
|
});
|
|
2614
|
-
this._authStatus =
|
|
2617
|
+
this._authStatus = "SUCCESS";
|
|
2615
2618
|
this._onSessionAuth?.(this._teleport);
|
|
2616
2619
|
},
|
|
2617
2620
|
onAuthFailure: () => {
|
|
2618
|
-
this._authStatus =
|
|
2621
|
+
this._authStatus = "FAILURE";
|
|
2619
2622
|
this._onAuthFailure?.(this._teleport);
|
|
2620
2623
|
}
|
|
2621
2624
|
}));
|
|
@@ -2660,7 +2663,7 @@ function _ts_decorate8(decorators, target, key, desc) {
|
|
|
2660
2663
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2661
2664
|
}
|
|
2662
2665
|
var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space-manager.ts";
|
|
2663
|
-
var SpaceManager = class
|
|
2666
|
+
var SpaceManager = class {
|
|
2664
2667
|
constructor({ feedStore, networkManager, modelFactory, metadataStore, snapshotStore, blobStore }) {
|
|
2665
2668
|
this._spaces = new ComplexMap6(PublicKey7.hash);
|
|
2666
2669
|
this._instanceId = PublicKey7.random().toHex();
|
|
@@ -2682,7 +2685,7 @@ var SpaceManager = class SpaceManager2 {
|
|
|
2682
2685
|
...this._spaces.values()
|
|
2683
2686
|
].map((space) => space.close()));
|
|
2684
2687
|
}
|
|
2685
|
-
async constructSpace({ metadata, swarmIdentity,
|
|
2688
|
+
async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, memberKey }) {
|
|
2686
2689
|
log12.trace("dxos.echo.space-manager.construct-space", trace4.begin({
|
|
2687
2690
|
id: this._instanceId
|
|
2688
2691
|
}), {
|
|
@@ -2705,7 +2708,7 @@ var SpaceManager = class SpaceManager2 {
|
|
|
2705
2708
|
topic: spaceKey,
|
|
2706
2709
|
swarmIdentity,
|
|
2707
2710
|
networkManager: this._networkManager,
|
|
2708
|
-
onSessionAuth:
|
|
2711
|
+
onSessionAuth: onAuthorizedConnection,
|
|
2709
2712
|
onAuthFailure,
|
|
2710
2713
|
blobStore: this._blobStore
|
|
2711
2714
|
});
|
|
@@ -2743,26 +2746,108 @@ SpaceManager = _ts_decorate8([
|
|
|
2743
2746
|
], SpaceManager);
|
|
2744
2747
|
|
|
2745
2748
|
// packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts
|
|
2749
|
+
import { Trigger as Trigger2 } from "@dxos/async";
|
|
2746
2750
|
import { Repo, NetworkAdapter, StorageAdapter, cbor } from "@dxos/automerge/automerge-repo";
|
|
2751
|
+
import { IndexedDBStorageAdapter } from "@dxos/automerge/automerge-repo-storage-indexeddb";
|
|
2747
2752
|
import { Stream as Stream2 } from "@dxos/codec-protobuf";
|
|
2748
2753
|
import { invariant as invariant10 } from "@dxos/invariant";
|
|
2754
|
+
import { PublicKey as PublicKey8 } from "@dxos/keys";
|
|
2749
2755
|
import { log as log13 } from "@dxos/log";
|
|
2756
|
+
import { StorageType } from "@dxos/random-access-storage";
|
|
2750
2757
|
import { AutomergeReplicator } from "@dxos/teleport-extension-automerge-replicator";
|
|
2751
|
-
import { arrayToBuffer as arrayToBuffer2, bufferToArray } from "@dxos/util";
|
|
2758
|
+
import { ComplexMap as ComplexMap7, ComplexSet, arrayToBuffer as arrayToBuffer2, bufferToArray, defaultMap } from "@dxos/util";
|
|
2752
2759
|
var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
|
|
2753
2760
|
var AutomergeHost = class {
|
|
2754
2761
|
constructor(storageDirectory) {
|
|
2762
|
+
/**
|
|
2763
|
+
* spaceKey -> deviceKey[]
|
|
2764
|
+
*/
|
|
2765
|
+
this._authorizedDevices = new ComplexMap7(PublicKey8.hash);
|
|
2755
2766
|
this._meshNetwork = new MeshNetworkAdapter();
|
|
2756
2767
|
this._clientNetwork = new LocalHostNetworkAdapter();
|
|
2757
|
-
this._storage = new AutomergeStorageAdapter(storageDirectory);
|
|
2768
|
+
this._storage = storageDirectory.type === StorageType.IDB ? new IndexedDBStorageAdapter(storageDirectory.path, "data") : new AutomergeStorageAdapter(storageDirectory);
|
|
2758
2769
|
this._repo = new Repo({
|
|
2770
|
+
peerId: `host-${PublicKey8.random().toHex()}`,
|
|
2759
2771
|
network: [
|
|
2760
2772
|
this._clientNetwork,
|
|
2761
2773
|
this._meshNetwork
|
|
2762
2774
|
],
|
|
2763
2775
|
storage: this._storage,
|
|
2764
2776
|
// TODO(dmaretskyi): Share based on HALO permissions and space affinity.
|
|
2765
|
-
|
|
2777
|
+
// Hosts, running in the worker, don't share documents unless requested by other peers.
|
|
2778
|
+
sharePolicy: async (peerId, documentId) => {
|
|
2779
|
+
if (peerId.startsWith("client-")) {
|
|
2780
|
+
return true;
|
|
2781
|
+
}
|
|
2782
|
+
if (!documentId) {
|
|
2783
|
+
return false;
|
|
2784
|
+
}
|
|
2785
|
+
const doc = this._repo.handles[documentId]?.docSync();
|
|
2786
|
+
if (!doc) {
|
|
2787
|
+
log13("doc not found for share policy check", {
|
|
2788
|
+
peerId,
|
|
2789
|
+
documentId
|
|
2790
|
+
}, {
|
|
2791
|
+
F: __dxlog_file14,
|
|
2792
|
+
L: 65,
|
|
2793
|
+
S: this,
|
|
2794
|
+
C: (f, a) => f(...a)
|
|
2795
|
+
});
|
|
2796
|
+
return false;
|
|
2797
|
+
}
|
|
2798
|
+
try {
|
|
2799
|
+
if (!doc.experimental_spaceKey) {
|
|
2800
|
+
log13.warn("space key not found for share policy check", {
|
|
2801
|
+
peerId,
|
|
2802
|
+
documentId
|
|
2803
|
+
}, {
|
|
2804
|
+
F: __dxlog_file14,
|
|
2805
|
+
L: 71,
|
|
2806
|
+
S: this,
|
|
2807
|
+
C: (f, a) => f(...a)
|
|
2808
|
+
});
|
|
2809
|
+
return false;
|
|
2810
|
+
}
|
|
2811
|
+
const spaceKey = PublicKey8.from(doc.experimental_spaceKey);
|
|
2812
|
+
const authorizedDevices = this._authorizedDevices.get(spaceKey);
|
|
2813
|
+
const deviceKeyHex = this.repo.peerMetadataByPeerId[peerId]?.dxos_deviceKey;
|
|
2814
|
+
if (!deviceKeyHex) {
|
|
2815
|
+
log13.warn("device key not found for share policy check", {
|
|
2816
|
+
peerId,
|
|
2817
|
+
documentId
|
|
2818
|
+
}, {
|
|
2819
|
+
F: __dxlog_file14,
|
|
2820
|
+
L: 81,
|
|
2821
|
+
S: this,
|
|
2822
|
+
C: (f, a) => f(...a)
|
|
2823
|
+
});
|
|
2824
|
+
return false;
|
|
2825
|
+
}
|
|
2826
|
+
const deviceKey = PublicKey8.from(deviceKeyHex);
|
|
2827
|
+
const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;
|
|
2828
|
+
log13.info("share policy check", {
|
|
2829
|
+
peerId,
|
|
2830
|
+
documentId,
|
|
2831
|
+
deviceKey,
|
|
2832
|
+
spaceKey,
|
|
2833
|
+
isAuthorized
|
|
2834
|
+
}, {
|
|
2835
|
+
F: __dxlog_file14,
|
|
2836
|
+
L: 87,
|
|
2837
|
+
S: this,
|
|
2838
|
+
C: (f, a) => f(...a)
|
|
2839
|
+
});
|
|
2840
|
+
return isAuthorized;
|
|
2841
|
+
} catch (err) {
|
|
2842
|
+
log13.catch(err, void 0, {
|
|
2843
|
+
F: __dxlog_file14,
|
|
2844
|
+
L: 90,
|
|
2845
|
+
S: this,
|
|
2846
|
+
C: (f, a) => f(...a)
|
|
2847
|
+
});
|
|
2848
|
+
return false;
|
|
2849
|
+
}
|
|
2850
|
+
}
|
|
2766
2851
|
});
|
|
2767
2852
|
this._clientNetwork.ready();
|
|
2768
2853
|
this._meshNetwork.ready();
|
|
@@ -2771,6 +2856,7 @@ var AutomergeHost = class {
|
|
|
2771
2856
|
return this._repo;
|
|
2772
2857
|
}
|
|
2773
2858
|
async close() {
|
|
2859
|
+
this._storage instanceof AutomergeStorageAdapter && await this._storage.close();
|
|
2774
2860
|
await this._clientNetwork.close();
|
|
2775
2861
|
}
|
|
2776
2862
|
//
|
|
@@ -2782,7 +2868,7 @@ var AutomergeHost = class {
|
|
|
2782
2868
|
sendSyncMessage(request) {
|
|
2783
2869
|
return this._clientNetwork.sendSyncMessage(request);
|
|
2784
2870
|
}
|
|
2785
|
-
getHostInfo() {
|
|
2871
|
+
async getHostInfo() {
|
|
2786
2872
|
return this._clientNetwork.getHostInfo();
|
|
2787
2873
|
}
|
|
2788
2874
|
//
|
|
@@ -2791,11 +2877,15 @@ var AutomergeHost = class {
|
|
|
2791
2877
|
createExtension() {
|
|
2792
2878
|
return this._meshNetwork.createExtension();
|
|
2793
2879
|
}
|
|
2880
|
+
authorizeDevice(spaceKey, deviceKey) {
|
|
2881
|
+
defaultMap(this._authorizedDevices, spaceKey, () => new ComplexSet(PublicKey8.hash)).add(deviceKey);
|
|
2882
|
+
}
|
|
2794
2883
|
};
|
|
2795
2884
|
var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
2796
2885
|
constructor() {
|
|
2797
2886
|
super(...arguments);
|
|
2798
2887
|
this._peers = /* @__PURE__ */ new Map();
|
|
2888
|
+
this._connected = new Trigger2();
|
|
2799
2889
|
}
|
|
2800
2890
|
/**
|
|
2801
2891
|
* Emits `ready` event. That signals to `Repo` that it can start using the adapter.
|
|
@@ -2807,12 +2897,13 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2807
2897
|
}
|
|
2808
2898
|
connect(peerId) {
|
|
2809
2899
|
this.peerId = peerId;
|
|
2900
|
+
this._connected.wake();
|
|
2810
2901
|
}
|
|
2811
2902
|
send(message) {
|
|
2812
2903
|
const peer = this._peers.get(message.targetId);
|
|
2813
2904
|
invariant10(peer, "Peer not found.", {
|
|
2814
2905
|
F: __dxlog_file14,
|
|
2815
|
-
L:
|
|
2906
|
+
L: 170,
|
|
2816
2907
|
S: this,
|
|
2817
2908
|
A: [
|
|
2818
2909
|
"peer",
|
|
@@ -2832,7 +2923,7 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2832
2923
|
return new Stream2(({ next, close }) => {
|
|
2833
2924
|
invariant10(!this._peers.has(peerId), "Peer already connected.", {
|
|
2834
2925
|
F: __dxlog_file14,
|
|
2835
|
-
L:
|
|
2926
|
+
L: 188,
|
|
2836
2927
|
S: this,
|
|
2837
2928
|
A: [
|
|
2838
2929
|
"!this._peers.has(peerId)",
|
|
@@ -2854,19 +2945,35 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2854
2945
|
});
|
|
2855
2946
|
}
|
|
2856
2947
|
});
|
|
2857
|
-
this.
|
|
2858
|
-
|
|
2859
|
-
})
|
|
2948
|
+
this._connected.wait({
|
|
2949
|
+
timeout: 1e3
|
|
2950
|
+
}).then(() => {
|
|
2951
|
+
this.emit("peer-candidate", {
|
|
2952
|
+
peerMetadata: {},
|
|
2953
|
+
peerId
|
|
2954
|
+
});
|
|
2955
|
+
}).catch((err) => log13.catch(err, void 0, {
|
|
2956
|
+
F: __dxlog_file14,
|
|
2957
|
+
L: 213,
|
|
2958
|
+
S: this,
|
|
2959
|
+
C: (f, a) => f(...a)
|
|
2960
|
+
}));
|
|
2860
2961
|
});
|
|
2861
2962
|
}
|
|
2862
2963
|
async sendSyncMessage({ id, syncMessage }) {
|
|
2964
|
+
await this._connected.wait({
|
|
2965
|
+
timeout: 1e3
|
|
2966
|
+
});
|
|
2863
2967
|
const message = cbor.decode(syncMessage);
|
|
2864
2968
|
this.emit("message", message);
|
|
2865
2969
|
}
|
|
2866
|
-
getHostInfo() {
|
|
2970
|
+
async getHostInfo() {
|
|
2971
|
+
await this._connected.wait({
|
|
2972
|
+
timeout: 1e3
|
|
2973
|
+
});
|
|
2867
2974
|
invariant10(this.peerId, "Peer id not set.", {
|
|
2868
2975
|
F: __dxlog_file14,
|
|
2869
|
-
L:
|
|
2976
|
+
L: 225,
|
|
2870
2977
|
S: this,
|
|
2871
2978
|
A: [
|
|
2872
2979
|
"this.peerId",
|
|
@@ -2902,7 +3009,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2902
3009
|
const extension = this._extensions.get(receiverId);
|
|
2903
3010
|
invariant10(extension, "Extension not found.", {
|
|
2904
3011
|
F: __dxlog_file14,
|
|
2905
|
-
L:
|
|
3012
|
+
L: 260,
|
|
2906
3013
|
S: this,
|
|
2907
3014
|
A: [
|
|
2908
3015
|
"extension",
|
|
@@ -2913,7 +3020,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2913
3020
|
payload: cbor.encode(message)
|
|
2914
3021
|
}).catch((err) => log13.catch(err, void 0, {
|
|
2915
3022
|
F: __dxlog_file14,
|
|
2916
|
-
L:
|
|
3023
|
+
L: 261,
|
|
2917
3024
|
S: this,
|
|
2918
3025
|
C: (f, a) => f(...a)
|
|
2919
3026
|
}));
|
|
@@ -2923,7 +3030,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2923
3030
|
createExtension() {
|
|
2924
3031
|
invariant10(this.peerId, "Peer id not set.", {
|
|
2925
3032
|
F: __dxlog_file14,
|
|
2926
|
-
L:
|
|
3033
|
+
L: 269,
|
|
2927
3034
|
S: this,
|
|
2928
3035
|
A: [
|
|
2929
3036
|
"this.peerId",
|
|
@@ -2934,13 +3041,17 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2934
3041
|
const extension = new AutomergeReplicator({
|
|
2935
3042
|
peerId: this.peerId
|
|
2936
3043
|
}, {
|
|
2937
|
-
onStartReplication: async (info) => {
|
|
3044
|
+
onStartReplication: async (info, remotePeerId) => {
|
|
2938
3045
|
if (this._extensions.has(info.id)) {
|
|
2939
3046
|
return;
|
|
2940
3047
|
}
|
|
2941
3048
|
peerInfo = info;
|
|
2942
3049
|
this._extensions.set(info.id, extension);
|
|
2943
3050
|
this.emit("peer-candidate", {
|
|
3051
|
+
// TODO(mykola): Hack, stop abusing `peerMetadata` field.
|
|
3052
|
+
peerMetadata: {
|
|
3053
|
+
dxos_deviceKey: remotePeerId.toHex()
|
|
3054
|
+
},
|
|
2944
3055
|
peerId: info.id
|
|
2945
3056
|
});
|
|
2946
3057
|
},
|
|
@@ -2949,9 +3060,13 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2949
3060
|
this.emit("message", message);
|
|
2950
3061
|
},
|
|
2951
3062
|
onClose: async () => {
|
|
2952
|
-
|
|
3063
|
+
if (!peerInfo) {
|
|
3064
|
+
return;
|
|
3065
|
+
}
|
|
3066
|
+
this.emit("peer-disconnected", {
|
|
2953
3067
|
peerId: peerInfo.id
|
|
2954
3068
|
});
|
|
3069
|
+
this._extensions.delete(peerInfo.id);
|
|
2955
3070
|
}
|
|
2956
3071
|
});
|
|
2957
3072
|
return extension;
|
|
@@ -2961,8 +3076,12 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2961
3076
|
constructor(_directory) {
|
|
2962
3077
|
super();
|
|
2963
3078
|
this._directory = _directory;
|
|
3079
|
+
this._state = "opened";
|
|
2964
3080
|
}
|
|
2965
3081
|
async load(key) {
|
|
3082
|
+
if (this._state !== "opened") {
|
|
3083
|
+
return void 0;
|
|
3084
|
+
}
|
|
2966
3085
|
const filename = this._getFilename(key);
|
|
2967
3086
|
const file = this._directory.getOrCreateFile(filename);
|
|
2968
3087
|
const { size } = await file.stat();
|
|
@@ -2973,6 +3092,9 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2973
3092
|
return bufferToArray(buffer);
|
|
2974
3093
|
}
|
|
2975
3094
|
async save(key, data) {
|
|
3095
|
+
if (this._state !== "opened") {
|
|
3096
|
+
return void 0;
|
|
3097
|
+
}
|
|
2976
3098
|
const filename = this._getFilename(key);
|
|
2977
3099
|
const file = this._directory.getOrCreateFile(filename);
|
|
2978
3100
|
await file.write(0, arrayToBuffer2(data));
|
|
@@ -2980,11 +3102,17 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2980
3102
|
await file.flush?.();
|
|
2981
3103
|
}
|
|
2982
3104
|
async remove(key) {
|
|
3105
|
+
if (this._state !== "opened") {
|
|
3106
|
+
return void 0;
|
|
3107
|
+
}
|
|
2983
3108
|
const filename = this._getFilename(key);
|
|
2984
3109
|
const file = this._directory.getOrCreateFile(filename);
|
|
2985
|
-
await file.
|
|
3110
|
+
await file.destroy();
|
|
2986
3111
|
}
|
|
2987
3112
|
async loadRange(keyPrefix) {
|
|
3113
|
+
if (this._state !== "opened") {
|
|
3114
|
+
return [];
|
|
3115
|
+
}
|
|
2988
3116
|
const filename = this._getFilename(keyPrefix);
|
|
2989
3117
|
const entries = await this._directory.list();
|
|
2990
3118
|
return Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
@@ -2998,13 +3126,19 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2998
3126
|
}));
|
|
2999
3127
|
}
|
|
3000
3128
|
async removeRange(keyPrefix) {
|
|
3129
|
+
if (this._state !== "opened") {
|
|
3130
|
+
return void 0;
|
|
3131
|
+
}
|
|
3001
3132
|
const filename = this._getFilename(keyPrefix);
|
|
3002
3133
|
const entries = await this._directory.list();
|
|
3003
3134
|
await Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
3004
|
-
const file = this._directory.getOrCreateFile(
|
|
3005
|
-
await file.
|
|
3135
|
+
const file = this._directory.getOrCreateFile(entry);
|
|
3136
|
+
await file.destroy();
|
|
3006
3137
|
}));
|
|
3007
3138
|
}
|
|
3139
|
+
async close() {
|
|
3140
|
+
this._state = "closed";
|
|
3141
|
+
}
|
|
3008
3142
|
_getFilename(key) {
|
|
3009
3143
|
return key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-");
|
|
3010
3144
|
}
|
|
@@ -3040,4 +3174,4 @@ export {
|
|
|
3040
3174
|
SpaceManager,
|
|
3041
3175
|
AutomergeHost
|
|
3042
3176
|
};
|
|
3043
|
-
//# sourceMappingURL=chunk-
|
|
3177
|
+
//# sourceMappingURL=chunk-PB5T4DLC.mjs.map
|