@dxos/network-manager 0.6.12-main.5cc132e → 0.6.12-main.78ddbdf

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 (128) hide show
  1. package/dist/lib/browser/chunk-GW3YM55A.mjs +14 -0
  2. package/dist/lib/browser/chunk-GW3YM55A.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-NMDGRINN.mjs → chunk-YOKKEU6T.mjs} +1216 -1037
  4. package/dist/lib/browser/chunk-YOKKEU6T.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +10 -19
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/testing/index.mjs +18 -27
  8. package/dist/lib/browser/testing/index.mjs.map +3 -3
  9. package/dist/lib/browser/transport/tcp/index.mjs +39 -0
  10. package/dist/lib/browser/transport/tcp/index.mjs.map +7 -0
  11. package/dist/lib/node/{chunk-4K3JQNY3.cjs → chunk-7ZWQLO5T.cjs} +1229 -1177
  12. package/dist/lib/node/chunk-7ZWQLO5T.cjs.map +7 -0
  13. package/dist/lib/node/index.cjs +27 -37
  14. package/dist/lib/node/index.cjs.map +2 -2
  15. package/dist/lib/node/meta.json +1 -1
  16. package/dist/lib/node/testing/index.cjs +20 -29
  17. package/dist/lib/node/testing/index.cjs.map +3 -3
  18. package/dist/lib/node/transport/tcp/index.cjs +191 -0
  19. package/dist/lib/node/transport/tcp/index.cjs.map +7 -0
  20. package/dist/lib/node-esm/{chunk-X2RY5LSM.mjs → chunk-4VO725JT.mjs} +1249 -1185
  21. package/dist/lib/node-esm/chunk-4VO725JT.mjs.map +7 -0
  22. package/dist/lib/node-esm/index.mjs +10 -19
  23. package/dist/lib/node-esm/meta.json +1 -1
  24. package/dist/lib/node-esm/testing/index.mjs +16 -26
  25. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  26. package/dist/lib/node-esm/transport/tcp/index.mjs +159 -0
  27. package/dist/lib/node-esm/transport/tcp/index.mjs.map +7 -0
  28. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  29. package/dist/types/src/swarm/swarm.d.ts +1 -1
  30. package/dist/types/src/testing/test-builder.d.ts +2 -2
  31. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  32. package/dist/types/src/transport/index.d.ts +1 -5
  33. package/dist/types/src/transport/index.d.ts.map +1 -1
  34. package/dist/types/src/transport/memory-transport.d.ts +2 -2
  35. package/dist/types/src/transport/memory-transport.d.ts.map +1 -1
  36. package/dist/types/src/transport/tcp/index.d.ts +2 -0
  37. package/dist/types/src/transport/tcp/index.d.ts.map +1 -0
  38. package/dist/types/src/transport/{tcp-transport.browser.d.ts → tcp/tcp-transport.browser.d.ts} +3 -3
  39. package/dist/types/src/transport/tcp/tcp-transport.browser.d.ts.map +1 -0
  40. package/dist/types/src/transport/{tcp-transport.d.ts → tcp/tcp-transport.d.ts} +3 -3
  41. package/dist/types/src/transport/tcp/tcp-transport.d.ts.map +1 -0
  42. package/dist/types/src/transport/transport.d.ts +7 -6
  43. package/dist/types/src/transport/transport.d.ts.map +1 -1
  44. package/dist/types/src/transport/webrtc/index.d.ts +4 -0
  45. package/dist/types/src/transport/webrtc/index.d.ts.map +1 -0
  46. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts +14 -0
  47. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts.map +1 -0
  48. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts +68 -0
  49. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +1 -0
  50. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts +33 -0
  51. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts.map +1 -0
  52. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts +2 -0
  53. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts.map +1 -0
  54. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts +4 -0
  55. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts.map +1 -0
  56. package/dist/types/src/transport/{simplepeer-transport-proxy.d.ts → webrtc/rtc-transport-proxy.d.ts} +10 -12
  57. package/dist/types/src/transport/webrtc/rtc-transport-proxy.d.ts.map +1 -0
  58. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts +2 -0
  59. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts.map +1 -0
  60. package/dist/types/src/transport/{simplepeer-transport-service.d.ts → webrtc/rtc-transport-service.d.ts} +9 -7
  61. package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts.map +1 -0
  62. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts +4 -0
  63. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts.map +1 -0
  64. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts +2 -0
  65. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts.map +1 -0
  66. package/dist/types/src/transport/webrtc/test-utils.d.ts +5 -0
  67. package/dist/types/src/transport/webrtc/test-utils.d.ts.map +1 -0
  68. package/dist/types/src/transport/webrtc/utils.d.ts +3 -0
  69. package/dist/types/src/transport/webrtc/utils.d.ts.map +1 -0
  70. package/package.json +44 -20
  71. package/src/signal/swarm-messenger.node.test.ts +1 -1
  72. package/src/swarm/connection.test.ts +61 -37
  73. package/src/swarm/connection.ts +5 -5
  74. package/src/swarm/swarm.test.ts +2 -3
  75. package/src/swarm/swarm.ts +1 -1
  76. package/src/testing/test-builder.ts +12 -28
  77. package/src/transport/index.ts +1 -5
  78. package/src/transport/memory-transport.ts +2 -0
  79. package/src/transport/tcp/index.ts +5 -0
  80. package/src/transport/{tcp-transport.browser.ts → tcp/tcp-transport.browser.ts} +7 -3
  81. package/src/transport/{tcp-transport.ts → tcp/tcp-transport.ts} +3 -1
  82. package/src/transport/transport.ts +8 -7
  83. package/src/transport/webrtc/index.ts +7 -0
  84. package/src/transport/webrtc/rtc-connection-factory.ts +82 -0
  85. package/src/transport/webrtc/rtc-peer-connection.ts +472 -0
  86. package/src/transport/webrtc/rtc-transport-channel.test.ts +176 -0
  87. package/src/transport/webrtc/rtc-transport-channel.ts +195 -0
  88. package/src/transport/webrtc/rtc-transport-factory.ts +28 -0
  89. package/src/transport/webrtc/rtc-transport-proxy.test.ts +413 -0
  90. package/src/transport/webrtc/rtc-transport-proxy.ts +264 -0
  91. package/src/transport/webrtc/rtc-transport-service.ts +192 -0
  92. package/src/transport/webrtc/rtc-transport-stats.ts +67 -0
  93. package/src/transport/webrtc/rtc-transport.test.ts +198 -0
  94. package/src/transport/webrtc/test-utils.ts +22 -0
  95. package/src/transport/webrtc/utils.ts +36 -0
  96. package/dist/lib/browser/chunk-NMDGRINN.mjs.map +0 -7
  97. package/dist/lib/node/chunk-4K3JQNY3.cjs.map +0 -7
  98. package/dist/lib/node-esm/chunk-X2RY5LSM.mjs.map +0 -7
  99. package/dist/types/src/transport/libdatachannel-transport.d.ts +0 -42
  100. package/dist/types/src/transport/libdatachannel-transport.d.ts.map +0 -1
  101. package/dist/types/src/transport/libdatachannel-transport.node.test.d.ts +0 -2
  102. package/dist/types/src/transport/libdatachannel-transport.node.test.d.ts.map +0 -1
  103. package/dist/types/src/transport/memory-transport.test.d.ts +0 -2
  104. package/dist/types/src/transport/memory-transport.test.d.ts.map +0 -1
  105. package/dist/types/src/transport/simplepeer-simple-peer.node.test.d.ts +0 -2
  106. package/dist/types/src/transport/simplepeer-simple-peer.node.test.d.ts.map +0 -1
  107. package/dist/types/src/transport/simplepeer-transport-proxy.d.ts.map +0 -1
  108. package/dist/types/src/transport/simplepeer-transport-proxy.node.test.d.ts +0 -2
  109. package/dist/types/src/transport/simplepeer-transport-proxy.node.test.d.ts.map +0 -1
  110. package/dist/types/src/transport/simplepeer-transport-service.d.ts.map +0 -1
  111. package/dist/types/src/transport/simplepeer-transport.d.ts +0 -36
  112. package/dist/types/src/transport/simplepeer-transport.d.ts.map +0 -1
  113. package/dist/types/src/transport/simplepeer-transport.test.d.ts +0 -2
  114. package/dist/types/src/transport/simplepeer-transport.test.d.ts.map +0 -1
  115. package/dist/types/src/transport/tcp-transport.browser.d.ts.map +0 -1
  116. package/dist/types/src/transport/tcp-transport.d.ts.map +0 -1
  117. package/dist/types/src/transport/webrtc.d.ts +0 -6
  118. package/dist/types/src/transport/webrtc.d.ts.map +0 -1
  119. package/src/transport/libdatachannel-transport.node.test.ts +0 -91
  120. package/src/transport/libdatachannel-transport.ts +0 -372
  121. package/src/transport/memory-transport.test.ts +0 -75
  122. package/src/transport/simplepeer-simple-peer.node.test.ts +0 -22
  123. package/src/transport/simplepeer-transport-proxy.node.test.ts +0 -180
  124. package/src/transport/simplepeer-transport-proxy.ts +0 -246
  125. package/src/transport/simplepeer-transport-service.ts +0 -160
  126. package/src/transport/simplepeer-transport.test.ts +0 -57
  127. package/src/transport/simplepeer-transport.ts +0 -250
  128. package/src/transport/webrtc.ts +0 -15
@@ -1,250 +0,0 @@
1
- /* eslint-disable no-fallthrough */
2
- //
3
- // Copyright 2020 DXOS.org
4
- //
5
-
6
- import SimplePeerConstructor, { type Instance as SimplePeer } from 'simple-peer';
7
-
8
- import { Event, synchronized } from '@dxos/async';
9
- import { ErrorStream, raise } from '@dxos/debug';
10
- import { invariant } from '@dxos/invariant';
11
- import { PublicKey } from '@dxos/keys';
12
- import { log } from '@dxos/log';
13
- import { ConnectionResetError, ConnectivityError, ProtocolError, UnknownProtocolError, trace } from '@dxos/protocols';
14
- import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
15
-
16
- import { type Transport, type TransportFactory, type TransportOptions, type TransportStats } from './transport';
17
- import { wrtc } from './webrtc';
18
- import { type IceProvider } from '../signal';
19
-
20
- export type SimplePeerTransportParams = TransportOptions & {
21
- webrtcConfig?: RTCConfiguration;
22
- iceProvider?: IceProvider;
23
- };
24
-
25
- export const createSimplePeerTransportFactory = (
26
- webrtcConfig?: RTCConfiguration,
27
- iceProvider?: IceProvider,
28
- ): TransportFactory => ({
29
- createTransport: (options) =>
30
- new SimplePeerTransport({
31
- ...options,
32
- webrtcConfig,
33
- iceProvider,
34
- }),
35
- });
36
-
37
- /**
38
- * Implements Transport for WebRTC. Uses simple-peer under the hood.
39
- */
40
- export class SimplePeerTransport implements Transport {
41
- private _peer?: SimplePeer = undefined;
42
- private _closed = false;
43
- private _piped = false;
44
-
45
- readonly closed = new Event();
46
- readonly connected = new Event();
47
- readonly errors = new ErrorStream();
48
-
49
- private readonly _instanceId = PublicKey.random().toHex();
50
-
51
- get isOpen() {
52
- // TODO(burdon): Open state?
53
- return this._piped && !this._closed;
54
- }
55
-
56
- /**
57
- * @params opts.config formatted as per https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection
58
- */
59
- constructor(private readonly _params: SimplePeerTransportParams) {}
60
-
61
- async getStats(): Promise<TransportStats> {
62
- const stats = await this._getStats();
63
- if (!stats) {
64
- return {
65
- bytesSent: 0,
66
- bytesReceived: 0,
67
- packetsSent: 0,
68
- packetsReceived: 0,
69
- rawStats: {},
70
- };
71
- }
72
-
73
- // TODO(nf): transport or candidatePair?
74
- return {
75
- bytesSent: stats.transport.bytesSent,
76
- bytesReceived: stats.transport.bytesReceived,
77
- packetsSent: stats.transport.packetsSent,
78
- packetsReceived: stats.transport.packetsReceived,
79
- rawStats: stats.raw,
80
- };
81
- }
82
-
83
- async _getStats(): Promise<any> {
84
- if (typeof (this._peer as any)?._pc?.getStats !== 'function') {
85
- return null;
86
- }
87
- return await (this._peer as any)._pc.getStats().then((stats: any) => {
88
- const statsEntries = Array.from(stats.entries() as any[]);
89
- const transport = statsEntries.filter((s: any) => s[1].type === 'transport')[0][1];
90
- const candidatePair = statsEntries.filter((s: any) => s[0] === transport.selectedCandidatePairId);
91
- let selectedCandidatePair: any;
92
- let remoteCandidate: any;
93
- if (candidatePair.length > 0) {
94
- selectedCandidatePair = candidatePair[0][1];
95
- remoteCandidate = statsEntries.filter((s: any) => s[0] === selectedCandidatePair.remoteCandidateId)[0][1];
96
- }
97
- return {
98
- datachannel: statsEntries.filter((s: any) => s[1].type === 'data-channel')[0][1],
99
- transport,
100
- selectedCandidatePair,
101
- remoteCandidate,
102
- raw: Object.fromEntries(stats.entries()),
103
- };
104
- });
105
- }
106
-
107
- async getDetails(): Promise<string> {
108
- const stats = await this._getStats();
109
- const rc = stats?.remoteCandidate;
110
- if (!rc) {
111
- return 'unavailable';
112
- }
113
-
114
- if (rc.candidateType === 'relay') {
115
- return `${rc.ip}:${rc.port}/${rc.protocol} relay for ${rc.relatedAddress}:${rc.relatedPort}`;
116
- }
117
- return `${rc.ip}:${rc.port}/${rc.protocol} ${rc.candidateType}`;
118
- }
119
-
120
- @synchronized
121
- async open() {
122
- log.trace('dxos.mesh.webrtc-transport.open', trace.begin({ id: this._instanceId }));
123
- log('created connection', { params: this._params });
124
-
125
- const providedIceServers = await this._params.iceProvider?.getIceServers();
126
- if (!this._params.webrtcConfig) {
127
- this._params.webrtcConfig = {};
128
- }
129
- this._params.webrtcConfig.iceServers = [
130
- ...(this._params.webrtcConfig.iceServers ?? []),
131
- ...(providedIceServers ?? []),
132
- ];
133
-
134
- this._peer = new SimplePeerConstructor({
135
- channelName: 'dxos.mesh.transport',
136
- initiator: this._params.initiator,
137
- wrtc: SimplePeerConstructor.WEBRTC_SUPPORT ? undefined : wrtc ?? raise(new Error('wrtc not available')),
138
- config: this._params.webrtcConfig,
139
- });
140
-
141
- this._peer.on('signal', async (data) => {
142
- log('signal', data);
143
- await this._params.sendSignal({ payload: { data } });
144
- });
145
-
146
- this._peer.on('connect', () => {
147
- log('connected');
148
- this._params.stream.pipe(this._peer!).pipe(this._params.stream);
149
- this._piped = true;
150
- this.connected.emit();
151
- });
152
-
153
- this._peer.on('close', async () => {
154
- log('closed');
155
- await this.close();
156
- });
157
-
158
- this._peer.on('error', async (err) => {
159
- // https://developer.mozilla.org/en-US/docs/Web/API/RTCError
160
- if (typeof RTCError !== 'undefined' && err instanceof RTCError) {
161
- // Sent when connection is unexpectedly severed
162
- if (err.errorDetail === 'sctp-failure') {
163
- this.errors.raise(new ConnectionResetError('sctp-failure from RTCError', err));
164
- } else {
165
- log.info('unknown RTCError', { err });
166
- this.errors.raise(new UnknownProtocolError('unknown RTCError', err));
167
- }
168
- // catch more generic simple-peer errors: https://github.com/feross/simple-peer/blob/master/README.md#error-codes
169
- } else if ('code' in err) {
170
- log.info('simple-peer error', err);
171
- switch (err.code) {
172
- case 'ERR_WEBRTC_SUPPORT':
173
- this.errors.raise(new ProtocolError('WebRTC not supported', err));
174
- break;
175
- case 'ERR_SIGNALING':
176
- this.errors.raise(new ConnectivityError('signaling failure', err));
177
- break;
178
- case 'ERR_ICE_CONNECTION_FAILURE':
179
- case 'ERR_DATA_CHANNEL':
180
- case 'ERR_CONNECTION_FAILURE':
181
- this.errors.raise(new ConnectivityError('unknown communication failure', err));
182
- break;
183
- // errors due to library issues or improper API usage
184
- case 'ERR_CREATE_OFFER':
185
- case 'ERR_CREATE_ANSWER':
186
- case 'ERR_SET_LOCAL_DESCRIPTION':
187
- case 'ERR_SET_REMOTE_DESCRIPTION':
188
- case 'ERR_ADD_ICE_CANDIDATE':
189
- this.errors.raise(new UnknownProtocolError('unknown simple-peer library failure', err));
190
- break;
191
- default:
192
- this.errors.raise(new Error('unknown simple-peer error'));
193
- break;
194
- }
195
- } else {
196
- log.info('unknown peer connection error', err);
197
- this.errors.raise(err);
198
- }
199
-
200
- // Try to gather additional information about the connection.
201
- try {
202
- if (typeof (this._peer as any)?._pc?.getStats === 'function') {
203
- (this._peer as any)._pc.getStats().then((stats: any) => {
204
- log.info('report after webrtc error', {
205
- config: this._params.webrtcConfig,
206
- stats: Object.fromEntries((stats as any).entries()),
207
- });
208
- });
209
- }
210
- } catch (err) {
211
- log.catch(err);
212
- }
213
-
214
- await this.close();
215
- });
216
-
217
- log.trace('dxos.mesh.webrtc-transport.open', trace.end({ id: this._instanceId }));
218
- }
219
-
220
- @synchronized
221
- async close() {
222
- log('closing...');
223
- if (this._closed) {
224
- return;
225
- }
226
- this._disconnectStreams();
227
- this._peer!.destroy();
228
- this._closed = true;
229
- this.closed.emit();
230
- log('closed');
231
- }
232
-
233
- @synchronized
234
- async onSignal(signal: Signal) {
235
- if (this._closed) {
236
- return; // Ignore signals after close.
237
- }
238
-
239
- invariant(signal.payload.data, 'Signal message must contain signal data.');
240
- invariant(this._peer, 'Peer must be initialized before receiving signals.');
241
- this._peer.signal(signal.payload.data);
242
- }
243
-
244
- private _disconnectStreams() {
245
- // TODO(rzadp): Find a way of unpiping this?
246
- if (this._piped) {
247
- this._params.stream.unpipe?.(this._peer)?.unpipe?.(this._params.stream);
248
- }
249
- }
250
- }
@@ -1,15 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- /**
6
- * Will be null if WebRTC is not available in this environment.
7
- */
8
- let wrtc: any = null;
9
-
10
- // Try to load WebRTC if available. This will fail in the shared-worker context.
11
- try {
12
- wrtc = require('@koush/wrtc');
13
- } catch {}
14
-
15
- export { wrtc };