@libp2p/tcp 10.0.5 → 10.0.6-24fa1d5af
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/index.min.js +1 -1
- package/dist/src/constants.js +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +8 -6
- package/dist/src/listener.js.map +1 -1
- package/dist/src/socket-to-conn.d.ts +1 -0
- package/dist/src/socket-to-conn.d.ts.map +1 -1
- package/dist/src/socket-to-conn.js +79 -74
- package/dist/src/socket-to-conn.js.map +1 -1
- package/dist/src/tcp.d.ts.map +1 -1
- package/dist/src/tcp.js +34 -19
- package/dist/src/tcp.js.map +1 -1
- package/package.json +7 -6
- package/src/constants.ts +1 -1
- package/src/index.ts +2 -1
- package/src/listener.ts +10 -7
- package/src/socket-to-conn.ts +89 -80
- package/src/tcp.ts +35 -21
- package/dist/typedoc-urls.json +0 -19
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvalidParametersError, TimeoutError } from '@libp2p/interface';
|
|
2
2
|
import { ipPortToMultiaddr as toMultiaddr } from '@libp2p/utils/ip-port-to-multiaddr';
|
|
3
|
+
import pDefer from 'p-defer';
|
|
4
|
+
import { raceEvent } from 'race-event';
|
|
3
5
|
import { duplex } from 'stream-to-it';
|
|
4
6
|
import { CLOSE_TIMEOUT, SOCKET_TIMEOUT } from './constants.js';
|
|
5
7
|
import { multiaddrToNetConfig } from './utils.js';
|
|
@@ -8,12 +10,15 @@ import { multiaddrToNetConfig } from './utils.js';
|
|
|
8
10
|
* https://github.com/libp2p/interface-transport#multiaddrconnection
|
|
9
11
|
*/
|
|
10
12
|
export const toMultiaddrConnection = (socket, options) => {
|
|
11
|
-
let closePromise
|
|
13
|
+
let closePromise;
|
|
12
14
|
const log = options.logger.forComponent('libp2p:tcp:socket');
|
|
15
|
+
const direction = options.direction;
|
|
13
16
|
const metrics = options.metrics;
|
|
14
17
|
const metricPrefix = options.metricPrefix ?? '';
|
|
15
18
|
const inactivityTimeout = options.socketInactivityTimeout ?? SOCKET_TIMEOUT;
|
|
16
19
|
const closeTimeout = options.socketCloseTimeout ?? CLOSE_TIMEOUT;
|
|
20
|
+
let timedout = false;
|
|
21
|
+
let errored = false;
|
|
17
22
|
// Check if we are connected on a unix path
|
|
18
23
|
if (options.listeningAddr?.getPath() != null) {
|
|
19
24
|
options.remoteAddr = options.listeningAddr;
|
|
@@ -21,6 +26,16 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
21
26
|
if (options.remoteAddr?.getPath() != null) {
|
|
22
27
|
options.localAddr = options.remoteAddr;
|
|
23
28
|
}
|
|
29
|
+
// handle socket errors
|
|
30
|
+
socket.on('error', err => {
|
|
31
|
+
errored = true;
|
|
32
|
+
if (!timedout) {
|
|
33
|
+
log.error('%s socket error - %e', direction, err);
|
|
34
|
+
metrics?.increment({ [`${metricPrefix}error`]: true });
|
|
35
|
+
}
|
|
36
|
+
socket.destroy();
|
|
37
|
+
maConn.timeline.close = Date.now();
|
|
38
|
+
});
|
|
24
39
|
let remoteAddr;
|
|
25
40
|
if (options.remoteAddr != null) {
|
|
26
41
|
remoteAddr = options.remoteAddr;
|
|
@@ -38,32 +53,32 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
38
53
|
const { sink, source } = duplex(socket);
|
|
39
54
|
// by default there is no timeout
|
|
40
55
|
// https://nodejs.org/dist/latest-v16.x/docs/api/net.html#socketsettimeouttimeout-callback
|
|
41
|
-
socket.setTimeout(inactivityTimeout
|
|
42
|
-
|
|
56
|
+
socket.setTimeout(inactivityTimeout);
|
|
57
|
+
socket.once('timeout', () => {
|
|
58
|
+
timedout = true;
|
|
59
|
+
log('%s %s socket read timeout', direction, lOptsStr);
|
|
43
60
|
metrics?.increment({ [`${metricPrefix}timeout`]: true });
|
|
44
|
-
// only destroy with an error if the remote has not sent the FIN message
|
|
45
|
-
let err;
|
|
46
|
-
if (socket.readable) {
|
|
47
|
-
err = new TimeoutError('Socket read timeout');
|
|
48
|
-
}
|
|
49
61
|
// if the socket times out due to inactivity we must manually close the connection
|
|
50
62
|
// https://nodejs.org/dist/latest-v16.x/docs/api/net.html#event-timeout
|
|
51
|
-
socket.destroy(
|
|
63
|
+
socket.destroy(new TimeoutError());
|
|
64
|
+
maConn.timeline.close = Date.now();
|
|
52
65
|
});
|
|
53
66
|
socket.once('close', () => {
|
|
54
|
-
|
|
55
|
-
|
|
67
|
+
// record metric for clean exit
|
|
68
|
+
if (!timedout && !errored) {
|
|
69
|
+
log('%s %s socket close', direction, lOptsStr);
|
|
70
|
+
metrics?.increment({ [`${metricPrefix}close`]: true });
|
|
71
|
+
}
|
|
56
72
|
// In instances where `close` was not explicitly called,
|
|
57
73
|
// such as an iterable stream ending, ensure we have set the close
|
|
58
74
|
// timeline
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
75
|
+
socket.destroy();
|
|
76
|
+
maConn.timeline.close = Date.now();
|
|
62
77
|
});
|
|
63
78
|
socket.once('end', () => {
|
|
64
79
|
// the remote sent a FIN packet which means no more data will be sent
|
|
65
80
|
// https://nodejs.org/dist/latest-v16.x/docs/api/net.html#event-end
|
|
66
|
-
log('%s socket end', lOptsStr);
|
|
81
|
+
log('%s %s socket end', direction, lOptsStr);
|
|
67
82
|
metrics?.increment({ [`${metricPrefix}end`]: true });
|
|
68
83
|
});
|
|
69
84
|
const maConn = {
|
|
@@ -86,7 +101,7 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
86
101
|
// If the source errored the socket will already have been destroyed by
|
|
87
102
|
// duplex(). If the socket errored it will already be
|
|
88
103
|
// destroyed. There's nothing to do here except log the error & return.
|
|
89
|
-
log.error('%s error in sink', lOptsStr, err);
|
|
104
|
+
log.error('%s %s error in sink - %e', direction, lOptsStr, err);
|
|
90
105
|
}
|
|
91
106
|
}
|
|
92
107
|
// we have finished writing, send the FIN message
|
|
@@ -97,82 +112,72 @@ export const toMultiaddrConnection = (socket, options) => {
|
|
|
97
112
|
remoteAddr,
|
|
98
113
|
timeline: { open: Date.now() },
|
|
99
114
|
async close(options = {}) {
|
|
115
|
+
if (socket.closed) {
|
|
116
|
+
log('the %s %s socket is already closed', direction, lOptsStr);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
100
119
|
if (socket.destroyed) {
|
|
101
|
-
log('
|
|
120
|
+
log('the %s %s socket is already destroyed', direction, lOptsStr);
|
|
102
121
|
return;
|
|
103
122
|
}
|
|
104
123
|
if (closePromise != null) {
|
|
105
|
-
|
|
106
|
-
return closePromise;
|
|
107
|
-
}
|
|
108
|
-
if (options.signal == null) {
|
|
109
|
-
const signal = AbortSignal.timeout(closeTimeout);
|
|
110
|
-
options = {
|
|
111
|
-
...options,
|
|
112
|
-
signal
|
|
113
|
-
};
|
|
124
|
+
return closePromise.promise;
|
|
114
125
|
}
|
|
115
|
-
const abortSignalListener = () => {
|
|
116
|
-
socket.destroy(new AbortError('Destroying socket after timeout'));
|
|
117
|
-
};
|
|
118
|
-
options.signal?.addEventListener('abort', abortSignalListener);
|
|
119
126
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
closePromise = pDefer();
|
|
128
|
+
// close writable end of socket
|
|
129
|
+
socket.end();
|
|
130
|
+
// convert EventEmitter to EventTarget
|
|
131
|
+
const eventTarget = socketToEventTarget(socket);
|
|
132
|
+
// don't wait forever to close
|
|
133
|
+
const signal = options.signal ?? AbortSignal.timeout(closeTimeout);
|
|
134
|
+
// wait for any unsent data to be sent
|
|
135
|
+
if (socket.writableLength > 0) {
|
|
136
|
+
log('%s %s draining socket', direction, lOptsStr);
|
|
137
|
+
await raceEvent(eventTarget, 'drain', signal, {
|
|
138
|
+
errorEvent: 'error'
|
|
126
139
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// if socket is destroyed, 'closed' event will be emitted later to resolve the promise
|
|
137
|
-
});
|
|
138
|
-
// shorten inactivity timeout
|
|
139
|
-
socket.setTimeout(closeTimeout);
|
|
140
|
-
// close writable end of the socket
|
|
141
|
-
socket.end();
|
|
142
|
-
if (socket.writableLength > 0) {
|
|
143
|
-
// there are outgoing bytes waiting to be sent
|
|
144
|
-
socket.once('drain', () => {
|
|
145
|
-
log('%s socket drained', lOptsStr);
|
|
146
|
-
// all bytes have been sent we can destroy the socket (maybe) before the timeout
|
|
147
|
-
socket.destroy();
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// nothing to send, destroy immediately, no need for the timeout
|
|
152
|
-
socket.destroy();
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
await closePromise;
|
|
140
|
+
log('%s %s socket drained', direction, lOptsStr);
|
|
141
|
+
}
|
|
142
|
+
await Promise.all([
|
|
143
|
+
raceEvent(eventTarget, 'close', signal, {
|
|
144
|
+
errorEvent: 'error'
|
|
145
|
+
}),
|
|
146
|
+
// all bytes have been sent we can destroy the socket
|
|
147
|
+
socket.destroy()
|
|
148
|
+
]);
|
|
156
149
|
}
|
|
157
150
|
catch (err) {
|
|
158
151
|
this.abort(err);
|
|
159
152
|
}
|
|
160
153
|
finally {
|
|
161
|
-
|
|
154
|
+
closePromise.resolve();
|
|
162
155
|
}
|
|
163
156
|
},
|
|
164
157
|
abort: (err) => {
|
|
165
|
-
log('%s socket abort due to error', lOptsStr, err);
|
|
158
|
+
log('%s %s socket abort due to error - %e', direction, lOptsStr, err);
|
|
166
159
|
// the abortSignalListener may already destroyed the socket with an error
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
160
|
+
socket.destroy();
|
|
161
|
+
// closing a socket is always asynchronous (must wait for "close" event)
|
|
162
|
+
// but the tests expect this to be a synchronous operation so we have to
|
|
163
|
+
// set the close time here. the tests should be refactored to reflect
|
|
164
|
+
// reality.
|
|
165
|
+
maConn.timeline.close = Date.now();
|
|
173
166
|
},
|
|
174
167
|
log
|
|
175
168
|
};
|
|
176
169
|
return maConn;
|
|
177
170
|
};
|
|
171
|
+
function socketToEventTarget(obj) {
|
|
172
|
+
const eventTarget = {
|
|
173
|
+
addEventListener: (type, cb) => {
|
|
174
|
+
obj.addListener(type, cb);
|
|
175
|
+
},
|
|
176
|
+
removeEventListener: (type, cb) => {
|
|
177
|
+
obj.removeListener(type, cb);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
// @ts-expect-error partial implementation
|
|
181
|
+
return eventTarget;
|
|
182
|
+
}
|
|
178
183
|
//# sourceMappingURL=socket-to-conn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-to-conn.js","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"socket-to-conn.js","sourceRoot":"","sources":["../../src/socket-to-conn.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../src/tcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;AAGH,OAAO,EAA4B,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAOlG,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,aAAa,EAAE,cAAc,EAAc,UAAU,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,KAAK,EAAU,UAAU,EAAE,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../src/tcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;AAGH,OAAO,EAA4B,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAOlG,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,aAAa,EAAE,cAAc,EAAc,UAAU,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,KAAK,EAAU,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAuB,MAAM,mBAAmB,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAA8C,MAAM,KAAK,CAAA;AAE7E,qBAAa,GAAI,YAAW,SAAS,CAAC,aAAa,CAAC;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,aAAa,EAAE,OAAO,GAAE,UAAe;IAmBhE,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAO;IAEjC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAgB;IAE7C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAEvC;IAEK,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAmClE,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA2ExE;;;;OAIG;IACH,cAAc,CAAE,OAAO,EAAE,wBAAwB,GAAG,QAAQ;IAc5D;;OAEG;IACH,YAAY,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAgBnD;;OAEG;IACH,UAAU,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;CAGlD"}
|
package/dist/src/tcp.js
CHANGED
|
@@ -45,7 +45,11 @@ export class TCP {
|
|
|
45
45
|
this.components = components;
|
|
46
46
|
if (components.metrics != null) {
|
|
47
47
|
this.metrics = {
|
|
48
|
-
|
|
48
|
+
events: components.metrics.registerCounterGroup('libp2p_tcp_dialer_events_total', {
|
|
49
|
+
label: 'event',
|
|
50
|
+
help: 'Total count of TCP dialer events by type'
|
|
51
|
+
}),
|
|
52
|
+
errors: components.metrics.registerCounterGroup('libp2p_tcp_dialer_errors_total', {
|
|
49
53
|
label: 'event',
|
|
50
54
|
help: 'Total count of TCP dialer events by type'
|
|
51
55
|
})
|
|
@@ -62,22 +66,28 @@ export class TCP {
|
|
|
62
66
|
options.noDelay = options.noDelay ?? true;
|
|
63
67
|
// options.signal destroys the socket before 'connect' event
|
|
64
68
|
const socket = await this._connect(ma, options);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
69
|
+
let maConn;
|
|
70
|
+
try {
|
|
71
|
+
maConn = toMultiaddrConnection(socket, {
|
|
72
|
+
remoteAddr: ma,
|
|
73
|
+
socketInactivityTimeout: this.opts.outboundSocketInactivityTimeout,
|
|
74
|
+
socketCloseTimeout: this.opts.socketCloseTimeout,
|
|
75
|
+
metrics: this.metrics?.events,
|
|
76
|
+
logger: this.components.logger,
|
|
77
|
+
direction: 'outbound'
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.metrics?.errors.increment({ outbound_to_connection: true });
|
|
82
|
+
socket.destroy(err);
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
76
85
|
try {
|
|
77
86
|
this.log('new outbound connection %s', maConn.remoteAddr);
|
|
78
87
|
return await options.upgrader.upgradeOutbound(maConn, options);
|
|
79
88
|
}
|
|
80
89
|
catch (err) {
|
|
90
|
+
this.metrics?.errors.increment({ outbound_upgrade: true });
|
|
81
91
|
this.log.error('error upgrading outbound connection', err);
|
|
82
92
|
maConn.abort(err);
|
|
83
93
|
throw err;
|
|
@@ -86,6 +96,7 @@ export class TCP {
|
|
|
86
96
|
async _connect(ma, options) {
|
|
87
97
|
options.signal?.throwIfAborted();
|
|
88
98
|
options.onProgress?.(new CustomProgressEvent('tcp:open-connection'));
|
|
99
|
+
let rawSocket;
|
|
89
100
|
return new Promise((resolve, reject) => {
|
|
90
101
|
const start = Date.now();
|
|
91
102
|
const cOpts = multiaddrToNetConfig(ma, {
|
|
@@ -93,29 +104,29 @@ export class TCP {
|
|
|
93
104
|
...options
|
|
94
105
|
});
|
|
95
106
|
this.log('dialing %a', ma);
|
|
96
|
-
|
|
107
|
+
rawSocket = net.connect(cOpts);
|
|
97
108
|
const onError = (err) => {
|
|
109
|
+
this.log.error('dial to %a errored - %e', ma, err);
|
|
98
110
|
const cOptsStr = cOpts.path ?? `${cOpts.host ?? ''}:${cOpts.port}`;
|
|
99
111
|
err.message = `connection error ${cOptsStr}: ${err.message}`;
|
|
100
|
-
this.metrics?.
|
|
112
|
+
this.metrics?.events.increment({ error: true });
|
|
101
113
|
done(err);
|
|
102
114
|
};
|
|
103
115
|
const onTimeout = () => {
|
|
104
116
|
this.log('connection timeout %a', ma);
|
|
105
|
-
this.metrics?.
|
|
106
|
-
const err = new TimeoutError(`
|
|
117
|
+
this.metrics?.events.increment({ timeout: true });
|
|
118
|
+
const err = new TimeoutError(`Connection timeout after ${Date.now() - start}ms`);
|
|
107
119
|
// Note: this will result in onError() being called
|
|
108
120
|
rawSocket.emit('error', err);
|
|
109
121
|
};
|
|
110
122
|
const onConnect = () => {
|
|
111
123
|
this.log('connection opened %a', ma);
|
|
112
|
-
this.metrics?.
|
|
124
|
+
this.metrics?.events.increment({ connect: true });
|
|
113
125
|
done();
|
|
114
126
|
};
|
|
115
127
|
const onAbort = () => {
|
|
116
128
|
this.log('connection aborted %a', ma);
|
|
117
|
-
this.metrics?.
|
|
118
|
-
rawSocket.destroy();
|
|
129
|
+
this.metrics?.events.increment({ abort: true });
|
|
119
130
|
done(new AbortError());
|
|
120
131
|
};
|
|
121
132
|
const done = (err) => {
|
|
@@ -137,6 +148,10 @@ export class TCP {
|
|
|
137
148
|
if (options.signal != null) {
|
|
138
149
|
options.signal.addEventListener('abort', onAbort);
|
|
139
150
|
}
|
|
151
|
+
})
|
|
152
|
+
.catch(err => {
|
|
153
|
+
rawSocket?.destroy();
|
|
154
|
+
throw err;
|
|
140
155
|
});
|
|
141
156
|
}
|
|
142
157
|
/**
|
package/dist/src/tcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/tcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAMjD,MAAM,OAAO,GAAG;IACG,IAAI,CAAY;IAChB,OAAO,CAAa;IACpB,UAAU,CAAe;IACzB,GAAG,CAAQ;IAE5B,YAAa,UAAyB,EAAE,UAAsB,EAAE;QAC9D,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG;gBACb,
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/tcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAMjD,MAAM,OAAO,GAAG;IACG,IAAI,CAAY;IAChB,OAAO,CAAa;IACpB,UAAU,CAAe;IACzB,GAAG,CAAQ;IAE5B,YAAa,UAAyB,EAAE,UAAsB,EAAE;QAC9D,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG;gBACb,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,gCAAgC,EAAE;oBAChF,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,0CAA0C;iBACjD,CAAC;gBACF,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,gCAAgC,EAAE;oBAChF,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,0CAA0C;iBACjD,CAAC;aACH,CAAA;QACH,CAAC;IACH,CAAC;IAEQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAAA;IAExB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,aAAa,CAAA;IAEpC,CAAC,mBAAmB,CAAC,GAAa;QACzC,mBAAmB;KACpB,CAAA;IAED,KAAK,CAAC,IAAI,CAAE,EAAa,EAAE,OAAuB;QAChD,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAA;QAC7C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAA;QAEzC,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAE/C,IAAI,MAA2B,CAAA;QAE/B,IAAI,CAAC;YACH,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE;gBACrC,UAAU,EAAE,EAAE;gBACd,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,+BAA+B;gBAClE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAChD,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM;gBAC7B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9B,SAAS,EAAE,UAAU;aACtB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAA;YAChE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACnB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;YACzD,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAA;YAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,EAAa,EAAE,OAAuB;QACpD,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAA;QAChC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAA;QAEpE,IAAI,SAAiB,CAAA;QAErB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,EAAE;gBACrC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC7B,GAAG,OAAO;aACX,CAAkD,CAAA;YAEnD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;YAC1B,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAE9B,MAAM,OAAO,GAAG,CAAC,GAAU,EAAQ,EAAE;gBACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;gBAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;gBAClE,GAAG,CAAC,OAAO,GAAG,oBAAoB,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAA;gBAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC/C,IAAI,CAAC,GAAG,CAAC,CAAA;YACX,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,GAAS,EAAE;gBAC3B,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;gBACrC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBAEjD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,4BAA4B,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAA;gBAChF,mDAAmD;gBACnD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YAC9B,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,GAAS,EAAE;gBAC3B,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjD,IAAI,EAAE,CAAA;YACR,CAAC,CAAA;YAED,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;gBACrC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC/C,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;YACxB,CAAC,CAAA;YAED,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;gBACjC,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC1C,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBAC9C,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBAE9C,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACtD,CAAC;gBAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,CAAC;oBAAC,OAAM;gBACrB,CAAC;gBAED,OAAO,CAAC,SAAS,CAAC,CAAA;YACpB,CAAC,CAAA;YAED,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAClC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAElC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACnD,CAAC;QACH,CAAC,CAAC;aACC,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,SAAS,EAAE,OAAO,EAAE,CAAA;YACpB,MAAM,GAAG,CAAA;QACX,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAE,OAAiC;QAC/C,OAAO,IAAI,WAAW,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YAC/B,GAAG,OAAO;YACV,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;YACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC1B,2BAA2B,EAAE,IAAI,CAAC,IAAI,CAAC,2BAA2B;YAClE,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,8BAA8B;YACjE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAChD,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;YAChC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAE,UAAuB;QACnC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAElE,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAC5B,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAE,UAAuB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/tcp",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.6-24fa1d5af",
|
|
4
4
|
"description": "A TCP transport for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/transport-tcp#readme",
|
|
@@ -60,21 +60,22 @@
|
|
|
60
60
|
"test:electron-main": "aegir test -t electron-main"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@libp2p/interface": "
|
|
64
|
-
"@libp2p/utils": "
|
|
63
|
+
"@libp2p/interface": "2.1.2-24fa1d5af",
|
|
64
|
+
"@libp2p/utils": "6.0.6-24fa1d5af",
|
|
65
65
|
"@multiformats/mafmt": "^12.1.6",
|
|
66
66
|
"@multiformats/multiaddr": "^12.2.3",
|
|
67
67
|
"@types/sinon": "^17.0.3",
|
|
68
|
+
"p-defer": "^4.0.1",
|
|
68
69
|
"progress-events": "^1.0.0",
|
|
70
|
+
"race-event": "^1.3.0",
|
|
69
71
|
"stream-to-it": "^1.0.1"
|
|
70
72
|
},
|
|
71
73
|
"devDependencies": {
|
|
72
|
-
"@libp2p/interface-compliance-tests": "
|
|
73
|
-
"@libp2p/logger": "
|
|
74
|
+
"@libp2p/interface-compliance-tests": "6.1.4-24fa1d5af",
|
|
75
|
+
"@libp2p/logger": "5.1.0-24fa1d5af",
|
|
74
76
|
"aegir": "^44.0.1",
|
|
75
77
|
"it-all": "^3.0.6",
|
|
76
78
|
"it-pipe": "^3.0.1",
|
|
77
|
-
"p-defer": "^4.0.1",
|
|
78
79
|
"sinon": "^18.0.0",
|
|
79
80
|
"uint8arrays": "^5.1.0",
|
|
80
81
|
"wherearewe": "^2.0.1"
|
package/src/constants.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -123,7 +123,8 @@ export interface TCPComponents {
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
export interface TCPMetrics {
|
|
126
|
-
|
|
126
|
+
events: CounterGroup<'error' | 'timeout' | 'connect' | 'abort'>
|
|
127
|
+
errors: CounterGroup<'outbound_to_connection' | 'outbound_upgrade'>
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
export function tcp (init: TCPOptions = {}): (components: TCPComponents) => Transport {
|
package/src/listener.ts
CHANGED
|
@@ -163,17 +163,18 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
163
163
|
this.safeDispatchEvent('close')
|
|
164
164
|
}
|
|
165
165
|
})
|
|
166
|
+
.on('drop', () => {
|
|
167
|
+
this.metrics?.events.increment({ [`${this.addr} drop`]: true })
|
|
168
|
+
})
|
|
166
169
|
}
|
|
167
170
|
|
|
168
171
|
private onSocket (socket: net.Socket): void {
|
|
172
|
+
this.metrics?.events.increment({ [`${this.addr} connection`]: true })
|
|
173
|
+
|
|
169
174
|
if (this.status.code !== TCPListenerStatusCode.ACTIVE) {
|
|
175
|
+
socket.destroy()
|
|
170
176
|
throw new NotStartedError('Server is not listening yet')
|
|
171
177
|
}
|
|
172
|
-
// Avoid uncaught errors caused by unstable connections
|
|
173
|
-
socket.on('error', err => {
|
|
174
|
-
this.log('socket error', err)
|
|
175
|
-
this.metrics?.events.increment({ [`${this.addr} error`]: true })
|
|
176
|
-
})
|
|
177
178
|
|
|
178
179
|
let maConn: MultiaddrConnection
|
|
179
180
|
try {
|
|
@@ -183,11 +184,13 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
183
184
|
socketCloseTimeout: this.context.socketCloseTimeout,
|
|
184
185
|
metrics: this.metrics?.events,
|
|
185
186
|
metricPrefix: `${this.addr} `,
|
|
186
|
-
logger: this.context.logger
|
|
187
|
+
logger: this.context.logger,
|
|
188
|
+
direction: 'inbound'
|
|
187
189
|
})
|
|
188
|
-
} catch (err) {
|
|
190
|
+
} catch (err: any) {
|
|
189
191
|
this.log.error('inbound connection failed', err)
|
|
190
192
|
this.metrics?.errors.increment({ [`${this.addr} inbound_to_connection`]: true })
|
|
193
|
+
socket.destroy()
|
|
191
194
|
return
|
|
192
195
|
}
|
|
193
196
|
|