libp2p 0.39.5 → 0.40.0-030dbc8
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/README.md +14 -2
- package/dist/src/address-manager/index.d.ts +18 -2
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +19 -6
- package/dist/src/address-manager/index.js.map +1 -1
- package/dist/src/circuit/auto-relay.d.ts +2 -2
- package/dist/src/circuit/auto-relay.d.ts.map +1 -1
- package/dist/src/circuit/auto-relay.js +12 -12
- package/dist/src/circuit/auto-relay.js.map +1 -1
- package/dist/src/circuit/index.d.ts +13 -3
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/index.js +1 -1
- package/dist/src/circuit/index.js.map +1 -1
- package/dist/src/circuit/pb/index.d.ts.map +1 -1
- package/dist/src/circuit/pb/index.js +29 -34
- package/dist/src/circuit/pb/index.js.map +1 -1
- package/dist/src/circuit/transport.d.ts +22 -7
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/circuit/transport.js +26 -17
- package/dist/src/circuit/transport.js.map +1 -1
- package/dist/src/components.d.ts +110 -0
- package/dist/src/components.d.ts.map +1 -0
- package/dist/src/components.js +199 -0
- package/dist/src/components.js.map +1 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +0 -11
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-manager/auto-dialler.d.ts +9 -2
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dialler.js +6 -6
- package/dist/src/connection-manager/auto-dialler.js.map +1 -1
- package/dist/src/connection-manager/dialer/index.d.ts +12 -6
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.js +12 -17
- package/dist/src/connection-manager/dialer/index.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +41 -17
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +80 -81
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/content-routing/index.d.ts +7 -2
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +4 -4
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/content-routing/utils.d.ts +1 -1
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/errors.d.ts +2 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/fetch/index.d.ts +7 -3
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +18 -6
- package/dist/src/fetch/index.js.map +1 -1
- package/dist/src/fetch/pb/proto.d.ts.map +1 -1
- package/dist/src/fetch/pb/proto.js +24 -35
- package/dist/src/fetch/pb/proto.js.map +1 -1
- package/dist/src/identify/index.d.ts +13 -3
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +41 -41
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/identify/pb/message.d.ts.map +1 -1
- package/dist/src/identify/pb/message.js +23 -34
- package/dist/src/identify/pb/message.js.map +1 -1
- package/dist/src/index.d.ts +13 -12
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/insecure/index.d.ts +2 -8
- package/dist/src/insecure/index.d.ts.map +1 -1
- package/dist/src/insecure/index.js +5 -3
- package/dist/src/insecure/index.js.map +1 -1
- package/dist/src/insecure/pb/proto.d.ts.map +1 -1
- package/dist/src/insecure/pb/proto.js +24 -29
- package/dist/src/insecure/pb/proto.js.map +1 -1
- package/dist/src/keychain/index.d.ts +6 -2
- package/dist/src/keychain/index.d.ts.map +1 -1
- package/dist/src/keychain/index.js +19 -19
- package/dist/src/keychain/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +1 -2
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +49 -73
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/nat-manager.d.ts +9 -2
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +3 -3
- package/dist/src/nat-manager.js.map +1 -1
- package/dist/src/peer-record-updater.d.ts +11 -2
- package/dist/src/peer-record-updater.d.ts.map +1 -1
- package/dist/src/peer-record-updater.js +10 -10
- package/dist/src/peer-record-updater.js.map +1 -1
- package/dist/src/peer-routing.d.ts +6 -2
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +4 -4
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/ping/index.d.ts +7 -3
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +3 -3
- package/dist/src/ping/index.js.map +1 -1
- package/dist/src/pnet/index.d.ts +2 -17
- package/dist/src/pnet/index.d.ts.map +1 -1
- package/dist/src/pnet/index.js +4 -1
- package/dist/src/pnet/index.js.map +1 -1
- package/dist/src/pubsub/dummy-pubsub.d.ts +2 -1
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -1
- package/dist/src/pubsub/dummy-pubsub.js +4 -0
- package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
- package/dist/src/registrar.d.ts +9 -3
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +6 -6
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts +9 -3
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +5 -6
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts +17 -5
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +55 -75
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +39 -40
- package/src/address-manager/index.ts +34 -10
- package/src/circuit/README.md +6 -6
- package/src/circuit/auto-relay.ts +15 -15
- package/src/circuit/index.ts +16 -5
- package/src/circuit/pb/index.ts +29 -35
- package/src/circuit/transport.ts +49 -20
- package/src/components.ts +332 -0
- package/src/config.ts +0 -11
- package/src/connection-manager/auto-dialler.ts +17 -9
- package/src/connection-manager/dialer/index.ts +26 -25
- package/src/connection-manager/index.ts +136 -93
- package/src/content-routing/index.ts +13 -7
- package/src/errors.ts +2 -1
- package/src/fetch/index.ts +28 -10
- package/src/fetch/pb/proto.ts +24 -35
- package/src/identify/index.ts +57 -53
- package/src/identify/pb/message.ts +23 -35
- package/src/index.ts +12 -11
- package/src/insecure/index.ts +6 -3
- package/src/insecure/pb/proto.ts +24 -29
- package/src/keychain/index.ts +27 -22
- package/src/libp2p.ts +50 -79
- package/src/nat-manager.ts +14 -6
- package/src/peer-record-updater.ts +23 -13
- package/src/peer-routing.ts +12 -7
- package/src/ping/index.ts +12 -7
- package/src/pnet/index.ts +5 -1
- package/src/pubsub/dummy-pubsub.ts +3 -1
- package/src/registrar.ts +17 -10
- package/src/transport-manager.ts +16 -10
- package/src/upgrader.ts +78 -87
- package/src/version.ts +1 -1
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts +0 -16
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +0 -1
- package/dist/src/connection-manager/dialer/auto-dialer.js +0 -43
- package/dist/src/connection-manager/dialer/auto-dialer.js.map +0 -1
- package/dist/src/metrics/index.d.ts +0 -93
- package/dist/src/metrics/index.d.ts.map +0 -1
- package/dist/src/metrics/index.js +0 -234
- package/dist/src/metrics/index.js.map +0 -1
- package/dist/src/metrics/moving-average.d.ts +0 -14
- package/dist/src/metrics/moving-average.d.ts.map +0 -1
- package/dist/src/metrics/moving-average.js +0 -40
- package/dist/src/metrics/moving-average.js.map +0 -1
- package/dist/src/metrics/stats.d.ts +0 -87
- package/dist/src/metrics/stats.d.ts.map +0 -1
- package/dist/src/metrics/stats.js +0 -183
- package/dist/src/metrics/stats.js.map +0 -1
- package/src/connection-manager/dialer/auto-dialer.ts +0 -65
- package/src/metrics/index.ts +0 -311
- package/src/metrics/moving-average.ts +0 -53
- package/src/metrics/stats.ts +0 -238
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { Multiaddr, Resolver } from '@multiformats/multiaddr';
|
|
2
2
|
import { TimeoutController } from 'timeout-abort-controller';
|
|
3
3
|
import { DialRequest } from './dial-request.js';
|
|
4
|
-
import type { Connection } from '@libp2p/interface-connection';
|
|
4
|
+
import type { Connection, ConnectionGater } from '@libp2p/interface-connection';
|
|
5
5
|
import type { AbortOptions } from '@libp2p/interfaces';
|
|
6
6
|
import type { Startable } from '@libp2p/interfaces/startable';
|
|
7
7
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
import type { ComponentMetricsTracker } from '@libp2p/interface-metrics';
|
|
8
|
+
import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store';
|
|
9
|
+
import type { Metrics } from '@libp2p/interface-metrics';
|
|
11
10
|
import type { Dialer } from '@libp2p/interface-connection-manager';
|
|
11
|
+
import type { TransportManager } from '@libp2p/interface-transport';
|
|
12
12
|
export interface DialTarget {
|
|
13
13
|
id: string;
|
|
14
14
|
addrs: Multiaddr[];
|
|
@@ -48,7 +48,13 @@ export interface DialerInit {
|
|
|
48
48
|
* Multiaddr resolvers to use when dialing
|
|
49
49
|
*/
|
|
50
50
|
resolvers?: Record<string, Resolver>;
|
|
51
|
-
|
|
51
|
+
}
|
|
52
|
+
export interface DefaultDialerComponents {
|
|
53
|
+
peerId: PeerId;
|
|
54
|
+
metrics?: Metrics;
|
|
55
|
+
peerStore: PeerStore;
|
|
56
|
+
transportManager: TransportManager;
|
|
57
|
+
connectionGater: ConnectionGater;
|
|
52
58
|
}
|
|
53
59
|
export declare class DefaultDialer implements Startable, Dialer {
|
|
54
60
|
private readonly components;
|
|
@@ -60,7 +66,7 @@ export declare class DefaultDialer implements Startable, Dialer {
|
|
|
60
66
|
pendingDials: Map<string, PendingDial>;
|
|
61
67
|
pendingDialTargets: Map<string, PendingDialTarget>;
|
|
62
68
|
private started;
|
|
63
|
-
constructor(components:
|
|
69
|
+
constructor(components: DefaultDialerComponents, init?: DialerInit);
|
|
64
70
|
isStarted(): boolean;
|
|
65
71
|
start(): Promise<void>;
|
|
66
72
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU3D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIvD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAInE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,iBAAiB,CAAA;IAC7B,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,SAAS,CAAA;IACpB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,eAAe,EAAE,eAAe,CAAA;CACjC;AAED,qBAAa,aAAc,YAAW,SAAS,EAAE,MAAM;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACjC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACzD,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,uBAAuB,EAAE,IAAI,GAAE,UAAe;IAsBvE,SAAS;IAIH,KAAK;IAIX;;OAEG;IACG,IAAI;IAkBV;;;;OAIG;IACG,IAAI,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CtF;;;;OAIG;IACG,4BAA4B,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAmB7F;;;;;OAKG;IACG,iBAAiB,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAsClF;;OAEG;IACH,kBAAkB,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW;IAkDpF,SAAS,CAAE,GAAG,EAAE,MAAM;IAOtB,YAAY,CAAE,KAAK,EAAE,MAAM;IAU3B;;OAEG;IACG,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAwB3E;;OAEG;IACG,cAAc,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAUlF"}
|
|
@@ -17,9 +17,6 @@ import { getPeer } from '../../get-peer.js';
|
|
|
17
17
|
import sort from 'it-sort';
|
|
18
18
|
import map from 'it-map';
|
|
19
19
|
const log = logger('libp2p:dialer');
|
|
20
|
-
const METRICS_COMPONENT = 'dialler';
|
|
21
|
-
const METRICS_PENDING_DIALS = 'pending-dials';
|
|
22
|
-
const METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets';
|
|
23
20
|
export class DefaultDialer {
|
|
24
21
|
constructor(components, init = {}) {
|
|
25
22
|
this.started = false;
|
|
@@ -30,14 +27,12 @@ export class DefaultDialer {
|
|
|
30
27
|
this.tokens = [...new Array(init.maxParallelDials ?? MAX_PARALLEL_DIALS)].map((_, index) => index);
|
|
31
28
|
this.components = components;
|
|
32
29
|
this.pendingDials = trackedMap({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
metrics: init.metrics
|
|
30
|
+
name: 'libp2p_dialler_pending_dials',
|
|
31
|
+
metrics: components.metrics
|
|
36
32
|
});
|
|
37
33
|
this.pendingDialTargets = trackedMap({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
metrics: components.getMetrics()
|
|
34
|
+
name: 'libp2p_dialler_pending_dial_targets',
|
|
35
|
+
metrics: components.metrics
|
|
41
36
|
});
|
|
42
37
|
for (const [key, value] of Object.entries(init.resolvers ?? {})) {
|
|
43
38
|
resolvers.set(key, value);
|
|
@@ -75,15 +70,15 @@ export class DefaultDialer {
|
|
|
75
70
|
*/
|
|
76
71
|
async dial(peer, options = {}) {
|
|
77
72
|
const { id, multiaddrs } = getPeer(peer);
|
|
78
|
-
if (this.components.
|
|
73
|
+
if (this.components.peerId.equals(id)) {
|
|
79
74
|
throw errCode(new Error('Tried to dial self'), codes.ERR_DIALED_SELF);
|
|
80
75
|
}
|
|
81
76
|
log('check multiaddrs %p', id);
|
|
82
77
|
if (multiaddrs != null && multiaddrs.length > 0) {
|
|
83
78
|
log('storing multiaddrs %p', id, multiaddrs);
|
|
84
|
-
await this.components.
|
|
79
|
+
await this.components.peerStore.addressBook.add(id, multiaddrs);
|
|
85
80
|
}
|
|
86
|
-
if (await this.components.
|
|
81
|
+
if (await this.components.connectionGater.denyDialPeer(id)) {
|
|
87
82
|
throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED);
|
|
88
83
|
}
|
|
89
84
|
log('creating dial target for %p', id);
|
|
@@ -140,8 +135,8 @@ export class DefaultDialer {
|
|
|
140
135
|
*/
|
|
141
136
|
async _createDialTarget(peer, options) {
|
|
142
137
|
const _resolve = this._resolve.bind(this);
|
|
143
|
-
const addrs = await pipe(await this.components.
|
|
144
|
-
return !(await this.components.
|
|
138
|
+
const addrs = await pipe(await this.components.peerStore.addressBook.get(peer), (source) => filter(source, async (address) => {
|
|
139
|
+
return !(await this.components.connectionGater.denyDialMultiaddr(peer, address.multiaddr));
|
|
145
140
|
}),
|
|
146
141
|
// Sort addresses so, for example, we try certified public address first
|
|
147
142
|
(source) => sort(source, this.addressSorter), async function* resolve(source) {
|
|
@@ -150,14 +145,14 @@ export class DefaultDialer {
|
|
|
150
145
|
}
|
|
151
146
|
},
|
|
152
147
|
// Multiaddrs not supported by the available transports will be filtered out.
|
|
153
|
-
(source) => filter(source, (ma) => Boolean(this.components.
|
|
148
|
+
(source) => filter(source, (ma) => Boolean(this.components.transportManager.transportForMultiaddr(ma))), (source) => map(source, (ma) => {
|
|
154
149
|
if (peer.toString() === ma.getPeerId()) {
|
|
155
150
|
return ma;
|
|
156
151
|
}
|
|
157
152
|
return ma.encapsulate(`/p2p/${peer.toString()}`);
|
|
158
153
|
}), async (source) => await all(source));
|
|
159
154
|
if (addrs.length > this.maxAddrsToDial) {
|
|
160
|
-
await this.components.
|
|
155
|
+
await this.components.peerStore.delete(peer);
|
|
161
156
|
throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES);
|
|
162
157
|
}
|
|
163
158
|
return {
|
|
@@ -177,7 +172,7 @@ export class DefaultDialer {
|
|
|
177
172
|
if (options.signal?.aborted === true) {
|
|
178
173
|
throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED);
|
|
179
174
|
}
|
|
180
|
-
return await this.components.
|
|
175
|
+
return await this.components.transportManager.dial(addr, options).catch(err => {
|
|
181
176
|
log.error('dial to %s failed', addr, err);
|
|
182
177
|
throw err;
|
|
183
178
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,OAAO,MAAM,UAAU,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAK3B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,IAAI,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { EventEmitter } from '@libp2p/interfaces/events';
|
|
|
4
4
|
import type { Startable } from '@libp2p/interfaces/startable';
|
|
5
5
|
import { PeerId } from '@libp2p/interface-peer-id';
|
|
6
6
|
import type { Connection, MultiaddrConnection } from '@libp2p/interface-connection';
|
|
7
|
-
import type { ConnectionManager } from '@libp2p/interface-connection-manager';
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import type {
|
|
7
|
+
import type { ConnectionManager, Dialer } from '@libp2p/interface-connection-manager';
|
|
8
|
+
import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store';
|
|
9
|
+
import { Resolver } from '@multiformats/multiaddr';
|
|
10
|
+
import type { Metrics } from '@libp2p/interface-metrics';
|
|
11
|
+
import type { Upgrader } from '@libp2p/interface-transport';
|
|
11
12
|
export interface ConnectionManagerInit {
|
|
12
13
|
/**
|
|
13
14
|
* The maximum number of connections to keep open
|
|
@@ -85,26 +86,55 @@ export interface ConnectionManagerInit {
|
|
|
85
86
|
* tagged with KEEP_ALIVE up to this timeout in ms. (default: 60000)
|
|
86
87
|
*/
|
|
87
88
|
startupReconnectTimeout?: number;
|
|
89
|
+
/**
|
|
90
|
+
* A list of multiaddrs that will always be allowed (except if they are in the
|
|
91
|
+
* deny list) to open connections to this node even if we've reached maxConnections
|
|
92
|
+
*/
|
|
93
|
+
allow?: string[];
|
|
94
|
+
/**
|
|
95
|
+
* A list of multiaddrs that will never be allowed to open connections to
|
|
96
|
+
* this node under any circumstances
|
|
97
|
+
*/
|
|
98
|
+
deny?: string[];
|
|
99
|
+
/**
|
|
100
|
+
* If more than this many connections are opened per second by a single
|
|
101
|
+
* host, reject subsequent connections
|
|
102
|
+
*/
|
|
103
|
+
inboundConnectionThreshold?: number;
|
|
104
|
+
/**
|
|
105
|
+
* The maximum number of parallel incoming connections allowed that have yet to
|
|
106
|
+
* complete the connection upgrade - e.g. choosing connection encryption, muxer, etc
|
|
107
|
+
*/
|
|
108
|
+
maxIncomingPendingConnections?: number;
|
|
88
109
|
}
|
|
89
110
|
export interface ConnectionManagerEvents {
|
|
90
111
|
'peer:connect': CustomEvent<PeerId>;
|
|
91
112
|
'peer:disconnect': CustomEvent<PeerId>;
|
|
92
113
|
}
|
|
114
|
+
export interface DefaultConnectionManagerComponents {
|
|
115
|
+
peerId: PeerId;
|
|
116
|
+
metrics?: Metrics;
|
|
117
|
+
upgrader: Upgrader;
|
|
118
|
+
peerStore: PeerStore;
|
|
119
|
+
dialer: Dialer;
|
|
120
|
+
}
|
|
93
121
|
/**
|
|
94
122
|
* Responsible for managing known connections.
|
|
95
123
|
*/
|
|
96
|
-
export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable
|
|
97
|
-
private components;
|
|
124
|
+
export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable {
|
|
125
|
+
private readonly components;
|
|
98
126
|
private readonly opts;
|
|
99
127
|
private readonly connections;
|
|
100
128
|
private started;
|
|
101
|
-
private timer?;
|
|
102
129
|
private readonly latencyMonitor;
|
|
103
130
|
private readonly startupReconnectTimeout;
|
|
104
131
|
private connectOnStartupController?;
|
|
105
132
|
private readonly dialTimeout;
|
|
106
|
-
|
|
107
|
-
|
|
133
|
+
private readonly allow;
|
|
134
|
+
private readonly deny;
|
|
135
|
+
private readonly inboundConnectionRateLimiter;
|
|
136
|
+
private incomingPendingConnections;
|
|
137
|
+
constructor(components: DefaultConnectionManagerComponents, init: ConnectionManagerInit);
|
|
108
138
|
isStarted(): boolean;
|
|
109
139
|
/**
|
|
110
140
|
* Starts the Connection Manager. If Metrics are not enabled on libp2p
|
|
@@ -121,13 +151,6 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
121
151
|
* Cleans up the connections
|
|
122
152
|
*/
|
|
123
153
|
_close(): Promise<void>;
|
|
124
|
-
/**
|
|
125
|
-
* Checks the libp2p metrics to determine if any values have exceeded
|
|
126
|
-
* the configured maximums.
|
|
127
|
-
*
|
|
128
|
-
* @private
|
|
129
|
-
*/
|
|
130
|
-
_checkMetrics(): Promise<void>;
|
|
131
154
|
onConnect(evt: CustomEvent<Connection>): void;
|
|
132
155
|
/**
|
|
133
156
|
* Tracks the incoming connection and check the connection limit
|
|
@@ -156,7 +179,8 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
156
179
|
* If we have more connections than our maximum, select some excess connections
|
|
157
180
|
* to prune based on peer value
|
|
158
181
|
*/
|
|
159
|
-
|
|
182
|
+
_pruneConnections(toPrune: number): Promise<void>;
|
|
160
183
|
acceptIncomingConnection(maConn: MultiaddrConnection): Promise<boolean>;
|
|
184
|
+
afterUpgradeInbound(): void;
|
|
161
185
|
}
|
|
162
186
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,16 @@ import { logger } from '@libp2p/logger';
|
|
|
2
2
|
import errCode from 'err-code';
|
|
3
3
|
import mergeOptions from 'merge-options';
|
|
4
4
|
import { LatencyMonitor } from './latency-monitor.js';
|
|
5
|
-
// @ts-expect-error retimer does not have types
|
|
6
|
-
import retimer from 'retimer';
|
|
7
5
|
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
8
6
|
import { codes } from '../errors.js';
|
|
9
7
|
import { isPeerId } from '@libp2p/interface-peer-id';
|
|
10
8
|
import { setMaxListeners } from 'events';
|
|
11
|
-
import { Components } from '@libp2p/components';
|
|
12
9
|
import * as STATUS from '@libp2p/interface-connection/status';
|
|
10
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
13
11
|
import { PeerMap } from '@libp2p/peer-collections';
|
|
14
12
|
import { TimeoutController } from 'timeout-abort-controller';
|
|
15
13
|
import { KEEP_ALIVE } from '@libp2p/interface-peer-store/tags';
|
|
14
|
+
import { RateLimiterMemory } from 'rate-limiter-flexible';
|
|
16
15
|
const log = logger('libp2p:connection-manager');
|
|
17
16
|
const defaultOptions = {
|
|
18
17
|
maxConnections: Infinity,
|
|
@@ -23,29 +22,28 @@ const defaultOptions = {
|
|
|
23
22
|
maxEventLoopDelay: Infinity,
|
|
24
23
|
pollInterval: 2000,
|
|
25
24
|
autoDialInterval: 10000,
|
|
26
|
-
movingAverageInterval: 60000
|
|
25
|
+
movingAverageInterval: 60000,
|
|
26
|
+
inboundConnectionThreshold: 5,
|
|
27
|
+
maxIncomingPendingConnections: 10
|
|
27
28
|
};
|
|
28
|
-
const METRICS_SYSTEM = 'libp2p';
|
|
29
|
-
const METRICS_COMPONENT = 'connection-manager';
|
|
30
29
|
const STARTUP_RECONNECT_TIMEOUT = 60000;
|
|
31
30
|
/**
|
|
32
31
|
* Responsible for managing known connections.
|
|
33
32
|
*/
|
|
34
33
|
export class DefaultConnectionManager extends EventEmitter {
|
|
35
|
-
constructor(init) {
|
|
34
|
+
constructor(components, init) {
|
|
36
35
|
super();
|
|
37
|
-
this.components = new Components();
|
|
38
36
|
this.opts = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init);
|
|
39
37
|
if (this.opts.maxConnections < this.opts.minConnections) {
|
|
40
38
|
throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS);
|
|
41
39
|
}
|
|
42
40
|
log('options: %o', this.opts);
|
|
41
|
+
this.components = components;
|
|
43
42
|
/**
|
|
44
43
|
* Map of connections per peer
|
|
45
44
|
*/
|
|
46
45
|
this.connections = new Map();
|
|
47
46
|
this.started = false;
|
|
48
|
-
this._checkMetrics = this._checkMetrics.bind(this);
|
|
49
47
|
this.latencyMonitor = new LatencyMonitor({
|
|
50
48
|
latencyCheckIntervalMs: init.pollInterval,
|
|
51
49
|
dataEmitIntervalMs: init.pollInterval
|
|
@@ -59,16 +57,25 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
59
57
|
this.onDisconnect = this.onDisconnect.bind(this);
|
|
60
58
|
this.startupReconnectTimeout = init.startupReconnectTimeout ?? STARTUP_RECONNECT_TIMEOUT;
|
|
61
59
|
this.dialTimeout = init.dialTimeout ?? 30000;
|
|
60
|
+
this.allow = (init.allow ?? []).map(ma => multiaddr(ma));
|
|
61
|
+
this.deny = (init.deny ?? []).map(ma => multiaddr(ma));
|
|
62
|
+
this.inboundConnectionRateLimiter = new RateLimiterMemory({
|
|
63
|
+
points: this.opts.inboundConnectionThreshold,
|
|
64
|
+
duration: 1
|
|
65
|
+
});
|
|
66
|
+
this.incomingPendingConnections = 0;
|
|
62
67
|
}
|
|
63
|
-
|
|
64
|
-
this.
|
|
68
|
+
isStarted() {
|
|
69
|
+
return this.started;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Starts the Connection Manager. If Metrics are not enabled on libp2p
|
|
73
|
+
* only event loop and connection limits will be monitored.
|
|
74
|
+
*/
|
|
75
|
+
async start() {
|
|
65
76
|
// track inbound/outbound connections
|
|
66
|
-
this.components.
|
|
67
|
-
|
|
68
|
-
component: METRICS_COMPONENT,
|
|
69
|
-
metric: 'connections',
|
|
70
|
-
label: 'direction',
|
|
71
|
-
value: () => {
|
|
77
|
+
this.components.metrics?.registerMetricGroup('libp2p_connection_manager_connections', {
|
|
78
|
+
calculate: () => {
|
|
72
79
|
const metric = {
|
|
73
80
|
inbound: 0,
|
|
74
81
|
outbound: 0
|
|
@@ -87,12 +94,9 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
87
94
|
}
|
|
88
95
|
});
|
|
89
96
|
// track total number of streams per protocol
|
|
90
|
-
this.components.
|
|
91
|
-
system: METRICS_SYSTEM,
|
|
92
|
-
component: METRICS_COMPONENT,
|
|
93
|
-
metric: 'protocol-streams-total',
|
|
97
|
+
this.components.metrics?.registerMetricGroup('libp2p_protocol_streams_total', {
|
|
94
98
|
label: 'protocol',
|
|
95
|
-
|
|
99
|
+
calculate: () => {
|
|
96
100
|
const metric = {};
|
|
97
101
|
for (const conns of this.connections.values()) {
|
|
98
102
|
for (const conn of conns) {
|
|
@@ -106,12 +110,9 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
106
110
|
}
|
|
107
111
|
});
|
|
108
112
|
// track 90th percentile of streams per protocol
|
|
109
|
-
this.components.
|
|
110
|
-
system: METRICS_SYSTEM,
|
|
111
|
-
component: METRICS_COMPONENT,
|
|
112
|
-
metric: 'protocol-streams-per-connection-90th-percentile',
|
|
113
|
+
this.components.metrics?.registerMetricGroup('libp2p_connection_manager_protocol_streams_per_connection_90th_percentile', {
|
|
113
114
|
label: 'protocol',
|
|
114
|
-
|
|
115
|
+
calculate: () => {
|
|
115
116
|
const allStreams = {};
|
|
116
117
|
for (const conns of this.connections.values()) {
|
|
117
118
|
for (const conn of conns) {
|
|
@@ -135,18 +136,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
135
136
|
return metric;
|
|
136
137
|
}
|
|
137
138
|
});
|
|
138
|
-
}
|
|
139
|
-
isStarted() {
|
|
140
|
-
return this.started;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Starts the Connection Manager. If Metrics are not enabled on libp2p
|
|
144
|
-
* only event loop and connection limits will be monitored.
|
|
145
|
-
*/
|
|
146
|
-
async start() {
|
|
147
|
-
if (this.components.getMetrics() != null) {
|
|
148
|
-
this.timer = this.timer ?? retimer(this._checkMetrics, this.opts.pollInterval);
|
|
149
|
-
}
|
|
150
139
|
// latency monitor
|
|
151
140
|
this.latencyMonitor.start();
|
|
152
141
|
this._onLatencyMeasure = this._onLatencyMeasure.bind(this);
|
|
@@ -155,14 +144,14 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
155
144
|
log('started');
|
|
156
145
|
}
|
|
157
146
|
async afterStart() {
|
|
158
|
-
this.components.
|
|
159
|
-
this.components.
|
|
147
|
+
this.components.upgrader.addEventListener('connection', this.onConnect);
|
|
148
|
+
this.components.upgrader.addEventListener('connectionEnd', this.onDisconnect);
|
|
160
149
|
// re-connect to any peers with the KEEP_ALIVE tag
|
|
161
150
|
void Promise.resolve()
|
|
162
151
|
.then(async () => {
|
|
163
152
|
const keepAlivePeers = [];
|
|
164
|
-
for (const peer of await this.components.
|
|
165
|
-
const tags = await this.components.
|
|
153
|
+
for (const peer of await this.components.peerStore.all()) {
|
|
154
|
+
const tags = await this.components.peerStore.getTags(peer.id);
|
|
166
155
|
const hasKeepAlive = tags.filter(tag => tag.name === KEEP_ALIVE).length > 0;
|
|
167
156
|
if (hasKeepAlive) {
|
|
168
157
|
keepAlivePeers.push(peer.id);
|
|
@@ -194,14 +183,13 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
194
183
|
async beforeStop() {
|
|
195
184
|
// if we are still dialing KEEP_ALIVE peers, abort those dials
|
|
196
185
|
this.connectOnStartupController?.abort();
|
|
197
|
-
this.components.
|
|
198
|
-
this.components.
|
|
186
|
+
this.components.upgrader.removeEventListener('connection', this.onConnect);
|
|
187
|
+
this.components.upgrader.removeEventListener('connectionEnd', this.onDisconnect);
|
|
199
188
|
}
|
|
200
189
|
/**
|
|
201
190
|
* Stops the Connection Manager
|
|
202
191
|
*/
|
|
203
192
|
async stop() {
|
|
204
|
-
this.timer?.clear();
|
|
205
193
|
this.latencyMonitor.removeEventListener('data', this._onLatencyMeasure);
|
|
206
194
|
this.latencyMonitor.stop();
|
|
207
195
|
this.started = false;
|
|
@@ -230,30 +218,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
230
218
|
await Promise.all(tasks);
|
|
231
219
|
this.connections.clear();
|
|
232
220
|
}
|
|
233
|
-
/**
|
|
234
|
-
* Checks the libp2p metrics to determine if any values have exceeded
|
|
235
|
-
* the configured maximums.
|
|
236
|
-
*
|
|
237
|
-
* @private
|
|
238
|
-
*/
|
|
239
|
-
async _checkMetrics() {
|
|
240
|
-
const metrics = this.components.getMetrics();
|
|
241
|
-
if (metrics != null) {
|
|
242
|
-
try {
|
|
243
|
-
const movingAverages = metrics.getGlobal().getMovingAverages();
|
|
244
|
-
const received = movingAverages.dataReceived[this.opts.movingAverageInterval].movingAverage;
|
|
245
|
-
await this._checkMaxLimit('maxReceivedData', received);
|
|
246
|
-
const sent = movingAverages.dataSent[this.opts.movingAverageInterval].movingAverage;
|
|
247
|
-
await this._checkMaxLimit('maxSentData', sent);
|
|
248
|
-
const total = received + sent;
|
|
249
|
-
await this._checkMaxLimit('maxData', total);
|
|
250
|
-
log.trace('metrics update', total);
|
|
251
|
-
}
|
|
252
|
-
finally {
|
|
253
|
-
this.timer = retimer(this._checkMetrics, this.opts.pollInterval);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
221
|
onConnect(evt) {
|
|
258
222
|
void this._onConnect(evt).catch(err => {
|
|
259
223
|
log.error(err);
|
|
@@ -279,7 +243,7 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
279
243
|
this.connections.set(peerIdStr, [connection]);
|
|
280
244
|
}
|
|
281
245
|
if (peerId.publicKey != null) {
|
|
282
|
-
await this.components.
|
|
246
|
+
await this.components.peerStore.keyBook.set(peerId, peerId.publicKey);
|
|
283
247
|
}
|
|
284
248
|
const numConnections = this.getConnections().length;
|
|
285
249
|
const toPrune = numConnections - this.opts.maxConnections;
|
|
@@ -304,7 +268,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
304
268
|
else if (storedConn != null) {
|
|
305
269
|
this.connections.delete(peerId);
|
|
306
270
|
this.dispatchEvent(new CustomEvent('peer:disconnect', { detail: connection }));
|
|
307
|
-
this.components.getMetrics()?.onPeerDisconnected(connection.remotePeer);
|
|
308
271
|
}
|
|
309
272
|
}
|
|
310
273
|
getConnections(peerId) {
|
|
@@ -335,7 +298,7 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
335
298
|
catch { }
|
|
336
299
|
}
|
|
337
300
|
try {
|
|
338
|
-
const connection = await this.components.
|
|
301
|
+
const connection = await this.components.dialer.dial(peerId, options);
|
|
339
302
|
let peerConnections = this.connections.get(peerId.toString());
|
|
340
303
|
if (peerConnections == null) {
|
|
341
304
|
peerConnections = [];
|
|
@@ -399,19 +362,16 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
399
362
|
const limit = this.opts[name];
|
|
400
363
|
log.trace('checking limit of %s. current value: %d of %d', name, value, limit);
|
|
401
364
|
if (value > limit) {
|
|
402
|
-
log('%s: limit exceeded: %p, %d/%d, pruning %d connection(s)', this.components.
|
|
403
|
-
await this.
|
|
365
|
+
log('%s: limit exceeded: %p, %d/%d, pruning %d connection(s)', this.components.peerId, name, value, limit, toPrune);
|
|
366
|
+
await this._pruneConnections(toPrune);
|
|
404
367
|
}
|
|
405
368
|
}
|
|
406
369
|
/**
|
|
407
370
|
* If we have more connections than our maximum, select some excess connections
|
|
408
371
|
* to prune based on peer value
|
|
409
372
|
*/
|
|
410
|
-
async
|
|
373
|
+
async _pruneConnections(toPrune) {
|
|
411
374
|
const connections = this.getConnections();
|
|
412
|
-
if (connections.length <= this.opts.minConnections || toPrune < 1) {
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
375
|
const peerValues = new PeerMap();
|
|
416
376
|
// work out peer values
|
|
417
377
|
for (const connection of connections) {
|
|
@@ -419,7 +379,7 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
419
379
|
if (peerValues.has(remotePeer)) {
|
|
420
380
|
continue;
|
|
421
381
|
}
|
|
422
|
-
const tags = await this.components.
|
|
382
|
+
const tags = await this.components.peerStore.getTags(remotePeer);
|
|
423
383
|
// sum all tag values
|
|
424
384
|
peerValues.set(remotePeer, tags.reduce((acc, curr) => {
|
|
425
385
|
return acc + curr.value;
|
|
@@ -461,7 +421,46 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
461
421
|
}));
|
|
462
422
|
}
|
|
463
423
|
async acceptIncomingConnection(maConn) {
|
|
464
|
-
|
|
424
|
+
// check deny list
|
|
425
|
+
const denyConnection = this.deny.some(ma => {
|
|
426
|
+
return maConn.remoteAddr.toString().startsWith(ma.toString());
|
|
427
|
+
});
|
|
428
|
+
if (denyConnection) {
|
|
429
|
+
log('connection from %s refused - connection remote address was in deny list', maConn.remoteAddr);
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
432
|
+
// check allow list
|
|
433
|
+
const allowConnection = this.allow.some(ma => {
|
|
434
|
+
return maConn.remoteAddr.toString().startsWith(ma.toString());
|
|
435
|
+
});
|
|
436
|
+
if (allowConnection) {
|
|
437
|
+
this.incomingPendingConnections++;
|
|
438
|
+
return true;
|
|
439
|
+
}
|
|
440
|
+
// check pending connections
|
|
441
|
+
if (this.incomingPendingConnections === this.opts.maxIncomingPendingConnections) {
|
|
442
|
+
log('connection from %s refused - incomingPendingConnections exceeded by peer %s', maConn.remoteAddr);
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
if (maConn.remoteAddr.isThinWaistAddress()) {
|
|
446
|
+
const host = maConn.remoteAddr.nodeAddress().address;
|
|
447
|
+
try {
|
|
448
|
+
await this.inboundConnectionRateLimiter.consume(host, 1);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
log('connection from %s refused - inboundConnectionThreshold exceeded by host %s', host, maConn.remoteAddr);
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
if (this.getConnections().length < this.opts.maxConnections) {
|
|
456
|
+
this.incomingPendingConnections++;
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
log('connection from %s refused - maxConnections exceeded', maConn.remoteAddr);
|
|
460
|
+
return false;
|
|
461
|
+
}
|
|
462
|
+
afterUpgradeInbound() {
|
|
463
|
+
this.incomingPendingConnections--;
|
|
465
464
|
}
|
|
466
465
|
}
|
|
467
466
|
//# sourceMappingURL=index.js.map
|