@dxos/echo-pipeline 0.5.2 → 0.5.3-main.056e7da
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-VQQD32DM.mjs → chunk-GANAND63.mjs} +49 -30
- package/dist/lib/browser/chunk-GANAND63.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +431 -291
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +3 -1
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-P7L7ICAH.cjs → chunk-M475BGBI.cjs} +50 -32
- package/dist/lib/node/chunk-M475BGBI.cjs.map +7 -0
- package/dist/lib/node/index.cjs +441 -301
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +13 -11
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/automerge/automerge-host.d.ts +4 -11
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts +6 -0
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +2 -0
- package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/index.d.ts +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +2 -2
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts +23 -0
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -0
- package/dist/types/src/automerge/migrations.d.ts +2 -2
- package/dist/types/src/automerge/migrations.d.ts.map +1 -1
- package/dist/types/src/common/feeds.d.ts.map +1 -1
- package/dist/types/src/db-host/snapshot-manager.d.ts +2 -2
- package/dist/types/src/db-host/snapshot-manager.d.ts.map +1 -1
- package/dist/types/src/db-host/snapshot-store.d.ts +2 -2
- package/dist/types/src/db-host/snapshot-store.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +3 -2
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +2 -0
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +4 -3
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/automerge/automerge-host.test.ts +22 -9
- package/src/automerge/automerge-host.ts +68 -90
- package/src/automerge/automerge-repo.test.ts +10 -1
- package/src/automerge/echo-network-adapter.ts +19 -0
- package/src/automerge/echo-replicator.ts +3 -0
- package/src/automerge/index.ts +1 -1
- package/src/automerge/leveldb-storage-adapter.ts +2 -2
- package/src/automerge/mesh-echo-replicator.ts +231 -0
- package/src/automerge/migrations.ts +2 -2
- package/src/db-host/snapshot-manager.ts +1 -1
- package/src/db-host/snapshot-store.ts +1 -1
- package/src/metadata/metadata-store.ts +2 -2
- package/src/space/space-manager.ts +4 -1
- package/src/space/space-protocol.ts +11 -8
- package/src/space/space.ts +8 -3
- package/src/testing/test-agent-builder.ts +1 -0
- package/dist/lib/browser/chunk-VQQD32DM.mjs.map +0 -7
- package/dist/lib/node/chunk-P7L7ICAH.cjs.map +0 -7
- package/dist/types/src/automerge/mesh-network-adapter.d.ts +0 -18
- package/dist/types/src/automerge/mesh-network-adapter.d.ts.map +0 -1
- package/src/automerge/mesh-network-adapter.ts +0 -107
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Trigger } from '@dxos/async';
|
|
6
|
-
import { NetworkAdapter, type Message, type PeerId, cbor } from '@dxos/automerge/automerge-repo';
|
|
7
|
-
import { invariant } from '@dxos/invariant';
|
|
8
|
-
import { log } from '@dxos/log';
|
|
9
|
-
import { type PeerInfo } from '@dxos/protocols/proto/dxos/mesh/teleport/automerge';
|
|
10
|
-
import { AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Used to replicate with other peers over the network.
|
|
14
|
-
*/
|
|
15
|
-
export class MeshNetworkAdapter extends NetworkAdapter {
|
|
16
|
-
private readonly _extensions: Map<string, AutomergeReplicator> = new Map();
|
|
17
|
-
private _connected = new Trigger();
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Emits `ready` event. That signals to `Repo` that it can start using the adapter.
|
|
21
|
-
*/
|
|
22
|
-
ready() {
|
|
23
|
-
// NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition
|
|
24
|
-
// because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.
|
|
25
|
-
this.emit('ready', {
|
|
26
|
-
network: this,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
override connect(peerId: PeerId): void {
|
|
31
|
-
this.peerId = peerId;
|
|
32
|
-
this._connected.wake();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
override send(message: Message): void {
|
|
36
|
-
const receiverId = message.targetId;
|
|
37
|
-
const extension = this._extensions.get(receiverId);
|
|
38
|
-
invariant(extension, 'Extension not found.');
|
|
39
|
-
extension.sendSyncMessage({ payload: cbor.encode(message) }).catch((err) => log.catch(err));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
override disconnect(): void {
|
|
43
|
-
// No-op
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
createExtension(): AutomergeReplicator {
|
|
47
|
-
invariant(this.peerId, 'Peer id not set.');
|
|
48
|
-
|
|
49
|
-
let peerInfo: PeerInfo;
|
|
50
|
-
const extension = new AutomergeReplicator(
|
|
51
|
-
{
|
|
52
|
-
peerId: this.peerId,
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
onStartReplication: async (info, remotePeerId /** Teleport ID */) => {
|
|
56
|
-
await this._connected.wait();
|
|
57
|
-
|
|
58
|
-
// Note: We store only one extension per peer.
|
|
59
|
-
// There can be a case where two connected peers have more than one teleport connection between them
|
|
60
|
-
// and each of them uses different teleport connections to send messages.
|
|
61
|
-
// It works because we receive messages from all teleport connections and Automerge Repo dedup them.
|
|
62
|
-
// TODO(mykola): Use only one teleport connection per peer.
|
|
63
|
-
|
|
64
|
-
// TODO(dmaretskyi): Critical bug.
|
|
65
|
-
// - two peers get connected via swarm 1
|
|
66
|
-
// - they get connected via swarm 2
|
|
67
|
-
// - swarm 1 gets disconnected
|
|
68
|
-
// - automerge repo thinks that peer 2 got disconnected even though swarm 2 is still active
|
|
69
|
-
|
|
70
|
-
log('onStartReplication', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });
|
|
71
|
-
if (!this._extensions.has(info.id)) {
|
|
72
|
-
peerInfo = info;
|
|
73
|
-
// TODO(mykola): Fix race condition?
|
|
74
|
-
this._extensions.set(info.id, extension);
|
|
75
|
-
|
|
76
|
-
log('peer-candidate', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });
|
|
77
|
-
this.emit('peer-candidate', {
|
|
78
|
-
// TODO(mykola): Hack, stop abusing `peerMetadata` field.
|
|
79
|
-
peerMetadata: {
|
|
80
|
-
dxos_deviceKey: remotePeerId.toHex(),
|
|
81
|
-
} as any,
|
|
82
|
-
peerId: info.id as PeerId,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
onSyncMessage: async ({ payload }) => {
|
|
87
|
-
if (!peerInfo) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const message = cbor.decode(payload) as Message;
|
|
91
|
-
// Note: automerge Repo dedup messages.
|
|
92
|
-
this.emit('message', message);
|
|
93
|
-
},
|
|
94
|
-
onClose: async () => {
|
|
95
|
-
if (!peerInfo) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
this.emit('peer-disconnected', {
|
|
99
|
-
peerId: peerInfo.id as PeerId,
|
|
100
|
-
});
|
|
101
|
-
this._extensions.delete(peerInfo.id);
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
);
|
|
105
|
-
return extension;
|
|
106
|
-
}
|
|
107
|
-
}
|