@dxos/network-manager 2.33.9-dev.5c79ab43 → 2.33.9-dev.62131029
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/browser-mocha/bundle.js +1317 -1473
- 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 +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 +14 -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 +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/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
|
@@ -11,15 +11,9 @@ import { SwarmController, Topology } from './topology';
|
|
|
11
11
|
export class FullyConnectedTopology implements Topology {
|
|
12
12
|
private _controller?: SwarmController;
|
|
13
13
|
|
|
14
|
-
private _intervalId?: NodeJS.Timeout;
|
|
15
|
-
|
|
16
14
|
init (controller: SwarmController): void {
|
|
17
15
|
assert(!this._controller, 'Already initialized');
|
|
18
16
|
this._controller = controller;
|
|
19
|
-
|
|
20
|
-
this._intervalId = setInterval(() => {
|
|
21
|
-
controller.lookup();
|
|
22
|
-
}, 10_000);
|
|
23
17
|
}
|
|
24
18
|
|
|
25
19
|
update (): void {
|
|
@@ -35,9 +29,7 @@ export class FullyConnectedTopology implements Topology {
|
|
|
35
29
|
}
|
|
36
30
|
|
|
37
31
|
async destroy (): Promise<void> {
|
|
38
|
-
|
|
39
|
-
clearInterval(this._intervalId);
|
|
40
|
-
}
|
|
32
|
+
// Nothing to do.
|
|
41
33
|
}
|
|
42
34
|
|
|
43
35
|
toString () {
|
|
@@ -36,8 +36,6 @@ export class MMSTTopology implements Topology {
|
|
|
36
36
|
|
|
37
37
|
private _controller?: SwarmController;
|
|
38
38
|
|
|
39
|
-
private _lookupIntervalId?: NodeJS.Timeout;
|
|
40
|
-
|
|
41
39
|
private _sampleCollected = false;
|
|
42
40
|
|
|
43
41
|
constructor ({
|
|
@@ -53,10 +51,6 @@ export class MMSTTopology implements Topology {
|
|
|
53
51
|
init (controller: SwarmController): void {
|
|
54
52
|
assert(!this._controller, 'Already initialized');
|
|
55
53
|
this._controller = controller;
|
|
56
|
-
|
|
57
|
-
this._lookupIntervalId = setInterval(() => {
|
|
58
|
-
controller.lookup();
|
|
59
|
-
}, 10_000);
|
|
60
54
|
}
|
|
61
55
|
|
|
62
56
|
update (): void {
|
|
@@ -79,9 +73,7 @@ export class MMSTTopology implements Topology {
|
|
|
79
73
|
}
|
|
80
74
|
|
|
81
75
|
async destroy (): Promise<void> {
|
|
82
|
-
|
|
83
|
-
clearInterval(this._lookupIntervalId);
|
|
84
|
-
}
|
|
76
|
+
// Nothing to do.
|
|
85
77
|
}
|
|
86
78
|
|
|
87
79
|
private _runAlgorithm () {
|
|
@@ -13,7 +13,6 @@ const log = debug('dxos:network-manager:topology:star');
|
|
|
13
13
|
|
|
14
14
|
export class StarTopology implements Topology {
|
|
15
15
|
private _controller?: SwarmController;
|
|
16
|
-
private _intervalId?: NodeJS.Timeout;
|
|
17
16
|
|
|
18
17
|
constructor (
|
|
19
18
|
private readonly _centralPeer: PublicKey
|
|
@@ -26,9 +25,6 @@ export class StarTopology implements Topology {
|
|
|
26
25
|
init (controller: SwarmController): void {
|
|
27
26
|
assert(!this._controller, 'Already initialized.');
|
|
28
27
|
this._controller = controller;
|
|
29
|
-
this._intervalId = setInterval(() => {
|
|
30
|
-
controller.lookup();
|
|
31
|
-
}, 10_000);
|
|
32
28
|
}
|
|
33
29
|
|
|
34
30
|
update (): void {
|
|
@@ -62,8 +58,6 @@ export class StarTopology implements Topology {
|
|
|
62
58
|
}
|
|
63
59
|
|
|
64
60
|
async destroy (): Promise<void> {
|
|
65
|
-
|
|
66
|
-
clearInterval(this._intervalId);
|
|
67
|
-
}
|
|
61
|
+
// Nothing to do.
|
|
68
62
|
}
|
|
69
63
|
}
|
package/src/topology/topology.ts
CHANGED
|
@@ -19,13 +19,6 @@ export interface SwarmController {
|
|
|
19
19
|
* Disconnect from a peer.
|
|
20
20
|
*/
|
|
21
21
|
disconnect(peer: PublicKey): void;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Trigger a lookup of any other peers swarming on this topic.
|
|
25
|
-
*
|
|
26
|
-
* Updates will be propagated through `update` method.
|
|
27
|
-
*/
|
|
28
|
-
lookup(): void;
|
|
29
22
|
}
|
|
30
23
|
|
|
31
24
|
export interface SwarmState {
|
|
@@ -11,7 +11,7 @@ import { ErrorStream } from '@dxos/debug';
|
|
|
11
11
|
import { PublicKey } from '@dxos/protocols';
|
|
12
12
|
import { ComplexMap } from '@dxos/util';
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { SignalMessage } from '../proto/gen/dxos/mesh/signalMessage';
|
|
15
15
|
import { Transport, TransportFactory } from './transport';
|
|
16
16
|
|
|
17
17
|
const log = debug('dxos:network-manager:swarm:transport:in-memory-transport');
|
|
@@ -79,7 +79,7 @@ export class InMemoryTransport implements Transport {
|
|
|
79
79
|
return this._sessionId;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
async signal (msg:
|
|
82
|
+
async signal (msg: SignalMessage) {
|
|
83
83
|
// No-op.
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -6,7 +6,7 @@ import { Event } from '@dxos/async';
|
|
|
6
6
|
import { ErrorStream } from '@dxos/debug';
|
|
7
7
|
import { PublicKey } from '@dxos/protocols';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { SignalMessage } from '../proto/gen/dxos/mesh/signalMessage';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Abstraction over a P2P connection transport. Currently either WebRTC or in-memory.
|
|
@@ -15,7 +15,7 @@ export interface Transport {
|
|
|
15
15
|
closed: Event
|
|
16
16
|
connected: Event
|
|
17
17
|
errors: ErrorStream
|
|
18
|
-
signal (msg:
|
|
18
|
+
signal (msg: SignalMessage): Promise<void> // TODO(burdon): Remove async?
|
|
19
19
|
close (): Promise<void>
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -38,7 +38,7 @@ export interface TransportOptions {
|
|
|
38
38
|
/**
|
|
39
39
|
* Send a signal message to remote peer.
|
|
40
40
|
*/
|
|
41
|
-
sendSignal: (msg:
|
|
41
|
+
sendSignal: (msg: SignalMessage) => Promise<void> // TODO(burdon): Remove async?
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
export type TransportFactory = (options: TransportOptions) => Transport
|
|
@@ -11,7 +11,7 @@ import { Event } from '@dxos/async';
|
|
|
11
11
|
import { ErrorStream } from '@dxos/debug';
|
|
12
12
|
import { PublicKey } from '@dxos/protocols';
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { SignalMessage } from '../proto/gen/dxos/mesh/signalMessage';
|
|
15
15
|
import { Transport, TransportFactory } from './transport';
|
|
16
16
|
|
|
17
17
|
const log = debug('dxos:network-manager:swarm:transport:webrtc');
|
|
@@ -35,7 +35,7 @@ export class WebRTCTransport implements Transport {
|
|
|
35
35
|
private readonly _remoteId: PublicKey,
|
|
36
36
|
private readonly _sessionId: PublicKey,
|
|
37
37
|
private readonly _topic: PublicKey,
|
|
38
|
-
private readonly _sendSignal: (msg:
|
|
38
|
+
private readonly _sendSignal: (msg: SignalMessage) => void,
|
|
39
39
|
private readonly _webrtcConfig?: any
|
|
40
40
|
) {
|
|
41
41
|
log(`Created WebRTC connection ${this._ownId} -> ${this._remoteId} initiator=${this._initiator}`);
|
|
@@ -89,7 +89,7 @@ export class WebRTCTransport implements Transport {
|
|
|
89
89
|
return this._peer;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
async signal (msg:
|
|
92
|
+
async signal (msg: SignalMessage) {
|
|
93
93
|
assert(this._peer, 'Connection not ready to accept signals.');
|
|
94
94
|
assert(msg.data?.signal?.json, 'Signal message must contain signal data.');
|
|
95
95
|
this._peer.signal(JSON.parse(msg.data.signal.json));
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Event } from '@dxos/async';
|
|
2
|
-
import { SignalApi } from './signal-api';
|
|
3
|
-
/**
|
|
4
|
-
* A websocket connection paired with nanomessage-rpc endpoint.
|
|
5
|
-
*
|
|
6
|
-
* Provides lifecycle events and command trace.
|
|
7
|
-
*
|
|
8
|
-
* Does not automatically reconnect, if the connection is dropped client must recreate the class instance.
|
|
9
|
-
*/
|
|
10
|
-
export declare class WebsocketRpc {
|
|
11
|
-
private readonly _host;
|
|
12
|
-
private readonly _connectTrigger;
|
|
13
|
-
private readonly _socket;
|
|
14
|
-
private readonly _rpc;
|
|
15
|
-
private _messageId;
|
|
16
|
-
readonly commandTrace: Event<SignalApi.CommandTrace>;
|
|
17
|
-
readonly connected: Event<void>;
|
|
18
|
-
readonly disconnected: Event<void>;
|
|
19
|
-
readonly error: Event<Error>;
|
|
20
|
-
/**
|
|
21
|
-
* @param _host Signal server websocket URL.
|
|
22
|
-
*/
|
|
23
|
-
constructor(_host: string);
|
|
24
|
-
close(): Promise<void>;
|
|
25
|
-
call(method: string, payload: any): Promise<any>;
|
|
26
|
-
emit(method: string, data: any): Promise<any>;
|
|
27
|
-
addHandler(method: string, handler: (data: any) => Promise<any>): void;
|
|
28
|
-
subscribe(method: string, handler: (data: any) => void): void;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=websocket-rpc.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-rpc.d.ts","sourceRoot":"","sources":["../../../src/signal/websocket-rpc.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzC;;;;;;GAMG;AACH,qBAAa,YAAY;IAerB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAdxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,UAAU,CAAc;IAEhC,QAAQ,CAAC,YAAY,gCAAuC;IAC5D,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,YAAY,cAAe;IACpC,QAAQ,CAAC,KAAK,eAAsB;IAEpC;;OAEG;gBAEgB,KAAK,EAAE,MAAM;IAiE1B,KAAK;IAQL,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAqCjD,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAYrC,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;IAgChE,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;CAaxD"}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//
|
|
3
|
-
// Copyright 2020 DXOS.org
|
|
4
|
-
//
|
|
5
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.WebsocketRpc = void 0;
|
|
10
|
-
const debug_1 = __importDefault(require("debug"));
|
|
11
|
-
const isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
|
|
12
|
-
const nanomessage_rpc_1 = __importDefault(require("nanomessage-rpc"));
|
|
13
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
14
|
-
const util_1 = require("util");
|
|
15
|
-
const async_1 = require("@dxos/async");
|
|
16
|
-
const log = (0, debug_1.default)('dxos:network-manager:websocket-rpc');
|
|
17
|
-
const RPC_TIMEOUT = 3000;
|
|
18
|
-
/**
|
|
19
|
-
* A websocket connection paired with nanomessage-rpc endpoint.
|
|
20
|
-
*
|
|
21
|
-
* Provides lifecycle events and command trace.
|
|
22
|
-
*
|
|
23
|
-
* Does not automatically reconnect, if the connection is dropped client must recreate the class instance.
|
|
24
|
-
*/
|
|
25
|
-
class WebsocketRpc {
|
|
26
|
-
/**
|
|
27
|
-
* @param _host Signal server websocket URL.
|
|
28
|
-
*/
|
|
29
|
-
constructor(_host) {
|
|
30
|
-
this._host = _host;
|
|
31
|
-
this._connectTrigger = new async_1.Trigger();
|
|
32
|
-
this._messageId = Date.now();
|
|
33
|
-
this.commandTrace = new async_1.Event();
|
|
34
|
-
this.connected = new async_1.Event();
|
|
35
|
-
this.disconnected = new async_1.Event();
|
|
36
|
-
this.error = new async_1.Event();
|
|
37
|
-
this._socket = new isomorphic_ws_1.default(this._host);
|
|
38
|
-
this._socket.onopen = async () => {
|
|
39
|
-
log(`Websocket connected ${this._host}`);
|
|
40
|
-
this._connectTrigger.wake();
|
|
41
|
-
try {
|
|
42
|
-
await this._rpc.open();
|
|
43
|
-
log(`RPC open ${this._host}`);
|
|
44
|
-
this.connected.emit();
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
this.error.emit(err);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
this._socket.onclose = async () => {
|
|
51
|
-
log(`Disconnected ${this._host}`);
|
|
52
|
-
this.disconnected.emit();
|
|
53
|
-
try {
|
|
54
|
-
await this._rpc.close();
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
this.error.emit(err);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
this._socket.onerror = e => {
|
|
61
|
-
var _a;
|
|
62
|
-
log(`Signal socket error ${this._host} ${e.message}`);
|
|
63
|
-
this.error.emit((_a = e.error) !== null && _a !== void 0 ? _a : new Error(e.message));
|
|
64
|
-
};
|
|
65
|
-
this._rpc = (0, nanomessage_rpc_1.default)({
|
|
66
|
-
send: async (data) => {
|
|
67
|
-
await this._connectTrigger.wait();
|
|
68
|
-
(0, node_assert_1.default)(this._socket, 'No socket');
|
|
69
|
-
await (0, util_1.promisify)(this._socket.send.bind(this._socket))(data);
|
|
70
|
-
},
|
|
71
|
-
subscribe: (next) => {
|
|
72
|
-
void this._connectTrigger.wait().then(() => {
|
|
73
|
-
(0, node_assert_1.default)(this._socket, 'No socket');
|
|
74
|
-
this._socket.onmessage = async (e) => {
|
|
75
|
-
try {
|
|
76
|
-
// `e.data` is Buffer in node, and Blob in chrome.
|
|
77
|
-
let data;
|
|
78
|
-
if (Object.getPrototypeOf(e.data).constructor.name === 'Blob') {
|
|
79
|
-
data = Buffer.from(await e.data.arrayBuffer());
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
data = e.data;
|
|
83
|
-
}
|
|
84
|
-
next(data);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
this.error.emit(err);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
return () => {
|
|
92
|
-
if (this._socket) {
|
|
93
|
-
this._socket.onmessage = () => { };
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
this._rpc.on('error', (error) => this.error.emit(error));
|
|
99
|
-
}
|
|
100
|
-
async close() {
|
|
101
|
-
try {
|
|
102
|
-
await this._rpc.close();
|
|
103
|
-
}
|
|
104
|
-
finally {
|
|
105
|
-
this._socket.close();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
async call(method, payload) {
|
|
109
|
-
const start = Date.now();
|
|
110
|
-
try {
|
|
111
|
-
const response = await Promise.race([
|
|
112
|
-
(async () => {
|
|
113
|
-
await this._rpc.open();
|
|
114
|
-
await this._connectTrigger.wait();
|
|
115
|
-
return this._rpc.call(method, payload);
|
|
116
|
-
})(),
|
|
117
|
-
(0, async_1.sleep)(RPC_TIMEOUT).then(() => Promise.reject(new Error(`Signal RPC call timed out in ${RPC_TIMEOUT} ms`)))
|
|
118
|
-
]);
|
|
119
|
-
this.commandTrace.emit({
|
|
120
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
121
|
-
host: this._host,
|
|
122
|
-
incoming: false,
|
|
123
|
-
time: Date.now() - start,
|
|
124
|
-
method,
|
|
125
|
-
payload,
|
|
126
|
-
response
|
|
127
|
-
});
|
|
128
|
-
log(`Signal RPC ${this._host}: ${method} ${JSON.stringify(payload)} ${JSON.stringify(response)}`);
|
|
129
|
-
return response;
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
log(`Signal RPC error ${this._host}: ${method} ${JSON.stringify(payload)} ${err.message}`);
|
|
133
|
-
this.commandTrace.emit({
|
|
134
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
135
|
-
host: this._host,
|
|
136
|
-
incoming: false,
|
|
137
|
-
time: Date.now() - start,
|
|
138
|
-
method,
|
|
139
|
-
payload,
|
|
140
|
-
error: err.message
|
|
141
|
-
});
|
|
142
|
-
throw err;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
async emit(method, data) {
|
|
146
|
-
this.commandTrace.emit({
|
|
147
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
148
|
-
host: this._host,
|
|
149
|
-
incoming: false,
|
|
150
|
-
time: 0,
|
|
151
|
-
method,
|
|
152
|
-
payload: data
|
|
153
|
-
});
|
|
154
|
-
return this._rpc.emit('signal', data);
|
|
155
|
-
}
|
|
156
|
-
addHandler(method, handler) {
|
|
157
|
-
this._rpc.actions({
|
|
158
|
-
[method]: async (data) => {
|
|
159
|
-
const begin = Date.now();
|
|
160
|
-
try {
|
|
161
|
-
const response = await handler(data);
|
|
162
|
-
this.commandTrace.emit({
|
|
163
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
164
|
-
host: this._host,
|
|
165
|
-
incoming: true,
|
|
166
|
-
time: Date.now() - begin,
|
|
167
|
-
method,
|
|
168
|
-
payload: data,
|
|
169
|
-
response
|
|
170
|
-
});
|
|
171
|
-
return response;
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
this.commandTrace.emit({
|
|
175
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
176
|
-
host: this._host,
|
|
177
|
-
incoming: true,
|
|
178
|
-
time: Date.now() - begin,
|
|
179
|
-
method,
|
|
180
|
-
payload: data,
|
|
181
|
-
error: error.message
|
|
182
|
-
});
|
|
183
|
-
throw error;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
subscribe(method, handler) {
|
|
189
|
-
this._rpc.on(method, (data) => {
|
|
190
|
-
this.commandTrace.emit({
|
|
191
|
-
messageId: `${this._host}-${this._messageId++}`,
|
|
192
|
-
host: this._host,
|
|
193
|
-
incoming: true,
|
|
194
|
-
time: 0,
|
|
195
|
-
method,
|
|
196
|
-
payload: data
|
|
197
|
-
});
|
|
198
|
-
handler(data);
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
exports.WebsocketRpc = WebsocketRpc;
|
|
203
|
-
//# sourceMappingURL=websocket-rpc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-rpc.js","sourceRoot":"","sources":["../../../src/signal/websocket-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-signal-manager.d.ts","sourceRoot":"","sources":["../../../src/signal/websocket-signal-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,qBAAa,sBAAuB,YAAW,aAAa;IAexD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAf3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAE5D,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAuD;IAE9F,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAE7C,QAAQ,CAAC,aAAa,4BAAmC;IACzD,QAAQ,CAAC,YAAY,gCAAuC;IAC5D,QAAQ,CAAC,qBAAqB,qDAA2D;IACzF,QAAQ,CAAC,QAAQ,iBAAwB;gBAGtB,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC;IAkBlE,SAAS,IAAK,SAAS,CAAC,MAAM,EAAE;IAIhC,IAAI,CAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;IAMzC,KAAK,CAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;YAO5B,sBAAsB;IA4CpC,OAAO,CAAC,UAAU;IAWlB,MAAM,CAAE,KAAK,EAAE,SAAS;IAgBxB,KAAK,CAAE,GAAG,EAAE,OAAO;IAMb,MAAM,CAAE,GAAG,EAAE,OAAO;IAQpB,OAAO;CAGd"}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//
|
|
3
|
-
// Copyright 2020 DXOS.org
|
|
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
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.WebsocketSignalManager = void 0;
|
|
16
|
-
const debug_1 = __importDefault(require("debug"));
|
|
17
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
18
|
-
const async_1 = require("@dxos/async");
|
|
19
|
-
const util_1 = require("@dxos/util");
|
|
20
|
-
const signal_client_1 = require("./signal-client");
|
|
21
|
-
const log = (0, debug_1.default)('dxos:network-manager:websocket-signal-manager');
|
|
22
|
-
class WebsocketSignalManager {
|
|
23
|
-
constructor(_hosts, _onOffer) {
|
|
24
|
-
this._hosts = _hosts;
|
|
25
|
-
this._onOffer = _onOffer;
|
|
26
|
-
this._servers = new Map();
|
|
27
|
-
/** Topics joined: topic => peerId */
|
|
28
|
-
this._topicsJoined = new util_1.ComplexMap(topic => topic.toHex());
|
|
29
|
-
this._topicsJoinedPerSignal = new Map();
|
|
30
|
-
this.statusChanged = new async_1.Event();
|
|
31
|
-
this.commandTrace = new async_1.Event();
|
|
32
|
-
this.peerCandidatesChanged = new async_1.Event();
|
|
33
|
-
this.onSignal = new async_1.Event();
|
|
34
|
-
log(`Created WebsocketSignalManager with signal servers: ${_hosts}`);
|
|
35
|
-
(0, node_assert_1.default)(_hosts.length === 1, 'Only a single signaling server connection is supported');
|
|
36
|
-
for (const host of this._hosts) {
|
|
37
|
-
const server = new signal_client_1.SignalClient(host, async (msg) => this._onOffer(msg), async (msg) => this.onSignal.emit(msg));
|
|
38
|
-
this._servers.set(host, server);
|
|
39
|
-
server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));
|
|
40
|
-
server.commandTrace.on(trace => this.commandTrace.emit(trace));
|
|
41
|
-
this._topicsJoinedPerSignal.set(host, new util_1.ComplexMap(x => x.toHex()));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
getStatus() {
|
|
45
|
-
return Array.from(this._servers.values()).map(server => server.getStatus());
|
|
46
|
-
}
|
|
47
|
-
join(topic, peerId) {
|
|
48
|
-
log(`Join ${topic} ${peerId}`);
|
|
49
|
-
this._topicsJoined.set(topic, peerId);
|
|
50
|
-
void this._reconcileJoinedTopics();
|
|
51
|
-
}
|
|
52
|
-
leave(topic, peerId) {
|
|
53
|
-
log(`Leave ${topic} ${peerId}`);
|
|
54
|
-
this._topicsJoined.delete(topic);
|
|
55
|
-
void this._reconcileJoinedTopics();
|
|
56
|
-
}
|
|
57
|
-
async _reconcileJoinedTopics() {
|
|
58
|
-
log('Reconciling joined topics');
|
|
59
|
-
const promises = [];
|
|
60
|
-
for (const [host, server] of this._servers.entries()) {
|
|
61
|
-
for (const [topic, peerId] of this._topicsJoined.entries()) {
|
|
62
|
-
if (!this._topicsJoinedPerSignal.get(host).has(topic)) {
|
|
63
|
-
log(`Join ${topic} as ${peerId} on ${host}`);
|
|
64
|
-
promises.push(server.join(topic, peerId).then(peers => {
|
|
65
|
-
log(`Joined successfully ${host}`);
|
|
66
|
-
this._topicsJoinedPerSignal.get(host).set(topic, peerId);
|
|
67
|
-
log(`Peer candidates changed ${topic} ${peers}`);
|
|
68
|
-
// TODO(marik-d): Deduplicate peers.
|
|
69
|
-
this.peerCandidatesChanged.emit([topic, peers]);
|
|
70
|
-
}, err => {
|
|
71
|
-
log(`Join error ${host} ${err.message}`);
|
|
72
|
-
this._topicsJoinedPerSignal.get(host).delete(topic);
|
|
73
|
-
this._reconcile();
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
for (const [topic, peerId] of this._topicsJoinedPerSignal.get(host).entries()) {
|
|
77
|
-
if (!this._topicsJoined.has(topic)) {
|
|
78
|
-
log(`Leave ${topic} as ${peerId} on ${host}`);
|
|
79
|
-
promises.push(server.leave(topic, peerId).then(() => {
|
|
80
|
-
log(`Left successfully ${host}`);
|
|
81
|
-
this._topicsJoinedPerSignal.get(host).delete(topic);
|
|
82
|
-
}, err => {
|
|
83
|
-
log(`Leave error ${host} ${err.message}`);
|
|
84
|
-
this._reconcile();
|
|
85
|
-
}));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
await Promise.all(promises);
|
|
91
|
-
}
|
|
92
|
-
_reconcile() {
|
|
93
|
-
if (this._reconcileTimeoutId !== undefined) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
log('Will reconcile in 3 seconds');
|
|
97
|
-
this._reconcileTimeoutId = setTimeout(async () => {
|
|
98
|
-
this._reconcileTimeoutId = undefined;
|
|
99
|
-
await this._reconcileJoinedTopics();
|
|
100
|
-
}, 3000);
|
|
101
|
-
}
|
|
102
|
-
lookup(topic) {
|
|
103
|
-
log(`Lookup ${topic}`);
|
|
104
|
-
for (const server of this._servers.values()) {
|
|
105
|
-
server.lookup(topic).then(peers => {
|
|
106
|
-
log(`Peer candidates changed ${topic} ${peers}`);
|
|
107
|
-
// TODO(marik-d): Deduplicate peers.
|
|
108
|
-
this.peerCandidatesChanged.emit([topic, peers]);
|
|
109
|
-
}, () => {
|
|
110
|
-
// Error will already be reported in devtools. No need to do anything here.
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
offer(msg) {
|
|
115
|
-
log(`Offer ${msg.remoteId}`);
|
|
116
|
-
// TODO(marik-d): Broadcast to all signal servers.
|
|
117
|
-
return Array.from(this._servers.values())[0].offer(msg);
|
|
118
|
-
}
|
|
119
|
-
async signal(msg) {
|
|
120
|
-
log(`Signal ${msg.remoteId}`);
|
|
121
|
-
for (const server of this._servers.values()) {
|
|
122
|
-
void server.signal(msg);
|
|
123
|
-
// TODO(marik-d): Error handling.
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
async destroy() {
|
|
127
|
-
await Promise.all(Array.from(this._servers.values()).map(server => server.close()));
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
__decorate([
|
|
131
|
-
async_1.synchronized
|
|
132
|
-
], WebsocketSignalManager.prototype, "_reconcileJoinedTopics", null);
|
|
133
|
-
exports.WebsocketSignalManager = WebsocketSignalManager;
|
|
134
|
-
//# sourceMappingURL=websocket-signal-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-signal-manager.js","sourceRoot":"","sources":["../../../src/signal/websocket-signal-manager.ts"],"names":[],"mappings":"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"}
|