@dxos/echo-pipeline 0.3.11-main.a996413 → 0.3.11-main.afa73e0
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
|
@@ -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,96 @@ 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
|
+
const spaceKey = PublicKey8.from(doc.experimental_spaceKey);
|
|
2800
|
+
const authorizedDevices = this._authorizedDevices.get(spaceKey);
|
|
2801
|
+
const deviceKeyHex = this.repo.peerMetadataByPeerId[peerId]?.dxos_deviceKey;
|
|
2802
|
+
if (!deviceKeyHex) {
|
|
2803
|
+
log13.warn("device key not found for share policy check", {
|
|
2804
|
+
peerId,
|
|
2805
|
+
documentId
|
|
2806
|
+
}, {
|
|
2807
|
+
F: __dxlog_file14,
|
|
2808
|
+
L: 76,
|
|
2809
|
+
S: this,
|
|
2810
|
+
C: (f, a) => f(...a)
|
|
2811
|
+
});
|
|
2812
|
+
return false;
|
|
2813
|
+
}
|
|
2814
|
+
const deviceKey = PublicKey8.from(deviceKeyHex);
|
|
2815
|
+
const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;
|
|
2816
|
+
log13.info("share policy check", {
|
|
2817
|
+
peerId,
|
|
2818
|
+
documentId,
|
|
2819
|
+
deviceKey,
|
|
2820
|
+
spaceKey,
|
|
2821
|
+
isAuthorized
|
|
2822
|
+
}, {
|
|
2823
|
+
F: __dxlog_file14,
|
|
2824
|
+
L: 82,
|
|
2825
|
+
S: this,
|
|
2826
|
+
C: (f, a) => f(...a)
|
|
2827
|
+
});
|
|
2828
|
+
return isAuthorized;
|
|
2829
|
+
} catch (err) {
|
|
2830
|
+
log13.catch(err, void 0, {
|
|
2831
|
+
F: __dxlog_file14,
|
|
2832
|
+
L: 85,
|
|
2833
|
+
S: this,
|
|
2834
|
+
C: (f, a) => f(...a)
|
|
2835
|
+
});
|
|
2836
|
+
return false;
|
|
2837
|
+
}
|
|
2838
|
+
}
|
|
2766
2839
|
});
|
|
2767
2840
|
this._clientNetwork.ready();
|
|
2768
2841
|
this._meshNetwork.ready();
|
|
@@ -2771,6 +2844,7 @@ var AutomergeHost = class {
|
|
|
2771
2844
|
return this._repo;
|
|
2772
2845
|
}
|
|
2773
2846
|
async close() {
|
|
2847
|
+
this._storage instanceof AutomergeStorageAdapter && await this._storage.close();
|
|
2774
2848
|
await this._clientNetwork.close();
|
|
2775
2849
|
}
|
|
2776
2850
|
//
|
|
@@ -2782,7 +2856,7 @@ var AutomergeHost = class {
|
|
|
2782
2856
|
sendSyncMessage(request) {
|
|
2783
2857
|
return this._clientNetwork.sendSyncMessage(request);
|
|
2784
2858
|
}
|
|
2785
|
-
getHostInfo() {
|
|
2859
|
+
async getHostInfo() {
|
|
2786
2860
|
return this._clientNetwork.getHostInfo();
|
|
2787
2861
|
}
|
|
2788
2862
|
//
|
|
@@ -2791,11 +2865,15 @@ var AutomergeHost = class {
|
|
|
2791
2865
|
createExtension() {
|
|
2792
2866
|
return this._meshNetwork.createExtension();
|
|
2793
2867
|
}
|
|
2868
|
+
authorizeDevice(spaceKey, deviceKey) {
|
|
2869
|
+
defaultMap(this._authorizedDevices, spaceKey, () => new ComplexSet(PublicKey8.hash)).add(deviceKey);
|
|
2870
|
+
}
|
|
2794
2871
|
};
|
|
2795
2872
|
var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
2796
2873
|
constructor() {
|
|
2797
2874
|
super(...arguments);
|
|
2798
2875
|
this._peers = /* @__PURE__ */ new Map();
|
|
2876
|
+
this._connected = new Trigger2();
|
|
2799
2877
|
}
|
|
2800
2878
|
/**
|
|
2801
2879
|
* Emits `ready` event. That signals to `Repo` that it can start using the adapter.
|
|
@@ -2807,12 +2885,13 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2807
2885
|
}
|
|
2808
2886
|
connect(peerId) {
|
|
2809
2887
|
this.peerId = peerId;
|
|
2888
|
+
this._connected.wake();
|
|
2810
2889
|
}
|
|
2811
2890
|
send(message) {
|
|
2812
2891
|
const peer = this._peers.get(message.targetId);
|
|
2813
2892
|
invariant10(peer, "Peer not found.", {
|
|
2814
2893
|
F: __dxlog_file14,
|
|
2815
|
-
L:
|
|
2894
|
+
L: 165,
|
|
2816
2895
|
S: this,
|
|
2817
2896
|
A: [
|
|
2818
2897
|
"peer",
|
|
@@ -2832,7 +2911,7 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2832
2911
|
return new Stream2(({ next, close }) => {
|
|
2833
2912
|
invariant10(!this._peers.has(peerId), "Peer already connected.", {
|
|
2834
2913
|
F: __dxlog_file14,
|
|
2835
|
-
L:
|
|
2914
|
+
L: 183,
|
|
2836
2915
|
S: this,
|
|
2837
2916
|
A: [
|
|
2838
2917
|
"!this._peers.has(peerId)",
|
|
@@ -2854,19 +2933,35 @@ var LocalHostNetworkAdapter = class extends NetworkAdapter {
|
|
|
2854
2933
|
});
|
|
2855
2934
|
}
|
|
2856
2935
|
});
|
|
2857
|
-
this.
|
|
2858
|
-
|
|
2859
|
-
})
|
|
2936
|
+
this._connected.wait({
|
|
2937
|
+
timeout: 1e3
|
|
2938
|
+
}).then(() => {
|
|
2939
|
+
this.emit("peer-candidate", {
|
|
2940
|
+
peerMetadata: {},
|
|
2941
|
+
peerId
|
|
2942
|
+
});
|
|
2943
|
+
}).catch((err) => log13.catch(err, void 0, {
|
|
2944
|
+
F: __dxlog_file14,
|
|
2945
|
+
L: 208,
|
|
2946
|
+
S: this,
|
|
2947
|
+
C: (f, a) => f(...a)
|
|
2948
|
+
}));
|
|
2860
2949
|
});
|
|
2861
2950
|
}
|
|
2862
2951
|
async sendSyncMessage({ id, syncMessage }) {
|
|
2952
|
+
await this._connected.wait({
|
|
2953
|
+
timeout: 1e3
|
|
2954
|
+
});
|
|
2863
2955
|
const message = cbor.decode(syncMessage);
|
|
2864
2956
|
this.emit("message", message);
|
|
2865
2957
|
}
|
|
2866
|
-
getHostInfo() {
|
|
2958
|
+
async getHostInfo() {
|
|
2959
|
+
await this._connected.wait({
|
|
2960
|
+
timeout: 1e3
|
|
2961
|
+
});
|
|
2867
2962
|
invariant10(this.peerId, "Peer id not set.", {
|
|
2868
2963
|
F: __dxlog_file14,
|
|
2869
|
-
L:
|
|
2964
|
+
L: 220,
|
|
2870
2965
|
S: this,
|
|
2871
2966
|
A: [
|
|
2872
2967
|
"this.peerId",
|
|
@@ -2902,7 +2997,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2902
2997
|
const extension = this._extensions.get(receiverId);
|
|
2903
2998
|
invariant10(extension, "Extension not found.", {
|
|
2904
2999
|
F: __dxlog_file14,
|
|
2905
|
-
L:
|
|
3000
|
+
L: 255,
|
|
2906
3001
|
S: this,
|
|
2907
3002
|
A: [
|
|
2908
3003
|
"extension",
|
|
@@ -2913,7 +3008,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2913
3008
|
payload: cbor.encode(message)
|
|
2914
3009
|
}).catch((err) => log13.catch(err, void 0, {
|
|
2915
3010
|
F: __dxlog_file14,
|
|
2916
|
-
L:
|
|
3011
|
+
L: 256,
|
|
2917
3012
|
S: this,
|
|
2918
3013
|
C: (f, a) => f(...a)
|
|
2919
3014
|
}));
|
|
@@ -2923,7 +3018,7 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2923
3018
|
createExtension() {
|
|
2924
3019
|
invariant10(this.peerId, "Peer id not set.", {
|
|
2925
3020
|
F: __dxlog_file14,
|
|
2926
|
-
L:
|
|
3021
|
+
L: 264,
|
|
2927
3022
|
S: this,
|
|
2928
3023
|
A: [
|
|
2929
3024
|
"this.peerId",
|
|
@@ -2934,13 +3029,17 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2934
3029
|
const extension = new AutomergeReplicator({
|
|
2935
3030
|
peerId: this.peerId
|
|
2936
3031
|
}, {
|
|
2937
|
-
onStartReplication: async (info) => {
|
|
3032
|
+
onStartReplication: async (info, remotePeerId) => {
|
|
2938
3033
|
if (this._extensions.has(info.id)) {
|
|
2939
3034
|
return;
|
|
2940
3035
|
}
|
|
2941
3036
|
peerInfo = info;
|
|
2942
3037
|
this._extensions.set(info.id, extension);
|
|
2943
3038
|
this.emit("peer-candidate", {
|
|
3039
|
+
// TODO(mykola): Hack, stop abusing `peerMetadata` field.
|
|
3040
|
+
peerMetadata: {
|
|
3041
|
+
dxos_deviceKey: remotePeerId.toHex()
|
|
3042
|
+
},
|
|
2944
3043
|
peerId: info.id
|
|
2945
3044
|
});
|
|
2946
3045
|
},
|
|
@@ -2949,9 +3048,13 @@ var MeshNetworkAdapter = class extends NetworkAdapter {
|
|
|
2949
3048
|
this.emit("message", message);
|
|
2950
3049
|
},
|
|
2951
3050
|
onClose: async () => {
|
|
2952
|
-
|
|
3051
|
+
if (!peerInfo) {
|
|
3052
|
+
return;
|
|
3053
|
+
}
|
|
3054
|
+
this.emit("peer-disconnected", {
|
|
2953
3055
|
peerId: peerInfo.id
|
|
2954
3056
|
});
|
|
3057
|
+
this._extensions.delete(peerInfo.id);
|
|
2955
3058
|
}
|
|
2956
3059
|
});
|
|
2957
3060
|
return extension;
|
|
@@ -2961,8 +3064,12 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2961
3064
|
constructor(_directory) {
|
|
2962
3065
|
super();
|
|
2963
3066
|
this._directory = _directory;
|
|
3067
|
+
this._state = "opened";
|
|
2964
3068
|
}
|
|
2965
3069
|
async load(key) {
|
|
3070
|
+
if (this._state !== "opened") {
|
|
3071
|
+
return void 0;
|
|
3072
|
+
}
|
|
2966
3073
|
const filename = this._getFilename(key);
|
|
2967
3074
|
const file = this._directory.getOrCreateFile(filename);
|
|
2968
3075
|
const { size } = await file.stat();
|
|
@@ -2973,6 +3080,9 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2973
3080
|
return bufferToArray(buffer);
|
|
2974
3081
|
}
|
|
2975
3082
|
async save(key, data) {
|
|
3083
|
+
if (this._state !== "opened") {
|
|
3084
|
+
return void 0;
|
|
3085
|
+
}
|
|
2976
3086
|
const filename = this._getFilename(key);
|
|
2977
3087
|
const file = this._directory.getOrCreateFile(filename);
|
|
2978
3088
|
await file.write(0, arrayToBuffer2(data));
|
|
@@ -2980,11 +3090,17 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2980
3090
|
await file.flush?.();
|
|
2981
3091
|
}
|
|
2982
3092
|
async remove(key) {
|
|
3093
|
+
if (this._state !== "opened") {
|
|
3094
|
+
return void 0;
|
|
3095
|
+
}
|
|
2983
3096
|
const filename = this._getFilename(key);
|
|
2984
3097
|
const file = this._directory.getOrCreateFile(filename);
|
|
2985
|
-
await file.
|
|
3098
|
+
await file.destroy();
|
|
2986
3099
|
}
|
|
2987
3100
|
async loadRange(keyPrefix) {
|
|
3101
|
+
if (this._state !== "opened") {
|
|
3102
|
+
return [];
|
|
3103
|
+
}
|
|
2988
3104
|
const filename = this._getFilename(keyPrefix);
|
|
2989
3105
|
const entries = await this._directory.list();
|
|
2990
3106
|
return Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
@@ -2998,13 +3114,19 @@ var AutomergeStorageAdapter = class extends StorageAdapter {
|
|
|
2998
3114
|
}));
|
|
2999
3115
|
}
|
|
3000
3116
|
async removeRange(keyPrefix) {
|
|
3117
|
+
if (this._state !== "opened") {
|
|
3118
|
+
return void 0;
|
|
3119
|
+
}
|
|
3001
3120
|
const filename = this._getFilename(keyPrefix);
|
|
3002
3121
|
const entries = await this._directory.list();
|
|
3003
3122
|
await Promise.all(entries.filter((entry) => entry.startsWith(filename)).map(async (entry) => {
|
|
3004
|
-
const file = this._directory.getOrCreateFile(
|
|
3005
|
-
await file.
|
|
3123
|
+
const file = this._directory.getOrCreateFile(entry);
|
|
3124
|
+
await file.destroy();
|
|
3006
3125
|
}));
|
|
3007
3126
|
}
|
|
3127
|
+
async close() {
|
|
3128
|
+
this._state = "closed";
|
|
3129
|
+
}
|
|
3008
3130
|
_getFilename(key) {
|
|
3009
3131
|
return key.map((k) => k.replaceAll("%", "%25").replaceAll("-", "%2D")).join("-");
|
|
3010
3132
|
}
|
|
@@ -3040,4 +3162,4 @@ export {
|
|
|
3040
3162
|
SpaceManager,
|
|
3041
3163
|
AutomergeHost
|
|
3042
3164
|
};
|
|
3043
|
-
//# sourceMappingURL=chunk-
|
|
3165
|
+
//# sourceMappingURL=chunk-AUYVKEFF.mjs.map
|