@dxos/messaging 0.9.1-staging.ee54ba693a → 0.11.0
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/chunk-memory-signal-manager.mjs +652 -0
- package/dist/lib/chunk-memory-signal-manager.mjs.map +1 -0
- package/dist/lib/index.mjs +377 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/testing.mjs +288 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
- package/dist/types/src/messenger.d.ts +1 -1
- package/dist/types/src/messenger.d.ts.map +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts +21 -4
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts +2 -0
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/index.d.ts +1 -2
- package/dist/types/src/signal-manager/index.d.ts.map +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts +12 -10
- package/dist/types/src/signal-manager/memory-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/memory-signal-manager.test.d.ts +2 -0
- package/dist/types/src/signal-manager/memory-signal-manager.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/signal-manager.d.ts +5 -0
- package/dist/types/src/signal-manager/signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/utils.d.ts +6 -4
- package/dist/types/src/signal-manager/utils.d.ts.map +1 -1
- package/dist/types/src/signal-methods.d.ts +33 -22
- package/dist/types/src/signal-methods.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-edge-mesh.d.ts +61 -0
- package/dist/types/src/testing/test-edge-mesh.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +19 -19
- package/src/index.ts +0 -1
- package/src/messenger.blueprint-test.ts +0 -25
- package/src/messenger.node.test.ts +1 -1
- package/src/messenger.ts +42 -18
- package/src/signal-manager/edge-signal-manager.test.ts +193 -0
- package/src/signal-manager/edge-signal-manager.ts +145 -12
- package/src/signal-manager/index.ts +1 -2
- package/src/signal-manager/memory-signal-manager.test.ts +199 -0
- package/src/signal-manager/memory-signal-manager.ts +87 -47
- package/src/signal-manager/signal-manager.ts +7 -0
- package/src/signal-manager/utils.ts +30 -21
- package/src/signal-methods.ts +37 -26
- package/src/testing/index.ts +1 -0
- package/src/testing/test-edge-mesh.ts +196 -0
- package/src/testing/utils.ts +2 -2
- package/dist/lib/neutral/chunk-EC4H56J5.mjs +0 -497
- package/dist/lib/neutral/chunk-EC4H56J5.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -1249
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/testing/index.mjs +0 -155
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
- package/dist/types/src/signal-client/index.d.ts +0 -2
- package/dist/types/src/signal-client/index.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client-monitor.d.ts +0 -30
- package/dist/types/src/signal-client/signal-client-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client.d.ts +0 -59
- package/dist/types/src/signal-client/signal-client.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client.node.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-client.node.test.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-local-state.d.ts +0 -38
- package/dist/types/src/signal-client/signal-local-state.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts +0 -6
- package/dist/types/src/signal-client/signal-rpc-client-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client.d.ts +0 -47
- package/dist/types/src/signal-client/signal-rpc-client.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts +0 -8
- package/dist/types/src/signal-manager/websocket-signal-manager-monitor.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts +0 -41
- package/dist/types/src/signal-manager/websocket-signal-manager.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts +0 -2
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts.map +0 -1
- package/src/signal-client/index.ts +0 -5
- package/src/signal-client/signal-client-monitor.ts +0 -111
- package/src/signal-client/signal-client.node.test.ts +0 -185
- package/src/signal-client/signal-client.ts +0 -339
- package/src/signal-client/signal-local-state.ts +0 -174
- package/src/signal-client/signal-rpc-client-monitor.ts +0 -15
- package/src/signal-client/signal-rpc-client.node.test.ts +0 -102
- package/src/signal-client/signal-rpc-client.ts +0 -227
- package/src/signal-manager/websocket-signal-manager-monitor.ts +0 -20
- package/src/signal-manager/websocket-signal-manager.node.test.ts +0 -112
- package/src/signal-manager/websocket-signal-manager.ts +0 -188
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { i as Messenger, n as MemorySignalManagerContext, t as MemorySignalManager } from "./chunk-memory-signal-manager.mjs";
|
|
2
|
+
import { Event, asyncTimeout } from "@dxos/async";
|
|
3
|
+
import { Resource } from "@dxos/context";
|
|
4
|
+
import { invariant } from "@dxos/invariant";
|
|
5
|
+
import { PublicKey } from "@dxos/keys";
|
|
6
|
+
import { log } from "@dxos/log";
|
|
7
|
+
import { EdgeService } from "@dxos/protocols";
|
|
8
|
+
import { PeerSchema, protocol } from "@dxos/edge-client";
|
|
9
|
+
import { buf } from "@dxos/protocols/buf";
|
|
10
|
+
import { SwarmRequestSchema, SwarmRequest_Action } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
|
|
11
|
+
import { createDidFromIdentityKey } from "@dxos/credentials";
|
|
12
|
+
//#region src/testing/test-messages.ts
|
|
13
|
+
var PAYLOAD_1 = {
|
|
14
|
+
"@type": "google.protobuf.Any",
|
|
15
|
+
"type_url": "dxos.Example1",
|
|
16
|
+
"value": Buffer.from("1")
|
|
17
|
+
};
|
|
18
|
+
var PAYLOAD_2 = {
|
|
19
|
+
"@type": "google.protobuf.Any",
|
|
20
|
+
"type_url": "dxos.Example2",
|
|
21
|
+
"value": Buffer.from("2")
|
|
22
|
+
};
|
|
23
|
+
var PAYLOAD_3 = {
|
|
24
|
+
"@type": "google.protobuf.Any",
|
|
25
|
+
"type_url": "dxos.Example3",
|
|
26
|
+
"value": Buffer.from("3")
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/testing/utils.ts
|
|
30
|
+
var expectPeerAvailable = (client, expectedTopic, peer) => asyncTimeout(client.swarmEvent.waitFor(({ peerAvailable, topic }) => !!peerAvailable && peer.peerKey === peerAvailable.peer.peerKey && expectedTopic.equals(topic)), 6e3);
|
|
31
|
+
var expectPeerLeft = (client, expectedTopic, peer) => asyncTimeout(client.swarmEvent.waitFor(({ peerLeft, topic }) => !!peerLeft && peer.peerKey === peerLeft.peer.peerKey && expectedTopic.equals(topic)), 6e3);
|
|
32
|
+
var expectReceivedMessage = (event, expectedMessage) => {
|
|
33
|
+
return asyncTimeout(event.waitFor((msg) => msg.author.peerKey === expectedMessage.author.peerKey && msg.recipient?.peerKey === expectedMessage.recipient?.peerKey && PublicKey.from(msg.payload.value).equals(expectedMessage.payload.value)), 5e3);
|
|
34
|
+
};
|
|
35
|
+
var createMessage = (author, recipient, payload = PAYLOAD_1) => ({
|
|
36
|
+
author,
|
|
37
|
+
recipient,
|
|
38
|
+
payload
|
|
39
|
+
});
|
|
40
|
+
var messageEqual = (msg1, msg2) => msg1.author.peerKey === msg2.author.peerKey && msg1.recipient?.peerKey === msg2.recipient?.peerKey && PublicKey.from(msg1.payload.value).equals(msg2.payload.value);
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/testing/test-peer.ts
|
|
43
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/messaging/src/testing/test-peer.ts";
|
|
44
|
+
var TestPeer = class extends Resource {
|
|
45
|
+
testBuilder;
|
|
46
|
+
/**
|
|
47
|
+
* Undefined until `_open()`: a `createSignalManager` factory (e.g. edge's) may install its own
|
|
48
|
+
* signer-backed key, otherwise a random one is generated. Read via {@link peerInfo} after opening.
|
|
49
|
+
*/
|
|
50
|
+
peerId;
|
|
51
|
+
signalManager;
|
|
52
|
+
messenger;
|
|
53
|
+
defaultReceived = new Event();
|
|
54
|
+
/** DID derived from {@link peerId} in `_open()`, mirroring `createDeviceEdgeIdentity`. */
|
|
55
|
+
_identityDid;
|
|
56
|
+
constructor(testBuilder) {
|
|
57
|
+
super();
|
|
58
|
+
this.testBuilder = testBuilder;
|
|
59
|
+
}
|
|
60
|
+
get peerInfo() {
|
|
61
|
+
invariant(this.peerId && this._identityDid, "TestPeer not open", {
|
|
62
|
+
"~LogMeta": "~LogMeta",
|
|
63
|
+
F: __dxlog_file,
|
|
64
|
+
L: 38,
|
|
65
|
+
S: this,
|
|
66
|
+
A: ["this.peerId && this._identityDid", "'TestPeer not open'"]
|
|
67
|
+
});
|
|
68
|
+
return buf.create(PeerSchema, {
|
|
69
|
+
peerKey: this.peerId.toHex(),
|
|
70
|
+
identityDid: this._identityDid
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async waitTillReceive(message) {
|
|
74
|
+
return expectReceivedMessage(this.defaultReceived, message);
|
|
75
|
+
}
|
|
76
|
+
async waitForPeerAvailable(topic, peer) {
|
|
77
|
+
return expectPeerAvailable(this.signalManager, topic, peer);
|
|
78
|
+
}
|
|
79
|
+
async waitForPeerLeft(topic, peer) {
|
|
80
|
+
return expectPeerLeft(this.signalManager, topic, peer);
|
|
81
|
+
}
|
|
82
|
+
async _open() {
|
|
83
|
+
this.signalManager = await this.testBuilder.createSignalManager(this);
|
|
84
|
+
this.peerId ??= PublicKey.random();
|
|
85
|
+
this._identityDid = await createDidFromIdentityKey(this.peerId);
|
|
86
|
+
this.messenger = new Messenger({
|
|
87
|
+
signalManager: this.signalManager,
|
|
88
|
+
retryDelay: 300
|
|
89
|
+
});
|
|
90
|
+
await this.signalManager.open();
|
|
91
|
+
this.messenger.open();
|
|
92
|
+
await this.messenger.listen({
|
|
93
|
+
peer: this.peerInfo,
|
|
94
|
+
onMessage: async (msg) => {
|
|
95
|
+
this.defaultReceived.emit(msg);
|
|
96
|
+
}
|
|
97
|
+
}).catch((err) => log.catch(err, void 0, {
|
|
98
|
+
"~LogMeta": "~LogMeta",
|
|
99
|
+
F: __dxlog_file,
|
|
100
|
+
L: 71,
|
|
101
|
+
S: this
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
async _close() {
|
|
105
|
+
await this.messenger.close();
|
|
106
|
+
await this.signalManager.close();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/testing/test-builder.ts
|
|
111
|
+
var TestBuilder = class {
|
|
112
|
+
options;
|
|
113
|
+
_signalContext = new MemorySignalManagerContext();
|
|
114
|
+
_peers = [];
|
|
115
|
+
constructor(options) {
|
|
116
|
+
this.options = options;
|
|
117
|
+
}
|
|
118
|
+
async createSignalManager(peer) {
|
|
119
|
+
const signalManager = await this.options.signalManagerFactory?.(peer) ?? new MemorySignalManager(this._signalContext);
|
|
120
|
+
if (this.options.messageDisruption) {
|
|
121
|
+
const trueSend = signalManager.sendMessage.bind(signalManager);
|
|
122
|
+
signalManager.sendMessage = async (ctx, message) => {
|
|
123
|
+
for (const msg of this.options.messageDisruption(message)) await trueSend(ctx, msg);
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return signalManager;
|
|
127
|
+
}
|
|
128
|
+
async createPeer() {
|
|
129
|
+
const peer = new TestPeer(this);
|
|
130
|
+
await peer.open();
|
|
131
|
+
this._peers.push(peer);
|
|
132
|
+
return peer;
|
|
133
|
+
}
|
|
134
|
+
async createPeers(count) {
|
|
135
|
+
return Promise.all(Array.from({ length: count }, () => this.createPeer()));
|
|
136
|
+
}
|
|
137
|
+
async close() {
|
|
138
|
+
await Promise.all(this._peers.map((peer) => peer.close()));
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
//#endregion
|
|
142
|
+
//#region src/testing/test-edge-mesh.ts
|
|
143
|
+
/**
|
|
144
|
+
* In-memory stand-in for the EDGE router + swarm, feature-complete for the messaging paths
|
|
145
|
+
* {@link EdgeSignalManager} exercises: swarm membership (JOIN/LEAVE), tag subscriptions (SUBSCRIBE),
|
|
146
|
+
* point-to-point relay, and tag broadcast fan-out (DX-1125). Multiple {@link TestEdgeConnection}s
|
|
147
|
+
* attach to one mesh, so a broadcast from one client is delivered to the matching subscribers of
|
|
148
|
+
* another — mirroring the real edge without a WebSocket or Durable Object.
|
|
149
|
+
*/
|
|
150
|
+
var TestEdgeMesh = class {
|
|
151
|
+
/** peerKey -> connection. */
|
|
152
|
+
_connections = /* @__PURE__ */ new Map();
|
|
153
|
+
/** swarmKey -> (peerKey -> subscription tags). */
|
|
154
|
+
_subscriptions = /* @__PURE__ */ new Map();
|
|
155
|
+
/** swarmKey -> set of member peerKeys. */
|
|
156
|
+
_members = /* @__PURE__ */ new Map();
|
|
157
|
+
createConnection({ peerKey, identityDid }) {
|
|
158
|
+
const connection = new TestEdgeConnection({
|
|
159
|
+
peerKey,
|
|
160
|
+
identityDid,
|
|
161
|
+
mesh: this
|
|
162
|
+
});
|
|
163
|
+
this._connections.set(peerKey, connection);
|
|
164
|
+
return connection;
|
|
165
|
+
}
|
|
166
|
+
removeConnection(peerKey) {
|
|
167
|
+
this._connections.delete(peerKey);
|
|
168
|
+
for (const members of this._members.values()) members.delete(peerKey);
|
|
169
|
+
for (const subs of this._subscriptions.values()) subs.delete(peerKey);
|
|
170
|
+
}
|
|
171
|
+
/** Handle a message sent by a client connection. */
|
|
172
|
+
receive(fromPeerKey, message) {
|
|
173
|
+
switch (message.serviceId) {
|
|
174
|
+
case EdgeService.SWARM:
|
|
175
|
+
this._handleSwarmRequest(fromPeerKey, message);
|
|
176
|
+
break;
|
|
177
|
+
case EdgeService.SIGNAL:
|
|
178
|
+
this._handleSignal(fromPeerKey, message);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
_handleSwarmRequest(fromPeerKey, message) {
|
|
183
|
+
const request = protocol.getPayload(message, SwarmRequestSchema);
|
|
184
|
+
const swarmKeys = request.swarmKeys ?? [];
|
|
185
|
+
switch (request.action) {
|
|
186
|
+
case SwarmRequest_Action.JOIN:
|
|
187
|
+
for (const swarmKey of swarmKeys) this._memberSet(swarmKey).add(fromPeerKey);
|
|
188
|
+
break;
|
|
189
|
+
case SwarmRequest_Action.LEAVE:
|
|
190
|
+
for (const swarmKey of swarmKeys) {
|
|
191
|
+
this._memberSet(swarmKey).delete(fromPeerKey);
|
|
192
|
+
this._subscriptionMap(swarmKey).delete(fromPeerKey);
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
case SwarmRequest_Action.SUBSCRIBE:
|
|
196
|
+
for (const swarmKey of swarmKeys) this._subscriptionMap(swarmKey).set(fromPeerKey, request.subscribeTags ?? []);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
_handleSignal(fromPeerKey, message) {
|
|
201
|
+
const tags = message.tags ?? [];
|
|
202
|
+
const targets = message.target ?? [];
|
|
203
|
+
if (tags.length > 0 && targets.length === 0) {
|
|
204
|
+
const swarmKey = message.source?.swarmKey;
|
|
205
|
+
if (!swarmKey) return;
|
|
206
|
+
for (const [peerKey, subscriptionTags] of this._subscriptionMap(swarmKey)) {
|
|
207
|
+
if (peerKey === fromPeerKey) continue;
|
|
208
|
+
if (subscriptionTags.some((tag) => tags.includes(tag))) this._connections.get(peerKey)?.deliver(message);
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
for (const target of targets) if (target.peerKey) this._connections.get(target.peerKey)?.deliver(message);
|
|
213
|
+
}
|
|
214
|
+
_memberSet(swarmKey) {
|
|
215
|
+
let set = this._members.get(swarmKey);
|
|
216
|
+
if (!set) {
|
|
217
|
+
set = /* @__PURE__ */ new Set();
|
|
218
|
+
this._members.set(swarmKey, set);
|
|
219
|
+
}
|
|
220
|
+
return set;
|
|
221
|
+
}
|
|
222
|
+
_subscriptionMap(swarmKey) {
|
|
223
|
+
let map = this._subscriptions.get(swarmKey);
|
|
224
|
+
if (!map) {
|
|
225
|
+
map = /* @__PURE__ */ new Map();
|
|
226
|
+
this._subscriptions.set(swarmKey, map);
|
|
227
|
+
}
|
|
228
|
+
return map;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* In-memory {@link EdgeConnection} bound to a {@link TestEdgeMesh}. Only the members
|
|
233
|
+
* {@link EdgeSignalManager} uses are functional; the rest are inert stubs.
|
|
234
|
+
*/
|
|
235
|
+
var TestEdgeConnection = class {
|
|
236
|
+
statusChanged = new Event();
|
|
237
|
+
_messageListeners = /* @__PURE__ */ new Set();
|
|
238
|
+
_peerKey;
|
|
239
|
+
_identityDid;
|
|
240
|
+
_mesh;
|
|
241
|
+
constructor({ peerKey, identityDid, mesh }) {
|
|
242
|
+
this._peerKey = peerKey;
|
|
243
|
+
this._identityDid = identityDid;
|
|
244
|
+
this._mesh = mesh;
|
|
245
|
+
}
|
|
246
|
+
get info() {
|
|
247
|
+
return {
|
|
248
|
+
peerKey: this._peerKey,
|
|
249
|
+
identityDid: this._identityDid
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
get identityDid() {
|
|
253
|
+
return this._identityDid;
|
|
254
|
+
}
|
|
255
|
+
get peerKey() {
|
|
256
|
+
return this._peerKey;
|
|
257
|
+
}
|
|
258
|
+
get isOpen() {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
get status() {
|
|
262
|
+
return {};
|
|
263
|
+
}
|
|
264
|
+
setIdentity() {}
|
|
265
|
+
async send(_ctx, message) {
|
|
266
|
+
this._mesh.receive(this._peerKey, message);
|
|
267
|
+
}
|
|
268
|
+
onMessage(listener) {
|
|
269
|
+
this._messageListeners.add(listener);
|
|
270
|
+
return () => this._messageListeners.delete(listener);
|
|
271
|
+
}
|
|
272
|
+
onReconnected(listener, opts) {
|
|
273
|
+
if (opts?.emitCurrentState !== false) listener();
|
|
274
|
+
return () => {};
|
|
275
|
+
}
|
|
276
|
+
/** Deliver a message from the mesh to this connection's listeners. */
|
|
277
|
+
deliver(message) {
|
|
278
|
+
for (const listener of this._messageListeners) listener(message);
|
|
279
|
+
}
|
|
280
|
+
async open() {}
|
|
281
|
+
async close() {
|
|
282
|
+
this._mesh.removeConnection(this._peerKey);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
//#endregion
|
|
286
|
+
export { PAYLOAD_1, PAYLOAD_2, PAYLOAD_3, TestBuilder, TestEdgeConnection, TestEdgeMesh, TestPeer, createMessage, expectPeerAvailable, expectPeerLeft, expectReceivedMessage, messageEqual };
|
|
287
|
+
|
|
288
|
+
//# sourceMappingURL=testing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.mjs","names":[],"sources":["../../src/testing/test-messages.ts","../../src/testing/utils.ts","../../src/testing/test-peer.ts","../../src/testing/test-builder.ts","../../src/testing/test-edge-mesh.ts"],"sourcesContent":["//\n// Copyright 2022 DXOS.org\n//\n\nimport { type TaggedType } from '@dxos/codec-protobuf';\nimport { type TYPES } from '@dxos/protocols/proto';\n\nexport const PAYLOAD_1: TaggedType<TYPES, 'google.protobuf.Any'> = {\n '@type': 'google.protobuf.Any',\n 'type_url': 'dxos.Example1',\n 'value': Buffer.from('1'),\n};\n\nexport const PAYLOAD_2: TaggedType<TYPES, 'google.protobuf.Any'> = {\n '@type': 'google.protobuf.Any',\n 'type_url': 'dxos.Example2',\n 'value': Buffer.from('2'),\n};\n\nexport const PAYLOAD_3: TaggedType<TYPES, 'google.protobuf.Any'> = {\n '@type': 'google.protobuf.Any',\n 'type_url': 'dxos.Example3',\n 'value': Buffer.from('3'),\n};\n","//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Event, asyncTimeout } from '@dxos/async';\nimport { type Any } from '@dxos/codec-protobuf';\nimport { PublicKey } from '@dxos/keys';\n\nimport { type Message, type PeerInfo, type SignalMethods } from '../signal-methods';\nimport { PAYLOAD_1 } from './test-messages';\n\nexport const expectPeerAvailable = (client: SignalMethods, expectedTopic: PublicKey, peer: PeerInfo) =>\n asyncTimeout(\n client.swarmEvent.waitFor(\n ({ peerAvailable, topic }) =>\n !!peerAvailable && peer.peerKey === peerAvailable.peer.peerKey && expectedTopic.equals(topic),\n ),\n 6000,\n );\n\nexport const expectPeerLeft = (client: SignalMethods, expectedTopic: PublicKey, peer: PeerInfo) =>\n asyncTimeout(\n client.swarmEvent.waitFor(\n ({ peerLeft, topic }) => !!peerLeft && peer.peerKey === peerLeft.peer.peerKey && expectedTopic.equals(topic),\n ),\n 6000,\n );\n\nexport const expectReceivedMessage = (event: Event<Message>, expectedMessage: Message) => {\n return asyncTimeout(\n event.waitFor(\n (msg) =>\n msg.author.peerKey === expectedMessage.author.peerKey &&\n msg.recipient?.peerKey === expectedMessage.recipient?.peerKey &&\n PublicKey.from(msg.payload.value).equals(expectedMessage.payload.value),\n ),\n 5000,\n );\n};\n\nexport const createMessage = (author: PeerInfo, recipient: PeerInfo, payload: Any = PAYLOAD_1): Message => ({\n author,\n recipient,\n payload,\n});\n\nexport const messageEqual = (msg1: Message, msg2: Message) =>\n msg1.author.peerKey === msg2.author.peerKey &&\n msg1.recipient?.peerKey === msg2.recipient?.peerKey &&\n PublicKey.from(msg1.payload.value).equals(msg2.payload.value);\n","//\n// Copyright 2022 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { Resource } from '@dxos/context';\nimport { createDidFromIdentityKey } from '@dxos/credentials';\nimport { PeerSchema } from '@dxos/edge-client';\nimport { invariant } from '@dxos/invariant';\nimport { type IdentityDid, PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\n\nimport { Messenger } from '../messenger';\nimport { type SignalManager } from '../signal-manager';\nimport { type Message, type PeerInfo } from '../signal-methods';\nimport { type TestBuilder } from './test-builder';\nimport { expectPeerAvailable, expectPeerLeft, expectReceivedMessage } from './utils';\n\nexport class TestPeer extends Resource {\n /**\n * Undefined until `_open()`: a `createSignalManager` factory (e.g. edge's) may install its own\n * signer-backed key, otherwise a random one is generated. Read via {@link peerInfo} after opening.\n */\n public peerId?: PublicKey;\n public signalManager!: SignalManager;\n public messenger!: Messenger;\n public defaultReceived = new Event<Message>();\n\n /** DID derived from {@link peerId} in `_open()`, mirroring `createDeviceEdgeIdentity`. */\n private _identityDid?: IdentityDid;\n\n constructor(private readonly testBuilder: TestBuilder) {\n super();\n }\n\n get peerInfo(): PeerInfo {\n invariant(this.peerId && this._identityDid, 'TestPeer not open');\n return buf.create(PeerSchema, { peerKey: this.peerId.toHex(), identityDid: this._identityDid });\n }\n\n async waitTillReceive(message: Message): Promise<Message> {\n return expectReceivedMessage(this.defaultReceived, message);\n }\n\n async waitForPeerAvailable(topic: PublicKey, peer: PeerInfo) {\n return expectPeerAvailable(this.signalManager, topic, peer);\n }\n\n async waitForPeerLeft(topic: PublicKey, peer: PeerInfo) {\n return expectPeerLeft(this.signalManager, topic, peer);\n }\n\n protected override async _open(): Promise<void> {\n // `createSignalManager` (e.g. edge's factory) may populate `peerId` with its own signer-backed\n // key; otherwise fall back to a random one. Derive the DID only after `peerId` is settled.\n this.signalManager = await this.testBuilder.createSignalManager(this);\n this.peerId ??= PublicKey.random();\n this._identityDid = await createDidFromIdentityKey(this.peerId);\n this.messenger = new Messenger({ signalManager: this.signalManager, retryDelay: 300 });\n\n await this.signalManager.open();\n this.messenger.open();\n await this.messenger\n .listen({\n peer: this.peerInfo,\n onMessage: async (msg) => {\n this.defaultReceived.emit(msg);\n },\n })\n .catch((err) => log.catch(err));\n }\n\n protected override async _close(): Promise<void> {\n await this.messenger.close();\n await this.signalManager.close();\n }\n}\n","//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Context } from '@dxos/context';\n\nimport { MemorySignalManager, MemorySignalManagerContext, type SignalManager } from '../signal-manager';\nimport { type Message } from '../signal-methods';\nimport { TestPeer } from './test-peer';\n\nexport type TestBuilderOptions = {\n signalManagerFactory?: (peer: TestPeer) => Promise<SignalManager>;\n messageDisruption?: (msg: Message) => Message[];\n};\n\nexport class TestBuilder {\n private _signalContext = new MemorySignalManagerContext();\n private readonly _peers: TestPeer[] = [];\n\n constructor(public options: TestBuilderOptions) {}\n\n async createSignalManager(peer: TestPeer): Promise<SignalManager> {\n const signalManager =\n (await this.options.signalManagerFactory?.(peer)) ?? new MemorySignalManager(this._signalContext);\n\n if (this.options.messageDisruption) {\n // Imitates signal network disruptions (e. g. message doubling, ).\n const trueSend = signalManager.sendMessage.bind(signalManager);\n signalManager.sendMessage = async (ctx: Context, message: Message) => {\n for (const msg of this.options.messageDisruption!(message)) {\n await trueSend(ctx, msg);\n }\n };\n }\n\n return signalManager;\n }\n\n async createPeer(): Promise<TestPeer> {\n const peer = new TestPeer(this);\n await peer.open();\n this._peers.push(peer);\n return peer;\n }\n\n async createPeers(count: number): Promise<TestPeer[]> {\n return Promise.all(Array.from({ length: count }, () => this.createPeer()));\n }\n\n async close(): Promise<void> {\n await Promise.all(this._peers.map((peer) => peer.close()));\n }\n}\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { type Context } from '@dxos/context';\nimport { type EdgeConnection, protocol } from '@dxos/edge-client';\nimport { EdgeService } from '@dxos/protocols';\nimport {\n type Message,\n SwarmRequest_Action as SwarmRequestAction,\n SwarmRequestSchema,\n} from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\n/**\n * In-memory stand-in for the EDGE router + swarm, feature-complete for the messaging paths\n * {@link EdgeSignalManager} exercises: swarm membership (JOIN/LEAVE), tag subscriptions (SUBSCRIBE),\n * point-to-point relay, and tag broadcast fan-out (DX-1125). Multiple {@link TestEdgeConnection}s\n * attach to one mesh, so a broadcast from one client is delivered to the matching subscribers of\n * another — mirroring the real edge without a WebSocket or Durable Object.\n */\nexport class TestEdgeMesh {\n /** peerKey -> connection. */\n private readonly _connections = new Map<string, TestEdgeConnection>();\n /** swarmKey -> (peerKey -> subscription tags). */\n private readonly _subscriptions = new Map<string, Map<string, string[]>>();\n /** swarmKey -> set of member peerKeys. */\n private readonly _members = new Map<string, Set<string>>();\n\n createConnection({ peerKey, identityDid }: { peerKey: string; identityDid: string }): TestEdgeConnection {\n const connection = new TestEdgeConnection({ peerKey, identityDid, mesh: this });\n this._connections.set(peerKey, connection);\n return connection;\n }\n\n removeConnection(peerKey: string): void {\n this._connections.delete(peerKey);\n for (const members of this._members.values()) {\n members.delete(peerKey);\n }\n for (const subs of this._subscriptions.values()) {\n subs.delete(peerKey);\n }\n }\n\n /** Handle a message sent by a client connection. */\n receive(fromPeerKey: string, message: Message): void {\n switch (message.serviceId) {\n case EdgeService.SWARM:\n this._handleSwarmRequest(fromPeerKey, message);\n break;\n case EdgeService.SIGNAL:\n this._handleSignal(fromPeerKey, message);\n break;\n }\n }\n\n private _handleSwarmRequest(fromPeerKey: string, message: Message): void {\n const request = protocol.getPayload(message, SwarmRequestSchema);\n const swarmKeys = request.swarmKeys ?? [];\n switch (request.action) {\n case SwarmRequestAction.JOIN:\n for (const swarmKey of swarmKeys) {\n this._memberSet(swarmKey).add(fromPeerKey);\n }\n break;\n case SwarmRequestAction.LEAVE:\n for (const swarmKey of swarmKeys) {\n this._memberSet(swarmKey).delete(fromPeerKey);\n this._subscriptionMap(swarmKey).delete(fromPeerKey);\n }\n break;\n case SwarmRequestAction.SUBSCRIBE:\n // Set/replace this peer's broadcast subscription on each named swarm (DX-1125).\n for (const swarmKey of swarmKeys) {\n this._subscriptionMap(swarmKey).set(fromPeerKey, request.subscribeTags ?? []);\n }\n break;\n }\n }\n\n private _handleSignal(fromPeerKey: string, message: Message): void {\n const tags = message.tags ?? [];\n const targets = message.target ?? [];\n\n // Broadcast (DX-1125): tags present, no target -> fan out to matching subscribers on the swarm.\n if (tags.length > 0 && targets.length === 0) {\n const swarmKey = message.source?.swarmKey;\n if (!swarmKey) {\n return;\n }\n for (const [peerKey, subscriptionTags] of this._subscriptionMap(swarmKey)) {\n if (peerKey === fromPeerKey) {\n continue; // No self-delivery.\n }\n if (subscriptionTags.some((tag) => tags.includes(tag))) {\n this._connections.get(peerKey)?.deliver(message);\n }\n }\n return;\n }\n\n // Point-to-point relay.\n for (const target of targets) {\n if (target.peerKey) {\n this._connections.get(target.peerKey)?.deliver(message);\n }\n }\n }\n\n private _memberSet(swarmKey: string): Set<string> {\n let set = this._members.get(swarmKey);\n if (!set) {\n set = new Set();\n this._members.set(swarmKey, set);\n }\n return set;\n }\n\n private _subscriptionMap(swarmKey: string): Map<string, string[]> {\n let map = this._subscriptions.get(swarmKey);\n if (!map) {\n map = new Map();\n this._subscriptions.set(swarmKey, map);\n }\n return map;\n }\n}\n\n/**\n * In-memory {@link EdgeConnection} bound to a {@link TestEdgeMesh}. Only the members\n * {@link EdgeSignalManager} uses are functional; the rest are inert stubs.\n */\nexport class TestEdgeConnection implements EdgeConnection {\n public readonly statusChanged: EdgeConnection['statusChanged'] = new Event<any>();\n private readonly _messageListeners = new Set<(message: Message) => void>();\n private readonly _peerKey: string;\n private readonly _identityDid: string;\n private readonly _mesh: TestEdgeMesh;\n\n constructor({ peerKey, identityDid, mesh }: { peerKey: string; identityDid: string; mesh: TestEdgeMesh }) {\n this._peerKey = peerKey;\n this._identityDid = identityDid;\n this._mesh = mesh;\n }\n\n get info(): any {\n return { peerKey: this._peerKey, identityDid: this._identityDid };\n }\n\n get identityDid(): string {\n return this._identityDid;\n }\n\n get peerKey(): string {\n return this._peerKey;\n }\n\n get isOpen(): boolean {\n return true;\n }\n\n get status(): EdgeConnection['status'] {\n return {} as EdgeConnection['status'];\n }\n\n setIdentity(): void {}\n\n async send(_ctx: Context, message: Message): Promise<void> {\n this._mesh.receive(this._peerKey, message);\n }\n\n onMessage(listener: (message: Message) => void): () => void {\n this._messageListeners.add(listener);\n return () => this._messageListeners.delete(listener);\n }\n\n onReconnected(listener: () => void, opts?: { emitCurrentState?: boolean }): () => void {\n if (opts?.emitCurrentState !== false) {\n listener();\n }\n return () => {};\n }\n\n /** Deliver a message from the mesh to this connection's listeners. */\n deliver(message: Message): void {\n for (const listener of this._messageListeners) {\n listener(message);\n }\n }\n\n async open(): Promise<void> {}\n async close(): Promise<void> {\n this._mesh.removeConnection(this._peerKey);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.blueprint-test.d.ts","sourceRoot":"","sources":["../../../src/messenger.blueprint-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messenger.blueprint-test.d.ts","sourceRoot":"","sources":["../../../src/messenger.blueprint-test.ts"],"names":[],"mappings":"AAUA,OAAO,EAAmC,WAAW,EAAgB,MAAM,WAAW,CAAC;AAEvF,eAAO,MAAM,cAAc,yBAA0B,WAAW,CAAC,qBAAqB,CAAC,SA6StF,CAAC"}
|
|
@@ -26,7 +26,7 @@ export declare class Messenger {
|
|
|
26
26
|
constructor({ signalManager, retryDelay }: MessengerOptions);
|
|
27
27
|
open(): void;
|
|
28
28
|
close(): Promise<void>;
|
|
29
|
-
sendMessage(ctx: Context,
|
|
29
|
+
sendMessage(ctx: Context, message: Message): Promise<void>;
|
|
30
30
|
/**
|
|
31
31
|
* Subscribes onMessage function to messages that contains payload with payloadType.
|
|
32
32
|
* @param payloadType if not specified, onMessage will be subscribed to all types of messages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/messenger.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG/D,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEzB;IAGF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IAEvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyD;IAEzF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAE/E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IAEtE,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YAAY,EAAE,aAAa,EAAE,UAAiB,EAAE,EAAE,gBAAgB,EAKjE;IAED,IAAI,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/messenger.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG/D,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEzB;IAGF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IAEvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyD;IAEzF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAE/E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IAEtE,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YAAY,EAAE,aAAa,EAAE,UAAiB,EAAE,EAAE,gBAAgB,EAKjE;IAED,IAAI,IAAI,IAAI,CAoBX;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3B;IAEK,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D/D;IAED;;;OAGG;IACG,MAAM,CAAC,EACX,IAAI,EACJ,WAAW,EACX,SAAS,EACV,EAAE;QACD,IAAI,EAAE,QAAQ,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+C3B;YAEa,cAAc;YAsBd,cAAc;YAad,sBAAsB;YAiCtB,sBAAsB;YAKtB,oBAAoB;YAwBpB,cAAc;IA0B5B,OAAO,CAAC,UAAU;CAgBnB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC"}
|
|
@@ -3,7 +3,7 @@ import { type Context, Resource } from '@dxos/context';
|
|
|
3
3
|
import { type EdgeConnection } from '@dxos/edge-client';
|
|
4
4
|
import { PublicKey } from '@dxos/keys';
|
|
5
5
|
import { type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
|
|
6
|
-
import { type Message, type PeerInfo, type SwarmEvent } from '../signal-methods';
|
|
6
|
+
import { type Message, type PeerInfo, type SubscribeMessagesParams, type SwarmEvent, type UnsubscribeCallback } from '../signal-methods';
|
|
7
7
|
import { type SignalManager } from './signal-manager';
|
|
8
8
|
export declare class EdgeSignalManager extends Resource implements SignalManager {
|
|
9
9
|
/**
|
|
@@ -11,11 +11,23 @@ export declare class EdgeSignalManager extends Resource implements SignalManager
|
|
|
11
11
|
*/
|
|
12
12
|
swarmEvent: Event<SwarmEvent>;
|
|
13
13
|
swarmState: Event<SwarmResponse>;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Active message subscriptions. Routing is encapsulated here (DX-1125): each incoming message is
|
|
16
|
+
* dispatched to every subscription it matches, and each subscription owns its own teardown.
|
|
17
|
+
*/
|
|
18
|
+
private readonly _subscriptions;
|
|
15
19
|
/**
|
|
16
20
|
* Swarm key -> { peer: <own state payload>, joinedPeers: <state of swarm> }.
|
|
17
21
|
*/
|
|
18
22
|
private readonly _swarmPeers;
|
|
23
|
+
/**
|
|
24
|
+
* OR-subscription tag refcounts for broadcast messages (DX-1125). One count per distinct tag across
|
|
25
|
+
* all subscribers, so one consumer's unsubscribe releases only its own registration rather than
|
|
26
|
+
* clobbering another consumer's identical subscription. The effective tag set (the keys) is shared
|
|
27
|
+
* across all joined swarms; the edge fans out any broadcast whose tags intersect it. Re-sent on
|
|
28
|
+
* reconnect and whenever a swarm is (re-)joined.
|
|
29
|
+
*/
|
|
30
|
+
private readonly _subscribedTags;
|
|
19
31
|
private readonly _edgeConnection;
|
|
20
32
|
constructor({ edgeConnection }: {
|
|
21
33
|
edgeConnection: EdgeConnection;
|
|
@@ -36,11 +48,16 @@ export declare class EdgeSignalManager extends Resource implements SignalManager
|
|
|
36
48
|
topic: PublicKey;
|
|
37
49
|
}): Promise<SwarmResponse>;
|
|
38
50
|
sendMessage(ctx: Context, message: Message): Promise<void>;
|
|
39
|
-
subscribeMessages(
|
|
40
|
-
|
|
51
|
+
subscribeMessages({ peer, tags, onMessage }: SubscribeMessagesParams): Promise<UnsubscribeCallback>;
|
|
52
|
+
private _sendSubscription;
|
|
41
53
|
private _onMessage;
|
|
42
54
|
private _processSwarmResponse;
|
|
43
55
|
private _processMessage;
|
|
56
|
+
/**
|
|
57
|
+
* Route an incoming message to matching subscriptions (DX-1125): point-to-point by recipient
|
|
58
|
+
* `peerKey`, broadcasts by tag intersection.
|
|
59
|
+
*/
|
|
60
|
+
private _deliver;
|
|
44
61
|
private _matchSelfPeerInfo;
|
|
45
62
|
private _rejoinAllSwarms;
|
|
46
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/edge-signal-manager.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAsC,MAAM,mBAAmB,CAAC;AAE5F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,
|
|
1
|
+
{"version":3,"file":"edge-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/edge-signal-manager.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAsC,MAAM,mBAAmB,CAAC;AAE5F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EAEb,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD,qBAAa,iBAAkB,SAAQ,QAAS,YAAW,aAAa;IACtE;;OAEG;IACI,UAAU,oBAA2B;IACrC,UAAU,uBAA8B;IAE/C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE;;OAEG;IAEH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGV;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAE7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,YAAY,EAAE,cAAc,EAAE,EAAE;QAAE,cAAc,EAAE,cAAc,CAAA;KAAE,EAGjE;IAED,UAAyB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9C;IAED;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B7F;IAEK,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9F;IAEK,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBjF;IAEK,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/D;IAEK,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuC7G;YAMa,iBAAiB;IAsB/B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,eAAe;IA4BvB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,kBAAkB;YAMZ,gBAAgB;CAiB/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-signal-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/edge-signal-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from './memory-signal-manager';
|
|
2
|
-
export
|
|
3
|
-
export * from './websocket-signal-manager';
|
|
2
|
+
export * from './signal-manager';
|
|
4
3
|
export * from './edge-signal-manager';
|
|
5
4
|
export * from './utils';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AACxC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Event } from '@dxos/async';
|
|
2
|
-
import { type Any } from '@dxos/codec-protobuf';
|
|
3
2
|
import { Context } from '@dxos/context';
|
|
4
3
|
import { PublicKey } from '@dxos/keys';
|
|
5
4
|
import { type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
|
|
6
5
|
import { type QueryRequest } from '@dxos/protocols/proto/dxos/edge/signal';
|
|
7
6
|
import { ComplexMap, ComplexSet } from '@dxos/util';
|
|
8
|
-
import { type Message, type PeerInfo, type SignalStatus, type SwarmEvent } from '../signal-methods';
|
|
7
|
+
import { type Message, type PeerInfo, type SignalStatus, type SubscribeMessagesParams, type SwarmEvent, type UnsubscribeCallback } from '../signal-methods';
|
|
9
8
|
import { type SignalManager } from './signal-manager';
|
|
10
9
|
/**
|
|
11
10
|
* Common signaling context that connects multiple MemorySignalManager instances.
|
|
@@ -22,7 +21,11 @@ export declare class MemorySignalManager implements SignalManager {
|
|
|
22
21
|
private readonly _context;
|
|
23
22
|
readonly statusChanged: Event<SignalStatus[]>;
|
|
24
23
|
readonly swarmEvent: Event<SwarmEvent>;
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Active message subscriptions on this manager. Routing is encapsulated here (DX-1125): a delivered
|
|
26
|
+
* message is dispatched to every subscription it matches.
|
|
27
|
+
*/
|
|
28
|
+
private readonly _subscriptions;
|
|
26
29
|
/** Will be used to emit SwarmEvents on .open() and .close() */
|
|
27
30
|
private _joinedSwarms;
|
|
28
31
|
private _ctx;
|
|
@@ -40,14 +43,13 @@ export declare class MemorySignalManager implements SignalManager {
|
|
|
40
43
|
peer: PeerInfo;
|
|
41
44
|
}): Promise<void>;
|
|
42
45
|
query(_ctx: Context, request: QueryRequest): Promise<SwarmResponse>;
|
|
43
|
-
sendMessage(_ctx: Context,
|
|
44
|
-
|
|
45
|
-
recipient: PeerInfo;
|
|
46
|
-
payload: Any;
|
|
47
|
-
}): Promise<void>;
|
|
48
|
-
subscribeMessages(peerInfo: PeerInfo): Promise<void>;
|
|
49
|
-
unsubscribeMessages(peerInfo: PeerInfo): Promise<void>;
|
|
46
|
+
sendMessage(_ctx: Context, message: Message): Promise<void>;
|
|
47
|
+
subscribeMessages({ peer, tags, onMessage }: SubscribeMessagesParams): Promise<UnsubscribeCallback>;
|
|
50
48
|
freeze(): void;
|
|
51
49
|
unfreeze(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Route a delivered message to this manager's matching subscriptions once it is unfrozen and open.
|
|
52
|
+
*/
|
|
53
|
+
private _deliver;
|
|
52
54
|
}
|
|
53
55
|
//# sourceMappingURL=memory-signal-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/memory-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/memory-signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD;;GAEG;AACH,qBAAa,0BAA0B;IAErC,QAAQ,CAAC,UAAU,oBAA2B;IAG9C,QAAQ,CAAC,MAAM,8FAAmE;IAGlF,QAAQ,CAAC,WAAW,4FAA+D;CACpF;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAoB3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnBrC,QAAQ,CAAC,aAAa,wBAA+B;IACrD,QAAQ,CAAC,UAAU,oBAA2B;IAE9C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE,gEAAgE;IAChE,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,IAAI,CAAW;IAGvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAEvD,YAA6B,QAAQ,EAAE,0BAA0B,EAIhE;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;IAED,SAAS,IAAI,YAAY,EAAE,CAE1B;IAEK,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B9F;IAEK,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/F;IAEK,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAExE;IAEK,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhE;IAEK,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAe7G;IAED,MAAM,IAAI,IAAI,CAEb;IAED,QAAQ,IAAI,IAAI,CAEf;IAED;;OAEG;IACH,OAAO,CAAC,QAAQ;CA6BjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-signal-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/memory-signal-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Context from 'effect/Context';
|
|
1
2
|
import { type Event } from '@dxos/async';
|
|
2
3
|
import { type Lifecycle } from '@dxos/context';
|
|
3
4
|
import { type SignalMethods, type SignalStatus } from '../signal-methods';
|
|
@@ -8,4 +9,8 @@ export interface SignalManager extends SignalMethods, Required<Lifecycle> {
|
|
|
8
9
|
statusChanged?: Event<SignalStatus[]>;
|
|
9
10
|
getStatus?: () => SignalStatus[];
|
|
10
11
|
}
|
|
12
|
+
declare const SignalManagerService_base: Context.TagClass<SignalManagerService, "@dxos/messaging/SignalManager", SignalManager>;
|
|
13
|
+
export declare class SignalManagerService extends SignalManagerService_base {
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
11
16
|
//# sourceMappingURL=signal-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;CAClC"}
|
|
1
|
+
{"version":3,"file":"signal-manager.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/signal-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;CAClC;;AAED,qBAAa,oBAAqB,SAAQ,yBAGvC;CAAG"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import * as Runtime from 'effect/Runtime';
|
|
2
|
+
import { type DevicesService, type IdentityService } from '@dxos/protocols/rpc';
|
|
3
|
+
export declare const setIdentityTags: ({ identityService, devicesService, runtime, setTag, }: {
|
|
4
|
+
identityService: IdentityService.Client;
|
|
5
|
+
devicesService: DevicesService.Client;
|
|
6
|
+
runtime?: Runtime.Runtime<never>;
|
|
5
7
|
setTag: (k: string, v: string) => void;
|
|
6
8
|
}) => void;
|
|
7
9
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAM1C,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEhF,eAAO,MAAM,eAAe,0DAKzB;IACD,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,SA4BA,CAAC"}
|