@dxos/network-manager 0.1.20 → 0.1.21
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/lib/browser/index.mjs +279 -116
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +288 -116
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +274 -107
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +283 -107
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/network-manager.d.ts +6 -0
- package/dist/types/src/network-manager.d.ts.map +1 -1
- package/dist/types/src/swarm/peer.d.ts.map +1 -1
- package/dist/types/src/swarm/swarm.d.ts +4 -2
- package/dist/types/src/swarm/swarm.d.ts.map +1 -1
- package/dist/types/src/testing/test-builder.d.ts +2 -0
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/tests/basic-test-suite.d.ts.map +1 -1
- package/dist/types/src/transport/webrtc-transport-proxy.d.ts +2 -1
- package/dist/types/src/transport/webrtc-transport-proxy.d.ts.map +1 -1
- package/dist/types/src/transport/webrtc-transport.d.ts +1 -0
- package/dist/types/src/transport/webrtc-transport.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/network-manager.ts +44 -3
- package/src/signal/integration.test.ts +2 -0
- package/src/signal/message-router.test.ts +1 -1
- package/src/swarm/peer.ts +2 -1
- package/src/swarm/swarm.test.ts +1 -1
- package/src/swarm/swarm.ts +86 -62
- package/src/testing/test-builder.ts +9 -0
- package/src/tests/basic-test-suite.ts +31 -4
- package/src/tests/webrtc-transport.test.ts +3 -0
- package/src/transport/webrtc-transport-proxy.test.ts +2 -1
- package/src/transport/webrtc-transport-proxy.ts +9 -3
- package/src/transport/webrtc-transport.ts +6 -1
|
@@ -16,7 +16,8 @@ import { afterAll, afterTest, beforeAll, describe, test } from '@dxos/test';
|
|
|
16
16
|
import { WebRTCTransportProxy } from './webrtc-transport-proxy';
|
|
17
17
|
import { WebRTCTransportService } from './webrtc-transport-service';
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
// TODO(burdon): Flaky.
|
|
20
|
+
describe.skip('WebRTCTransportProxy', () => {
|
|
20
21
|
const setupProxy = async ({
|
|
21
22
|
initiator = true,
|
|
22
23
|
stream = new TestStream(),
|
|
@@ -6,6 +6,7 @@ import assert from 'node:assert';
|
|
|
6
6
|
|
|
7
7
|
import { Event } from '@dxos/async';
|
|
8
8
|
import { Stream } from '@dxos/codec-protobuf';
|
|
9
|
+
import { Context } from '@dxos/context';
|
|
9
10
|
import { ErrorStream } from '@dxos/debug';
|
|
10
11
|
import { PublicKey } from '@dxos/keys';
|
|
11
12
|
import { log } from '@dxos/log';
|
|
@@ -22,6 +23,9 @@ export type WebRTCTransportProxyParams = {
|
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
export class WebRTCTransportProxy implements Transport {
|
|
26
|
+
private readonly _proxyId = PublicKey.random();
|
|
27
|
+
private readonly _ctx = new Context();
|
|
28
|
+
|
|
25
29
|
readonly closed = new Event();
|
|
26
30
|
private _closed = false;
|
|
27
31
|
readonly connected = new Event();
|
|
@@ -29,7 +33,6 @@ export class WebRTCTransportProxy implements Transport {
|
|
|
29
33
|
readonly errors = new ErrorStream();
|
|
30
34
|
|
|
31
35
|
private _serviceStream!: Stream<BridgeEvent>;
|
|
32
|
-
private readonly _proxyId = PublicKey.random();
|
|
33
36
|
|
|
34
37
|
// prettier-ignore
|
|
35
38
|
constructor(
|
|
@@ -53,7 +56,7 @@ export class WebRTCTransportProxy implements Transport {
|
|
|
53
56
|
}
|
|
54
57
|
});
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
const dataListener = async (data: Uint8Array) => {
|
|
57
60
|
try {
|
|
58
61
|
await this._params.bridgeService.sendData({
|
|
59
62
|
proxyId: this._proxyId,
|
|
@@ -62,7 +65,9 @@ export class WebRTCTransportProxy implements Transport {
|
|
|
62
65
|
} catch (err: any) {
|
|
63
66
|
log.catch(err);
|
|
64
67
|
}
|
|
65
|
-
}
|
|
68
|
+
};
|
|
69
|
+
this._params.stream.on('data', dataListener);
|
|
70
|
+
this._ctx.onDispose(() => { this._params.stream.off('data', dataListener); });
|
|
66
71
|
},
|
|
67
72
|
(error) => log.catch(error)
|
|
68
73
|
);
|
|
@@ -105,6 +110,7 @@ export class WebRTCTransportProxy implements Transport {
|
|
|
105
110
|
|
|
106
111
|
// TODO(burdon): Move open from constructor.
|
|
107
112
|
async destroy(): Promise<void> {
|
|
113
|
+
await this._ctx.dispose();
|
|
108
114
|
if (this._closed) {
|
|
109
115
|
return;
|
|
110
116
|
}
|
|
@@ -25,6 +25,7 @@ export type WebRTCTransportParams = {
|
|
|
25
25
|
*/
|
|
26
26
|
export class WebRTCTransport implements Transport {
|
|
27
27
|
private readonly _peer: SimplePeer;
|
|
28
|
+
private _closed = false;
|
|
28
29
|
|
|
29
30
|
readonly closed = new Event();
|
|
30
31
|
readonly connected = new Event();
|
|
@@ -63,6 +64,7 @@ export class WebRTCTransport implements Transport {
|
|
|
63
64
|
|
|
64
65
|
async destroy() {
|
|
65
66
|
log('closing...');
|
|
67
|
+
this._closed = true;
|
|
66
68
|
await this._disconnectStreams();
|
|
67
69
|
this._peer!.destroy();
|
|
68
70
|
this.closed.emit();
|
|
@@ -70,7 +72,10 @@ export class WebRTCTransport implements Transport {
|
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
signal(signal: Signal) {
|
|
73
|
-
|
|
75
|
+
if (this._closed) {
|
|
76
|
+
return; // Ignore signals after close.
|
|
77
|
+
}
|
|
78
|
+
|
|
74
79
|
assert(signal.payload.data, 'Signal message must contain signal data.');
|
|
75
80
|
this._peer.signal(signal.payload.data);
|
|
76
81
|
}
|