@dxos/network-manager 0.1.3 → 0.1.4
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/swarm/connection.d.ts.map +1 -1
- package/dist/src/swarm/connection.js +14 -10
- package/dist/src/swarm/connection.js.map +1 -1
- package/dist/src/transport/memory-transport.d.ts +6 -13
- package/dist/src/transport/memory-transport.d.ts.map +1 -1
- package/dist/src/transport/memory-transport.js +41 -35
- package/dist/src/transport/memory-transport.js.map +1 -1
- package/dist/src/transport/memory-transport.test.js +14 -3
- package/dist/src/transport/memory-transport.test.js.map +1 -1
- package/dist/src/transport/transport.d.ts +1 -7
- package/dist/src/transport/transport.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport-proxy.d.ts +3 -9
- package/dist/src/transport/webrtc-transport-proxy.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport-proxy.js +12 -17
- package/dist/src/transport/webrtc-transport-proxy.js.map +1 -1
- package/dist/src/transport/webrtc-transport-proxy.test.js +15 -35
- package/dist/src/transport/webrtc-transport-proxy.test.js.map +1 -1
- package/dist/src/transport/webrtc-transport-service.d.ts +1 -4
- package/dist/src/transport/webrtc-transport-service.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport-service.js +32 -36
- package/dist/src/transport/webrtc-transport-service.js.map +1 -1
- package/dist/src/transport/webrtc-transport.d.ts +8 -13
- package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
- package/dist/src/transport/webrtc-transport.js +18 -44
- package/dist/src/transport/webrtc-transport.js.map +1 -1
- package/dist/src/transport/webrtc-transport.test.js +25 -14
- package/dist/src/transport/webrtc-transport.test.js.map +1 -1
- package/package.json +16 -16
- package/src/swarm/connection.ts +9 -5
- package/src/transport/memory-transport.test.ts +14 -15
- package/src/transport/memory-transport.ts +48 -49
- package/src/transport/transport.ts +1 -9
- package/src/transport/webrtc-transport-proxy.test.ts +17 -46
- package/src/transport/webrtc-transport-proxy.ts +13 -23
- package/src/transport/webrtc-transport-service.ts +34 -39
- package/src/transport/webrtc-transport.test.ts +17 -30
- package/src/transport/webrtc-transport.ts +22 -54
|
@@ -7,14 +7,19 @@ import SimplePeerConstructor, { Instance as SimplePeer } from 'simple-peer';
|
|
|
7
7
|
|
|
8
8
|
import { Event } from '@dxos/async';
|
|
9
9
|
import { ErrorStream, raise } from '@dxos/debug';
|
|
10
|
-
import { PublicKey } from '@dxos/keys';
|
|
11
10
|
import { log } from '@dxos/log';
|
|
12
11
|
import { Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
13
12
|
|
|
14
|
-
import { SignalMessage } from '../signal';
|
|
15
13
|
import { Transport, TransportFactory } from './transport';
|
|
16
14
|
import { wrtc } from './webrtc';
|
|
17
15
|
|
|
16
|
+
export type WebRTCTransportParams = {
|
|
17
|
+
initiator: boolean;
|
|
18
|
+
stream: NodeJS.ReadWriteStream;
|
|
19
|
+
webrtcConfig?: any;
|
|
20
|
+
sendSignal: (signal: Signal) => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
|
|
18
23
|
/**
|
|
19
24
|
* Implements Transport for WebRTC. Uses simple-peer under the hood.
|
|
20
25
|
*/
|
|
@@ -25,51 +30,27 @@ export class WebRTCTransport implements Transport {
|
|
|
25
30
|
readonly connected = new Event();
|
|
26
31
|
readonly errors = new ErrorStream();
|
|
27
32
|
|
|
28
|
-
constructor(
|
|
29
|
-
|
|
30
|
-
private readonly _stream: NodeJS.ReadWriteStream,
|
|
31
|
-
private readonly _ownId: PublicKey,
|
|
32
|
-
private readonly _remoteId: PublicKey,
|
|
33
|
-
private readonly _sessionId: PublicKey,
|
|
34
|
-
private readonly _topic: PublicKey,
|
|
35
|
-
private readonly _sendSignal: (msg: SignalMessage) => void,
|
|
36
|
-
private readonly _webrtcConfig?: any
|
|
37
|
-
) {
|
|
38
|
-
log('created connection', {
|
|
39
|
-
id: this._ownId,
|
|
40
|
-
topic: this._topic,
|
|
41
|
-
remoteId: this._remoteId,
|
|
42
|
-
initiator: this._initiator,
|
|
43
|
-
config: this._webrtcConfig
|
|
44
|
-
});
|
|
33
|
+
constructor(private readonly params: WebRTCTransportParams) {
|
|
34
|
+
log('created connection', params);
|
|
45
35
|
this._peer = new SimplePeerConstructor({
|
|
46
|
-
initiator: this.
|
|
36
|
+
initiator: this.params.initiator,
|
|
47
37
|
wrtc: SimplePeerConstructor.WEBRTC_SUPPORT ? undefined : wrtc ?? raise(new Error('wrtc not available')),
|
|
48
|
-
config: this.
|
|
38
|
+
config: this.params.webrtcConfig
|
|
49
39
|
});
|
|
50
40
|
|
|
51
41
|
this._peer.on('signal', async (data) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
author: this._ownId,
|
|
55
|
-
recipient: this._remoteId,
|
|
56
|
-
sessionId: this._sessionId,
|
|
57
|
-
topic: this._topic,
|
|
58
|
-
data: { signal: { json: JSON.stringify(data) } }
|
|
59
|
-
});
|
|
60
|
-
} catch (err: any) {
|
|
61
|
-
this.errors.raise(err);
|
|
62
|
-
}
|
|
42
|
+
log('signal', data);
|
|
43
|
+
await this.params.sendSignal({ json: JSON.stringify(data) });
|
|
63
44
|
});
|
|
64
45
|
|
|
65
46
|
this._peer.on('connect', () => {
|
|
66
|
-
log('connected'
|
|
67
|
-
this.
|
|
47
|
+
log('connected');
|
|
48
|
+
this.params.stream.pipe(this._peer!).pipe(this.params.stream);
|
|
68
49
|
this.connected.emit();
|
|
69
50
|
});
|
|
70
51
|
|
|
71
52
|
this._peer.on('close', async () => {
|
|
72
|
-
log('closed'
|
|
53
|
+
log('closed');
|
|
73
54
|
await this._disconnectStreams();
|
|
74
55
|
this.closed.emit();
|
|
75
56
|
});
|
|
@@ -80,14 +61,6 @@ export class WebRTCTransport implements Transport {
|
|
|
80
61
|
});
|
|
81
62
|
}
|
|
82
63
|
|
|
83
|
-
get remoteId() {
|
|
84
|
-
return this._remoteId;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
get sessionId() {
|
|
88
|
-
return this._sessionId;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
64
|
get peer() {
|
|
92
65
|
return this._peer;
|
|
93
66
|
}
|
|
@@ -96,6 +69,7 @@ export class WebRTCTransport implements Transport {
|
|
|
96
69
|
log('closing...');
|
|
97
70
|
await this._disconnectStreams();
|
|
98
71
|
this._peer!.destroy();
|
|
72
|
+
this.closed.emit();
|
|
99
73
|
log('closed');
|
|
100
74
|
}
|
|
101
75
|
|
|
@@ -107,21 +81,15 @@ export class WebRTCTransport implements Transport {
|
|
|
107
81
|
|
|
108
82
|
private async _disconnectStreams() {
|
|
109
83
|
// TODO(rzadp): Find a way of unpiping this?
|
|
110
|
-
this.
|
|
84
|
+
this.params.stream.unpipe?.(this._peer)?.unpipe?.(this.params.stream);
|
|
111
85
|
}
|
|
112
86
|
}
|
|
113
87
|
|
|
114
88
|
// TODO(dmaretskyi): Convert to class.
|
|
115
89
|
export const createWebRTCTransportFactory = (webrtcConfig?: any): TransportFactory => ({
|
|
116
|
-
create: (
|
|
117
|
-
new WebRTCTransport(
|
|
118
|
-
|
|
119
|
-
opts.stream,
|
|
120
|
-
opts.ownId,
|
|
121
|
-
opts.remoteId,
|
|
122
|
-
opts.sessionId,
|
|
123
|
-
opts.topic,
|
|
124
|
-
opts.sendSignal,
|
|
90
|
+
create: (params) =>
|
|
91
|
+
new WebRTCTransport({
|
|
92
|
+
...params,
|
|
125
93
|
webrtcConfig
|
|
126
|
-
)
|
|
94
|
+
})
|
|
127
95
|
});
|