@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.
Files changed (37) hide show
  1. package/dist/src/swarm/connection.d.ts.map +1 -1
  2. package/dist/src/swarm/connection.js +14 -10
  3. package/dist/src/swarm/connection.js.map +1 -1
  4. package/dist/src/transport/memory-transport.d.ts +6 -13
  5. package/dist/src/transport/memory-transport.d.ts.map +1 -1
  6. package/dist/src/transport/memory-transport.js +41 -35
  7. package/dist/src/transport/memory-transport.js.map +1 -1
  8. package/dist/src/transport/memory-transport.test.js +14 -3
  9. package/dist/src/transport/memory-transport.test.js.map +1 -1
  10. package/dist/src/transport/transport.d.ts +1 -7
  11. package/dist/src/transport/transport.d.ts.map +1 -1
  12. package/dist/src/transport/webrtc-transport-proxy.d.ts +3 -9
  13. package/dist/src/transport/webrtc-transport-proxy.d.ts.map +1 -1
  14. package/dist/src/transport/webrtc-transport-proxy.js +12 -17
  15. package/dist/src/transport/webrtc-transport-proxy.js.map +1 -1
  16. package/dist/src/transport/webrtc-transport-proxy.test.js +15 -35
  17. package/dist/src/transport/webrtc-transport-proxy.test.js.map +1 -1
  18. package/dist/src/transport/webrtc-transport-service.d.ts +1 -4
  19. package/dist/src/transport/webrtc-transport-service.d.ts.map +1 -1
  20. package/dist/src/transport/webrtc-transport-service.js +32 -36
  21. package/dist/src/transport/webrtc-transport-service.js.map +1 -1
  22. package/dist/src/transport/webrtc-transport.d.ts +8 -13
  23. package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
  24. package/dist/src/transport/webrtc-transport.js +18 -44
  25. package/dist/src/transport/webrtc-transport.js.map +1 -1
  26. package/dist/src/transport/webrtc-transport.test.js +25 -14
  27. package/dist/src/transport/webrtc-transport.test.js.map +1 -1
  28. package/package.json +16 -16
  29. package/src/swarm/connection.ts +9 -5
  30. package/src/transport/memory-transport.test.ts +14 -15
  31. package/src/transport/memory-transport.ts +48 -49
  32. package/src/transport/transport.ts +1 -9
  33. package/src/transport/webrtc-transport-proxy.test.ts +17 -46
  34. package/src/transport/webrtc-transport-proxy.ts +13 -23
  35. package/src/transport/webrtc-transport-service.ts +34 -39
  36. package/src/transport/webrtc-transport.test.ts +17 -30
  37. 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
- private readonly _initiator: boolean,
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._initiator,
36
+ initiator: this.params.initiator,
47
37
  wrtc: SimplePeerConstructor.WEBRTC_SUPPORT ? undefined : wrtc ?? raise(new Error('wrtc not available')),
48
- config: this._webrtcConfig
38
+ config: this.params.webrtcConfig
49
39
  });
50
40
 
51
41
  this._peer.on('signal', async (data) => {
52
- try {
53
- await this._sendSignal({
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', { id: this._ownId, remoteId: this._remoteId });
67
- this._stream.pipe(this._peer!).pipe(this._stream);
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', { id: this._ownId, remoteId: this._remoteId });
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._stream.unpipe?.(this._peer)?.unpipe?.(this._stream);
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: (opts) =>
117
- new WebRTCTransport( // TODO(burdon): Refactor with to take opts in constructor.
118
- opts.initiator,
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
  });