@dxos/network-manager 2.33.9-dev.d0ae5f95 → 2.33.9-dev.d0dce35f
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/src/network-manager.blueprint-test.d.ts +3 -1
- package/dist/src/network-manager.blueprint-test.d.ts.map +1 -1
- package/dist/src/network-manager.blueprint-test.js +50 -21
- package/dist/src/network-manager.blueprint-test.js.map +1 -1
- package/dist/src/network-manager.browser-test.js +1 -1
- package/dist/src/network-manager.browser-test.js.map +1 -1
- package/dist/src/network-manager.d.ts.map +1 -1
- package/dist/src/network-manager.js +6 -6
- package/dist/src/network-manager.js.map +1 -1
- package/dist/src/network-manager.test.js +5 -4
- package/dist/src/network-manager.test.js.map +1 -1
- package/dist/src/proto/gen/dxos/credentials.d.ts +39 -0
- package/dist/src/proto/gen/dxos/credentials.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/halo/keys.d.ts +44 -2
- package/dist/src/proto/gen/dxos/halo/keys.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/halo/keys.js +4 -0
- package/dist/src/proto/gen/dxos/halo/keys.js.map +1 -1
- package/dist/src/proto/gen/dxos/mesh/signal.d.ts +74 -37
- package/dist/src/proto/gen/dxos/mesh/signal.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/mesh/signalMessage.d.ts +79 -0
- package/dist/src/proto/gen/dxos/mesh/signalMessage.d.ts.map +1 -0
- package/dist/src/proto/gen/dxos/mesh/signalMessage.js +3 -0
- package/dist/src/proto/gen/dxos/mesh/signalMessage.js.map +1 -0
- package/dist/src/proto/gen/google/protobuf.d.ts +8 -2
- package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -1
- package/dist/src/proto/gen/index.d.ts +17 -5
- package/dist/src/proto/gen/index.d.ts.map +1 -1
- package/dist/src/proto/gen/index.js +1 -1
- package/dist/src/proto/gen/index.js.map +1 -1
- package/dist/src/proto/substitutions.d.ts +4 -0
- package/dist/src/proto/substitutions.d.ts.map +1 -1
- package/dist/src/proto/substitutions.js +3 -1
- package/dist/src/proto/substitutions.js.map +1 -1
- package/dist/src/signal/in-memory-signal-manager.d.ts +7 -7
- package/dist/src/signal/in-memory-signal-manager.d.ts.map +1 -1
- package/dist/src/signal/in-memory-signal-manager.js +29 -8
- package/dist/src/signal/in-memory-signal-manager.js.map +1 -1
- package/dist/src/signal/index.d.ts +1 -2
- package/dist/src/signal/index.d.ts.map +1 -1
- package/dist/src/signal/index.js +1 -2
- package/dist/src/signal/index.js.map +1 -1
- package/dist/src/signal/integration.test.d.ts +2 -0
- package/dist/src/signal/integration.test.d.ts.map +1 -0
- package/dist/src/signal/integration.test.js +102 -0
- package/dist/src/signal/integration.test.js.map +1 -0
- package/dist/src/signal/message-router.d.ts +7 -7
- package/dist/src/signal/message-router.d.ts.map +1 -1
- package/dist/src/signal/message-router.js +6 -1
- package/dist/src/signal/message-router.js.map +1 -1
- package/dist/src/signal/message-router.test.js +15 -19
- package/dist/src/signal/message-router.test.js.map +1 -1
- package/dist/src/signal/signal-client.d.ts +33 -18
- package/dist/src/signal/signal-client.d.ts.map +1 -1
- package/dist/src/signal/signal-client.js +102 -92
- package/dist/src/signal/signal-client.js.map +1 -1
- package/dist/src/signal/signal-client.test.js +60 -77
- package/dist/src/signal/signal-client.test.js.map +1 -1
- package/dist/src/signal/{websocket-signal-manager.d.ts → signal-manager-impl.d.ts} +13 -11
- package/dist/src/signal/signal-manager-impl.d.ts.map +1 -0
- package/dist/src/signal/signal-manager-impl.js +151 -0
- package/dist/src/signal/signal-manager-impl.js.map +1 -0
- package/dist/src/signal/signal-manager.d.ts +12 -11
- package/dist/src/signal/signal-manager.d.ts.map +1 -1
- package/dist/src/signal/signal-rpc-client.d.ts +19 -0
- package/dist/src/signal/signal-rpc-client.d.ts.map +1 -0
- package/dist/src/signal/signal-rpc-client.js +108 -0
- package/dist/src/signal/signal-rpc-client.js.map +1 -0
- package/dist/src/signal/signal-rpc-client.test.d.ts +2 -0
- package/dist/src/signal/signal-rpc-client.test.d.ts.map +1 -0
- package/dist/src/signal/signal-rpc-client.test.js +74 -0
- package/dist/src/signal/signal-rpc-client.test.js.map +1 -0
- package/dist/src/swarm/connection.d.ts +3 -3
- package/dist/src/swarm/connection.d.ts.map +1 -1
- package/dist/src/swarm/connection.js +1 -4
- package/dist/src/swarm/connection.js.map +1 -1
- package/dist/src/swarm/swarm.d.ts +6 -7
- package/dist/src/swarm/swarm.d.ts.map +1 -1
- package/dist/src/swarm/swarm.js +21 -17
- package/dist/src/swarm/swarm.js.map +1 -1
- package/dist/src/swarm/swarm.test.js +156 -117
- package/dist/src/swarm/swarm.test.js.map +1 -1
- package/dist/src/topology/fully-connected-topology.d.ts +0 -1
- package/dist/src/topology/fully-connected-topology.d.ts.map +1 -1
- package/dist/src/topology/fully-connected-topology.js +1 -6
- package/dist/src/topology/fully-connected-topology.js.map +1 -1
- package/dist/src/topology/mmst-topology.d.ts +0 -1
- package/dist/src/topology/mmst-topology.d.ts.map +1 -1
- package/dist/src/topology/mmst-topology.js +1 -6
- package/dist/src/topology/mmst-topology.js.map +1 -1
- package/dist/src/topology/star-topology.d.ts +0 -1
- package/dist/src/topology/star-topology.d.ts.map +1 -1
- package/dist/src/topology/star-topology.js +1 -6
- package/dist/src/topology/star-topology.js.map +1 -1
- package/dist/src/topology/topology.d.ts +0 -6
- package/dist/src/topology/topology.d.ts.map +1 -1
- package/dist/src/transport/in-memory-transport.d.ts +2 -2
- package/dist/src/transport/in-memory-transport.d.ts.map +1 -1
- package/dist/src/transport/in-memory-transport.js.map +1 -1
- package/dist/src/transport/transport.d.ts +3 -3
- package/dist/src/transport/transport.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport.d.ts +3 -3
- package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport.js.map +1 -1
- package/dist/tests-setup.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -14
- package/src/network-manager.blueprint-test.ts +61 -26
- package/src/network-manager.browser-test.ts +1 -1
- package/src/network-manager.test.ts +8 -7
- package/src/network-manager.ts +8 -9
- package/src/proto/defs/dxos/mesh/signal.proto +53 -35
- package/src/proto/defs/dxos/mesh/signalMessage.proto +51 -0
- package/src/proto/gen/dxos/credentials.ts +40 -0
- package/src/proto/gen/dxos/halo/keys.ts +45 -2
- package/src/proto/gen/dxos/mesh/signal.ts +73 -37
- package/src/proto/gen/dxos/mesh/signalMessage.ts +83 -0
- package/src/proto/gen/google/protobuf.ts +9 -2
- package/src/proto/gen/index.ts +18 -6
- package/src/proto/substitutions.ts +3 -1
- package/src/signal/in-memory-signal-manager.ts +37 -12
- package/src/signal/index.ts +1 -2
- package/src/signal/integration.test.ts +117 -0
- package/src/signal/message-router.test.ts +36 -41
- package/src/signal/message-router.ts +22 -18
- package/src/signal/signal-client.test.ts +70 -92
- package/src/signal/signal-client.ts +119 -113
- package/src/signal/signal-manager-impl.ts +166 -0
- package/src/signal/signal-manager.ts +12 -12
- package/src/signal/signal-rpc-client.test.ts +86 -0
- package/src/signal/signal-rpc-client.ts +121 -0
- package/src/swarm/connection.ts +5 -8
- package/src/swarm/swarm.test.ts +208 -169
- package/src/swarm/swarm.ts +24 -20
- package/src/topology/fully-connected-topology.ts +1 -9
- package/src/topology/mmst-topology.ts +1 -9
- package/src/topology/star-topology.ts +1 -7
- package/src/topology/topology.ts +0 -7
- package/src/transport/in-memory-transport.ts +2 -2
- package/src/transport/transport.ts +3 -3
- package/src/transport/webrtc-transport.ts +3 -3
- package/dist/browser-mocha/bundle.js +0 -119276
- package/dist/browser-mocha/main.js +0 -27
- package/dist/src/signal/websocket-rpc.d.ts +0 -30
- package/dist/src/signal/websocket-rpc.d.ts.map +0 -1
- package/dist/src/signal/websocket-rpc.js +0 -203
- package/dist/src/signal/websocket-rpc.js.map +0 -1
- package/dist/src/signal/websocket-signal-manager.d.ts.map +0 -1
- package/dist/src/signal/websocket-signal-manager.js +0 -134
- package/dist/src/signal/websocket-signal-manager.js.map +0 -1
- package/src/signal/websocket-rpc.ts +0 -208
- package/src/signal/websocket-signal-manager.ts +0 -158
|
@@ -2,34 +2,50 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Copyright 2020 DXOS.org
|
|
4
4
|
//
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
5
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
13
|
};
|
|
8
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
15
|
exports.SignalClient = void 0;
|
|
16
|
+
const assert_1 = __importDefault(require("assert"));
|
|
10
17
|
const debug_1 = __importDefault(require("debug"));
|
|
11
18
|
const async_1 = require("@dxos/async");
|
|
12
|
-
const
|
|
13
|
-
const protocols_1 = require("@dxos/protocols");
|
|
19
|
+
const util_1 = require("@dxos/util");
|
|
14
20
|
const gen_1 = require("../proto/gen");
|
|
15
|
-
const
|
|
16
|
-
const websocket_rpc_1 = require("./websocket-rpc");
|
|
21
|
+
const signal_rpc_client_1 = require("./signal-rpc-client");
|
|
17
22
|
const log = (0, debug_1.default)('dxos:network-manager:signal-client');
|
|
18
23
|
const DEFAULT_RECONNECT_TIMEOUT = 1000;
|
|
24
|
+
var State;
|
|
25
|
+
(function (State) {
|
|
26
|
+
/** Connection is being established. */
|
|
27
|
+
State["CONNECTING"] = "CONNECTING";
|
|
28
|
+
/** Connection is being re-established. */
|
|
29
|
+
State["RE_CONNECTING"] = "RE_CONNECTING";
|
|
30
|
+
/** Connected. */
|
|
31
|
+
State["CONNECTED"] = "CONNECTED";
|
|
32
|
+
/** Server terminated the connection. Socket will be reconnected. */
|
|
33
|
+
State["DISCONNECTED"] = "DISCONNECTED";
|
|
34
|
+
/** Socket was closed. */
|
|
35
|
+
State["CLOSED"] = "CLOSED";
|
|
36
|
+
})(State || (State = {}));
|
|
19
37
|
/**
|
|
20
38
|
* Establishes a websocket connection to signal server and provides RPC methods.
|
|
21
39
|
*/
|
|
22
40
|
class SignalClient {
|
|
23
41
|
/**
|
|
24
42
|
* @param _host Signal server websocket URL.
|
|
25
|
-
* @param _onOffer See `SignalApi.offer`.
|
|
26
43
|
* @param _onSignal See `SignalApi.signal`.
|
|
27
44
|
*/
|
|
28
|
-
constructor(_host,
|
|
45
|
+
constructor(_host, _onSignal) {
|
|
29
46
|
this._host = _host;
|
|
30
|
-
this._onOffer = _onOffer;
|
|
31
47
|
this._onSignal = _onSignal;
|
|
32
|
-
this._state =
|
|
48
|
+
this._state = State.CONNECTING;
|
|
33
49
|
/**
|
|
34
50
|
* Number of milliseconds after which the connection will be attempted again in case of error.
|
|
35
51
|
*/
|
|
@@ -42,10 +58,13 @@ class SignalClient {
|
|
|
42
58
|
* Timestamp of last state change.
|
|
43
59
|
*/
|
|
44
60
|
this._lastStateChange = Date.now();
|
|
45
|
-
this.
|
|
61
|
+
this._cleanupSubscriptions = new util_1.SubscriptionGroup();
|
|
46
62
|
this.statusChanged = new async_1.Event();
|
|
47
63
|
this.commandTrace = new async_1.Event();
|
|
48
|
-
this.
|
|
64
|
+
this.swarmEvent = new async_1.Event();
|
|
65
|
+
this._swarmStreams = new util_1.ComplexMap(key => key.toHex());
|
|
66
|
+
this._messageStreams = new util_1.ComplexMap(key => key.toHex());
|
|
67
|
+
this._setState(State.CONNECTING);
|
|
49
68
|
this._createClient();
|
|
50
69
|
}
|
|
51
70
|
_setState(newState) {
|
|
@@ -57,93 +76,72 @@ class SignalClient {
|
|
|
57
76
|
_createClient() {
|
|
58
77
|
this._connectionStarted = Date.now();
|
|
59
78
|
try {
|
|
60
|
-
this._client = new
|
|
79
|
+
this._client = new signal_rpc_client_1.SignalRPCClient(this._host);
|
|
61
80
|
}
|
|
62
81
|
catch (error) {
|
|
63
|
-
if (this._state ===
|
|
82
|
+
if (this._state === State.RE_CONNECTING) {
|
|
64
83
|
this._reconnectAfter *= 2;
|
|
65
84
|
}
|
|
66
85
|
this._lastError = error;
|
|
67
|
-
this._setState(
|
|
86
|
+
this._setState(State.DISCONNECTED);
|
|
68
87
|
this._reconnect();
|
|
69
88
|
}
|
|
70
|
-
this._client.
|
|
71
|
-
id: protocols_1.PublicKey.from(message.id),
|
|
72
|
-
remoteId: protocols_1.PublicKey.from(message.remoteId),
|
|
73
|
-
topic: protocols_1.PublicKey.from(message.topic),
|
|
74
|
-
sessionId: protocols_1.PublicKey.from(message.sessionId),
|
|
75
|
-
data: message.data
|
|
76
|
-
}));
|
|
77
|
-
this._client.subscribe('signal', (msg) => {
|
|
78
|
-
var _a;
|
|
79
|
-
return this._onSignal({
|
|
80
|
-
id: protocols_1.PublicKey.from(msg.id),
|
|
81
|
-
remoteId: protocols_1.PublicKey.from(msg.remoteId),
|
|
82
|
-
topic: protocols_1.PublicKey.from(msg.topic),
|
|
83
|
-
sessionId: protocols_1.PublicKey.from(msg.sessionId),
|
|
84
|
-
data: gen_1.schema.getCodecForType('dxos.mesh.signal.MessageData').decode((_a = msg.data) !== null && _a !== void 0 ? _a : (0, debug_2.failUndefined)()),
|
|
85
|
-
// Field that MessageRouter adds, so on lower level it not always defined.
|
|
86
|
-
messageId: msg.messageId ? protocols_1.PublicKey.from(msg.messageId) : undefined
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
this._clientCleanup.push(this._client.connected.on(() => {
|
|
90
|
-
log('Socket connected');
|
|
89
|
+
this._cleanupSubscriptions.push(this._client.connected.on(() => {
|
|
91
90
|
this._lastError = undefined;
|
|
92
91
|
this._reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;
|
|
93
|
-
this._setState(
|
|
92
|
+
this._setState(State.CONNECTED);
|
|
94
93
|
}));
|
|
95
|
-
this.
|
|
94
|
+
this._cleanupSubscriptions.push(this._client.error.on(error => {
|
|
96
95
|
log(`Socket error: ${error.message}`);
|
|
97
|
-
if (this._state ===
|
|
96
|
+
if (this._state === State.CLOSED) {
|
|
98
97
|
return;
|
|
99
98
|
}
|
|
100
|
-
if (this._state ===
|
|
99
|
+
if (this._state === State.RE_CONNECTING) {
|
|
101
100
|
this._reconnectAfter *= 2;
|
|
102
101
|
}
|
|
103
102
|
this._lastError = error;
|
|
104
|
-
this._setState(
|
|
103
|
+
this._setState(State.DISCONNECTED);
|
|
105
104
|
this._reconnect();
|
|
106
105
|
}));
|
|
107
|
-
this.
|
|
106
|
+
this._cleanupSubscriptions.push(this._client.disconnected.on(() => {
|
|
108
107
|
log('Socket disconnected');
|
|
109
108
|
// This is also called in case of error, but we already have disconnected the socket on error, so no need to do anything here.
|
|
110
|
-
if (this._state !==
|
|
109
|
+
if (this._state !== State.CONNECTING && this._state !== State.RE_CONNECTING) {
|
|
111
110
|
return;
|
|
112
111
|
}
|
|
113
|
-
if (this._state ===
|
|
112
|
+
if (this._state === State.RE_CONNECTING) {
|
|
114
113
|
this._reconnectAfter *= 2;
|
|
115
114
|
}
|
|
116
|
-
this._setState(
|
|
115
|
+
this._setState(State.DISCONNECTED);
|
|
117
116
|
this._reconnect();
|
|
118
117
|
}));
|
|
119
|
-
this._clientCleanup.push(this._client.commandTrace.on(trace => this.commandTrace.emit(trace)));
|
|
120
118
|
}
|
|
121
119
|
_reconnect() {
|
|
120
|
+
log(`Reconnecting in ${this._reconnectAfter}ms`);
|
|
122
121
|
if (this._reconnectIntervalId !== undefined) {
|
|
123
122
|
console.error('Signal api already reconnecting.');
|
|
124
123
|
return;
|
|
125
124
|
}
|
|
126
|
-
if (this._state ===
|
|
125
|
+
if (this._state === State.CLOSED) {
|
|
127
126
|
return;
|
|
128
127
|
}
|
|
129
128
|
this._reconnectIntervalId = setTimeout(() => {
|
|
130
129
|
this._reconnectIntervalId = undefined;
|
|
131
|
-
this.
|
|
132
|
-
this._clientCleanup = [];
|
|
130
|
+
this._cleanupSubscriptions.unsubscribe();
|
|
133
131
|
// Close client if it wasn't already closed.
|
|
134
132
|
this._client.close().catch(() => { });
|
|
135
|
-
this._setState(
|
|
133
|
+
this._setState(State.RE_CONNECTING);
|
|
136
134
|
this._createClient();
|
|
137
135
|
}, this._reconnectAfter);
|
|
138
136
|
}
|
|
139
137
|
async close() {
|
|
140
|
-
this.
|
|
141
|
-
this._clientCleanup = [];
|
|
138
|
+
this._cleanupSubscriptions.unsubscribe();
|
|
142
139
|
if (this._reconnectIntervalId !== undefined) {
|
|
143
140
|
clearTimeout(this._reconnectIntervalId);
|
|
144
141
|
}
|
|
145
142
|
await this._client.close();
|
|
146
|
-
this._setState(
|
|
143
|
+
this._setState(State.CLOSED);
|
|
144
|
+
log('Closed.');
|
|
147
145
|
}
|
|
148
146
|
getStatus() {
|
|
149
147
|
var _a;
|
|
@@ -157,54 +155,66 @@ class SignalClient {
|
|
|
157
155
|
};
|
|
158
156
|
}
|
|
159
157
|
async join(topic, peerId) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
164
|
-
return peers.map(id => protocols_1.PublicKey.from(id));
|
|
158
|
+
log(`Join: topic=${topic} peerId=${peerId}`);
|
|
159
|
+
await this._subscribeMessages(peerId);
|
|
160
|
+
await this._subscribeSwarmEvents(topic, peerId);
|
|
165
161
|
}
|
|
166
162
|
async leave(topic, peerId) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
var _a, _b;
|
|
164
|
+
log(`Leave: topic=${topic} peerId=${peerId}`);
|
|
165
|
+
(_a = this._swarmStreams.get(topic)) === null || _a === void 0 ? void 0 : _a.close();
|
|
166
|
+
this._swarmStreams.delete(topic);
|
|
167
|
+
(_b = this._messageStreams.get(topic)) === null || _b === void 0 ? void 0 : _b.close();
|
|
168
|
+
this._messageStreams.delete(topic);
|
|
171
169
|
}
|
|
172
|
-
async
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
async signal(message) {
|
|
171
|
+
const payload = {
|
|
172
|
+
type_url: 'dxos.mesh.signalMessage.SignalMessage',
|
|
173
|
+
value: gen_1.schema.getCodecForType('dxos.mesh.signalMessage.SignalMessage').encode(message)
|
|
174
|
+
};
|
|
175
|
+
return this._client.sendMessage(message.id, message.remoteId, payload);
|
|
177
176
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
177
|
+
async _subscribeSwarmEvents(topic, peerId) {
|
|
178
|
+
(0, assert_1.default)(!this._swarmStreams.has(topic));
|
|
179
|
+
const swarmStream = await this._client.join(topic, peerId);
|
|
180
|
+
// Subscribing to swarm events.
|
|
181
|
+
// TODO(mykola): What happens when the swarm stream is closed? Maybe send leave event for each peer?
|
|
182
|
+
swarmStream.subscribe((swarmEvent) => {
|
|
183
|
+
this.swarmEvent.emit([topic, swarmEvent]);
|
|
184
|
+
});
|
|
185
|
+
// Saving swarm stream.
|
|
186
|
+
this._swarmStreams.set(topic, swarmStream);
|
|
187
|
+
this._cleanupSubscriptions.push(() => {
|
|
188
|
+
swarmStream.close();
|
|
189
|
+
this._swarmStreams.delete(topic);
|
|
191
190
|
});
|
|
192
191
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
192
|
+
async _subscribeMessages(peerId) {
|
|
193
|
+
// Subscribing to messages.
|
|
194
|
+
const messageStream = await this._client.receiveMessages(peerId);
|
|
195
|
+
messageStream.subscribe(async (message) => {
|
|
196
|
+
if (message.payload.type_url === 'dxos.mesh.signalMessage.SignalMessage') {
|
|
197
|
+
const signalMessage = gen_1.schema.getCodecForType('dxos.mesh.signalMessage.SignalMessage').decode(message.payload.value);
|
|
198
|
+
log('Message received: ' + JSON.stringify(signalMessage));
|
|
199
|
+
(0, assert_1.default)(signalMessage.remoteId.equals(peerId));
|
|
200
|
+
await this._onSignal(signalMessage);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
log('Unknown message type: ' + message.payload.type_url);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
// Saving message stream.
|
|
207
|
+
if (!this._messageStreams.has(peerId)) {
|
|
208
|
+
this._messageStreams.set(peerId, messageStream);
|
|
209
|
+
}
|
|
210
|
+
this._cleanupSubscriptions.push(() => {
|
|
211
|
+
messageStream.close();
|
|
212
|
+
this._messageStreams.delete(peerId);
|
|
213
|
+
});
|
|
207
214
|
}
|
|
208
215
|
}
|
|
216
|
+
__decorate([
|
|
217
|
+
async_1.synchronized
|
|
218
|
+
], SignalClient.prototype, "_subscribeSwarmEvents", null);
|
|
209
219
|
exports.SignalClient = SignalClient;
|
|
210
220
|
//# sourceMappingURL=signal-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-client.js","sourceRoot":"","sources":["../../../src/signal/signal-client.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE
|
|
1
|
+
{"version":3,"file":"signal-client.js","sourceRoot":"","sources":["../../../src/signal/signal-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,40 +12,29 @@ const wait_for_expect_1 = __importDefault(require("wait-for-expect"));
|
|
|
12
12
|
const async_1 = require("@dxos/async");
|
|
13
13
|
const protocols_1 = require("@dxos/protocols");
|
|
14
14
|
const signal_1 = require("@dxos/signal");
|
|
15
|
-
const
|
|
15
|
+
const testutils_1 = require("@dxos/testutils");
|
|
16
16
|
const signal_client_1 = require("./signal-client");
|
|
17
|
-
(0, mocha_1.describe)('
|
|
18
|
-
let topic;
|
|
19
|
-
let peer1;
|
|
20
|
-
let peer2;
|
|
21
|
-
let api1;
|
|
22
|
-
let api2;
|
|
17
|
+
(0, mocha_1.describe)('SignalClient', () => {
|
|
23
18
|
let broker1;
|
|
24
|
-
|
|
25
|
-
const signalApiUrl1 = 'http://0.0.0.0:' + signalApiPort1;
|
|
26
|
-
// code let broker2: ReturnType<typeof createBroker>;
|
|
27
|
-
const signalApiPort2 = (0, util_1.randomInt)(10000, 50000);
|
|
28
|
-
const signalApiUrl2 = 'http://0.0.0.0:' + signalApiPort2;
|
|
19
|
+
let broker2;
|
|
29
20
|
before(async () => {
|
|
30
|
-
broker1 = await (0, signal_1.createTestBroker)(
|
|
31
|
-
// broker2 = await createTestBroker(signalApiPort2);
|
|
21
|
+
broker1 = await (0, signal_1.createTestBroker)();
|
|
22
|
+
// broker2 = await await createTestBroker(signalApiPort2);
|
|
32
23
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
peer1 = protocols_1.PublicKey.random();
|
|
36
|
-
peer2 = protocols_1.PublicKey.random();
|
|
37
|
-
});
|
|
38
|
-
after(async function () {
|
|
39
|
-
this.timeout(0);
|
|
40
|
-
await api1.close();
|
|
41
|
-
await broker1.stop();
|
|
24
|
+
after(() => {
|
|
25
|
+
broker1.stop();
|
|
42
26
|
// code await broker2.stop();
|
|
43
27
|
});
|
|
44
28
|
(0, mocha_1.it)('message between 2 clients', async () => {
|
|
29
|
+
const topic = protocols_1.PublicKey.random();
|
|
30
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
31
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
45
32
|
const signalMock1 = (0, earljs_1.mockFn)()
|
|
46
33
|
.resolvesTo();
|
|
47
|
-
api1 = new signal_client_1.SignalClient(
|
|
48
|
-
|
|
34
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), signalMock1);
|
|
35
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
36
|
+
const api2 = new signal_client_1.SignalClient(broker1.url(), (async () => { }));
|
|
37
|
+
(0, testutils_1.afterTest)(() => api2.close());
|
|
49
38
|
await api1.join(topic, peer1);
|
|
50
39
|
await api2.join(topic, peer2);
|
|
51
40
|
const msg = {
|
|
@@ -53,90 +42,84 @@ const signal_client_1 = require("./signal-client");
|
|
|
53
42
|
remoteId: peer1,
|
|
54
43
|
sessionId: protocols_1.PublicKey.random(),
|
|
55
44
|
topic,
|
|
56
|
-
data: { signal: { json:
|
|
57
|
-
messageId: undefined
|
|
45
|
+
data: { signal: { json: JSON.stringify({ 'asd': 'asd' }) } }
|
|
58
46
|
};
|
|
59
47
|
await api2.signal(msg);
|
|
60
48
|
await (0, wait_for_expect_1.default)(() => {
|
|
61
49
|
(0, earljs_1.expect)(signalMock1).toHaveBeenCalledWith([msg]);
|
|
62
50
|
}, 4000);
|
|
63
|
-
}).timeout(
|
|
51
|
+
}).timeout(500);
|
|
64
52
|
(0, mocha_1.it)('join', async () => {
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
(0,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
api1 = new signal_client_1.SignalClient(signalApiUrl1, offerMock, async () => { });
|
|
53
|
+
const topic = protocols_1.PublicKey.random();
|
|
54
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
55
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
56
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), async () => { });
|
|
57
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
58
|
+
const api2 = new signal_client_1.SignalClient(broker1.url(), async () => { });
|
|
59
|
+
(0, testutils_1.afterTest)(() => api2.close());
|
|
60
|
+
const promise1 = api1.swarmEvent.waitFor(([, swarmEvent]) => !!swarmEvent.peerAvailable && peer2.equals(swarmEvent.peerAvailable.peer));
|
|
61
|
+
const promise2 = api2.swarmEvent.waitFor(([, swarmEvent]) => !!swarmEvent.peerAvailable && peer1.equals(swarmEvent.peerAvailable.peer));
|
|
75
62
|
await api1.join(topic, peer1);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
(0, earljs_1.expect)(offerResult).toEqual({ accept: true });
|
|
85
|
-
(0, earljs_1.expect)(offerMock).toHaveBeenCalledWith([offer]);
|
|
86
|
-
}).timeout(5000);
|
|
87
|
-
(0, mocha_1.it)('signal', async () => {
|
|
63
|
+
await api2.join(topic, peer2);
|
|
64
|
+
await promise1;
|
|
65
|
+
await promise2;
|
|
66
|
+
}).timeout(500);
|
|
67
|
+
(0, mocha_1.it)('signal to self', async () => {
|
|
68
|
+
const topic = protocols_1.PublicKey.random();
|
|
69
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
70
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
88
71
|
const signalMock = (0, earljs_1.mockFn)()
|
|
89
72
|
.resolvesTo();
|
|
90
|
-
api1 = new signal_client_1.SignalClient(
|
|
73
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), signalMock);
|
|
74
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
91
75
|
await api1.join(topic, peer1);
|
|
92
76
|
const msg = {
|
|
93
77
|
id: peer2,
|
|
94
78
|
remoteId: peer1,
|
|
95
79
|
sessionId: protocols_1.PublicKey.random(),
|
|
96
80
|
topic,
|
|
97
|
-
data: { signal: { json: '
|
|
98
|
-
messageId: undefined
|
|
81
|
+
data: { signal: { json: JSON.stringify({ 'asd': 'asd' }) } }
|
|
99
82
|
};
|
|
100
83
|
await api1.signal(msg);
|
|
101
84
|
await (0, wait_for_expect_1.default)(() => {
|
|
102
85
|
(0, earljs_1.expect)(signalMock).toHaveBeenCalledWith([msg]);
|
|
103
86
|
}, 4000);
|
|
104
|
-
}).timeout(
|
|
87
|
+
}).timeout(500);
|
|
105
88
|
mocha_1.it.skip('join across multiple signal servers', async () => {
|
|
89
|
+
const topic = protocols_1.PublicKey.random();
|
|
90
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
91
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
106
92
|
// This feature is not implemented yet.
|
|
107
|
-
api1 = new signal_client_1.SignalClient(
|
|
108
|
-
|
|
93
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), async () => { });
|
|
94
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
95
|
+
const api2 = new signal_client_1.SignalClient(broker2.url(), async () => { });
|
|
96
|
+
(0, testutils_1.afterTest)(() => api2.close());
|
|
109
97
|
await api1.join(topic, peer1);
|
|
110
98
|
await api2.join(topic, peer2);
|
|
111
|
-
await (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
},
|
|
115
|
-
await (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
99
|
+
// await waitForExpect(async () => {
|
|
100
|
+
// const peers = await api2.lookup(topic);
|
|
101
|
+
// expect(peers.length).toEqual(2);
|
|
102
|
+
// }, 4_000);
|
|
103
|
+
// await waitForExpect(async () => {
|
|
104
|
+
// const peers = await api1.lookup(topic);
|
|
105
|
+
// expect(peers.length).toEqual(2);
|
|
106
|
+
// }, 4_000);
|
|
119
107
|
}).timeout(5000);
|
|
120
108
|
// Skip because communication between signal servers is not yet implemented.
|
|
121
109
|
mocha_1.it.skip('newly joined peer can receive signals from other signal servers', async () => {
|
|
122
|
-
const
|
|
123
|
-
|
|
110
|
+
const topic = protocols_1.PublicKey.random();
|
|
111
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
112
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
124
113
|
const signalMock = (0, earljs_1.mockFn)()
|
|
125
114
|
.resolvesTo();
|
|
126
|
-
api1 = new signal_client_1.SignalClient(
|
|
127
|
-
|
|
115
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), async () => { });
|
|
116
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
117
|
+
const api2 = new signal_client_1.SignalClient(broker2.url(), signalMock);
|
|
118
|
+
(0, testutils_1.afterTest)(() => api2.close());
|
|
128
119
|
await api1.join(topic, peer1);
|
|
129
120
|
await (0, async_1.sleep)(3000);
|
|
130
121
|
await api2.join(topic, peer2);
|
|
131
122
|
const sessionId = protocols_1.PublicKey.random();
|
|
132
|
-
const answer = await api2.offer({
|
|
133
|
-
remoteId: peer1,
|
|
134
|
-
id: peer2,
|
|
135
|
-
topic,
|
|
136
|
-
sessionId,
|
|
137
|
-
data: { offer: {} }
|
|
138
|
-
});
|
|
139
|
-
(0, earljs_1.expect)(answer).toEqual({ accept: true });
|
|
140
123
|
const msg = {
|
|
141
124
|
id: peer2,
|
|
142
125
|
remoteId: peer1,
|
|
@@ -149,5 +132,5 @@ const signal_client_1 = require("./signal-client");
|
|
|
149
132
|
(0, earljs_1.expect)(signalMock).toHaveBeenCalledWith([msg]);
|
|
150
133
|
}, 4000);
|
|
151
134
|
}).timeout(5000);
|
|
152
|
-
})
|
|
135
|
+
});
|
|
153
136
|
//# sourceMappingURL=signal-client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-client.test.js","sourceRoot":"","sources":["../../../src/signal/signal-client.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;AAEF,mCAAwC;AACxC,iCAA6C;AAC7C,sEAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"signal-client.test.js","sourceRoot":"","sources":["../../../src/signal/signal-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
import { Event } from '@dxos/async';
|
|
2
2
|
import { PublicKey } from '@dxos/protocols';
|
|
3
|
-
import {
|
|
3
|
+
import { SwarmEvent } from '../proto/gen/dxos/mesh/signal';
|
|
4
|
+
import { SignalMessage } from '../proto/gen/dxos/mesh/signalMessage';
|
|
4
5
|
import { SignalApi } from './signal-api';
|
|
5
6
|
import { SignalManager } from './signal-manager';
|
|
6
|
-
export declare class
|
|
7
|
+
export declare class SignalManagerImpl implements SignalManager {
|
|
7
8
|
private readonly _hosts;
|
|
8
|
-
private readonly _onOffer;
|
|
9
9
|
private readonly _servers;
|
|
10
10
|
/** Topics joined: topic => peerId */
|
|
11
11
|
private readonly _topicsJoined;
|
|
12
|
+
/** host => topic => peerId */
|
|
12
13
|
private readonly _topicsJoinedPerSignal;
|
|
14
|
+
private _reconciling?;
|
|
13
15
|
private _reconcileTimeoutId?;
|
|
16
|
+
private _destroyed;
|
|
14
17
|
readonly statusChanged: Event<SignalApi.Status[]>;
|
|
15
18
|
readonly commandTrace: Event<SignalApi.CommandTrace>;
|
|
16
|
-
readonly
|
|
17
|
-
readonly
|
|
18
|
-
constructor(_hosts: string[]
|
|
19
|
+
readonly swarmEvent: Event<[topic: PublicKey, swarmEvent: SwarmEvent]>;
|
|
20
|
+
readonly onMessage: Event<SignalMessage>;
|
|
21
|
+
constructor(_hosts: string[]);
|
|
19
22
|
getStatus(): SignalApi.Status[];
|
|
20
23
|
join(topic: PublicKey, peerId: PublicKey): void;
|
|
21
24
|
leave(topic: PublicKey, peerId: PublicKey): void;
|
|
25
|
+
private _scheduleReconcile;
|
|
26
|
+
private _reconcileLater;
|
|
22
27
|
private _reconcileJoinedTopics;
|
|
23
|
-
|
|
24
|
-
lookup(topic: PublicKey): void;
|
|
25
|
-
offer(msg: Message): Promise<Answer>;
|
|
26
|
-
signal(msg: Message): Promise<void>;
|
|
28
|
+
message(msg: SignalMessage): Promise<void>;
|
|
27
29
|
destroy(): Promise<void>;
|
|
28
30
|
}
|
|
29
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=signal-manager-impl.d.ts.map
|