@dxos/network-manager 2.33.9-dev.7d11f506 → 2.33.9-dev.9bbef4e2
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 +46 -17
- 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 +13 -12
- 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 -16
- 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 -4
- 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/protocol-factory.js +3 -3
- package/dist/src/protocol-factory.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 +34 -13
- 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 +20 -8
- package/dist/src/signal/message-router.d.ts.map +1 -1
- package/dist/src/signal/message-router.js +96 -17
- package/dist/src/signal/message-router.js.map +1 -1
- package/dist/src/signal/message-router.test.js +125 -22
- package/dist/src/signal/message-router.test.js.map +1 -1
- package/dist/src/signal/signal-client.d.ts +33 -17
- package/dist/src/signal/signal-client.d.ts.map +1 -1
- package/dist/src/signal/signal-client.js +102 -82
- package/dist/src/signal/signal-client.js.map +1 -1
- package/dist/src/signal/signal-client.test.js +60 -75
- 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 +8 -11
- 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 +29 -25
- package/dist/src/swarm/swarm.js.map +1 -1
- package/dist/src/swarm/swarm.test.js +156 -115
- package/dist/src/swarm/swarm.test.js.map +1 -1
- package/dist/src/testing/test-protocol.d.ts.map +1 -1
- package/dist/src/testing/test-protocol.js +3 -3
- package/dist/src/testing/test-protocol.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 +4 -9
- 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 +6 -11
- 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 +5 -10
- 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 +2 -2
- 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 +3 -3
- 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 +17 -12
- package/src/network-manager.blueprint-test.ts +57 -22
- package/src/network-manager.browser-test.ts +1 -1
- package/src/network-manager.test.ts +8 -7
- package/src/network-manager.ts +10 -10
- package/src/proto/defs/dxos/mesh/signal.proto +54 -23
- 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 -16
- 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 -5
- package/src/proto/substitutions.ts +3 -1
- package/src/protocol-factory.ts +1 -1
- package/src/signal/in-memory-signal-manager.ts +38 -13
- package/src/signal/index.ts +1 -2
- package/src/signal/integration.test.ts +117 -0
- package/src/signal/message-router.test.ts +169 -58
- package/src/signal/message-router.ts +120 -27
- package/src/signal/signal-client.test.ts +70 -90
- package/src/signal/signal-client.ts +120 -87
- 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 +6 -9
- package/src/swarm/swarm.test.ts +208 -167
- package/src/swarm/swarm.ts +26 -22
- package/src/testing/test-protocol.ts +1 -1
- package/src/topology/fully-connected-topology.ts +2 -10
- package/src/topology/mmst-topology.ts +2 -10
- package/src/topology/star-topology.ts +2 -8
- package/src/topology/topology.ts +0 -7
- package/src/transport/in-memory-transport.ts +3 -3
- package/src/transport/transport.ts +3 -3
- package/src/transport/webrtc-transport.ts +4 -4
- 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
|
@@ -1,13 +1,33 @@
|
|
|
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';
|
|
6
|
+
declare enum State {
|
|
7
|
+
/** Connection is being established. */
|
|
8
|
+
CONNECTING = "CONNECTING",
|
|
9
|
+
/** Connection is being re-established. */
|
|
10
|
+
RE_CONNECTING = "RE_CONNECTING",
|
|
11
|
+
/** Connected. */
|
|
12
|
+
CONNECTED = "CONNECTED",
|
|
13
|
+
/** Server terminated the connection. Socket will be reconnected. */
|
|
14
|
+
DISCONNECTED = "DISCONNECTED",
|
|
15
|
+
/** Socket was closed. */
|
|
16
|
+
CLOSED = "CLOSED"
|
|
17
|
+
}
|
|
18
|
+
export declare type Status = {
|
|
19
|
+
host: string;
|
|
20
|
+
state: State;
|
|
21
|
+
error?: string;
|
|
22
|
+
reconnectIn: number;
|
|
23
|
+
connectionStarted: number;
|
|
24
|
+
lastStateChange: number;
|
|
25
|
+
};
|
|
5
26
|
/**
|
|
6
27
|
* Establishes a websocket connection to signal server and provides RPC methods.
|
|
7
28
|
*/
|
|
8
29
|
export declare class SignalClient {
|
|
9
30
|
private readonly _host;
|
|
10
|
-
private readonly _onOffer;
|
|
11
31
|
private readonly _onSignal;
|
|
12
32
|
private _state;
|
|
13
33
|
private _lastError?;
|
|
@@ -25,31 +45,27 @@ export declare class SignalClient {
|
|
|
25
45
|
private _lastStateChange;
|
|
26
46
|
private _reconnectIntervalId?;
|
|
27
47
|
private _client;
|
|
28
|
-
private
|
|
29
|
-
readonly statusChanged: Event<
|
|
48
|
+
private _cleanupSubscriptions;
|
|
49
|
+
readonly statusChanged: Event<Status>;
|
|
30
50
|
readonly commandTrace: Event<SignalApi.CommandTrace>;
|
|
51
|
+
readonly swarmEvent: Event<[topic: PublicKey, swarmEvent: SwarmEvent]>;
|
|
52
|
+
private readonly _swarmStreams;
|
|
53
|
+
private readonly _messageStreams;
|
|
31
54
|
/**
|
|
32
55
|
* @param _host Signal server websocket URL.
|
|
33
|
-
* @param _onOffer See `SignalApi.offer`.
|
|
34
56
|
* @param _onSignal See `SignalApi.signal`.
|
|
35
57
|
*/
|
|
36
|
-
constructor(_host: string,
|
|
58
|
+
constructor(_host: string, _onSignal: (message: SignalMessage) => Promise<void>);
|
|
37
59
|
private _setState;
|
|
38
60
|
private _createClient;
|
|
39
61
|
private _reconnect;
|
|
40
62
|
close(): Promise<void>;
|
|
41
63
|
getStatus(): SignalApi.Status;
|
|
42
|
-
join(topic: PublicKey, peerId: PublicKey): Promise<
|
|
64
|
+
join(topic: PublicKey, peerId: PublicKey): Promise<void>;
|
|
43
65
|
leave(topic: PublicKey, peerId: PublicKey): Promise<void>;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* @returns Other peer's _onOffer callback return value.
|
|
48
|
-
*/
|
|
49
|
-
offer(msg: Message): Promise<Answer>;
|
|
50
|
-
/**
|
|
51
|
-
* Routes an offer to the other peer's _onSignal callback.
|
|
52
|
-
*/
|
|
53
|
-
signal(payload: Message): Promise<void>;
|
|
66
|
+
signal(message: SignalMessage): Promise<void>;
|
|
67
|
+
private _subscribeSwarmEvents;
|
|
68
|
+
private _subscribeMessages;
|
|
54
69
|
}
|
|
70
|
+
export {};
|
|
55
71
|
//# sourceMappingURL=signal-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-client.d.ts","sourceRoot":"","sources":["../../../src/signal/signal-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signal-client.d.ts","sourceRoot":"","sources":["../../../src/signal/signal-client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAW,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,aAAK,KAAK;IACR,uCAAuC;IACvC,UAAU,eAAe;IAEzB,0CAA0C;IAC1C,aAAa,kBAAkB;IAE/B,iBAAiB;IACjB,SAAS,cAAc;IAEvB,oEAAoE;IACpE,YAAY,iBAAiB;IAE7B,yBAAyB;IACzB,MAAM,WAAW;CAClB;AAED,oBAAY,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,qBAAa,YAAY;IAqCrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IArC5B,OAAO,CAAC,MAAM,CAAoB;IAElC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAE3B;;OAEG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAc;IAExC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAc;IAEtC,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAE9C,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO,CAAC,qBAAqB,CAA2B;IACxD,QAAQ,CAAC,aAAa,gBAAuB;IAE7C,QAAQ,CAAC,YAAY,gCAAuC;IAC5D,QAAQ,CAAC,UAAU,oDAA2D;IAE9E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqE;IACnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkE;IAClG;;;OAGG;gBAEgB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC;IAMvE,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,aAAa;IAoDrB,OAAO,CAAC,UAAU;IAuBZ,KAAK;IAYX,SAAS,IAAK,SAAS,CAAC,MAAM;IAWxB,IAAI,CAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,KAAK,CAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAStC,qBAAqB;YAkBrB,kBAAkB;CAyBjC"}
|
|
@@ -2,32 +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
|
|
14
|
-
const
|
|
19
|
+
const util_1 = require("@dxos/util");
|
|
20
|
+
const gen_1 = require("../proto/gen");
|
|
21
|
+
const signal_rpc_client_1 = require("./signal-rpc-client");
|
|
15
22
|
const log = (0, debug_1.default)('dxos:network-manager:signal-client');
|
|
16
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 = {}));
|
|
17
37
|
/**
|
|
18
38
|
* Establishes a websocket connection to signal server and provides RPC methods.
|
|
19
39
|
*/
|
|
20
40
|
class SignalClient {
|
|
21
41
|
/**
|
|
22
42
|
* @param _host Signal server websocket URL.
|
|
23
|
-
* @param _onOffer See `SignalApi.offer`.
|
|
24
43
|
* @param _onSignal See `SignalApi.signal`.
|
|
25
44
|
*/
|
|
26
|
-
constructor(_host,
|
|
45
|
+
constructor(_host, _onSignal) {
|
|
27
46
|
this._host = _host;
|
|
28
|
-
this._onOffer = _onOffer;
|
|
29
47
|
this._onSignal = _onSignal;
|
|
30
|
-
this._state =
|
|
48
|
+
this._state = State.CONNECTING;
|
|
31
49
|
/**
|
|
32
50
|
* Number of milliseconds after which the connection will be attempted again in case of error.
|
|
33
51
|
*/
|
|
@@ -40,10 +58,13 @@ class SignalClient {
|
|
|
40
58
|
* Timestamp of last state change.
|
|
41
59
|
*/
|
|
42
60
|
this._lastStateChange = Date.now();
|
|
43
|
-
this.
|
|
61
|
+
this._cleanupSubscriptions = new util_1.SubscriptionGroup();
|
|
44
62
|
this.statusChanged = new async_1.Event();
|
|
45
63
|
this.commandTrace = new async_1.Event();
|
|
46
|
-
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);
|
|
47
68
|
this._createClient();
|
|
48
69
|
}
|
|
49
70
|
_setState(newState) {
|
|
@@ -55,88 +76,72 @@ class SignalClient {
|
|
|
55
76
|
_createClient() {
|
|
56
77
|
this._connectionStarted = Date.now();
|
|
57
78
|
try {
|
|
58
|
-
this._client = new
|
|
79
|
+
this._client = new signal_rpc_client_1.SignalRPCClient(this._host);
|
|
59
80
|
}
|
|
60
81
|
catch (error) {
|
|
61
|
-
if (this._state ===
|
|
82
|
+
if (this._state === State.RE_CONNECTING) {
|
|
62
83
|
this._reconnectAfter *= 2;
|
|
63
84
|
}
|
|
64
85
|
this._lastError = error;
|
|
65
|
-
this._setState(
|
|
86
|
+
this._setState(State.DISCONNECTED);
|
|
66
87
|
this._reconnect();
|
|
67
88
|
}
|
|
68
|
-
this._client.
|
|
69
|
-
id: protocols_1.PublicKey.from(message.id),
|
|
70
|
-
remoteId: protocols_1.PublicKey.from(message.remoteId),
|
|
71
|
-
topic: protocols_1.PublicKey.from(message.topic),
|
|
72
|
-
sessionId: protocols_1.PublicKey.from(message.sessionId),
|
|
73
|
-
data: message.data
|
|
74
|
-
}));
|
|
75
|
-
this._client.subscribe('signal', (msg) => this._onSignal({
|
|
76
|
-
id: protocols_1.PublicKey.from(msg.id),
|
|
77
|
-
remoteId: protocols_1.PublicKey.from(msg.remoteId),
|
|
78
|
-
topic: protocols_1.PublicKey.from(msg.topic),
|
|
79
|
-
sessionId: protocols_1.PublicKey.from(msg.sessionId),
|
|
80
|
-
data: msg.data
|
|
81
|
-
}));
|
|
82
|
-
this._clientCleanup.push(this._client.connected.on(() => {
|
|
83
|
-
log('Socket connected');
|
|
89
|
+
this._cleanupSubscriptions.push(this._client.connected.on(() => {
|
|
84
90
|
this._lastError = undefined;
|
|
85
91
|
this._reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;
|
|
86
|
-
this._setState(
|
|
92
|
+
this._setState(State.CONNECTED);
|
|
87
93
|
}));
|
|
88
|
-
this.
|
|
94
|
+
this._cleanupSubscriptions.push(this._client.error.on(error => {
|
|
89
95
|
log(`Socket error: ${error.message}`);
|
|
90
|
-
if (this._state ===
|
|
96
|
+
if (this._state === State.CLOSED) {
|
|
91
97
|
return;
|
|
92
98
|
}
|
|
93
|
-
if (this._state ===
|
|
99
|
+
if (this._state === State.RE_CONNECTING) {
|
|
94
100
|
this._reconnectAfter *= 2;
|
|
95
101
|
}
|
|
96
102
|
this._lastError = error;
|
|
97
|
-
this._setState(
|
|
103
|
+
this._setState(State.DISCONNECTED);
|
|
98
104
|
this._reconnect();
|
|
99
105
|
}));
|
|
100
|
-
this.
|
|
106
|
+
this._cleanupSubscriptions.push(this._client.disconnected.on(() => {
|
|
101
107
|
log('Socket disconnected');
|
|
102
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.
|
|
103
|
-
if (this._state !==
|
|
109
|
+
if (this._state !== State.CONNECTING && this._state !== State.RE_CONNECTING) {
|
|
104
110
|
return;
|
|
105
111
|
}
|
|
106
|
-
if (this._state ===
|
|
112
|
+
if (this._state === State.RE_CONNECTING) {
|
|
107
113
|
this._reconnectAfter *= 2;
|
|
108
114
|
}
|
|
109
|
-
this._setState(
|
|
115
|
+
this._setState(State.DISCONNECTED);
|
|
110
116
|
this._reconnect();
|
|
111
117
|
}));
|
|
112
|
-
this._clientCleanup.push(this._client.commandTrace.on(trace => this.commandTrace.emit(trace)));
|
|
113
118
|
}
|
|
114
119
|
_reconnect() {
|
|
120
|
+
log(`Reconnecting in ${this._reconnectAfter}ms`);
|
|
115
121
|
if (this._reconnectIntervalId !== undefined) {
|
|
116
122
|
console.error('Signal api already reconnecting.');
|
|
117
123
|
return;
|
|
118
124
|
}
|
|
119
|
-
if (this._state ===
|
|
125
|
+
if (this._state === State.CLOSED) {
|
|
120
126
|
return;
|
|
121
127
|
}
|
|
122
128
|
this._reconnectIntervalId = setTimeout(() => {
|
|
123
129
|
this._reconnectIntervalId = undefined;
|
|
124
|
-
this.
|
|
125
|
-
this._clientCleanup = [];
|
|
130
|
+
this._cleanupSubscriptions.unsubscribe();
|
|
126
131
|
// Close client if it wasn't already closed.
|
|
127
132
|
this._client.close().catch(() => { });
|
|
128
|
-
this._setState(
|
|
133
|
+
this._setState(State.RE_CONNECTING);
|
|
129
134
|
this._createClient();
|
|
130
135
|
}, this._reconnectAfter);
|
|
131
136
|
}
|
|
132
137
|
async close() {
|
|
133
|
-
this.
|
|
134
|
-
this._clientCleanup = [];
|
|
138
|
+
this._cleanupSubscriptions.unsubscribe();
|
|
135
139
|
if (this._reconnectIntervalId !== undefined) {
|
|
136
140
|
clearTimeout(this._reconnectIntervalId);
|
|
137
141
|
}
|
|
138
142
|
await this._client.close();
|
|
139
|
-
this._setState(
|
|
143
|
+
this._setState(State.CLOSED);
|
|
144
|
+
log('Closed.');
|
|
140
145
|
}
|
|
141
146
|
getStatus() {
|
|
142
147
|
var _a;
|
|
@@ -150,51 +155,66 @@ class SignalClient {
|
|
|
150
155
|
};
|
|
151
156
|
}
|
|
152
157
|
async join(topic, peerId) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
});
|
|
157
|
-
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);
|
|
158
161
|
}
|
|
159
162
|
async leave(topic, peerId) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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);
|
|
164
169
|
}
|
|
165
|
-
async
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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);
|
|
170
176
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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);
|
|
183
190
|
});
|
|
184
191
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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);
|
|
196
213
|
});
|
|
197
214
|
}
|
|
198
215
|
}
|
|
216
|
+
__decorate([
|
|
217
|
+
async_1.synchronized
|
|
218
|
+
], SignalClient.prototype, "_subscribeSwarmEvents", null);
|
|
199
219
|
exports.SignalClient = SignalClient;
|
|
200
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,88 +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:
|
|
45
|
+
data: { signal: { json: JSON.stringify({ 'asd': 'asd' }) } }
|
|
57
46
|
};
|
|
58
47
|
await api2.signal(msg);
|
|
59
48
|
await (0, wait_for_expect_1.default)(() => {
|
|
60
49
|
(0, earljs_1.expect)(signalMock1).toHaveBeenCalledWith([msg]);
|
|
61
50
|
}, 4000);
|
|
62
|
-
}).timeout(
|
|
51
|
+
}).timeout(500);
|
|
63
52
|
(0, mocha_1.it)('join', async () => {
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
(0,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
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));
|
|
74
62
|
await api1.join(topic, peer1);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
(0, earljs_1.expect)(offerResult).toEqual({ accept: true });
|
|
84
|
-
(0, earljs_1.expect)(offerMock).toHaveBeenCalledWith([offer]);
|
|
85
|
-
}).timeout(5000);
|
|
86
|
-
(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();
|
|
87
71
|
const signalMock = (0, earljs_1.mockFn)()
|
|
88
72
|
.resolvesTo();
|
|
89
|
-
api1 = new signal_client_1.SignalClient(
|
|
73
|
+
const api1 = new signal_client_1.SignalClient(broker1.url(), signalMock);
|
|
74
|
+
(0, testutils_1.afterTest)(() => api1.close());
|
|
90
75
|
await api1.join(topic, peer1);
|
|
91
76
|
const msg = {
|
|
92
77
|
id: peer2,
|
|
93
78
|
remoteId: peer1,
|
|
94
79
|
sessionId: protocols_1.PublicKey.random(),
|
|
95
80
|
topic,
|
|
96
|
-
data: { signal: { json: '
|
|
81
|
+
data: { signal: { json: JSON.stringify({ 'asd': 'asd' }) } }
|
|
97
82
|
};
|
|
98
83
|
await api1.signal(msg);
|
|
99
84
|
await (0, wait_for_expect_1.default)(() => {
|
|
100
85
|
(0, earljs_1.expect)(signalMock).toHaveBeenCalledWith([msg]);
|
|
101
86
|
}, 4000);
|
|
102
|
-
}).timeout(
|
|
87
|
+
}).timeout(500);
|
|
103
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();
|
|
104
92
|
// This feature is not implemented yet.
|
|
105
|
-
api1 = new signal_client_1.SignalClient(
|
|
106
|
-
|
|
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());
|
|
107
97
|
await api1.join(topic, peer1);
|
|
108
98
|
await api2.join(topic, peer2);
|
|
109
|
-
await (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
await (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
},
|
|
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);
|
|
117
107
|
}).timeout(5000);
|
|
118
108
|
// Skip because communication between signal servers is not yet implemented.
|
|
119
109
|
mocha_1.it.skip('newly joined peer can receive signals from other signal servers', async () => {
|
|
120
|
-
const
|
|
121
|
-
|
|
110
|
+
const topic = protocols_1.PublicKey.random();
|
|
111
|
+
const peer1 = protocols_1.PublicKey.random();
|
|
112
|
+
const peer2 = protocols_1.PublicKey.random();
|
|
122
113
|
const signalMock = (0, earljs_1.mockFn)()
|
|
123
114
|
.resolvesTo();
|
|
124
|
-
api1 = new signal_client_1.SignalClient(
|
|
125
|
-
|
|
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());
|
|
126
119
|
await api1.join(topic, peer1);
|
|
127
120
|
await (0, async_1.sleep)(3000);
|
|
128
121
|
await api2.join(topic, peer2);
|
|
129
122
|
const sessionId = protocols_1.PublicKey.random();
|
|
130
|
-
const answer = await api2.offer({
|
|
131
|
-
remoteId: peer1,
|
|
132
|
-
id: peer2,
|
|
133
|
-
topic,
|
|
134
|
-
sessionId,
|
|
135
|
-
data: { offer: {} }
|
|
136
|
-
});
|
|
137
|
-
(0, earljs_1.expect)(answer).toEqual({ accept: true });
|
|
138
123
|
const msg = {
|
|
139
124
|
id: peer2,
|
|
140
125
|
remoteId: peer1,
|
|
@@ -147,5 +132,5 @@ const signal_client_1 = require("./signal-client");
|
|
|
147
132
|
(0, earljs_1.expect)(signalMock).toHaveBeenCalledWith([msg]);
|
|
148
133
|
}, 4000);
|
|
149
134
|
}).timeout(5000);
|
|
150
|
-
})
|
|
135
|
+
});
|
|
151
136
|
//# sourceMappingURL=signal-client.test.js.map
|