@libp2p/tcp 10.1.13 → 10.1.14
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/index.min.js.map +3 -3
- package/dist/src/index.d.ts +14 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +4 -23
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +45 -46
- package/dist/src/listener.js.map +1 -1
- package/dist/typedoc-urls.json +1 -0
- package/package.json +6 -5
- package/src/index.ts +16 -2
- package/src/listener.ts +53 -71
package/dist/src/index.d.ts
CHANGED
|
@@ -26,10 +26,22 @@
|
|
|
26
26
|
* // use connection...
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
import type { CloseServerOnMaxConnectionsOpts } from './listener.js';
|
|
30
29
|
import type { ComponentLogger, CounterGroup, Metrics, CreateListenerOptions, DialTransportOptions, Transport, OutboundConnectionUpgradeEvents } from '@libp2p/interface';
|
|
31
30
|
import type { ProgressEvent } from 'progress-events';
|
|
32
|
-
export
|
|
31
|
+
export interface CloseServerOnMaxConnectionsOpts {
|
|
32
|
+
/**
|
|
33
|
+
* Server listens once connection count is less than `listenBelow`
|
|
34
|
+
*/
|
|
35
|
+
listenBelow: number;
|
|
36
|
+
/**
|
|
37
|
+
* Close server once connection count is greater than or equal to `closeAbove`
|
|
38
|
+
*/
|
|
39
|
+
closeAbove: number;
|
|
40
|
+
/**
|
|
41
|
+
* Invoked when there was an error listening on a socket
|
|
42
|
+
*/
|
|
43
|
+
onListenError?(err: Error): void;
|
|
44
|
+
}
|
|
33
45
|
export interface TCPOptions {
|
|
34
46
|
/**
|
|
35
47
|
* An optional number in ms that is used as an inactivity timeout after which the socket will be closed
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,SAAS,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAA;AACxK,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAA;IAEvC;;OAEG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAA;IAExC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,+BAA+B,CAAA;IAE7D;;OAEG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAE3B;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,MAAM,aAAa,GACvB,+BAA+B,GAC/B,aAAa,CAAC,qBAAqB,CAAC,CAAA;AAEtC,MAAM,WAAW,cAAe,SAAQ,oBAAoB,CAAC,aAAa,CAAC,EAAE,gBAAgB;CAE5F;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB,EAAE,gBAAgB;CAExF;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,CAAA;IAC/D,MAAM,EAAE,YAAY,CAAC,wBAAwB,GAAG,kBAAkB,CAAC,CAAA;CACpE;AAED,wBAAgB,GAAG,CAAE,IAAI,GAAE,UAAe,GAAG,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAIpF"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAiH9B,MAAM,UAAU,GAAG,CAAE,OAAmB,EAAE;IACxC,OAAO,CAAC,UAAyB,EAAE,EAAE;QACnC,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,CAAA;AACH,CAAC"}
|
package/dist/src/listener.d.ts
CHANGED
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
import { TypedEventEmitter } from '
|
|
2
|
-
import type { TCPCreateListenerOptions } from './index.js';
|
|
3
|
-
import type { ComponentLogger,
|
|
1
|
+
import { TypedEventEmitter } from 'main-event';
|
|
2
|
+
import type { CloseServerOnMaxConnectionsOpts, TCPCreateListenerOptions } from './index.js';
|
|
3
|
+
import type { ComponentLogger, Metrics, Listener, ListenerEvents, Upgrader } from '@libp2p/interface';
|
|
4
4
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
5
|
-
export interface CloseServerOnMaxConnectionsOpts {
|
|
6
|
-
/**
|
|
7
|
-
* Server listens once connection count is less than `listenBelow`
|
|
8
|
-
*/
|
|
9
|
-
listenBelow: number;
|
|
10
|
-
/**
|
|
11
|
-
* Close server once connection count is greater than or equal to `closeAbove`
|
|
12
|
-
*/
|
|
13
|
-
closeAbove: number;
|
|
14
|
-
/**
|
|
15
|
-
* Invoked when there was an error listening on a socket
|
|
16
|
-
*/
|
|
17
|
-
onListenError?(err: Error): void;
|
|
18
|
-
}
|
|
19
5
|
interface Context extends TCPCreateListenerOptions {
|
|
20
6
|
upgrader: Upgrader;
|
|
21
7
|
socketInactivityTimeout?: number;
|
|
@@ -26,18 +12,13 @@ interface Context extends TCPCreateListenerOptions {
|
|
|
26
12
|
closeServerOnMaxConnections?: CloseServerOnMaxConnectionsOpts;
|
|
27
13
|
logger: ComponentLogger;
|
|
28
14
|
}
|
|
29
|
-
export interface TCPListenerMetrics {
|
|
30
|
-
status: MetricGroup;
|
|
31
|
-
errors: CounterGroup;
|
|
32
|
-
events: CounterGroup;
|
|
33
|
-
}
|
|
34
15
|
export declare class TCPListener extends TypedEventEmitter<ListenerEvents> implements Listener {
|
|
35
16
|
private readonly context;
|
|
36
17
|
private readonly server;
|
|
37
18
|
/** Keep track of open sockets to destroy in case of timeout */
|
|
38
19
|
private readonly sockets;
|
|
39
20
|
private status;
|
|
40
|
-
private metrics
|
|
21
|
+
private metrics;
|
|
41
22
|
private addr;
|
|
42
23
|
private readonly log;
|
|
43
24
|
private readonly shutdownController;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAA;AAI/D,OAAO,KAAK,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAA0D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7J,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,UAAU,OAAQ,SAAQ,wBAAwB;IAChD,QAAQ,EAAE,QAAQ,CAAA;IAClB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2BAA2B,CAAC,EAAE,+BAA+B,CAAA;IAC7D,MAAM,EAAE,eAAe,CAAA;CACxB;AA0BD,qBAAa,WAAY,SAAQ,iBAAiB,CAAC,cAAc,CAAE,YAAW,QAAQ;IAUvE,OAAO,CAAC,QAAQ,CAAC,OAAO;IATrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAEtB,OAAO,EAAE,OAAO;IA+F9C,OAAO,CAAC,QAAQ;IAsEhB,QAAQ,IAAK,SAAS,EAAE;IAqBxB,mBAAmB,IAAK,IAAI;IAItB,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAyB7B;;OAEG;YACW,MAAM;IAkBpB,OAAO,CAAC,KAAK;CAmCd"}
|
package/dist/src/listener.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import net from 'net';
|
|
2
|
-
import { AlreadyStartedError, InvalidParametersError, NotStartedError
|
|
2
|
+
import { AlreadyStartedError, InvalidParametersError, NotStartedError } from '@libp2p/interface';
|
|
3
3
|
import { getThinWaistAddresses } from '@libp2p/utils/get-thin-waist-addresses';
|
|
4
4
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
5
|
+
import { TypedEventEmitter, setMaxListeners } from 'main-event';
|
|
5
6
|
import { pEvent } from 'p-event';
|
|
6
7
|
import { toMultiaddrConnection } from './socket-to-conn.js';
|
|
7
8
|
import { multiaddrToNetConfig } from './utils.js';
|
|
@@ -50,56 +51,54 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
50
51
|
throw new InvalidParametersError('closeAbove must be >= listenBelow');
|
|
51
52
|
}
|
|
52
53
|
}
|
|
54
|
+
context.metrics?.registerMetricGroup('libp2p_tcp_inbound_connections_total', {
|
|
55
|
+
label: 'address',
|
|
56
|
+
help: 'Current active connections in TCP listener',
|
|
57
|
+
calculate: () => {
|
|
58
|
+
return {
|
|
59
|
+
[this.addr]: this.sockets.size
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
this.metrics = {
|
|
64
|
+
status: context.metrics?.registerMetricGroup('libp2p_tcp_listener_status_info', {
|
|
65
|
+
label: 'address',
|
|
66
|
+
help: 'Current status of the TCP listener socket'
|
|
67
|
+
}),
|
|
68
|
+
errors: context.metrics?.registerMetricGroup('libp2p_tcp_listener_errors_total', {
|
|
69
|
+
label: 'address',
|
|
70
|
+
help: 'Total count of TCP listener errors by type'
|
|
71
|
+
}),
|
|
72
|
+
events: context.metrics?.registerMetricGroup('libp2p_tcp_listener_events_total', {
|
|
73
|
+
label: 'address',
|
|
74
|
+
help: 'Total count of TCP listener events by type'
|
|
75
|
+
})
|
|
76
|
+
};
|
|
53
77
|
this.server
|
|
54
78
|
.on('listening', () => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.addr = address;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.addr = `${address.address}:${address.port}`;
|
|
67
|
-
}
|
|
68
|
-
context.metrics?.registerMetricGroup('libp2p_tcp_inbound_connections_total', {
|
|
69
|
-
label: 'address',
|
|
70
|
-
help: 'Current active connections in TCP listener',
|
|
71
|
-
calculate: () => {
|
|
72
|
-
return {
|
|
73
|
-
[this.addr]: this.sockets.size
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
this.metrics = {
|
|
78
|
-
status: context.metrics.registerMetricGroup('libp2p_tcp_listener_status_info', {
|
|
79
|
-
label: 'address',
|
|
80
|
-
help: 'Current status of the TCP listener socket'
|
|
81
|
-
}),
|
|
82
|
-
errors: context.metrics.registerMetricGroup('libp2p_tcp_listener_errors_total', {
|
|
83
|
-
label: 'address',
|
|
84
|
-
help: 'Total count of TCP listener errors by type'
|
|
85
|
-
}),
|
|
86
|
-
events: context.metrics.registerMetricGroup('libp2p_tcp_listener_events_total', {
|
|
87
|
-
label: 'address',
|
|
88
|
-
help: 'Total count of TCP listener events by type'
|
|
89
|
-
})
|
|
90
|
-
};
|
|
91
|
-
this.metrics?.status.update({
|
|
92
|
-
[this.addr]: TCPListenerStatusCode.ACTIVE
|
|
93
|
-
});
|
|
79
|
+
// we are listening, register metrics for our port
|
|
80
|
+
const address = this.server.address();
|
|
81
|
+
if (address == null) {
|
|
82
|
+
this.addr = 'unknown';
|
|
83
|
+
}
|
|
84
|
+
else if (typeof address === 'string') {
|
|
85
|
+
// unix socket
|
|
86
|
+
this.addr = address;
|
|
94
87
|
}
|
|
88
|
+
else {
|
|
89
|
+
this.addr = `${address.address}:${address.port}`;
|
|
90
|
+
}
|
|
91
|
+
this.metrics.status?.update({
|
|
92
|
+
[this.addr]: TCPListenerStatusCode.ACTIVE
|
|
93
|
+
});
|
|
95
94
|
this.safeDispatchEvent('listening');
|
|
96
95
|
})
|
|
97
96
|
.on('error', err => {
|
|
98
|
-
this.metrics?.
|
|
97
|
+
this.metrics.errors?.increment({ [`${this.addr} listen_error`]: true });
|
|
99
98
|
this.safeDispatchEvent('error', { detail: err });
|
|
100
99
|
})
|
|
101
100
|
.on('close', () => {
|
|
102
|
-
this.metrics?.
|
|
101
|
+
this.metrics.status?.update({
|
|
103
102
|
[this.addr]: this.status.code
|
|
104
103
|
});
|
|
105
104
|
// If this event is emitted, the transport manager will remove the
|
|
@@ -111,11 +110,11 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
111
110
|
}
|
|
112
111
|
})
|
|
113
112
|
.on('drop', () => {
|
|
114
|
-
this.metrics?.
|
|
113
|
+
this.metrics.events?.increment({ [`${this.addr} drop`]: true });
|
|
115
114
|
});
|
|
116
115
|
}
|
|
117
116
|
onSocket(socket) {
|
|
118
|
-
this.metrics?.
|
|
117
|
+
this.metrics.events?.increment({ [`${this.addr} connection`]: true });
|
|
119
118
|
if (this.status.code !== TCPListenerStatusCode.ACTIVE) {
|
|
120
119
|
socket.destroy();
|
|
121
120
|
throw new NotStartedError('Server is not listening yet');
|
|
@@ -134,7 +133,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
134
133
|
}
|
|
135
134
|
catch (err) {
|
|
136
135
|
this.log.error('inbound connection failed', err);
|
|
137
|
-
this.metrics?.
|
|
136
|
+
this.metrics.errors?.increment({ [`${this.addr} inbound_to_connection`]: true });
|
|
138
137
|
socket.destroy();
|
|
139
138
|
return;
|
|
140
139
|
}
|
|
@@ -168,7 +167,7 @@ export class TCPListener extends TypedEventEmitter {
|
|
|
168
167
|
})
|
|
169
168
|
.catch(async (err) => {
|
|
170
169
|
this.log.error('inbound connection upgrade failed', err);
|
|
171
|
-
this.metrics?.
|
|
170
|
+
this.metrics.errors?.increment({ [`${this.addr} inbound_upgrade`]: true });
|
|
172
171
|
this.sockets.delete(socket);
|
|
173
172
|
maConn.abort(err);
|
|
174
173
|
});
|
package/dist/src/listener.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"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"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"CloseServerOnMaxConnectionsOpts": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.CloseServerOnMaxConnectionsOpts.html",
|
|
3
|
+
".:CloseServerOnMaxConnectionsOpts": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.CloseServerOnMaxConnectionsOpts.html",
|
|
3
4
|
"TCPComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPComponents.html",
|
|
4
5
|
".:TCPComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPComponents.html",
|
|
5
6
|
"TCPCreateListenerOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tcp.TCPCreateListenerOptions.html",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/tcp",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.14",
|
|
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",
|
|
@@ -53,11 +53,12 @@
|
|
|
53
53
|
"test:electron-main": "aegir test -t electron-main"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@libp2p/interface": "^2.10.
|
|
57
|
-
"@libp2p/utils": "^6.6.
|
|
56
|
+
"@libp2p/interface": "^2.10.3",
|
|
57
|
+
"@libp2p/utils": "^6.6.6",
|
|
58
58
|
"@multiformats/multiaddr": "^12.4.0",
|
|
59
59
|
"@multiformats/multiaddr-matcher": "^1.7.2",
|
|
60
60
|
"@types/sinon": "^17.0.4",
|
|
61
|
+
"main-event": "^1.0.1",
|
|
61
62
|
"p-defer": "^4.0.1",
|
|
62
63
|
"p-event": "^6.0.1",
|
|
63
64
|
"progress-events": "^1.0.1",
|
|
@@ -65,8 +66,8 @@
|
|
|
65
66
|
"stream-to-it": "^1.0.1"
|
|
66
67
|
},
|
|
67
68
|
"devDependencies": {
|
|
68
|
-
"@libp2p/logger": "^5.1.
|
|
69
|
-
"aegir": "^47.0.
|
|
69
|
+
"@libp2p/logger": "^5.1.19",
|
|
70
|
+
"aegir": "^47.0.14",
|
|
70
71
|
"p-wait-for": "^5.0.2",
|
|
71
72
|
"sinon": "^20.0.0",
|
|
72
73
|
"sinon-ts": "^2.0.0",
|
package/src/index.ts
CHANGED
|
@@ -28,11 +28,25 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import { TCP } from './tcp.js'
|
|
31
|
-
import type { CloseServerOnMaxConnectionsOpts } from './listener.js'
|
|
32
31
|
import type { ComponentLogger, CounterGroup, Metrics, CreateListenerOptions, DialTransportOptions, Transport, OutboundConnectionUpgradeEvents } from '@libp2p/interface'
|
|
33
32
|
import type { ProgressEvent } from 'progress-events'
|
|
34
33
|
|
|
35
|
-
export
|
|
34
|
+
export interface CloseServerOnMaxConnectionsOpts {
|
|
35
|
+
/**
|
|
36
|
+
* Server listens once connection count is less than `listenBelow`
|
|
37
|
+
*/
|
|
38
|
+
listenBelow: number
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Close server once connection count is greater than or equal to `closeAbove`
|
|
42
|
+
*/
|
|
43
|
+
closeAbove: number
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Invoked when there was an error listening on a socket
|
|
47
|
+
*/
|
|
48
|
+
onListenError?(err: Error): void
|
|
49
|
+
}
|
|
36
50
|
|
|
37
51
|
export interface TCPOptions {
|
|
38
52
|
/**
|
package/src/listener.ts
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
1
|
import net from 'net'
|
|
2
|
-
import { AlreadyStartedError, InvalidParametersError, NotStartedError
|
|
2
|
+
import { AlreadyStartedError, InvalidParametersError, NotStartedError } from '@libp2p/interface'
|
|
3
3
|
import { getThinWaistAddresses } from '@libp2p/utils/get-thin-waist-addresses'
|
|
4
4
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
5
|
+
import { TypedEventEmitter, setMaxListeners } from 'main-event'
|
|
5
6
|
import { pEvent } from 'p-event'
|
|
6
7
|
import { toMultiaddrConnection } from './socket-to-conn.js'
|
|
7
8
|
import { multiaddrToNetConfig } from './utils.js'
|
|
8
|
-
import type { TCPCreateListenerOptions } from './index.js'
|
|
9
|
+
import type { CloseServerOnMaxConnectionsOpts, TCPCreateListenerOptions } from './index.js'
|
|
9
10
|
import type { NetConfig } from './utils.js'
|
|
10
11
|
import type { ComponentLogger, Logger, MultiaddrConnection, CounterGroup, MetricGroup, Metrics, Listener, ListenerEvents, Upgrader } from '@libp2p/interface'
|
|
11
12
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
12
13
|
|
|
13
|
-
export interface CloseServerOnMaxConnectionsOpts {
|
|
14
|
-
/**
|
|
15
|
-
* Server listens once connection count is less than `listenBelow`
|
|
16
|
-
*/
|
|
17
|
-
listenBelow: number
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Close server once connection count is greater than or equal to `closeAbove`
|
|
21
|
-
*/
|
|
22
|
-
closeAbove: number
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Invoked when there was an error listening on a socket
|
|
26
|
-
*/
|
|
27
|
-
onListenError?(err: Error): void
|
|
28
|
-
}
|
|
29
|
-
|
|
30
14
|
interface Context extends TCPCreateListenerOptions {
|
|
31
15
|
upgrader: Upgrader
|
|
32
16
|
socketInactivityTimeout?: number
|
|
@@ -38,10 +22,10 @@ interface Context extends TCPCreateListenerOptions {
|
|
|
38
22
|
logger: ComponentLogger
|
|
39
23
|
}
|
|
40
24
|
|
|
41
|
-
|
|
42
|
-
status
|
|
43
|
-
errors
|
|
44
|
-
events
|
|
25
|
+
interface TCPListenerMetrics {
|
|
26
|
+
status?: MetricGroup
|
|
27
|
+
errors?: CounterGroup
|
|
28
|
+
events?: CounterGroup
|
|
45
29
|
}
|
|
46
30
|
|
|
47
31
|
enum TCPListenerStatusCode {
|
|
@@ -67,7 +51,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
67
51
|
/** Keep track of open sockets to destroy in case of timeout */
|
|
68
52
|
private readonly sockets = new Set<net.Socket>()
|
|
69
53
|
private status: Status = { code: TCPListenerStatusCode.INACTIVE }
|
|
70
|
-
private metrics
|
|
54
|
+
private metrics: TCPListenerMetrics
|
|
71
55
|
private addr: string
|
|
72
56
|
private readonly log: Logger
|
|
73
57
|
private readonly shutdownController: AbortController
|
|
@@ -100,59 +84,57 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
100
84
|
}
|
|
101
85
|
}
|
|
102
86
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// unix socket
|
|
113
|
-
this.addr = address
|
|
114
|
-
} else {
|
|
115
|
-
this.addr = `${address.address}:${address.port}`
|
|
116
|
-
}
|
|
87
|
+
context.metrics?.registerMetricGroup('libp2p_tcp_inbound_connections_total', {
|
|
88
|
+
label: 'address',
|
|
89
|
+
help: 'Current active connections in TCP listener',
|
|
90
|
+
calculate: () => {
|
|
91
|
+
return {
|
|
92
|
+
[this.addr]: this.sockets.size
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
})
|
|
117
96
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}),
|
|
133
|
-
errors: context.metrics.registerMetricGroup('libp2p_tcp_listener_errors_total', {
|
|
134
|
-
label: 'address',
|
|
135
|
-
help: 'Total count of TCP listener errors by type'
|
|
136
|
-
}),
|
|
137
|
-
events: context.metrics.registerMetricGroup('libp2p_tcp_listener_events_total', {
|
|
138
|
-
label: 'address',
|
|
139
|
-
help: 'Total count of TCP listener events by type'
|
|
140
|
-
})
|
|
141
|
-
}
|
|
97
|
+
this.metrics = {
|
|
98
|
+
status: context.metrics?.registerMetricGroup('libp2p_tcp_listener_status_info', {
|
|
99
|
+
label: 'address',
|
|
100
|
+
help: 'Current status of the TCP listener socket'
|
|
101
|
+
}),
|
|
102
|
+
errors: context.metrics?.registerMetricGroup('libp2p_tcp_listener_errors_total', {
|
|
103
|
+
label: 'address',
|
|
104
|
+
help: 'Total count of TCP listener errors by type'
|
|
105
|
+
}),
|
|
106
|
+
events: context.metrics?.registerMetricGroup('libp2p_tcp_listener_events_total', {
|
|
107
|
+
label: 'address',
|
|
108
|
+
help: 'Total count of TCP listener events by type'
|
|
109
|
+
})
|
|
110
|
+
}
|
|
142
111
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
112
|
+
this.server
|
|
113
|
+
.on('listening', () => {
|
|
114
|
+
// we are listening, register metrics for our port
|
|
115
|
+
const address = this.server.address()
|
|
116
|
+
|
|
117
|
+
if (address == null) {
|
|
118
|
+
this.addr = 'unknown'
|
|
119
|
+
} else if (typeof address === 'string') {
|
|
120
|
+
// unix socket
|
|
121
|
+
this.addr = address
|
|
122
|
+
} else {
|
|
123
|
+
this.addr = `${address.address}:${address.port}`
|
|
146
124
|
}
|
|
147
125
|
|
|
126
|
+
this.metrics.status?.update({
|
|
127
|
+
[this.addr]: TCPListenerStatusCode.ACTIVE
|
|
128
|
+
})
|
|
129
|
+
|
|
148
130
|
this.safeDispatchEvent('listening')
|
|
149
131
|
})
|
|
150
132
|
.on('error', err => {
|
|
151
|
-
this.metrics?.
|
|
133
|
+
this.metrics.errors?.increment({ [`${this.addr} listen_error`]: true })
|
|
152
134
|
this.safeDispatchEvent('error', { detail: err })
|
|
153
135
|
})
|
|
154
136
|
.on('close', () => {
|
|
155
|
-
this.metrics?.
|
|
137
|
+
this.metrics.status?.update({
|
|
156
138
|
[this.addr]: this.status.code
|
|
157
139
|
})
|
|
158
140
|
|
|
@@ -165,12 +147,12 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
165
147
|
}
|
|
166
148
|
})
|
|
167
149
|
.on('drop', () => {
|
|
168
|
-
this.metrics?.
|
|
150
|
+
this.metrics.events?.increment({ [`${this.addr} drop`]: true })
|
|
169
151
|
})
|
|
170
152
|
}
|
|
171
153
|
|
|
172
154
|
private onSocket (socket: net.Socket): void {
|
|
173
|
-
this.metrics?.
|
|
155
|
+
this.metrics.events?.increment({ [`${this.addr} connection`]: true })
|
|
174
156
|
|
|
175
157
|
if (this.status.code !== TCPListenerStatusCode.ACTIVE) {
|
|
176
158
|
socket.destroy()
|
|
@@ -190,7 +172,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
190
172
|
})
|
|
191
173
|
} catch (err: any) {
|
|
192
174
|
this.log.error('inbound connection failed', err)
|
|
193
|
-
this.metrics?.
|
|
175
|
+
this.metrics.errors?.increment({ [`${this.addr} inbound_to_connection`]: true })
|
|
194
176
|
socket.destroy()
|
|
195
177
|
return
|
|
196
178
|
}
|
|
@@ -233,7 +215,7 @@ export class TCPListener extends TypedEventEmitter<ListenerEvents> implements Li
|
|
|
233
215
|
})
|
|
234
216
|
.catch(async err => {
|
|
235
217
|
this.log.error('inbound connection upgrade failed', err)
|
|
236
|
-
this.metrics?.
|
|
218
|
+
this.metrics.errors?.increment({ [`${this.addr} inbound_upgrade`]: true })
|
|
237
219
|
this.sockets.delete(socket)
|
|
238
220
|
maConn.abort(err)
|
|
239
221
|
})
|