libp2p 0.37.3-676cee2 → 0.37.3-6eaab2e
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 +1 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +7 -3
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-manager/dialer/index.d.ts +4 -4
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.js +10 -10
- package/dist/src/connection-manager/dialer/index.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +15 -11
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +169 -62
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/constants.d.ts +4 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +4 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/fetch/index.d.ts +4 -0
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +15 -5
- package/dist/src/fetch/index.js.map +1 -1
- package/dist/src/identify/index.d.ts +1 -1
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +9 -10
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +2 -12
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/metrics/index.d.ts +2 -2
- package/dist/src/metrics/index.d.ts.map +1 -1
- package/dist/src/metrics/index.js +6 -2
- package/dist/src/metrics/index.js.map +1 -1
- package/dist/src/ping/index.d.ts +4 -0
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +16 -6
- package/dist/src/ping/index.js.map +1 -1
- package/dist/src/upgrader.d.ts +6 -0
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +83 -59
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +14 -13
- package/src/config.ts +7 -3
- package/src/connection-manager/dialer/index.ts +10 -10
- package/src/connection-manager/index.ts +220 -76
- package/src/constants.ts +5 -0
- package/src/fetch/index.ts +23 -6
- package/src/identify/index.ts +11 -12
- package/src/libp2p.ts +2 -13
- package/src/metrics/index.ts +8 -4
- package/src/ping/index.ts +24 -8
- package/src/upgrader.ts +95 -61
package/README.md
CHANGED
package/dist/src/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AA4F1D,wBAAgB,cAAc,CAAE,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,UAAU,CAgB9E"}
|
package/dist/src/config.js
CHANGED
|
@@ -22,6 +22,7 @@ const DefaultConfig = {
|
|
|
22
22
|
maxParallelDials: Constants.MAX_PARALLEL_DIALS,
|
|
23
23
|
maxDialsPerPeer: Constants.MAX_PER_PEER_DIALS,
|
|
24
24
|
dialTimeout: Constants.DIAL_TIMEOUT,
|
|
25
|
+
inboundUpgradeTimeout: Constants.INBOUND_UPGRADE_TIMEOUT,
|
|
25
26
|
resolvers: {
|
|
26
27
|
dnsaddr: dnsaddrResolver
|
|
27
28
|
},
|
|
@@ -75,7 +76,8 @@ const DefaultConfig = {
|
|
|
75
76
|
host: {
|
|
76
77
|
agentVersion: AGENT_VERSION
|
|
77
78
|
},
|
|
78
|
-
|
|
79
|
+
// https://github.com/libp2p/go-libp2p/blob/8d2e54e1637041d5cf4fac1e531287560bd1f4ac/p2p/protocol/identify/id.go#L48
|
|
80
|
+
timeout: 60000,
|
|
79
81
|
maxInboundStreams: 1,
|
|
80
82
|
maxOutboundStreams: 1,
|
|
81
83
|
maxPushIncomingStreams: 1,
|
|
@@ -84,12 +86,14 @@ const DefaultConfig = {
|
|
|
84
86
|
ping: {
|
|
85
87
|
protocolPrefix: 'ipfs',
|
|
86
88
|
maxInboundStreams: 1,
|
|
87
|
-
maxOutboundStreams: 1
|
|
89
|
+
maxOutboundStreams: 1,
|
|
90
|
+
timeout: 10000
|
|
88
91
|
},
|
|
89
92
|
fetch: {
|
|
90
93
|
protocolPrefix: 'libp2p',
|
|
91
94
|
maxInboundStreams: 1,
|
|
92
|
-
maxOutboundStreams: 1
|
|
95
|
+
maxOutboundStreams: 1,
|
|
96
|
+
timeout: 10000
|
|
93
97
|
}
|
|
94
98
|
};
|
|
95
99
|
export function validateConfig(opts) {
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,OAAO,MAAM,UAAU,CAAA;AAG9B,MAAM,aAAa,GAAwB;IACzC,SAAS,EAAE;QACT,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,CAAC,UAAuB,EAAE,EAAE,CAAC,UAAU;KACxD;IACD,iBAAiB,EAAE;QACjB,cAAc,EAAE,GAAG;QACnB,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,SAAS,CAAC,kBAAkB;QAC9C,eAAe,EAAE,SAAS,CAAC,kBAAkB;QAC7C,WAAW,EAAE,SAAS,CAAC,YAAY;QACnC,SAAS,EAAE;YACT,OAAO,EAAE,eAAe;SACzB;QACD,aAAa,EAAE,oBAAoB;KACpC;IACD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE;QAChB,cAAc,EAAE,cAAc,CAAC,SAAS;KACzC;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,2BAA2B,EAAE,IAAI;QACjC,sBAAsB,EAAE,IAAI;QAC5B,sBAAsB,EAAE;YACtB,EAAE,GAAG,IAAI;YACT,CAAC,GAAG,EAAE,GAAG,IAAI;YACb,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa;SAC7B;QACD,oBAAoB,EAAE,EAAE;KACzB;IACD,WAAW,EAAE;QACX,cAAc,EAAE;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI;SAChB;KACF;IACD,GAAG,EAAE;QACH,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,SAAS,EAAE,IAAI;KAChB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACT,SAAS,EAAE,cAAc,CAAC,oBAAoB;YAC9C,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,cAAc,CAAC,aAAa;SAClC;QACD,GAAG,EAAE;YACH,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,CAAC;SAChB;KACF;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM;QACtB,IAAI,EAAE;YACJ,YAAY,EAAE,aAAa;SAC5B;QACD,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,sBAAsB,EAAE,CAAC;QACzB,sBAAsB,EAAE,CAAC;KAC1B;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,MAAM;QACtB,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,OAAO,MAAM,UAAU,CAAA;AAG9B,MAAM,aAAa,GAAwB;IACzC,SAAS,EAAE;QACT,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,CAAC,UAAuB,EAAE,EAAE,CAAC,UAAU;KACxD;IACD,iBAAiB,EAAE;QACjB,cAAc,EAAE,GAAG;QACnB,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,SAAS,CAAC,kBAAkB;QAC9C,eAAe,EAAE,SAAS,CAAC,kBAAkB;QAC7C,WAAW,EAAE,SAAS,CAAC,YAAY;QACnC,qBAAqB,EAAE,SAAS,CAAC,uBAAuB;QACxD,SAAS,EAAE;YACT,OAAO,EAAE,eAAe;SACzB;QACD,aAAa,EAAE,oBAAoB;KACpC;IACD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE;QAChB,cAAc,EAAE,cAAc,CAAC,SAAS;KACzC;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,2BAA2B,EAAE,IAAI;QACjC,sBAAsB,EAAE,IAAI;QAC5B,sBAAsB,EAAE;YACtB,EAAE,GAAG,IAAI;YACT,CAAC,GAAG,EAAE,GAAG,IAAI;YACb,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa;SAC7B;QACD,oBAAoB,EAAE,EAAE;KACzB;IACD,WAAW,EAAE;QACX,cAAc,EAAE;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI;SAChB;KACF;IACD,GAAG,EAAE;QACH,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,SAAS,EAAE,IAAI;KAChB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACT,SAAS,EAAE,cAAc,CAAC,oBAAoB;YAC9C,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,cAAc,CAAC,aAAa;SAClC;QACD,GAAG,EAAE;YACH,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,CAAC;SAChB;KACF;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM;QACtB,IAAI,EAAE;YACJ,YAAY,EAAE,aAAa;SAC5B;QACD,oHAAoH;QACpH,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,sBAAsB,EAAE,CAAC;QACzB,sBAAsB,EAAE,CAAC;KAC1B;IACD,IAAI,EAAE;QACJ,cAAc,EAAE,MAAM;QACtB,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK;KACf;IACD,KAAK,EAAE;QACL,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK;KACf;CACF,CAAA;AAED,MAAM,UAAU,cAAc,CAAE,IAAkC;IAChE,MAAM,gBAAgB,GAAe,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAEtE,IAAI,gBAAgB,CAAC,UAAU,IAAI,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QACjF,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAA;KAC1F;IAED,IAAI,gBAAgB,CAAC,oBAAoB,IAAI,IAAI,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;QACvG,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAA;KAC5F;IAED,IAAI,gBAAgB,CAAC,mBAAmB,KAAK,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,+BAA+B;QACxI,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;KACxF;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
|
|
@@ -78,14 +78,14 @@ export declare class Dialer implements Startable, Initializable {
|
|
|
78
78
|
* The dial to the first address that is successfully able to upgrade a connection
|
|
79
79
|
* will be used.
|
|
80
80
|
*/
|
|
81
|
-
_createCancellableDialTarget(peer: PeerId): Promise<DialTarget>;
|
|
81
|
+
_createCancellableDialTarget(peer: PeerId, options: AbortOptions): Promise<DialTarget>;
|
|
82
82
|
/**
|
|
83
83
|
* Creates a DialTarget. The DialTarget is used to create and track
|
|
84
84
|
* the DialRequest to a given peer.
|
|
85
85
|
* If a multiaddr is received it should be the first address attempted.
|
|
86
86
|
* Multiaddrs not supported by the available transports will be filtered out.
|
|
87
87
|
*/
|
|
88
|
-
_createDialTarget(peer: PeerId): Promise<DialTarget>;
|
|
88
|
+
_createDialTarget(peer: PeerId, options: AbortOptions): Promise<DialTarget>;
|
|
89
89
|
/**
|
|
90
90
|
* Creates a PendingDial that wraps the underlying DialRequest
|
|
91
91
|
*/
|
|
@@ -95,10 +95,10 @@ export declare class Dialer implements Startable, Initializable {
|
|
|
95
95
|
/**
|
|
96
96
|
* Resolve multiaddr recursively
|
|
97
97
|
*/
|
|
98
|
-
_resolve(ma: Multiaddr): Promise<Multiaddr[]>;
|
|
98
|
+
_resolve(ma: Multiaddr, options: AbortOptions): Promise<Multiaddr[]>;
|
|
99
99
|
/**
|
|
100
100
|
* Resolve a given multiaddr. If this fails, an empty array will be returned
|
|
101
101
|
*/
|
|
102
|
-
_resolveRecord(ma: Multiaddr): Promise<Multiaddr[]>;
|
|
102
|
+
_resolveRecord(ma: Multiaddr, options: AbortOptions): Promise<Multiaddr[]>;
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,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;AAGvD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAQxE,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;IACpC,OAAO,CAAC,EAAE,uBAAuB,CAAA;CAClC;AAED,qBAAa,MAAO,YAAW,SAAS,EAAE,aAAa;IACrD,OAAO,CAAC,UAAU,CAA+B;IACjD,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,IAAI,GAAE,UAAe;IAuBlC,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAInC,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,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,7 +91,7 @@ export class Dialer {
|
|
|
91
91
|
throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED);
|
|
92
92
|
}
|
|
93
93
|
log('creating dial target for %p', id);
|
|
94
|
-
const dialTarget = await this._createCancellableDialTarget(id);
|
|
94
|
+
const dialTarget = await this._createCancellableDialTarget(id, options);
|
|
95
95
|
if (dialTarget.addrs.length === 0) {
|
|
96
96
|
throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES);
|
|
97
97
|
}
|
|
@@ -119,7 +119,7 @@ export class Dialer {
|
|
|
119
119
|
* The dial to the first address that is successfully able to upgrade a connection
|
|
120
120
|
* will be used.
|
|
121
121
|
*/
|
|
122
|
-
async _createCancellableDialTarget(peer) {
|
|
122
|
+
async _createCancellableDialTarget(peer, options) {
|
|
123
123
|
// Make dial target promise cancellable
|
|
124
124
|
const id = `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
|
|
125
125
|
const cancellablePromise = new Promise((resolve, reject) => {
|
|
@@ -127,7 +127,7 @@ export class Dialer {
|
|
|
127
127
|
});
|
|
128
128
|
try {
|
|
129
129
|
const dialTarget = await Promise.race([
|
|
130
|
-
this._createDialTarget(peer),
|
|
130
|
+
this._createDialTarget(peer, options),
|
|
131
131
|
cancellablePromise
|
|
132
132
|
]);
|
|
133
133
|
return dialTarget;
|
|
@@ -142,7 +142,7 @@ export class Dialer {
|
|
|
142
142
|
* If a multiaddr is received it should be the first address attempted.
|
|
143
143
|
* Multiaddrs not supported by the available transports will be filtered out.
|
|
144
144
|
*/
|
|
145
|
-
async _createDialTarget(peer) {
|
|
145
|
+
async _createDialTarget(peer, options) {
|
|
146
146
|
const knownAddrs = await pipe(await this.components.getPeerStore().addressBook.get(peer), (source) => filter(source, async (address) => {
|
|
147
147
|
return !(await this.components.getConnectionGater().denyDialMultiaddr(peer, address.multiaddr));
|
|
148
148
|
}), (source) => sort(source, this.addressSorter), (source) => map(source, (address) => {
|
|
@@ -154,7 +154,7 @@ export class Dialer {
|
|
|
154
154
|
}), async (source) => await all(source));
|
|
155
155
|
const addrs = [];
|
|
156
156
|
for (const a of knownAddrs) {
|
|
157
|
-
const resolvedAddrs = await this._resolve(a);
|
|
157
|
+
const resolvedAddrs = await this._resolve(a, options);
|
|
158
158
|
resolvedAddrs.forEach(ra => addrs.push(ra));
|
|
159
159
|
}
|
|
160
160
|
// Multiaddrs not supported by the available transports will be filtered out.
|
|
@@ -228,7 +228,7 @@ export class Dialer {
|
|
|
228
228
|
/**
|
|
229
229
|
* Resolve multiaddr recursively
|
|
230
230
|
*/
|
|
231
|
-
async _resolve(ma) {
|
|
231
|
+
async _resolve(ma, options) {
|
|
232
232
|
// TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place
|
|
233
233
|
// Now only supporting resolve for dnsaddr
|
|
234
234
|
const resolvableProto = ma.protoNames().includes('dnsaddr');
|
|
@@ -236,9 +236,9 @@ export class Dialer {
|
|
|
236
236
|
if (!resolvableProto) {
|
|
237
237
|
return [ma];
|
|
238
238
|
}
|
|
239
|
-
const resolvedMultiaddrs = await this._resolveRecord(ma);
|
|
239
|
+
const resolvedMultiaddrs = await this._resolveRecord(ma, options);
|
|
240
240
|
const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map(async (nm) => {
|
|
241
|
-
return await this._resolve(nm);
|
|
241
|
+
return await this._resolve(nm, options);
|
|
242
242
|
}));
|
|
243
243
|
const addrs = recursiveMultiaddrs.flat();
|
|
244
244
|
return addrs.reduce((array, newM) => {
|
|
@@ -251,10 +251,10 @@ export class Dialer {
|
|
|
251
251
|
/**
|
|
252
252
|
* Resolve a given multiaddr. If this fails, an empty array will be returned
|
|
253
253
|
*/
|
|
254
|
-
async _resolveRecord(ma) {
|
|
254
|
+
async _resolveRecord(ma, options) {
|
|
255
255
|
try {
|
|
256
256
|
ma = new Multiaddr(ma.toString()); // Use current multiaddr module
|
|
257
|
-
const multiaddrs = await ma.resolve();
|
|
257
|
+
const multiaddrs = await ma.resolve(options);
|
|
258
258
|
return multiaddrs;
|
|
259
259
|
}
|
|
260
260
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,10 +42,6 @@ export interface ConnectionManagerInit {
|
|
|
42
42
|
* How often, in milliseconds, to compute averages
|
|
43
43
|
*/
|
|
44
44
|
movingAverageInterval?: number;
|
|
45
|
-
/**
|
|
46
|
-
* The value of the peer
|
|
47
|
-
*/
|
|
48
|
-
defaultPeerValue?: number;
|
|
49
45
|
/**
|
|
50
46
|
* If true, try to connect to all discovered peers up to the connection manager limit
|
|
51
47
|
*/
|
|
@@ -68,9 +64,15 @@ export interface ConnectionManagerInit {
|
|
|
68
64
|
*/
|
|
69
65
|
maxAddrsToDial?: number;
|
|
70
66
|
/**
|
|
71
|
-
* How long a dial attempt is allowed to take
|
|
67
|
+
* How long a dial attempt is allowed to take, including DNS resolution
|
|
68
|
+
* of the multiaddr, opening a socket and upgrading it to a Connection.
|
|
72
69
|
*/
|
|
73
70
|
dialTimeout?: number;
|
|
71
|
+
/**
|
|
72
|
+
* When a new inbound connection is opened, the upgrade process (e.g. protect,
|
|
73
|
+
* encrypt, multiplex etc) must complete within this number of ms.
|
|
74
|
+
*/
|
|
75
|
+
inboundUpgradeTimeout: number;
|
|
74
76
|
/**
|
|
75
77
|
* Number of max concurrent dials per peer
|
|
76
78
|
*/
|
|
@@ -79,6 +81,11 @@ export interface ConnectionManagerInit {
|
|
|
79
81
|
* Multiaddr resolvers to use when dialing
|
|
80
82
|
*/
|
|
81
83
|
resolvers?: Record<string, Resolver>;
|
|
84
|
+
/**
|
|
85
|
+
* On startup we try to dial any peer that has previously been
|
|
86
|
+
* tagged with KEEP_ALIVE up to this timeout in ms. (default: 60000)
|
|
87
|
+
*/
|
|
88
|
+
startupReconnectTimeout?: number;
|
|
82
89
|
}
|
|
83
90
|
export interface ConnectionManagerEvents {
|
|
84
91
|
'peer:connect': CustomEvent<PeerId>;
|
|
@@ -91,11 +98,13 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
91
98
|
readonly dialer: Dialer;
|
|
92
99
|
private components;
|
|
93
100
|
private readonly opts;
|
|
94
|
-
private readonly peerValues;
|
|
95
101
|
private readonly connections;
|
|
96
102
|
private started;
|
|
97
103
|
private timer?;
|
|
98
104
|
private readonly latencyMonitor;
|
|
105
|
+
private readonly startupReconnectTimeout;
|
|
106
|
+
private connectOnStartupController?;
|
|
107
|
+
private readonly dialTimeout;
|
|
99
108
|
constructor(init: ConnectionManagerInit);
|
|
100
109
|
init(components: Components): void;
|
|
101
110
|
isStarted(): boolean;
|
|
@@ -114,11 +123,6 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
114
123
|
* Cleans up the connections
|
|
115
124
|
*/
|
|
116
125
|
_close(): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Sets the value of the given peer. Peers with lower values
|
|
119
|
-
* will be disconnected first.
|
|
120
|
-
*/
|
|
121
|
-
setPeerValue(peerId: PeerId, value: number): void;
|
|
122
126
|
/**
|
|
123
127
|
* Checks the libp2p metrics to determine if any values have exceeded
|
|
124
128
|
* the configured maximums.
|
|
@@ -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;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,15 @@ import { LatencyMonitor } from './latency-monitor.js';
|
|
|
5
5
|
// @ts-expect-error retimer does not have types
|
|
6
6
|
import retimer from 'retimer';
|
|
7
7
|
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
8
|
-
import { trackedMap } from '@libp2p/tracked-map';
|
|
9
8
|
import { codes } from '../errors.js';
|
|
10
9
|
import { isPeerId } from '@libp2p/interface-peer-id';
|
|
11
10
|
import { setMaxListeners } from 'events';
|
|
12
11
|
import { Components } from '@libp2p/components';
|
|
13
12
|
import * as STATUS from '@libp2p/interface-connection/status';
|
|
14
13
|
import { Dialer } from './dialer/index.js';
|
|
14
|
+
import { PeerMap } from '@libp2p/peer-collections';
|
|
15
|
+
import { TimeoutController } from 'timeout-abort-controller';
|
|
16
|
+
import { KEEP_ALIVE } from '@libp2p/interface-peer-store/tags';
|
|
15
17
|
const log = logger('libp2p:connection-manager');
|
|
16
18
|
const defaultOptions = {
|
|
17
19
|
maxConnections: Infinity,
|
|
@@ -22,12 +24,11 @@ const defaultOptions = {
|
|
|
22
24
|
maxEventLoopDelay: Infinity,
|
|
23
25
|
pollInterval: 2000,
|
|
24
26
|
autoDialInterval: 10000,
|
|
25
|
-
movingAverageInterval: 60000
|
|
26
|
-
defaultPeerValue: 0.5
|
|
27
|
+
movingAverageInterval: 60000
|
|
27
28
|
};
|
|
29
|
+
const METRICS_SYSTEM = 'libp2p';
|
|
28
30
|
const METRICS_COMPONENT = 'connection-manager';
|
|
29
|
-
const
|
|
30
|
-
const METRICS_PEER_VALUES = 'peer-values';
|
|
31
|
+
const STARTUP_RECONNECT_TIMEOUT = 60000;
|
|
31
32
|
/**
|
|
32
33
|
* Responsible for managing known connections.
|
|
33
34
|
*/
|
|
@@ -40,24 +41,10 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
40
41
|
throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS);
|
|
41
42
|
}
|
|
42
43
|
log('options: %o', this.opts);
|
|
43
|
-
/**
|
|
44
|
-
* Map of peer identifiers to their peer value for pruning connections.
|
|
45
|
-
*
|
|
46
|
-
* @type {Map<string, number>}
|
|
47
|
-
*/
|
|
48
|
-
this.peerValues = trackedMap({
|
|
49
|
-
component: METRICS_COMPONENT,
|
|
50
|
-
metric: METRICS_PEER_VALUES,
|
|
51
|
-
metrics: this.components.getMetrics()
|
|
52
|
-
});
|
|
53
44
|
/**
|
|
54
45
|
* Map of connections per peer
|
|
55
46
|
*/
|
|
56
|
-
this.connections =
|
|
57
|
-
component: METRICS_COMPONENT,
|
|
58
|
-
metric: METRICS_PEER_CONNECTIONS,
|
|
59
|
-
metrics: this.components.getMetrics()
|
|
60
|
-
});
|
|
47
|
+
this.connections = new Map();
|
|
61
48
|
this.started = false;
|
|
62
49
|
this._checkMetrics = this._checkMetrics.bind(this);
|
|
63
50
|
this.latencyMonitor = new LatencyMonitor({
|
|
@@ -72,10 +59,85 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
72
59
|
this.dialer = new Dialer(this.opts);
|
|
73
60
|
this.onConnect = this.onConnect.bind(this);
|
|
74
61
|
this.onDisconnect = this.onDisconnect.bind(this);
|
|
62
|
+
this.startupReconnectTimeout = init.startupReconnectTimeout ?? STARTUP_RECONNECT_TIMEOUT;
|
|
63
|
+
this.dialTimeout = init.dialTimeout ?? 30000;
|
|
75
64
|
}
|
|
76
65
|
init(components) {
|
|
77
66
|
this.components = components;
|
|
78
67
|
this.dialer.init(components);
|
|
68
|
+
// track inbound/outbound connections
|
|
69
|
+
this.components.getMetrics()?.updateComponentMetric({
|
|
70
|
+
system: METRICS_SYSTEM,
|
|
71
|
+
component: METRICS_COMPONENT,
|
|
72
|
+
metric: 'connections',
|
|
73
|
+
label: 'direction',
|
|
74
|
+
value: () => {
|
|
75
|
+
const metric = {
|
|
76
|
+
inbound: 0,
|
|
77
|
+
outbound: 0
|
|
78
|
+
};
|
|
79
|
+
for (const conns of this.connections.values()) {
|
|
80
|
+
for (const conn of conns) {
|
|
81
|
+
if (conn.stat.direction === 'inbound') {
|
|
82
|
+
metric.inbound++;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
metric.outbound++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return metric;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// track total number of streams per protocol
|
|
93
|
+
this.components.getMetrics()?.updateComponentMetric({
|
|
94
|
+
system: METRICS_SYSTEM,
|
|
95
|
+
component: METRICS_COMPONENT,
|
|
96
|
+
metric: 'protocol-streams-total',
|
|
97
|
+
label: 'protocol',
|
|
98
|
+
value: () => {
|
|
99
|
+
const metric = {};
|
|
100
|
+
for (const conns of this.connections.values()) {
|
|
101
|
+
for (const conn of conns) {
|
|
102
|
+
for (const stream of conn.streams) {
|
|
103
|
+
const key = `${stream.stat.direction} ${stream.stat.protocol ?? 'unnegotiated'}`;
|
|
104
|
+
metric[key] = (metric[key] ?? 0) + 1;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return metric;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// track 90th percentile of streams per protocol
|
|
112
|
+
this.components.getMetrics()?.updateComponentMetric({
|
|
113
|
+
system: METRICS_SYSTEM,
|
|
114
|
+
component: METRICS_COMPONENT,
|
|
115
|
+
metric: 'protocol-streams-per-connection-90th-percentile',
|
|
116
|
+
label: 'protocol',
|
|
117
|
+
value: () => {
|
|
118
|
+
const allStreams = {};
|
|
119
|
+
for (const conns of this.connections.values()) {
|
|
120
|
+
for (const conn of conns) {
|
|
121
|
+
const streams = {};
|
|
122
|
+
for (const stream of conn.streams) {
|
|
123
|
+
const key = `${stream.stat.direction} ${stream.stat.protocol ?? 'unnegotiated'}`;
|
|
124
|
+
streams[key] = (streams[key] ?? 0) + 1;
|
|
125
|
+
}
|
|
126
|
+
for (const [protocol, count] of Object.entries(streams)) {
|
|
127
|
+
allStreams[protocol] = allStreams[protocol] ?? [];
|
|
128
|
+
allStreams[protocol].push(count);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const metric = {};
|
|
133
|
+
for (let [protocol, counts] of Object.entries(allStreams)) {
|
|
134
|
+
counts = counts.sort((a, b) => a - b);
|
|
135
|
+
const index = Math.floor(counts.length * 0.9);
|
|
136
|
+
metric[protocol] = counts[index];
|
|
137
|
+
}
|
|
138
|
+
return metric;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
79
141
|
}
|
|
80
142
|
isStarted() {
|
|
81
143
|
return this.started;
|
|
@@ -99,8 +161,35 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
99
161
|
async afterStart() {
|
|
100
162
|
this.components.getUpgrader().addEventListener('connection', this.onConnect);
|
|
101
163
|
this.components.getUpgrader().addEventListener('connectionEnd', this.onDisconnect);
|
|
164
|
+
// re-connect to any peers with the KEEP_ALIVE tag
|
|
165
|
+
void Promise.resolve()
|
|
166
|
+
.then(async () => {
|
|
167
|
+
const keepAlivePeers = [];
|
|
168
|
+
for (const peer of await this.components.getPeerStore().all()) {
|
|
169
|
+
const tags = await this.components.getPeerStore().getTags(peer.id);
|
|
170
|
+
const hasKeepAlive = tags.filter(tag => tag.name === KEEP_ALIVE).length > 0;
|
|
171
|
+
if (hasKeepAlive) {
|
|
172
|
+
keepAlivePeers.push(peer.id);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.connectOnStartupController?.clear();
|
|
176
|
+
this.connectOnStartupController = new TimeoutController(this.startupReconnectTimeout);
|
|
177
|
+
await Promise.all(keepAlivePeers.map(async (peer) => {
|
|
178
|
+
await this.openConnection(peer, {
|
|
179
|
+
signal: this.connectOnStartupController?.signal
|
|
180
|
+
})
|
|
181
|
+
.catch(err => {
|
|
182
|
+
log.error(err);
|
|
183
|
+
});
|
|
184
|
+
}));
|
|
185
|
+
})
|
|
186
|
+
.finally(() => {
|
|
187
|
+
this.connectOnStartupController?.clear();
|
|
188
|
+
});
|
|
102
189
|
}
|
|
103
190
|
async beforeStop() {
|
|
191
|
+
// if we are still dialing KEEP_ALIVE peers, abort those dials
|
|
192
|
+
this.connectOnStartupController?.abort();
|
|
104
193
|
this.components.getUpgrader().removeEventListener('connection', this.onConnect);
|
|
105
194
|
this.components.getUpgrader().removeEventListener('connectionEnd', this.onDisconnect);
|
|
106
195
|
}
|
|
@@ -138,16 +227,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
138
227
|
await Promise.all(tasks);
|
|
139
228
|
this.connections.clear();
|
|
140
229
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Sets the value of the given peer. Peers with lower values
|
|
143
|
-
* will be disconnected first.
|
|
144
|
-
*/
|
|
145
|
-
setPeerValue(peerId, value) {
|
|
146
|
-
if (value < 0 || value > 1) {
|
|
147
|
-
throw new Error('value should be a number between 0 and 1');
|
|
148
|
-
}
|
|
149
|
-
this.peerValues.set(peerId.toString(), value);
|
|
150
|
-
}
|
|
151
230
|
/**
|
|
152
231
|
* Checks the libp2p metrics to determine if any values have exceeded
|
|
153
232
|
* the configured maximums.
|
|
@@ -199,9 +278,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
199
278
|
if (peerId.publicKey != null) {
|
|
200
279
|
await this.components.getPeerStore().keyBook.set(peerId, peerId.publicKey);
|
|
201
280
|
}
|
|
202
|
-
if (!this.peerValues.has(peerIdStr)) {
|
|
203
|
-
this.peerValues.set(peerIdStr, this.opts.defaultPeerValue);
|
|
204
|
-
}
|
|
205
281
|
const numConnections = this.getConnections().length;
|
|
206
282
|
const toPrune = numConnections - this.opts.maxConnections;
|
|
207
283
|
await this._checkMaxLimit('maxConnections', numConnections, toPrune);
|
|
@@ -224,7 +300,6 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
224
300
|
}
|
|
225
301
|
else if (storedConn != null) {
|
|
226
302
|
this.connections.delete(peerId);
|
|
227
|
-
this.peerValues.delete(connection.remotePeer.toString());
|
|
228
303
|
this.dispatchEvent(new CustomEvent('peer:disconnect', { detail: connection }));
|
|
229
304
|
this.components.getMetrics()?.onPeerDisconnected(connection.remotePeer);
|
|
230
305
|
}
|
|
@@ -239,32 +314,44 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
239
314
|
}
|
|
240
315
|
return conns;
|
|
241
316
|
}
|
|
242
|
-
async openConnection(peerId, options) {
|
|
317
|
+
async openConnection(peerId, options = {}) {
|
|
243
318
|
log('dial to %p', peerId);
|
|
244
319
|
const existingConnections = this.getConnections(peerId);
|
|
245
320
|
if (existingConnections.length > 0) {
|
|
246
321
|
log('had an existing connection to %p', peerId);
|
|
247
322
|
return existingConnections[0];
|
|
248
323
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
this.connections.set(peerId.toString(), peerConnections);
|
|
324
|
+
let timeoutController;
|
|
325
|
+
if (options?.signal == null) {
|
|
326
|
+
timeoutController = new TimeoutController(this.dialTimeout);
|
|
327
|
+
options.signal = timeoutController.signal;
|
|
254
328
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
trackedConnection = true;
|
|
329
|
+
try {
|
|
330
|
+
const connection = await this.dialer.dial(peerId, options);
|
|
331
|
+
let peerConnections = this.connections.get(peerId.toString());
|
|
332
|
+
if (peerConnections == null) {
|
|
333
|
+
peerConnections = [];
|
|
334
|
+
this.connections.set(peerId.toString(), peerConnections);
|
|
262
335
|
}
|
|
336
|
+
// we get notified of connections via the Upgrader emitting "connection"
|
|
337
|
+
// events, double check we aren't already tracking this connection before
|
|
338
|
+
// storing it
|
|
339
|
+
let trackedConnection = false;
|
|
340
|
+
for (const conn of peerConnections) {
|
|
341
|
+
if (conn.id === connection.id) {
|
|
342
|
+
trackedConnection = true;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (!trackedConnection) {
|
|
346
|
+
peerConnections.push(connection);
|
|
347
|
+
}
|
|
348
|
+
return connection;
|
|
263
349
|
}
|
|
264
|
-
|
|
265
|
-
|
|
350
|
+
finally {
|
|
351
|
+
if (timeoutController != null) {
|
|
352
|
+
timeoutController.clear();
|
|
353
|
+
}
|
|
266
354
|
}
|
|
267
|
-
return connection;
|
|
268
355
|
}
|
|
269
356
|
async closeConnections(peerId) {
|
|
270
357
|
const connections = this.connections.get(peerId.toString()) ?? [];
|
|
@@ -304,7 +391,7 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
304
391
|
const limit = this.opts[name];
|
|
305
392
|
log.trace('checking limit of %s. current value: %d of %d', name, value, limit);
|
|
306
393
|
if (value > limit) {
|
|
307
|
-
log('%s: limit exceeded: %p, %d, pruning %d connection(s)', this.components.getPeerId(), name, value, toPrune);
|
|
394
|
+
log('%s: limit exceeded: %p, %d/%d, pruning %d connection(s)', this.components.getPeerId(), name, value, limit, toPrune);
|
|
308
395
|
await this._maybePruneConnections(toPrune);
|
|
309
396
|
}
|
|
310
397
|
}
|
|
@@ -317,18 +404,38 @@ export class DefaultConnectionManager extends EventEmitter {
|
|
|
317
404
|
if (connections.length <= this.opts.minConnections || toPrune < 1) {
|
|
318
405
|
return;
|
|
319
406
|
}
|
|
320
|
-
const peerValues =
|
|
321
|
-
|
|
407
|
+
const peerValues = new PeerMap();
|
|
408
|
+
// work out peer values
|
|
409
|
+
for (const connection of connections) {
|
|
410
|
+
const remotePeer = connection.remotePeer;
|
|
411
|
+
if (peerValues.has(remotePeer)) {
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
const tags = await this.components.getPeerStore().getTags(remotePeer);
|
|
415
|
+
// sum all tag values
|
|
416
|
+
peerValues.set(remotePeer, tags.reduce((acc, curr) => {
|
|
417
|
+
return acc + curr.value;
|
|
418
|
+
}, 0));
|
|
419
|
+
}
|
|
420
|
+
// sort by value, lowest to highest
|
|
421
|
+
const sortedConnections = connections.sort((a, b) => {
|
|
422
|
+
const peerAValue = peerValues.get(a.remotePeer) ?? 0;
|
|
423
|
+
const peerBValue = peerValues.get(b.remotePeer) ?? 0;
|
|
424
|
+
if (peerAValue > peerBValue) {
|
|
425
|
+
return 1;
|
|
426
|
+
}
|
|
427
|
+
if (peerAValue < peerBValue) {
|
|
428
|
+
return -1;
|
|
429
|
+
}
|
|
430
|
+
return 0;
|
|
431
|
+
});
|
|
432
|
+
// close some connections
|
|
322
433
|
const toClose = [];
|
|
323
|
-
for (const
|
|
324
|
-
log('too many connections open - closing a connection to %p',
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
}
|
|
329
|
-
if (toClose.length === toPrune) {
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
434
|
+
for (const connection of sortedConnections) {
|
|
435
|
+
log('too many connections open - closing a connection to %p', connection.remotePeer);
|
|
436
|
+
toClose.push(connection);
|
|
437
|
+
if (toClose.length === toPrune) {
|
|
438
|
+
break;
|
|
332
439
|
}
|
|
333
440
|
}
|
|
334
441
|
// close connections
|