libp2p 0.36.2-fab4f13 → 0.37.0-d5386df

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.
Files changed (180) hide show
  1. package/dist/src/address-manager/index.d.ts +2 -1
  2. package/dist/src/address-manager/index.d.ts.map +1 -1
  3. package/dist/src/address-manager/index.js +1 -1
  4. package/dist/src/address-manager/index.js.map +1 -1
  5. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  6. package/dist/src/circuit/auto-relay.js +7 -6
  7. package/dist/src/circuit/auto-relay.js.map +1 -1
  8. package/dist/src/circuit/circuit/hop.d.ts +1 -1
  9. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  10. package/dist/src/circuit/circuit/hop.js +4 -4
  11. package/dist/src/circuit/circuit/hop.js.map +1 -1
  12. package/dist/src/circuit/index.d.ts +1 -1
  13. package/dist/src/circuit/index.d.ts.map +1 -1
  14. package/dist/src/circuit/listener.d.ts +3 -3
  15. package/dist/src/circuit/listener.d.ts.map +1 -1
  16. package/dist/src/circuit/listener.js +10 -2
  17. package/dist/src/circuit/listener.js.map +1 -1
  18. package/dist/src/circuit/pb/index.d.ts +5 -4
  19. package/dist/src/circuit/pb/index.d.ts.map +1 -1
  20. package/dist/src/circuit/pb/index.js +28 -2
  21. package/dist/src/circuit/pb/index.js.map +1 -1
  22. package/dist/src/circuit/transport.d.ts.map +1 -1
  23. package/dist/src/circuit/transport.js +7 -5
  24. package/dist/src/circuit/transport.js.map +1 -1
  25. package/dist/src/config.d.ts.map +1 -1
  26. package/dist/src/config.js +5 -7
  27. package/dist/src/config.js.map +1 -1
  28. package/dist/src/connection-manager/auto-dialler.d.ts +1 -1
  29. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  30. package/dist/src/connection-manager/auto-dialler.js +4 -4
  31. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  32. package/dist/src/{dialer → connection-manager/dialer}/auto-dialer.d.ts +2 -0
  33. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
  34. package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
  35. package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
  36. package/dist/src/{dialer → connection-manager/dialer}/dial-request.d.ts +2 -2
  37. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
  38. package/dist/src/{dialer → connection-manager/dialer}/dial-request.js +1 -1
  39. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
  40. package/dist/src/{dialer → connection-manager/dialer}/index.d.ts +37 -8
  41. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
  42. package/dist/src/{dialer → connection-manager/dialer}/index.js +10 -23
  43. package/dist/src/connection-manager/dialer/index.js.map +1 -0
  44. package/dist/src/connection-manager/index.d.ts +57 -26
  45. package/dist/src/connection-manager/index.d.ts.map +1 -1
  46. package/dist/src/connection-manager/index.js +80 -42
  47. package/dist/src/connection-manager/index.js.map +1 -1
  48. package/dist/src/connection-manager/latency-monitor.d.ts +1 -1
  49. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  50. package/dist/src/connection-manager/latency-monitor.js +1 -1
  51. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  52. package/dist/src/connection-manager/visibility-change-emitter.d.ts +1 -1
  53. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  54. package/dist/src/connection-manager/visibility-change-emitter.js +1 -1
  55. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -1
  56. package/dist/src/content-routing/index.d.ts +2 -1
  57. package/dist/src/content-routing/index.d.ts.map +1 -1
  58. package/dist/src/content-routing/index.js.map +1 -1
  59. package/dist/src/dht/dummy-dht.d.ts +4 -1
  60. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  61. package/dist/src/dht/dummy-dht.js +8 -1
  62. package/dist/src/dht/dummy-dht.js.map +1 -1
  63. package/dist/src/fetch/index.d.ts +1 -1
  64. package/dist/src/fetch/index.d.ts.map +1 -1
  65. package/dist/src/fetch/index.js +1 -1
  66. package/dist/src/fetch/index.js.map +1 -1
  67. package/dist/src/fetch/pb/proto.d.ts +4 -3
  68. package/dist/src/fetch/pb/proto.d.ts.map +1 -1
  69. package/dist/src/fetch/pb/proto.js +7 -1
  70. package/dist/src/fetch/pb/proto.js.map +1 -1
  71. package/dist/src/identify/index.d.ts +1 -1
  72. package/dist/src/identify/index.d.ts.map +1 -1
  73. package/dist/src/identify/index.js +4 -4
  74. package/dist/src/identify/index.js.map +1 -1
  75. package/dist/src/identify/pb/message.d.ts +2 -1
  76. package/dist/src/identify/pb/message.d.ts.map +1 -1
  77. package/dist/src/identify/pb/message.js.map +1 -1
  78. package/dist/src/index.d.ts +7 -24
  79. package/dist/src/index.d.ts.map +1 -1
  80. package/dist/src/index.js.map +1 -1
  81. package/dist/src/insecure/pb/proto.d.ts +4 -3
  82. package/dist/src/insecure/pb/proto.d.ts.map +1 -1
  83. package/dist/src/insecure/pb/proto.js +8 -1
  84. package/dist/src/insecure/pb/proto.js.map +1 -1
  85. package/dist/src/keychain/index.d.ts +0 -1
  86. package/dist/src/keychain/index.d.ts.map +1 -1
  87. package/dist/src/keychain/index.js +0 -1
  88. package/dist/src/keychain/index.js.map +1 -1
  89. package/dist/src/libp2p.d.ts +4 -2
  90. package/dist/src/libp2p.d.ts.map +1 -1
  91. package/dist/src/libp2p.js +57 -43
  92. package/dist/src/libp2p.js.map +1 -1
  93. package/dist/src/metrics/index.d.ts +1 -1
  94. package/dist/src/metrics/index.d.ts.map +1 -1
  95. package/dist/src/metrics/stats.d.ts +1 -1
  96. package/dist/src/metrics/stats.d.ts.map +1 -1
  97. package/dist/src/metrics/stats.js +1 -1
  98. package/dist/src/metrics/stats.js.map +1 -1
  99. package/dist/src/nat-manager.d.ts +6 -3
  100. package/dist/src/nat-manager.d.ts.map +1 -1
  101. package/dist/src/nat-manager.js +6 -3
  102. package/dist/src/nat-manager.js.map +1 -1
  103. package/dist/src/peer-record-updater.d.ts +1 -1
  104. package/dist/src/peer-record-updater.d.ts.map +1 -1
  105. package/dist/src/peer-routing.d.ts +2 -1
  106. package/dist/src/peer-routing.d.ts.map +1 -1
  107. package/dist/src/peer-routing.js.map +1 -1
  108. package/dist/src/ping/index.d.ts +1 -1
  109. package/dist/src/ping/index.d.ts.map +1 -1
  110. package/dist/src/ping/index.js +2 -1
  111. package/dist/src/ping/index.js.map +1 -1
  112. package/dist/src/pnet/index.d.ts +1 -0
  113. package/dist/src/pnet/index.d.ts.map +1 -1
  114. package/dist/src/pnet/index.js +1 -0
  115. package/dist/src/pnet/index.js.map +1 -1
  116. package/dist/src/pnet/key-generator.d.ts +1 -1
  117. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  118. package/dist/src/pnet/key-generator.js +1 -1
  119. package/dist/src/pnet/key-generator.js.map +1 -1
  120. package/dist/src/pubsub/dummy-pubsub.d.ts +1 -1
  121. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -1
  122. package/dist/src/pubsub/dummy-pubsub.js +1 -1
  123. package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
  124. package/dist/src/registrar.d.ts +0 -1
  125. package/dist/src/registrar.d.ts.map +1 -1
  126. package/dist/src/registrar.js +2 -17
  127. package/dist/src/registrar.js.map +1 -1
  128. package/dist/src/transport-manager.d.ts +3 -1
  129. package/dist/src/transport-manager.d.ts.map +1 -1
  130. package/dist/src/transport-manager.js +1 -1
  131. package/dist/src/transport-manager.js.map +1 -1
  132. package/dist/src/upgrader.d.ts +1 -1
  133. package/dist/src/upgrader.d.ts.map +1 -1
  134. package/dist/src/upgrader.js +1 -1
  135. package/dist/src/upgrader.js.map +1 -1
  136. package/package.json +16 -25
  137. package/src/address-manager/index.ts +2 -1
  138. package/src/circuit/auto-relay.ts +8 -6
  139. package/src/circuit/circuit/hop.ts +5 -5
  140. package/src/circuit/index.ts +1 -1
  141. package/src/circuit/listener.ts +18 -5
  142. package/src/circuit/pb/index.ts +33 -4
  143. package/src/circuit/transport.ts +8 -5
  144. package/src/config.ts +5 -7
  145. package/src/connection-manager/auto-dialler.ts +5 -5
  146. package/src/{dialer → connection-manager/dialer}/auto-dialer.ts +23 -4
  147. package/src/{dialer → connection-manager/dialer}/dial-request.ts +4 -4
  148. package/src/{dialer → connection-manager/dialer}/index.ts +48 -37
  149. package/src/connection-manager/index.ts +146 -60
  150. package/src/connection-manager/latency-monitor.ts +1 -1
  151. package/src/connection-manager/visibility-change-emitter.ts +1 -1
  152. package/src/content-routing/index.ts +2 -1
  153. package/src/dht/dummy-dht.ts +10 -1
  154. package/src/fetch/index.ts +2 -2
  155. package/src/fetch/pb/proto.ts +10 -3
  156. package/src/identify/index.ts +5 -5
  157. package/src/identify/pb/message.ts +2 -1
  158. package/src/index.ts +7 -28
  159. package/src/insecure/pb/proto.ts +11 -4
  160. package/src/keychain/index.ts +0 -1
  161. package/src/libp2p.ts +68 -49
  162. package/src/metrics/index.ts +1 -1
  163. package/src/metrics/stats.ts +1 -1
  164. package/src/nat-manager.ts +8 -4
  165. package/src/peer-record-updater.ts +1 -1
  166. package/src/peer-routing.ts +2 -1
  167. package/src/ping/index.ts +3 -2
  168. package/src/pnet/index.ts +2 -0
  169. package/src/pnet/key-generator.ts +1 -1
  170. package/src/pubsub/dummy-pubsub.ts +1 -1
  171. package/src/registrar.ts +3 -19
  172. package/src/transport-manager.ts +3 -1
  173. package/src/upgrader.ts +1 -1
  174. package/dist/src/dialer/auto-dialer.d.ts.map +0 -1
  175. package/dist/src/dialer/auto-dialer.js +0 -24
  176. package/dist/src/dialer/auto-dialer.js.map +0 -1
  177. package/dist/src/dialer/dial-request.d.ts.map +0 -1
  178. package/dist/src/dialer/dial-request.js.map +0 -1
  179. package/dist/src/dialer/index.d.ts.map +0 -1
  180. package/dist/src/dialer/index.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { TimeoutController } from 'timeout-abort-controller';
3
+ const log = logger('libp2p:dialer:auto-dialer');
4
+ export class AutoDialer {
5
+ constructor(components, init) {
6
+ this.components = components;
7
+ this.enabled = init.enabled;
8
+ this.minConnections = init.minConnections;
9
+ this.dialTimeout = init.dialTimeout;
10
+ }
11
+ handle(evt) {
12
+ const { detail: peer } = evt;
13
+ if (!this.enabled) {
14
+ return;
15
+ }
16
+ const connections = this.components.getConnectionManager().getConnections(peer.id);
17
+ // If auto dialing is on and we have no connection to the peer, check if we should dial
18
+ if (connections.length === 0) {
19
+ const minConnections = this.minConnections ?? 0;
20
+ const allConnections = this.components.getConnectionManager().getConnections();
21
+ if (minConnections > allConnections.length) {
22
+ log('auto-dialing discovered peer %p with timeout %d', peer.id, this.dialTimeout);
23
+ const controller = new TimeoutController(this.dialTimeout);
24
+ void this.components.getConnectionManager().openConnection(peer.id, {
25
+ signal: controller.signal
26
+ })
27
+ .catch(err => {
28
+ log.error('could not connect to discovered peer %p with %o', peer.id, err);
29
+ })
30
+ .finally(() => {
31
+ controller.clear();
32
+ });
33
+ }
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=auto-dialer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-dialer.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/auto-dialer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,GAAG,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAA;AAQ/C,MAAM,OAAO,UAAU;IAMrB,YAAa,UAAsB,EAAE,IAAoB;QACvD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IACrC,CAAC;IAEM,MAAM,CAAE,GAA0B;QACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAM;SACP;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAElF,uFAAuF;QACvF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAA;YAE/C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,EAAE,CAAA;YAE9E,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE;gBAC1C,GAAG,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;gBAEjF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAE1D,KAAK,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE;oBAClE,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;qBACC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,GAAG,CAAC,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBAC5E,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACZ,UAAU,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC,CAAC,CAAA;aACL;SACF;IACH,CAAC;CACF"}
@@ -1,14 +1,14 @@
1
1
  import type { Multiaddr } from '@multiformats/multiaddr';
2
2
  import type { Connection } from '@libp2p/interfaces/connection';
3
3
  import type { AbortOptions } from '@libp2p/interfaces';
4
- import type { DefaultDialer } from './index.js';
4
+ import type { Dialer } from './index.js';
5
5
  export interface DialAction {
6
6
  (m: Multiaddr, options: AbortOptions): Promise<Connection>;
7
7
  }
8
8
  export interface DialRequestOptions {
9
9
  addrs: Multiaddr[];
10
10
  dialAction: DialAction;
11
- dialer: DefaultDialer;
11
+ dialer: Dialer;
12
12
  }
13
13
  export declare class DialRequest {
14
14
  private readonly addrs;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-request.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAIxC,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC;;;;;;OAMG;gBACU,OAAO,EAAE,kBAAkB;IAYlC,GAAG,CAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CA+D5D"}
@@ -3,7 +3,7 @@ import { anySignal } from 'any-signal';
3
3
  import FIFO from 'p-fifo';
4
4
  // @ts-expect-error setMaxListeners is missing from the node 16 types
5
5
  import { setMaxListeners } from 'events';
6
- import { codes } from '../errors.js';
6
+ import { codes } from '../../errors.js';
7
7
  import { logger } from '@libp2p/logger';
8
8
  const log = logger('libp2p:dialer:dial-request');
9
9
  export class DialRequest {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dial-request.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
- import { Multiaddr } from '@multiformats/multiaddr';
1
+ import { Multiaddr, Resolver } from '@multiformats/multiaddr';
2
2
  import { TimeoutController } from 'timeout-abort-controller';
3
3
  import { DialRequest } from './dial-request.js';
4
4
  import type { Connection } from '@libp2p/interfaces/connection';
5
- import type { AbortOptions, Startable } from '@libp2p/interfaces';
5
+ import type { AbortOptions } from '@libp2p/interfaces';
6
+ import type { Startable } from '@libp2p/interfaces/startable';
6
7
  import type { PeerId } from '@libp2p/interfaces/peer-id';
7
- import type { Components } from '@libp2p/interfaces/components';
8
- import type { Dialer, DialerInit } from '@libp2p/interfaces/dialer';
8
+ import { Components, Initializable } from '@libp2p/interfaces/components';
9
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store';
10
+ import type { ComponentMetricsTracker } from '@libp2p/interfaces/metrics';
9
11
  export interface DialTarget {
10
12
  id: string;
11
13
  addrs: Multiaddr[];
@@ -20,8 +22,35 @@ export interface PendingDialTarget {
20
22
  resolve: (value: any) => void;
21
23
  reject: (err: Error) => void;
22
24
  }
23
- export declare class DefaultDialer implements Dialer, Startable {
24
- private readonly components;
25
+ export interface DialerInit {
26
+ /**
27
+ * Sort the known addresses of a peer before trying to dial
28
+ */
29
+ addressSorter?: AddressSorter;
30
+ /**
31
+ * Number of max concurrent dials
32
+ */
33
+ maxParallelDials?: number;
34
+ /**
35
+ * Number of max addresses to dial for a given peer
36
+ */
37
+ maxAddrsToDial?: number;
38
+ /**
39
+ * How long a dial attempt is allowed to take
40
+ */
41
+ dialTimeout?: number;
42
+ /**
43
+ * Number of max concurrent dials per peer
44
+ */
45
+ maxDialsPerPeer?: number;
46
+ /**
47
+ * Multiaddr resolvers to use when dialing
48
+ */
49
+ resolvers?: Record<string, Resolver>;
50
+ metrics?: ComponentMetricsTracker;
51
+ }
52
+ export declare class Dialer implements Startable, Initializable {
53
+ private components;
25
54
  private readonly addressSorter;
26
55
  private readonly maxAddrsToDial;
27
56
  private readonly timeout;
@@ -30,7 +59,8 @@ export declare class DefaultDialer implements Dialer, Startable {
30
59
  pendingDials: Map<string, PendingDial>;
31
60
  pendingDialTargets: Map<string, PendingDialTarget>;
32
61
  private started;
33
- constructor(components: Components, init?: DialerInit);
62
+ constructor(init?: DialerInit);
63
+ init(components: Components): void;
34
64
  isStarted(): boolean;
35
65
  start(): Promise<void>;
36
66
  /**
@@ -43,7 +73,6 @@ export declare class DefaultDialer implements Dialer, Startable {
43
73
  * will be used.
44
74
  */
45
75
  dial(peer: PeerId | Multiaddr, options?: AbortOptions): Promise<Connection>;
46
- dialProtocol(peer: PeerId | Multiaddr, protocols: string | string[], options?: AbortOptions): Promise<import("@libp2p/interfaces/connection").ProtocolStream>;
47
76
  /**
48
77
  * Connects to a given `peer` by dialing all of its known addresses.
49
78
  * The dial to the first address that is successfully able to upgrade a connection
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
@@ -12,18 +12,19 @@ import { setMaxListeners } from 'events';
12
12
  import { DialRequest } from './dial-request.js';
13
13
  import { publicAddressesFirst } from '@libp2p/utils/address-sort';
14
14
  import { trackedMap } from '@libp2p/tracked-map';
15
- import { codes } from '../errors.js';
16
- import { DIAL_TIMEOUT, MAX_PARALLEL_DIALS, MAX_PER_PEER_DIALS, MAX_ADDRS_TO_DIAL } from '../constants.js';
17
- import { getPeer } from '../get-peer.js';
15
+ import { codes } from '../../errors.js';
16
+ import { DIAL_TIMEOUT, MAX_PARALLEL_DIALS, MAX_PER_PEER_DIALS, MAX_ADDRS_TO_DIAL } from '../../constants.js';
17
+ import { getPeer } from '../../get-peer.js';
18
18
  import sort from 'it-sort';
19
+ import { Components } from '@libp2p/interfaces/components';
19
20
  import map from 'it-map';
20
21
  const log = logger('libp2p:dialer');
21
22
  const METRICS_COMPONENT = 'dialler';
22
23
  const METRICS_PENDING_DIALS = 'pending-dials';
23
24
  const METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets';
24
- export class DefaultDialer {
25
- constructor(components, init = {}) {
26
- this.components = components;
25
+ export class Dialer {
26
+ constructor(init = {}) {
27
+ this.components = new Components();
27
28
  this.started = false;
28
29
  this.addressSorter = init.addressSorter ?? publicAddressesFirst;
29
30
  this.maxAddrsToDial = init.maxAddrsToDial ?? MAX_ADDRS_TO_DIAL;
@@ -44,6 +45,9 @@ export class DefaultDialer {
44
45
  Multiaddr.resolvers.set(key, value);
45
46
  }
46
47
  }
48
+ init(components) {
49
+ this.components = components;
50
+ }
47
51
  isStarted() {
48
52
  return this.started;
49
53
  }
@@ -87,12 +91,6 @@ export class DefaultDialer {
87
91
  if (await this.components.getConnectionGater().denyDialPeer(id)) {
88
92
  throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED);
89
93
  }
90
- log('dial to %p', id);
91
- const existingConnection = this.components.getConnectionManager().getConnection(id);
92
- if (existingConnection != null) {
93
- log('had an existing connection to %p', id);
94
- return existingConnection;
95
- }
96
94
  log('creating dial target for %p', id);
97
95
  const dialTarget = await this._createCancellableDialTarget(id);
98
96
  if (dialTarget.addrs.length === 0) {
@@ -117,17 +115,6 @@ export class DefaultDialer {
117
115
  pendingDial.destroy();
118
116
  }
119
117
  }
120
- async dialProtocol(peer, protocols, options = {}) {
121
- if (protocols == null) {
122
- throw errCode(new Error('no protocols were provided to open a stream'), codes.ERR_INVALID_PROTOCOLS_FOR_STREAM);
123
- }
124
- protocols = Array.isArray(protocols) ? protocols : [protocols];
125
- if (protocols.length === 0) {
126
- throw errCode(new Error('no protocols were provided to open a stream'), codes.ERR_INVALID_PROTOCOLS_FOR_STREAM);
127
- }
128
- const connection = await this.dial(peer, options);
129
- return await connection.newStream(protocols);
130
- }
131
118
  /**
132
119
  * Connects to a given `peer` by dialing all of its known addresses.
133
120
  * The dial to the first address that is successfully able to upgrade a connection
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,23 @@
1
1
  import { SummaryObject } from './latency-monitor.js';
2
- import { EventEmitter, Startable } from '@libp2p/interfaces';
2
+ import type { AbortOptions } from '@libp2p/interfaces';
3
+ import { EventEmitter } from '@libp2p/interfaces/events';
4
+ import type { Startable } from '@libp2p/interfaces/startable';
3
5
  import { PeerId } from '@libp2p/interfaces/peer-id';
4
6
  import type { Connection } from '@libp2p/interfaces/connection';
5
- import type { ConnectionManager } from '@libp2p/interfaces/registrar';
6
- import type { Components } from '@libp2p/interfaces/components';
7
- export interface ConnectionManagerEvents {
8
- 'peer:connect': CustomEvent<PeerId>;
9
- 'peer:disconnect': CustomEvent<PeerId>;
10
- }
7
+ import type { ConnectionManager } from '@libp2p/interfaces/connection-manager';
8
+ import { Components, Initializable } from '@libp2p/interfaces/components';
9
+ import { Dialer } from './dialer/index.js';
10
+ import type { AddressSorter } from '@libp2p/interfaces/peer-store';
11
+ import type { Resolver } from '@multiformats/multiaddr';
11
12
  export interface ConnectionManagerInit {
12
13
  /**
13
- * The maximum number of connections allowed
14
+ * The maximum number of connections to keep open
14
15
  */
15
- maxConnections?: number;
16
+ maxConnections: number;
16
17
  /**
17
- * The minimum number of connections to avoid pruning
18
+ * The minimum number of connections to keep open
18
19
  */
19
- minConnections?: number;
20
+ minConnections: number;
20
21
  /**
21
22
  * The max data (in and out), per average interval to allow
22
23
  */
@@ -46,32 +47,65 @@ export interface ConnectionManagerInit {
46
47
  */
47
48
  defaultPeerValue?: number;
48
49
  /**
49
- * Should preemptively guarantee connections are above the low watermark
50
+ * If true, try to connect to all discovered peers up to the connection manager limit
50
51
  */
51
52
  autoDial?: boolean;
52
53
  /**
53
- * How often, in milliseconds, it should preemptively guarantee connections are above the low watermark
54
+ * How long to wait between attempting to keep our number of concurrent connections
55
+ * above minConnections
56
+ */
57
+ autoDialInterval: number;
58
+ /**
59
+ * Sort the known addresses of a peer before trying to dial
60
+ */
61
+ addressSorter?: AddressSorter;
62
+ /**
63
+ * Number of max concurrent dials
64
+ */
65
+ maxParallelDials?: number;
66
+ /**
67
+ * Number of max addresses to dial for a given peer
68
+ */
69
+ maxAddrsToDial?: number;
70
+ /**
71
+ * How long a dial attempt is allowed to take
72
+ */
73
+ dialTimeout?: number;
74
+ /**
75
+ * Number of max concurrent dials per peer
54
76
  */
55
- autoDialInterval?: number;
77
+ maxDialsPerPeer?: number;
78
+ /**
79
+ * Multiaddr resolvers to use when dialing
80
+ */
81
+ resolvers?: Record<string, Resolver>;
82
+ }
83
+ export interface ConnectionManagerEvents {
84
+ 'peer:connect': CustomEvent<PeerId>;
85
+ 'peer:disconnect': CustomEvent<PeerId>;
56
86
  }
57
87
  /**
58
88
  * Responsible for managing known connections.
59
89
  */
60
- export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable {
61
- private readonly components;
62
- private readonly init;
90
+ export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable, Initializable {
91
+ readonly dialer: Dialer;
92
+ private components;
93
+ private readonly opts;
63
94
  private readonly peerValues;
64
95
  private readonly connections;
65
96
  private started;
66
97
  private timer?;
67
98
  private readonly latencyMonitor;
68
- constructor(components: Components, init?: ConnectionManagerInit);
99
+ constructor(init: ConnectionManagerInit);
100
+ init(components: Components): void;
69
101
  isStarted(): boolean;
70
102
  /**
71
103
  * Starts the Connection Manager. If Metrics are not enabled on libp2p
72
104
  * only event loop and connection limits will be monitored.
73
105
  */
74
106
  start(): Promise<void>;
107
+ afterStart(): Promise<void>;
108
+ beforeStop(): Promise<void>;
75
109
  /**
76
110
  * Stops the Connection Manager
77
111
  */
@@ -92,21 +126,18 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
92
126
  * @private
93
127
  */
94
128
  _checkMetrics(): Promise<void>;
129
+ onConnect(evt: CustomEvent<Connection>): void;
95
130
  /**
96
131
  * Tracks the incoming connection and check the connection limit
97
132
  */
98
- onConnect(evt: CustomEvent<Connection>): Promise<void>;
133
+ _onConnect(evt: CustomEvent<Connection>): Promise<void>;
99
134
  /**
100
135
  * Removes the connection from tracking
101
136
  */
102
137
  onDisconnect(evt: CustomEvent<Connection>): void;
103
- getConnectionMap(): Map<string, Connection[]>;
104
- getConnectionList(): Connection[];
105
- getConnections(peerId: PeerId): Connection[];
106
- /**
107
- * Get a connection with a peer
108
- */
109
- getConnection(peerId: PeerId): Connection | undefined;
138
+ getConnections(peerId?: PeerId): Connection[];
139
+ openConnection(peerId: PeerId, options?: AbortOptions): Promise<Connection>;
140
+ closeConnections(peerId: PeerId): Promise<void>;
110
141
  /**
111
142
  * Get all open connections with a peer
112
143
  */
@@ -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,EAAe,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EAAY,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAsB/D,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACnC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,YAAY,CAAC,uBAAuB,CAAE,YAAW,iBAAiB,EAAE,SAAS;IACzH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElC,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,qBAA0B;IAqDrE,SAAS;IAIT;;;OAGG;IACG,KAAK;IAcX;;OAEG;IACG,IAAI;IAWV;;OAEG;IACG,MAAM;IAcZ;;;OAGG;IACH,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQ3C;;;;;OAKG;IACG,aAAa;IAmBnB;;OAEG;IACG,SAAS,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAgC7C;;OAEG;IACH,YAAY,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAuB1C,gBAAgB,IAAK,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAI9C,iBAAiB,IAAK,UAAU,EAAE;IAUlC,cAAc,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAI7C;;OAEG;IACH,aAAa,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAUtD;;OAEG;IACH,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAgBrC;;OAEG;IACH,iBAAiB,CAAE,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC;IASlD;;OAEG;IACG,cAAc,CAAE,IAAI,EAAE,MAAM,qBAAqB,EAAE,KAAK,EAAE,MAAM;IAStE;;;OAGG;IACG,mBAAmB;CA6B1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,15 @@ import mergeOptions from 'merge-options';
4
4
  import { LatencyMonitor } from './latency-monitor.js';
5
5
  // @ts-expect-error retimer does not have types
6
6
  import retimer from 'retimer';
7
- import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
7
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
8
8
  import { trackedMap } from '@libp2p/tracked-map';
9
9
  import { codes } from '../errors.js';
10
10
  import { isPeerId } from '@libp2p/interfaces/peer-id';
11
11
  // @ts-expect-error setMaxListeners is missing from the node 16 types
12
12
  import { setMaxListeners } from 'events';
13
+ import { Components } from '@libp2p/interfaces/components';
13
14
  import * as STATUS from '@libp2p/interfaces/connection/status';
15
+ import { Dialer } from './dialer/index.js';
14
16
  const log = logger('libp2p:connection-manager');
15
17
  const defaultOptions = {
16
18
  maxConnections: Infinity,
@@ -31,14 +33,14 @@ const METRICS_PEER_VALUES = 'peer-values';
31
33
  * Responsible for managing known connections.
32
34
  */
33
35
  export class DefaultConnectionManager extends EventEmitter {
34
- constructor(components, init = {}) {
36
+ constructor(init) {
35
37
  super();
36
- this.components = components;
37
- this.init = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init);
38
- if (this.init.maxConnections < this.init.minConnections) {
38
+ this.components = new Components();
39
+ this.opts = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init);
40
+ if (this.opts.maxConnections < this.opts.minConnections) {
39
41
  throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS);
40
42
  }
41
- log('options: %o', this.init);
43
+ log('options: %o', this.opts);
42
44
  /**
43
45
  * Map of peer identifiers to their peer value for pruning connections.
44
46
  *
@@ -68,12 +70,13 @@ export class DefaultConnectionManager extends EventEmitter {
68
70
  setMaxListeners?.(Infinity, this);
69
71
  }
70
72
  catch { }
71
- this.components.getUpgrader().addEventListener('connection', (evt) => {
72
- void this.onConnect(evt).catch(err => {
73
- log.error(err);
74
- });
75
- });
76
- this.components.getUpgrader().addEventListener('connectionEnd', this.onDisconnect.bind(this));
73
+ this.dialer = new Dialer(this.opts);
74
+ this.onConnect = this.onConnect.bind(this);
75
+ this.onDisconnect = this.onDisconnect.bind(this);
76
+ }
77
+ init(components) {
78
+ this.components = components;
79
+ this.dialer.init(components);
77
80
  }
78
81
  isStarted() {
79
82
  return this.started;
@@ -84,15 +87,24 @@ export class DefaultConnectionManager extends EventEmitter {
84
87
  */
85
88
  async start() {
86
89
  if (this.components.getMetrics() != null) {
87
- this.timer = this.timer ?? retimer(this._checkMetrics, this.init.pollInterval);
90
+ this.timer = this.timer ?? retimer(this._checkMetrics, this.opts.pollInterval);
88
91
  }
89
92
  // latency monitor
90
93
  this.latencyMonitor.start();
91
94
  this._onLatencyMeasure = this._onLatencyMeasure.bind(this);
92
95
  this.latencyMonitor.addEventListener('data', this._onLatencyMeasure);
96
+ await this.dialer.start();
93
97
  this.started = true;
94
98
  log('started');
95
99
  }
100
+ async afterStart() {
101
+ this.components.getUpgrader().addEventListener('connection', this.onConnect);
102
+ this.components.getUpgrader().addEventListener('connectionEnd', this.onDisconnect);
103
+ }
104
+ async beforeStop() {
105
+ this.components.getUpgrader().removeEventListener('connection', this.onConnect);
106
+ this.components.getUpgrader().removeEventListener('connectionEnd', this.onDisconnect);
107
+ }
96
108
  /**
97
109
  * Stops the Connection Manager
98
110
  */
@@ -100,6 +112,7 @@ export class DefaultConnectionManager extends EventEmitter {
100
112
  this.timer?.clear();
101
113
  this.latencyMonitor.removeEventListener('data', this._onLatencyMeasure);
102
114
  this.latencyMonitor.stop();
115
+ await this.dialer.stop();
103
116
  this.started = false;
104
117
  await this._close();
105
118
  log('stopped');
@@ -140,23 +153,28 @@ export class DefaultConnectionManager extends EventEmitter {
140
153
  if (metrics != null) {
141
154
  try {
142
155
  const movingAverages = metrics.getGlobal().getMovingAverages();
143
- const received = movingAverages.dataReceived[this.init.movingAverageInterval].movingAverage;
156
+ const received = movingAverages.dataReceived[this.opts.movingAverageInterval].movingAverage;
144
157
  await this._checkMaxLimit('maxReceivedData', received);
145
- const sent = movingAverages.dataSent[this.init.movingAverageInterval].movingAverage;
158
+ const sent = movingAverages.dataSent[this.opts.movingAverageInterval].movingAverage;
146
159
  await this._checkMaxLimit('maxSentData', sent);
147
160
  const total = received + sent;
148
161
  await this._checkMaxLimit('maxData', total);
149
- log('metrics update', total);
162
+ log.trace('metrics update', total);
150
163
  }
151
164
  finally {
152
- this.timer = retimer(this._checkMetrics, this.init.pollInterval);
165
+ this.timer = retimer(this._checkMetrics, this.opts.pollInterval);
153
166
  }
154
167
  }
155
168
  }
169
+ onConnect(evt) {
170
+ void this._onConnect(evt).catch(err => {
171
+ log.error(err);
172
+ });
173
+ }
156
174
  /**
157
175
  * Tracks the incoming connection and check the connection limit
158
176
  */
159
- async onConnect(evt) {
177
+ async _onConnect(evt) {
160
178
  const { detail: connection } = evt;
161
179
  if (!this.started) {
162
180
  // This can happen when we are in the process of shutting down the node
@@ -166,7 +184,6 @@ export class DefaultConnectionManager extends EventEmitter {
166
184
  const peerId = connection.remotePeer;
167
185
  const peerIdStr = peerId.toString();
168
186
  const storedConns = this.connections.get(peerIdStr);
169
- this.dispatchEvent(new CustomEvent('peer:connect', { detail: connection }));
170
187
  if (storedConns != null) {
171
188
  storedConns.push(connection);
172
189
  }
@@ -177,9 +194,10 @@ export class DefaultConnectionManager extends EventEmitter {
177
194
  await this.components.getPeerStore().keyBook.set(peerId, peerId.publicKey);
178
195
  }
179
196
  if (!this.peerValues.has(peerIdStr)) {
180
- this.peerValues.set(peerIdStr, this.init.defaultPeerValue);
197
+ this.peerValues.set(peerIdStr, this.opts.defaultPeerValue);
181
198
  }
182
- await this._checkMaxLimit('maxConnections', this.getConnectionList().length);
199
+ await this._checkMaxLimit('maxConnections', this.getConnections().length);
200
+ this.dispatchEvent(new CustomEvent('peer:connect', { detail: connection }));
183
201
  }
184
202
  /**
185
203
  * Removes the connection from tracking
@@ -203,28 +221,48 @@ export class DefaultConnectionManager extends EventEmitter {
203
221
  this.components.getMetrics()?.onPeerDisconnected(connection.remotePeer);
204
222
  }
205
223
  }
206
- getConnectionMap() {
207
- return this.connections;
208
- }
209
- getConnectionList() {
210
- let output = [];
211
- for (const connections of this.connections.values()) {
212
- output = output.concat(connections);
213
- }
214
- return output;
215
- }
216
224
  getConnections(peerId) {
217
- return this.connections.get(peerId.toString()) ?? [];
225
+ if (peerId != null) {
226
+ return this.connections.get(peerId.toString()) ?? [];
227
+ }
228
+ let conns = [];
229
+ for (const c of this.connections.values()) {
230
+ conns = conns.concat(c);
231
+ }
232
+ return conns;
218
233
  }
219
- /**
220
- * Get a connection with a peer
221
- */
222
- getConnection(peerId) {
223
- const connections = this.getAll(peerId);
224
- if (connections.length > 0) {
225
- return connections[0];
234
+ async openConnection(peerId, options) {
235
+ log('dial to %p', peerId);
236
+ const existingConnections = this.getConnections(peerId);
237
+ if (existingConnections.length > 0) {
238
+ log('had an existing connection to %p', peerId);
239
+ return existingConnections[0];
226
240
  }
227
- return undefined;
241
+ const connection = await this.dialer.dial(peerId, options);
242
+ let peerConnections = this.connections.get(peerId.toString());
243
+ if (peerConnections == null) {
244
+ peerConnections = [];
245
+ this.connections.set(peerId.toString(), peerConnections);
246
+ }
247
+ // we get notified of connections via the Upgrader emitting "connection"
248
+ // events, double check we aren't already tracking this connection before
249
+ // storing it
250
+ let trackedConnection = false;
251
+ for (const conn of peerConnections) {
252
+ if (conn.id === connection.id) {
253
+ trackedConnection = true;
254
+ }
255
+ }
256
+ if (!trackedConnection) {
257
+ peerConnections.push(connection);
258
+ }
259
+ return connection;
260
+ }
261
+ async closeConnections(peerId) {
262
+ const connections = this.connections.get(peerId.toString()) ?? [];
263
+ await Promise.all(connections.map(async (connection) => {
264
+ return await connection.close();
265
+ }));
228
266
  }
229
267
  /**
230
268
  * Get all open connections with a peer
@@ -255,7 +293,7 @@ export class DefaultConnectionManager extends EventEmitter {
255
293
  * If the `value` of `name` has exceeded its limit, maybe close a connection
256
294
  */
257
295
  async _checkMaxLimit(name, value) {
258
- const limit = this.init[name];
296
+ const limit = this.opts[name];
259
297
  log.trace('checking limit of %s. current value: %d of %d', name, value, limit);
260
298
  if (value > limit) {
261
299
  log('%s: limit exceeded: %p, %d', this.components.getPeerId(), name, value);
@@ -267,7 +305,7 @@ export class DefaultConnectionManager extends EventEmitter {
267
305
  * to the lowest valued peer.
268
306
  */
269
307
  async _maybeDisconnectOne() {
270
- if (this.init.minConnections < this.connections.size) {
308
+ if (this.opts.minConnections < this.connections.size) {
271
309
  const peerValues = Array.from(new Map([...this.peerValues.entries()].sort((a, b) => a[1] - b[1])));
272
310
  log('%p: sorted peer values: %j', this.components.getPeerId(), peerValues);
273
311
  const disconnectPeer = peerValues[0];