@dxos/network-manager 2.12.16 → 2.12.20
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 +31463 -10909
- package/dist/src/connection-log.d.ts +43 -0
- package/dist/src/connection-log.d.ts.map +1 -0
- package/dist/src/connection-log.js +89 -0
- package/dist/src/connection-log.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/network-manager.blueprint-test.d.ts.map +1 -1
- package/dist/src/network-manager.blueprint-test.js +2 -0
- package/dist/src/network-manager.blueprint-test.js.map +1 -1
- package/dist/src/network-manager.d.ts +7 -0
- package/dist/src/network-manager.d.ts.map +1 -1
- package/dist/src/network-manager.js +15 -3
- package/dist/src/network-manager.js.map +1 -1
- package/dist/src/presence.test.js +1 -0
- package/dist/src/presence.test.js.map +1 -1
- package/dist/src/signal/in-memory-signal-manager.d.ts +1 -0
- package/dist/src/signal/in-memory-signal-manager.d.ts.map +1 -1
- package/dist/src/signal/in-memory-signal-manager.js +1 -0
- package/dist/src/signal/in-memory-signal-manager.js.map +1 -1
- package/dist/src/signal/interface.d.ts +1 -0
- package/dist/src/signal/interface.d.ts.map +1 -1
- package/dist/src/signal/signal-api.d.ts.map +1 -1
- package/dist/src/signal/signal-api.js +3 -0
- package/dist/src/signal/signal-api.js.map +1 -1
- package/dist/src/signal/websocket-signal-manager.d.ts +1 -0
- package/dist/src/signal/websocket-signal-manager.d.ts.map +1 -1
- package/dist/src/signal/websocket-signal-manager.js +3 -0
- package/dist/src/signal/websocket-signal-manager.js.map +1 -1
- package/dist/src/swarm/connection.d.ts +1 -0
- package/dist/src/swarm/connection.d.ts.map +1 -1
- package/dist/src/swarm/connection.js +3 -0
- package/dist/src/swarm/connection.js.map +1 -1
- package/dist/src/swarm/swarm.d.ts +6 -0
- package/dist/src/swarm/swarm.d.ts.map +1 -1
- package/dist/src/swarm/swarm.js +7 -0
- package/dist/src/swarm/swarm.js.map +1 -1
- package/dist/src/transport/webrtc-transport.d.ts +1 -1
- 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/src/transport/webrtc-transport.test.js +4 -3
- package/dist/src/transport/webrtc-transport.test.js.map +1 -1
- package/dist/src/transport/wrtc-simple-peer.test.d.ts +2 -0
- package/dist/src/transport/wrtc-simple-peer.test.d.ts.map +1 -0
- package/dist/src/transport/wrtc-simple-peer.test.js +24 -0
- package/dist/src/transport/wrtc-simple-peer.test.js.map +1 -0
- package/dist/src/types.d.ts +6 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/src/connection-log.ts +124 -0
- package/src/index.ts +2 -0
- package/src/network-manager.blueprint-test.ts +2 -0
- package/src/network-manager.ts +23 -3
- package/src/presence.test.ts +1 -0
- package/src/{types.d.ts → shims.d.ts} +0 -0
- package/src/signal/in-memory-signal-manager.ts +2 -0
- package/src/signal/interface.ts +2 -0
- package/src/signal/signal-api.ts +3 -0
- package/src/signal/websocket-signal-manager.ts +4 -0
- package/src/swarm/connection.ts +4 -0
- package/src/swarm/swarm.ts +11 -1
- package/src/transport/webrtc-transport.test.ts +4 -3
- package/src/transport/webrtc-transport.ts +3 -3
- package/src/transport/wrtc-simple-peer.test.ts +23 -0
- package/src/types.ts +10 -0
package/src/presence.test.ts
CHANGED
|
File without changes
|
|
@@ -58,6 +58,8 @@ export class InMemorySignalManager implements SignalManager {
|
|
|
58
58
|
assert(state.connections.get(msg.remoteId), 'Peer not connected');
|
|
59
59
|
state.connections.get(msg.remoteId)!.onSignal.emit(msg);
|
|
60
60
|
}
|
|
61
|
+
|
|
62
|
+
async destroy () {}
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
// This is global state for the in-memory signal manager.
|
package/src/signal/interface.ts
CHANGED
package/src/signal/signal-api.ts
CHANGED
|
@@ -141,6 +141,9 @@ export class SignalApi {
|
|
|
141
141
|
console.error('Signal api already reconnecting.');
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
|
+
if (this._state === SignalApi.State.CLOSED) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
144
147
|
|
|
145
148
|
this._reconnectIntervalId = setTimeout(() => {
|
|
146
149
|
this._reconnectIntervalId = undefined;
|
|
@@ -151,6 +151,10 @@ export class WebsocketSignalManager implements SignalManager {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
async destroy () {
|
|
155
|
+
await Promise.all(Array.from(this._servers.values()).map(server => server.close()));
|
|
156
|
+
}
|
|
157
|
+
|
|
154
158
|
peerCandidatesChanged = new Event<[topic: PublicKey, candidates: PublicKey[]]>()
|
|
155
159
|
|
|
156
160
|
onSignal = new Event<SignalApi.SignalMessage>();
|
package/src/swarm/connection.ts
CHANGED
package/src/swarm/swarm.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { discoveryKey, PublicKey } from '@dxos/crypto';
|
|
|
10
10
|
import { ErrorStream } from '@dxos/debug';
|
|
11
11
|
import { ComplexMap, ComplexSet } from '@dxos/util';
|
|
12
12
|
|
|
13
|
+
import { Topic } from '..';
|
|
13
14
|
import { ProtocolProvider } from '../network-manager';
|
|
14
15
|
import { SignalApi } from '../signal';
|
|
15
16
|
import { SwarmController, Topology } from '../topology';
|
|
@@ -24,6 +25,11 @@ const log = debug('dxos:network-manager:swarm');
|
|
|
24
25
|
* Routes signal events and maintains swarm topology.
|
|
25
26
|
*/
|
|
26
27
|
export class Swarm {
|
|
28
|
+
/**
|
|
29
|
+
* Unique id of the swarm, local to the current peer, generated when swarm is joined.
|
|
30
|
+
*/
|
|
31
|
+
readonly id = PublicKey.random();
|
|
32
|
+
|
|
27
33
|
private readonly _connections = new ComplexMap<PublicKey, Connection>(x => x.toHex());
|
|
28
34
|
|
|
29
35
|
private readonly _discoveredPeers = new ComplexSet<PublicKey>(x => x.toHex());
|
|
@@ -77,6 +83,10 @@ export class Swarm {
|
|
|
77
83
|
return this._label;
|
|
78
84
|
}
|
|
79
85
|
|
|
86
|
+
get topic (): Topic {
|
|
87
|
+
return this._topic;
|
|
88
|
+
}
|
|
89
|
+
|
|
80
90
|
onPeerCandidatesChanged (candidates: PublicKey[]) {
|
|
81
91
|
log(`New peers for ${this._topic} ${candidates}`);
|
|
82
92
|
this._discoveredPeers.clear();
|
|
@@ -118,7 +128,7 @@ export class Swarm {
|
|
|
118
128
|
const connection = this._createConnection(false, message.id, message.sessionId);
|
|
119
129
|
try {
|
|
120
130
|
connection.connect();
|
|
121
|
-
} catch (err) {
|
|
131
|
+
} catch (err: any) {
|
|
122
132
|
this.errors.raise(err);
|
|
123
133
|
}
|
|
124
134
|
accept = true;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import expect from 'expect';
|
|
6
6
|
import { it as test } from 'mocha';
|
|
7
|
+
import { Duplex } from 'stream';
|
|
7
8
|
import waitForExpect from 'wait-for-expect';
|
|
8
9
|
|
|
9
10
|
import { sleep } from '@dxos/async';
|
|
@@ -14,12 +15,12 @@ import { afterTest } from '@dxos/testutils';
|
|
|
14
15
|
import { TestProtocolPlugin, testProtocolProvider } from '../testing/test-protocol';
|
|
15
16
|
import { WebrtcTransport } from './webrtc-transport';
|
|
16
17
|
|
|
17
|
-
describe('
|
|
18
|
-
// This doesn't clean up correctly and crashes with SIGSEGV at the end. Probably an issue with wrtc package.
|
|
18
|
+
describe('WebrtcTransport', () => {
|
|
19
|
+
// This doesn't clean up correctly and crashes with SIGSEGV / SIGABRT at the end. Probably an issue with wrtc package.
|
|
19
20
|
test('open and close', async () => {
|
|
20
21
|
const connection = new WebrtcTransport(
|
|
21
22
|
true,
|
|
22
|
-
new
|
|
23
|
+
new Duplex(),
|
|
23
24
|
PublicKey.random(),
|
|
24
25
|
PublicKey.random(),
|
|
25
26
|
PublicKey.random(),
|
|
@@ -72,7 +72,7 @@ export class WebrtcTransport implements Transport {
|
|
|
72
72
|
});
|
|
73
73
|
this._peer.on('close', async () => {
|
|
74
74
|
log(`Connection closed ${this._ownId} -> ${this._remoteId}`);
|
|
75
|
-
await this.
|
|
75
|
+
await this._disconnectStreams();
|
|
76
76
|
this.closed.emit();
|
|
77
77
|
});
|
|
78
78
|
}
|
|
@@ -95,12 +95,12 @@ export class WebrtcTransport implements Transport {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
async close () {
|
|
98
|
-
await this.
|
|
98
|
+
await this._disconnectStreams();
|
|
99
99
|
this._peer!.destroy();
|
|
100
100
|
log('Closed.');
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
private async
|
|
103
|
+
private async _disconnectStreams () {
|
|
104
104
|
this._stream.unpipe?.(this._peer)?.unpipe?.(this._stream); // TODO(rzadp): Find a way of unpiping this?
|
|
105
105
|
}
|
|
106
106
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2020 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { it as test } from 'mocha';
|
|
6
|
+
import SimplePeerConstructor from 'simple-peer';
|
|
7
|
+
import wrtc from 'wrtc';
|
|
8
|
+
|
|
9
|
+
import { sleep } from '@dxos/async';
|
|
10
|
+
|
|
11
|
+
describe('node wrtc and simple-peer', () => {
|
|
12
|
+
// Simplest test that reproduces SIGABRT (mac) and SIGSEGV (linux) in wrtc.
|
|
13
|
+
test.skip('open and close', async () => {
|
|
14
|
+
const peer = new SimplePeerConstructor({
|
|
15
|
+
initiator: true,
|
|
16
|
+
wrtc
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
await sleep(1);
|
|
20
|
+
|
|
21
|
+
await peer.destroy();
|
|
22
|
+
}).timeout(3_000);
|
|
23
|
+
});
|