@dxos/network-manager 0.4.10-main.fd4f2a3 → 0.4.10-main.fe71b4c
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/{chunk-OIR45T43.mjs → chunk-OSMVZUEK.mjs} +464 -425
- package/dist/lib/browser/chunk-OSMVZUEK.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-HUPX2JGP.cjs → chunk-M4CGCR2I.cjs} +480 -440
- package/dist/lib/node/chunk-M4CGCR2I.cjs.map +7 -0
- package/dist/lib/node/index.cjs +27 -27
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +18 -18
- package/dist/types/src/swarm/connection.d.ts.map +1 -1
- package/dist/types/src/swarm/peer.d.ts.map +1 -1
- package/dist/types/src/transport/libdatachannel-transport.d.ts +20 -19
- package/dist/types/src/transport/libdatachannel-transport.d.ts.map +1 -1
- package/dist/types/src/transport/memory-transport.d.ts +17 -10
- package/dist/types/src/transport/memory-transport.d.ts.map +1 -1
- package/dist/types/src/transport/simplepeer-transport-proxy.d.ts +7 -9
- package/dist/types/src/transport/simplepeer-transport-proxy.d.ts.map +1 -1
- package/dist/types/src/transport/simplepeer-transport-service.d.ts.map +1 -1
- package/dist/types/src/transport/simplepeer-transport.d.ts +9 -11
- package/dist/types/src/transport/simplepeer-transport.d.ts.map +1 -1
- package/dist/types/src/transport/tcp-transport.browser.d.ts +7 -2
- package/dist/types/src/transport/tcp-transport.browser.d.ts.map +1 -1
- package/dist/types/src/transport/tcp-transport.d.ts +6 -4
- package/dist/types/src/transport/tcp-transport.d.ts.map +1 -1
- package/dist/types/src/transport/transport.d.ts +18 -12
- package/dist/types/src/transport/transport.d.ts.map +1 -1
- package/package.json +17 -17
- package/src/swarm/connection.ts +7 -5
- package/src/swarm/peer.ts +0 -1
- package/src/transport/libdatachannel-transport.test.ts +14 -9
- package/src/transport/libdatachannel-transport.ts +226 -204
- package/src/transport/memory-transport.test.ts +10 -7
- package/src/transport/memory-transport.ts +49 -42
- package/src/transport/simplepeer-transport-proxy-test.ts +13 -8
- package/src/transport/simplepeer-transport-proxy.ts +48 -49
- package/src/transport/simplepeer-transport-service.ts +5 -2
- package/src/transport/simplepeer-transport.test.ts +9 -5
- package/src/transport/simplepeer-transport.ts +25 -25
- package/src/transport/tcp-transport.browser.ts +10 -5
- package/src/transport/tcp-transport.ts +31 -22
- package/src/transport/transport.ts +25 -14
- package/dist/lib/browser/chunk-OIR45T43.mjs.map +0 -7
- package/dist/lib/node/chunk-HUPX2JGP.cjs.map +0 -7
|
@@ -12,7 +12,7 @@ import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
|
12
12
|
import { type Transport, type TransportFactory, type TransportOptions, type TransportStats } from './transport';
|
|
13
13
|
|
|
14
14
|
export const TcpTransportFactory: TransportFactory = {
|
|
15
|
-
createTransport: (
|
|
15
|
+
createTransport: (options) => new TcpTransport(options),
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -22,23 +22,28 @@ export class TcpTransport implements Transport {
|
|
|
22
22
|
private _server?: Server = undefined;
|
|
23
23
|
private _socket?: Socket = undefined;
|
|
24
24
|
|
|
25
|
+
private _connected = false;
|
|
26
|
+
private _closed = false;
|
|
27
|
+
|
|
25
28
|
public readonly closed = new Event<void>();
|
|
26
29
|
public readonly connected = new Event<void>();
|
|
27
30
|
public readonly errors = new ErrorStream();
|
|
28
31
|
|
|
29
|
-
private
|
|
32
|
+
constructor(private readonly options: TransportOptions) {}
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
get isOpen() {
|
|
35
|
+
return this._connected && !this._closed;
|
|
36
|
+
}
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
log('
|
|
38
|
+
async open() {
|
|
39
|
+
log('opening');
|
|
35
40
|
|
|
36
41
|
// Initiator will send a signal, the receiver will receive the unique ID and connect the streams.
|
|
37
42
|
if (this.options.initiator) {
|
|
38
|
-
//
|
|
43
|
+
// TODO(burdon): Why timeout?
|
|
39
44
|
setTimeout(async () => {
|
|
40
45
|
const { Server } = await import('node:net');
|
|
41
|
-
this._server = new Server(socket => {
|
|
46
|
+
this._server = new Server((socket) => {
|
|
42
47
|
log('new connection');
|
|
43
48
|
if (this._connected) {
|
|
44
49
|
socket.destroy();
|
|
@@ -49,17 +54,18 @@ export class TcpTransport implements Transport {
|
|
|
49
54
|
this._server.on('listening', () => {
|
|
50
55
|
const { port } = this._server!.address() as AddressInfo;
|
|
51
56
|
log('listening', { port });
|
|
52
|
-
void this.options
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
void this.options
|
|
58
|
+
.sendSignal({
|
|
59
|
+
payload: { port },
|
|
60
|
+
})
|
|
61
|
+
.catch((err) => {
|
|
62
|
+
if (!this._closed) {
|
|
63
|
+
this.errors.raise(err);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
60
66
|
});
|
|
61
67
|
|
|
62
|
-
this._server.on('error', err => {
|
|
68
|
+
this._server.on('error', (err) => {
|
|
63
69
|
this.errors.raise(err);
|
|
64
70
|
});
|
|
65
71
|
|
|
@@ -68,15 +74,14 @@ export class TcpTransport implements Transport {
|
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
76
|
|
|
71
|
-
async
|
|
77
|
+
async close() {
|
|
72
78
|
log('closing');
|
|
73
79
|
this._socket?.destroy();
|
|
74
80
|
this._server?.close();
|
|
75
|
-
|
|
76
|
-
this._destroyed = true;
|
|
81
|
+
this._closed = true;
|
|
77
82
|
}
|
|
78
83
|
|
|
79
|
-
|
|
84
|
+
async onSignal({ payload }: Signal) {
|
|
80
85
|
log('received signal', { payload });
|
|
81
86
|
if (this.options.initiator || this._connected) {
|
|
82
87
|
return;
|
|
@@ -92,6 +97,7 @@ export class TcpTransport implements Transport {
|
|
|
92
97
|
const { port, address } = this._server?.address() as AddressInfo;
|
|
93
98
|
return `LISTEN ${address}:${port}`;
|
|
94
99
|
}
|
|
100
|
+
|
|
95
101
|
const { port, address } = this._socket?.address() as AddressInfo;
|
|
96
102
|
return `ACCEPT ${address}:${port}`;
|
|
97
103
|
}
|
|
@@ -108,18 +114,21 @@ export class TcpTransport implements Transport {
|
|
|
108
114
|
private _handleSocket(socket: Socket) {
|
|
109
115
|
log('handling socket', { remotePort: socket.remotePort, localPort: socket.localPort });
|
|
110
116
|
this._socket = socket;
|
|
111
|
-
this.connected.emit();
|
|
112
|
-
this.options.stream.pipe(this._socket!).pipe(this.options.stream);
|
|
113
117
|
|
|
114
118
|
this._socket.on('connect', () => {
|
|
115
119
|
log('connected to', { port: this._socket?.remotePort });
|
|
116
120
|
this._connected = true;
|
|
117
121
|
});
|
|
122
|
+
|
|
118
123
|
this._socket.on('error', (err) => {
|
|
119
124
|
this.errors.raise(err);
|
|
120
125
|
});
|
|
126
|
+
|
|
121
127
|
this._socket.on('close', () => {
|
|
122
128
|
this.closed.emit();
|
|
123
129
|
});
|
|
130
|
+
|
|
131
|
+
this.connected.emit();
|
|
132
|
+
this.options.stream.pipe(this._socket!).pipe(this.options.stream);
|
|
124
133
|
}
|
|
125
134
|
}
|
|
@@ -9,32 +9,46 @@ import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
|
9
9
|
|
|
10
10
|
export enum TransportKind {
|
|
11
11
|
SIMPLE_PEER = 'SIMPLE_PEER',
|
|
12
|
-
LIBDATACHANNEL = 'LIBDATACHANNEL',
|
|
13
12
|
SIMPLE_PEER_PROXY = 'SIMPLE_PEER_PROXY',
|
|
13
|
+
LIBDATACHANNEL = 'LIBDATACHANNEL',
|
|
14
14
|
MEMORY = 'MEMORY',
|
|
15
15
|
TCP = 'TCP',
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Abstraction over a P2P connection transport.
|
|
19
|
+
* Abstraction over a P2P connection transport.
|
|
20
|
+
* Currently, WebRTC or in-memory.
|
|
20
21
|
*/
|
|
22
|
+
// TODO(burdon): Create abstract base class for common logging and error handling?
|
|
21
23
|
export interface Transport {
|
|
22
24
|
closed: Event;
|
|
23
25
|
connected: Event;
|
|
24
26
|
errors: ErrorStream;
|
|
25
27
|
|
|
28
|
+
open(): Promise<void>;
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
|
|
31
|
+
get isOpen(): boolean;
|
|
32
|
+
|
|
26
33
|
/**
|
|
27
|
-
*
|
|
34
|
+
* Handle message from signaling.
|
|
35
|
+
*/
|
|
36
|
+
onSignal(signal: Signal): Promise<void>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Transport-specific stats.
|
|
28
40
|
*/
|
|
29
41
|
getStats(): Promise<TransportStats>;
|
|
42
|
+
|
|
30
43
|
/**
|
|
31
|
-
* Transport-
|
|
44
|
+
* Transport-specific connection details.
|
|
32
45
|
*/
|
|
33
46
|
getDetails(): Promise<string>;
|
|
34
|
-
destroy(): Promise<void>;
|
|
35
|
-
signal(signal: Signal): void;
|
|
36
47
|
}
|
|
37
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Common options for all transports.
|
|
51
|
+
*/
|
|
38
52
|
export type TransportOptions = {
|
|
39
53
|
/**
|
|
40
54
|
* Did local node initiate this connection.
|
|
@@ -42,23 +56,20 @@ export type TransportOptions = {
|
|
|
42
56
|
initiator: boolean;
|
|
43
57
|
|
|
44
58
|
/**
|
|
45
|
-
* Wire protocol.
|
|
59
|
+
* Wire protocol for data stream.
|
|
46
60
|
*/
|
|
47
61
|
stream: NodeJS.ReadWriteStream;
|
|
48
62
|
|
|
49
63
|
/**
|
|
50
|
-
*
|
|
64
|
+
* Sends signal message to remote peer.
|
|
51
65
|
*/
|
|
52
|
-
sendSignal: (signal: Signal) => Promise<void>;
|
|
53
|
-
|
|
54
|
-
timeout?: number;
|
|
66
|
+
sendSignal: (signal: Signal) => Promise<void>;
|
|
55
67
|
|
|
56
68
|
sessionId?: PublicKey;
|
|
69
|
+
|
|
70
|
+
timeout?: number;
|
|
57
71
|
};
|
|
58
72
|
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
*/
|
|
62
73
|
export interface TransportFactory {
|
|
63
74
|
createTransport(options: TransportOptions): Transport;
|
|
64
75
|
}
|