libp2p 0.42.2-f6f73a21 → 0.43.0

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 (277) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +28 -28
  3. package/dist/src/address-manager/index.d.ts +1 -10
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +46 -29
  6. package/dist/src/address-manager/index.js.map +1 -1
  7. package/dist/src/autonat/constants.d.ts +4 -0
  8. package/dist/src/autonat/constants.d.ts.map +1 -0
  9. package/dist/src/autonat/constants.js +4 -0
  10. package/dist/src/autonat/constants.js.map +1 -0
  11. package/dist/src/autonat/index.d.ts +64 -0
  12. package/dist/src/autonat/index.d.ts.map +1 -0
  13. package/dist/src/autonat/index.js +417 -0
  14. package/dist/src/autonat/index.js.map +1 -0
  15. package/dist/src/autonat/pb/index.d.ts +57 -0
  16. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  17. package/dist/src/autonat/pb/index.js +250 -0
  18. package/dist/src/autonat/pb/index.js.map +1 -0
  19. package/dist/src/circuit/constants.d.ts +31 -6
  20. package/dist/src/circuit/constants.d.ts.map +1 -1
  21. package/dist/src/circuit/constants.js +37 -7
  22. package/dist/src/circuit/constants.js.map +1 -1
  23. package/dist/src/circuit/index.d.ts +16 -61
  24. package/dist/src/circuit/index.d.ts.map +1 -1
  25. package/dist/src/circuit/index.js +2 -68
  26. package/dist/src/circuit/index.js.map +1 -1
  27. package/dist/src/circuit/pb/index.d.ts +83 -43
  28. package/dist/src/circuit/pb/index.d.ts.map +1 -1
  29. package/dist/src/circuit/pb/index.js +363 -127
  30. package/dist/src/circuit/pb/index.js.map +1 -1
  31. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  32. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  33. package/dist/src/circuit/server/advert-service.js +69 -0
  34. package/dist/src/circuit/server/advert-service.js.map +1 -0
  35. package/dist/src/circuit/server/index.d.ts +60 -0
  36. package/dist/src/circuit/server/index.d.ts.map +1 -0
  37. package/dist/src/circuit/server/index.js +287 -0
  38. package/dist/src/circuit/server/index.js.map +1 -0
  39. package/dist/src/circuit/server/reservation-store.d.ts +49 -0
  40. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  41. package/dist/src/circuit/server/reservation-store.js +57 -0
  42. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  43. package/dist/src/circuit/server/reservation-voucher.d.ts +18 -0
  44. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  45. package/dist/src/circuit/server/reservation-voucher.js +33 -0
  46. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  47. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  48. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  49. package/dist/src/circuit/transport/discovery.js +82 -0
  50. package/dist/src/circuit/transport/discovery.js.map +1 -0
  51. package/dist/src/circuit/transport/index.d.ts +33 -0
  52. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  53. package/dist/src/circuit/transport/index.js +225 -0
  54. package/dist/src/circuit/transport/index.js.map +1 -0
  55. package/dist/src/circuit/transport/listener.d.ts +9 -0
  56. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  57. package/dist/src/circuit/transport/listener.js +76 -0
  58. package/dist/src/circuit/transport/listener.js.map +1 -0
  59. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  60. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  61. package/dist/src/circuit/transport/reservation-store.js +165 -0
  62. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  63. package/dist/src/circuit/utils.d.ts +7 -0
  64. package/dist/src/circuit/utils.d.ts.map +1 -1
  65. package/dist/src/circuit/utils.js +87 -0
  66. package/dist/src/circuit/utils.js.map +1 -1
  67. package/dist/src/components.d.ts +2 -1
  68. package/dist/src/components.d.ts.map +1 -1
  69. package/dist/src/components.js +13 -13
  70. package/dist/src/components.js.map +1 -1
  71. package/dist/src/config.d.ts.map +1 -1
  72. package/dist/src/config.js +21 -25
  73. package/dist/src/config.js.map +1 -1
  74. package/dist/src/connection/index.d.ts +2 -2
  75. package/dist/src/connection/index.d.ts.map +1 -1
  76. package/dist/src/connection/index.js +4 -4
  77. package/dist/src/connection/index.js.map +1 -1
  78. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  79. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  80. package/dist/src/connection-manager/auto-dialler.js +0 -9
  81. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  82. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
  83. package/dist/src/connection-manager/dialer/dial-request.js +13 -6
  84. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  85. package/dist/src/connection-manager/dialer/index.d.ts +2 -1
  86. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  87. package/dist/src/connection-manager/dialer/index.js +9 -9
  88. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  89. package/dist/src/connection-manager/index.d.ts +0 -4
  90. package/dist/src/connection-manager/index.d.ts.map +1 -1
  91. package/dist/src/connection-manager/index.js +5 -5
  92. package/dist/src/connection-manager/index.js.map +1 -1
  93. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  94. package/dist/src/connection-manager/latency-monitor.js +1 -1
  95. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  96. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  97. package/dist/src/content-routing/index.d.ts +6 -4
  98. package/dist/src/content-routing/index.d.ts.map +1 -1
  99. package/dist/src/content-routing/index.js +9 -9
  100. package/dist/src/content-routing/index.js.map +1 -1
  101. package/dist/src/content-routing/utils.d.ts +3 -3
  102. package/dist/src/content-routing/utils.d.ts.map +1 -1
  103. package/dist/src/content-routing/utils.js +2 -2
  104. package/dist/src/content-routing/utils.js.map +1 -1
  105. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  106. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  107. package/dist/src/dht/dht-content-routing.js +2 -2
  108. package/dist/src/dht/dht-content-routing.js.map +1 -1
  109. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  110. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  111. package/dist/src/dht/dht-peer-routing.js +2 -2
  112. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  113. package/dist/src/dht/dummy-dht.d.ts +1 -1
  114. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  115. package/dist/src/dht/dummy-dht.js +12 -12
  116. package/dist/src/dht/dummy-dht.js.map +1 -1
  117. package/dist/src/errors.d.ts +2 -1
  118. package/dist/src/errors.d.ts.map +1 -1
  119. package/dist/src/errors.js +1 -0
  120. package/dist/src/errors.js.map +1 -1
  121. package/dist/src/fetch/index.d.ts.map +1 -1
  122. package/dist/src/fetch/index.js +6 -6
  123. package/dist/src/fetch/index.js.map +1 -1
  124. package/dist/src/fetch/pb/proto.d.ts +3 -3
  125. package/dist/src/fetch/pb/proto.d.ts.map +1 -1
  126. package/dist/src/fetch/pb/proto.js +4 -3
  127. package/dist/src/fetch/pb/proto.js.map +1 -1
  128. package/dist/src/get-peer.js +2 -2
  129. package/dist/src/get-peer.js.map +1 -1
  130. package/dist/src/identify/index.d.ts +3 -1
  131. package/dist/src/identify/index.d.ts.map +1 -1
  132. package/dist/src/identify/index.js +19 -14
  133. package/dist/src/identify/index.js.map +1 -1
  134. package/dist/src/identify/pb/message.d.ts +2 -2
  135. package/dist/src/identify/pb/message.d.ts.map +1 -1
  136. package/dist/src/identify/pb/message.js +1 -0
  137. package/dist/src/identify/pb/message.js.map +1 -1
  138. package/dist/src/index.d.ts +13 -7
  139. package/dist/src/index.d.ts.map +1 -1
  140. package/dist/src/index.js.map +1 -1
  141. package/dist/src/insecure/index.d.ts.map +1 -1
  142. package/dist/src/insecure/index.js.map +1 -1
  143. package/dist/src/insecure/pb/proto.d.ts +3 -3
  144. package/dist/src/insecure/pb/proto.d.ts.map +1 -1
  145. package/dist/src/insecure/pb/proto.js +4 -5
  146. package/dist/src/insecure/pb/proto.js.map +1 -1
  147. package/dist/src/libp2p.d.ts +6 -2
  148. package/dist/src/libp2p.d.ts.map +1 -1
  149. package/dist/src/libp2p.js +24 -26
  150. package/dist/src/libp2p.js.map +1 -1
  151. package/dist/src/nat-manager.d.ts.map +1 -1
  152. package/dist/src/nat-manager.js +5 -3
  153. package/dist/src/nat-manager.js.map +1 -1
  154. package/dist/src/peer-record-updater.d.ts.map +1 -1
  155. package/dist/src/peer-routing.d.ts.map +1 -1
  156. package/dist/src/peer-routing.js +5 -5
  157. package/dist/src/peer-routing.js.map +1 -1
  158. package/dist/src/ping/index.d.ts.map +1 -1
  159. package/dist/src/ping/index.js +2 -2
  160. package/dist/src/ping/index.js.map +1 -1
  161. package/dist/src/pnet/crypto.d.ts +1 -1
  162. package/dist/src/pnet/crypto.d.ts.map +1 -1
  163. package/dist/src/pnet/crypto.js +1 -1
  164. package/dist/src/pnet/crypto.js.map +1 -1
  165. package/dist/src/pnet/index.js +3 -3
  166. package/dist/src/pnet/index.js.map +1 -1
  167. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  168. package/dist/src/pubsub/dummy-pubsub.js +9 -9
  169. package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
  170. package/dist/src/registrar.d.ts.map +1 -1
  171. package/dist/src/registrar.js +4 -4
  172. package/dist/src/registrar.js.map +1 -1
  173. package/dist/src/transport-manager.d.ts.map +1 -1
  174. package/dist/src/transport-manager.js +8 -9
  175. package/dist/src/transport-manager.js.map +1 -1
  176. package/dist/src/upgrader.d.ts +2 -1
  177. package/dist/src/upgrader.d.ts.map +1 -1
  178. package/dist/src/upgrader.js +38 -33
  179. package/dist/src/upgrader.js.map +1 -1
  180. package/dist/typedoc-urls.json +41 -0
  181. package/package.json +35 -30
  182. package/src/address-manager/index.ts +62 -35
  183. package/src/autonat/constants.ts +4 -0
  184. package/src/autonat/index.ts +567 -0
  185. package/src/autonat/pb/index.proto +35 -0
  186. package/src/autonat/pb/index.ts +320 -0
  187. package/src/circuit/constants.ts +48 -7
  188. package/src/circuit/index.ts +17 -129
  189. package/src/circuit/pb/index.proto +57 -32
  190. package/src/circuit/pb/index.ts +448 -138
  191. package/src/circuit/server/advert-service.ts +108 -0
  192. package/src/circuit/server/index.ts +421 -0
  193. package/src/circuit/server/reservation-store.ts +111 -0
  194. package/src/circuit/server/reservation-voucher.ts +51 -0
  195. package/src/circuit/transport/discovery.ts +127 -0
  196. package/src/circuit/transport/index.ts +325 -0
  197. package/src/circuit/transport/listener.ts +99 -0
  198. package/src/circuit/transport/reservation-store.ts +249 -0
  199. package/src/circuit/utils.ts +108 -0
  200. package/src/components.ts +22 -21
  201. package/src/config.ts +21 -25
  202. package/src/connection/index.ts +10 -10
  203. package/src/connection-manager/auto-dialler.ts +4 -20
  204. package/src/connection-manager/dialer/dial-request.ts +13 -6
  205. package/src/connection-manager/dialer/index.ts +16 -15
  206. package/src/connection-manager/index.ts +18 -23
  207. package/src/connection-manager/latency-monitor.ts +9 -9
  208. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  209. package/src/content-routing/index.ts +18 -16
  210. package/src/content-routing/utils.ts +5 -5
  211. package/src/dht/dht-content-routing.ts +5 -4
  212. package/src/dht/dht-peer-routing.ts +5 -4
  213. package/src/dht/dummy-dht.ts +13 -13
  214. package/src/errors.ts +2 -1
  215. package/src/fetch/index.ts +13 -13
  216. package/src/fetch/pb/proto.ts +8 -7
  217. package/src/get-peer.ts +3 -3
  218. package/src/identify/index.ts +29 -24
  219. package/src/identify/pb/message.ts +3 -2
  220. package/src/index.ts +14 -7
  221. package/src/insecure/index.ts +2 -1
  222. package/src/insecure/pb/proto.ts +8 -9
  223. package/src/libp2p.ts +38 -37
  224. package/src/nat-manager.ts +11 -9
  225. package/src/peer-record-updater.ts +4 -4
  226. package/src/peer-routing.ts +9 -9
  227. package/src/ping/index.ts +6 -6
  228. package/src/pnet/crypto.ts +3 -3
  229. package/src/pnet/index.ts +3 -3
  230. package/src/pnet/key-generator.ts +1 -1
  231. package/src/pubsub/dummy-pubsub.ts +9 -9
  232. package/src/registrar.ts +12 -12
  233. package/src/transport-manager.ts +17 -18
  234. package/src/upgrader.ts +43 -42
  235. package/src/version.ts +1 -1
  236. package/dist/src/circuit/auto-relay.d.ts +0 -46
  237. package/dist/src/circuit/auto-relay.d.ts.map +0 -1
  238. package/dist/src/circuit/auto-relay.js +0 -220
  239. package/dist/src/circuit/auto-relay.js.map +0 -1
  240. package/dist/src/circuit/circuit/hop.d.ts +0 -42
  241. package/dist/src/circuit/circuit/hop.d.ts.map +0 -1
  242. package/dist/src/circuit/circuit/hop.js +0 -142
  243. package/dist/src/circuit/circuit/hop.js.map +0 -1
  244. package/dist/src/circuit/circuit/stop.d.ts +0 -24
  245. package/dist/src/circuit/circuit/stop.d.ts.map +0 -1
  246. package/dist/src/circuit/circuit/stop.js +0 -51
  247. package/dist/src/circuit/circuit/stop.js.map +0 -1
  248. package/dist/src/circuit/circuit/stream-handler.d.ts +0 -40
  249. package/dist/src/circuit/circuit/stream-handler.d.ts.map +0 -1
  250. package/dist/src/circuit/circuit/stream-handler.js +0 -59
  251. package/dist/src/circuit/circuit/stream-handler.js.map +0 -1
  252. package/dist/src/circuit/circuit/utils.d.ts +0 -7
  253. package/dist/src/circuit/circuit/utils.d.ts.map +0 -1
  254. package/dist/src/circuit/circuit/utils.js +0 -43
  255. package/dist/src/circuit/circuit/utils.js.map +0 -1
  256. package/dist/src/circuit/listener.d.ts +0 -9
  257. package/dist/src/circuit/listener.d.ts.map +0 -1
  258. package/dist/src/circuit/listener.js +0 -62
  259. package/dist/src/circuit/listener.js.map +0 -1
  260. package/dist/src/circuit/multicodec.d.ts +0 -2
  261. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  262. package/dist/src/circuit/multicodec.js +0 -2
  263. package/dist/src/circuit/multicodec.js.map +0 -1
  264. package/dist/src/circuit/transport.d.ts +0 -51
  265. package/dist/src/circuit/transport.d.ts.map +0 -1
  266. package/dist/src/circuit/transport.js +0 -223
  267. package/dist/src/circuit/transport.js.map +0 -1
  268. package/src/circuit/IMPLEMENTATION_NOTES.md +0 -128
  269. package/src/circuit/README.md +0 -111
  270. package/src/circuit/auto-relay.ts +0 -292
  271. package/src/circuit/circuit/hop.ts +0 -220
  272. package/src/circuit/circuit/stop.ts +0 -83
  273. package/src/circuit/circuit/stream-handler.ts +0 -87
  274. package/src/circuit/circuit/utils.ts +0 -44
  275. package/src/circuit/listener.ts +0 -83
  276. package/src/circuit/multicodec.ts +0 -2
  277. package/src/circuit/transport.ts +0 -278
@@ -1,5 +1,5 @@
1
1
  import type { Multiaddr } from '@multiformats/multiaddr'
2
- import errCode from 'err-code'
2
+ import { CodeError } from '@libp2p/interfaces/errors'
3
3
  import { OPEN, CLOSING, CLOSED } from '@libp2p/interface-connection/status'
4
4
  import { symbol } from '@libp2p/interface-connection'
5
5
  import type { Connection, ConnectionStat, Stream } from '@libp2p/interface-connection'
@@ -87,18 +87,18 @@ export class ConnectionImpl implements Connection {
87
87
  this._closing = false
88
88
  }
89
89
 
90
- get [Symbol.toStringTag] () {
90
+ get [Symbol.toStringTag] (): 'Connection' {
91
91
  return 'Connection'
92
92
  }
93
93
 
94
- get [symbol] () {
94
+ get [symbol] (): true {
95
95
  return true
96
96
  }
97
97
 
98
98
  /**
99
99
  * Get all the streams of the muxer
100
100
  */
101
- get streams () {
101
+ get streams (): Stream[] {
102
102
  return this._getStreams()
103
103
  }
104
104
 
@@ -107,11 +107,11 @@ export class ConnectionImpl implements Connection {
107
107
  */
108
108
  async newStream (protocols: string | string[], options?: AbortOptions): Promise<Stream> {
109
109
  if (this.stat.status === CLOSING) {
110
- throw errCode(new Error('the connection is being closed'), 'ERR_CONNECTION_BEING_CLOSED')
110
+ throw new CodeError('the connection is being closed', 'ERR_CONNECTION_BEING_CLOSED')
111
111
  }
112
112
 
113
113
  if (this.stat.status === CLOSED) {
114
- throw errCode(new Error('the connection is closed'), 'ERR_CONNECTION_CLOSED')
114
+ throw new CodeError('the connection is closed', 'ERR_CONNECTION_CLOSED')
115
115
  }
116
116
 
117
117
  if (!Array.isArray(protocols)) {
@@ -128,21 +128,21 @@ export class ConnectionImpl implements Connection {
128
128
  /**
129
129
  * Add a stream when it is opened to the registry
130
130
  */
131
- addStream (stream: Stream) {
131
+ addStream (stream: Stream): void {
132
132
  stream.stat.direction = 'inbound'
133
133
  }
134
134
 
135
135
  /**
136
136
  * Remove stream registry after it is closed
137
137
  */
138
- removeStream (id: string) {
138
+ removeStream (id: string): void {
139
139
 
140
140
  }
141
141
 
142
142
  /**
143
143
  * Close the connection
144
144
  */
145
- async close () {
145
+ async close (): Promise<void> {
146
146
  if (this.stat.status === CLOSED || this._closing) {
147
147
  return
148
148
  }
@@ -151,7 +151,7 @@ export class ConnectionImpl implements Connection {
151
151
 
152
152
  // close all streams - this can throw if we're not multiplexed
153
153
  try {
154
- this.streams.forEach(s => s.close())
154
+ this.streams.forEach(s => { s.close() })
155
155
  } catch (err) {
156
156
  log.error(err)
157
157
  }
@@ -10,11 +10,6 @@ import type { PeerStore } from '@libp2p/interface-peer-store'
10
10
  const log = logger('libp2p:connection-manager:auto-dialler')
11
11
 
12
12
  export interface AutoDiallerInit {
13
- /**
14
- * Should preemptively guarantee connections are above the low watermark
15
- */
16
- enabled?: boolean
17
-
18
13
  /**
19
14
  * The minimum number of connections to avoid pruning
20
15
  */
@@ -33,7 +28,6 @@ export interface AutoDiallerComponents {
33
28
  }
34
29
 
35
30
  const defaultOptions: Partial<AutoDiallerInit> = {
36
- enabled: true,
37
31
  minConnections: 0,
38
32
  autoDialInterval: 10000
39
33
  }
@@ -58,19 +52,14 @@ export class AutoDialler implements Startable {
58
52
  log('options: %j', this.options)
59
53
  }
60
54
 
61
- isStarted () {
55
+ isStarted (): boolean {
62
56
  return this.running
63
57
  }
64
58
 
65
59
  /**
66
60
  * Starts the auto dialer
67
61
  */
68
- async start () {
69
- if (!this.options.enabled) {
70
- log('not enabled')
71
- return
72
- }
73
-
62
+ async start (): Promise<void> {
74
63
  this.running = true
75
64
 
76
65
  void this._autoDial().catch(err => {
@@ -83,12 +72,7 @@ export class AutoDialler implements Startable {
83
72
  /**
84
73
  * Stops the auto dialler
85
74
  */
86
- async stop () {
87
- if (!this.options.enabled) {
88
- log('not enabled')
89
- return
90
- }
91
-
75
+ async stop (): Promise<void> {
92
76
  this.running = false
93
77
 
94
78
  if (this.autoDialTimeout != null) {
@@ -98,7 +82,7 @@ export class AutoDialler implements Startable {
98
82
  log('stopped')
99
83
  }
100
84
 
101
- async _autoDial () {
85
+ async _autoDial (): Promise<void> {
102
86
  if (this.autoDialTimeout != null) {
103
87
  this.autoDialTimeout.clear()
104
88
  }
@@ -1,4 +1,4 @@
1
- import errCode from 'err-code'
1
+ import { CodeError } from '@libp2p/interfaces/errors'
2
2
  import { anySignal } from 'any-signal'
3
3
  import FIFO from 'p-fifo'
4
4
  import { setMaxListeners } from 'events'
@@ -50,7 +50,7 @@ export class DialRequest {
50
50
 
51
51
  // If no tokens are available, throw
52
52
  if (tokens.length < 1) {
53
- throw errCode(new Error('No dial tokens available'), codes.ERR_NO_DIAL_TOKENS)
53
+ throw new CodeError('No dial tokens available', codes.ERR_NO_DIAL_TOKENS)
54
54
  }
55
55
 
56
56
  const tokenHolder = new FIFO<number>()
@@ -87,12 +87,12 @@ export class DialRequest {
87
87
  // End attempt once another attempt succeeded
88
88
  if (done) {
89
89
  this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0])
90
- throw errCode(new Error('dialAction already succeeded'), codes.ERR_ALREADY_SUCCEEDED)
90
+ throw new CodeError('dialAction already succeeded', codes.ERR_ALREADY_SUCCEEDED)
91
91
  }
92
92
 
93
93
  const controller = dialAbortControllers[i]
94
94
  if (controller == null) {
95
- throw errCode(new Error('dialAction did not come with an AbortController'), codes.ERR_INVALID_PARAMETERS)
95
+ throw new CodeError('dialAction did not come with an AbortController', codes.ERR_INVALID_PARAMETERS)
96
96
  }
97
97
  let conn
98
98
  try {
@@ -116,7 +116,7 @@ export class DialRequest {
116
116
  // Notify Promise.any that attempt was not successful
117
117
  // to prevent from returning undefined despite there
118
118
  // were successful dial attempts
119
- throw errCode(new Error('dialAction led to empty object'), codes.ERR_TRANSPORT_DIAL_FAILED)
119
+ throw new CodeError('dialAction led to empty object', codes.ERR_TRANSPORT_DIAL_FAILED)
120
120
  } else {
121
121
  // This dial succeeded, don't attempt anything else
122
122
  done = true
@@ -124,6 +124,13 @@ export class DialRequest {
124
124
 
125
125
  return conn
126
126
  }))
127
+ } catch (err: any) {
128
+ // if we only dialed one address, unwrap the AggregateError
129
+ if (this.addrs.length === 1 && err.name === 'AggregateError') {
130
+ throw err.errors[0]
131
+ }
132
+
133
+ throw err
127
134
  } finally {
128
135
  // success/failure happened, abort everything else
129
136
  dialAbortControllers.forEach(c => {
@@ -131,7 +138,7 @@ export class DialRequest {
131
138
  c.abort()
132
139
  }
133
140
  })
134
- tokens.forEach(token => this.dialer.releaseToken(token)) // release tokens back to the dialer
141
+ tokens.forEach(token => { this.dialer.releaseToken(token) }) // release tokens back to the dialer
135
142
  }
136
143
  }
137
144
  }
@@ -1,5 +1,5 @@
1
1
  import { logger } from '@libp2p/logger'
2
- import errCode from 'err-code'
2
+ import { CodeError } from '@libp2p/interfaces/errors'
3
3
  import { isMultiaddr, Multiaddr, Resolver, multiaddr, resolvers } from '@multiformats/multiaddr'
4
4
  import { TimeoutController } from 'timeout-abort-controller'
5
5
  import { anySignal } from 'any-signal'
@@ -14,7 +14,7 @@ import {
14
14
  MAX_PER_PEER_DIALS,
15
15
  MAX_ADDRS_TO_DIAL
16
16
  } from '../../constants.js'
17
- import type { Connection, ConnectionGater } from '@libp2p/interface-connection'
17
+ import type { Connection } from '@libp2p/interface-connection'
18
18
  import type { AbortOptions } from '@libp2p/interfaces'
19
19
  import type { Startable } from '@libp2p/interfaces/startable'
20
20
  import { isPeerId, PeerId } from '@libp2p/interface-peer-id'
@@ -23,6 +23,7 @@ import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store'
23
23
  import type { Metrics } from '@libp2p/interface-metrics'
24
24
  import type { Dialer } from '@libp2p/interface-connection-manager'
25
25
  import type { TransportManager } from '@libp2p/interface-transport'
26
+ import type { ConnectionGater } from '@libp2p/interface-connection-gater'
26
27
 
27
28
  const log = logger('libp2p:dialer')
28
29
 
@@ -116,18 +117,18 @@ export class DefaultDialer implements Startable, Dialer {
116
117
  }
117
118
  }
118
119
 
119
- isStarted () {
120
+ isStarted (): boolean {
120
121
  return this.started
121
122
  }
122
123
 
123
- async start () {
124
+ async start (): Promise<void> {
124
125
  this.started = true
125
126
  }
126
127
 
127
128
  /**
128
129
  * Clears any pending dials
129
130
  */
130
- async stop () {
131
+ async stop (): Promise<void> {
131
132
  this.started = false
132
133
 
133
134
  for (const dial of this.pendingDials.values()) {
@@ -155,7 +156,7 @@ export class DefaultDialer implements Startable, Dialer {
155
156
 
156
157
  if (peerId != null) {
157
158
  if (this.components.peerId.equals(peerId)) {
158
- throw errCode(new Error('Tried to dial self'), codes.ERR_DIALED_SELF)
159
+ throw new CodeError('Tried to dial self', codes.ERR_DIALED_SELF)
159
160
  }
160
161
 
161
162
  if (multiaddr != null) {
@@ -163,8 +164,8 @@ export class DefaultDialer implements Startable, Dialer {
163
164
  await this.components.peerStore.addressBook.add(peerId, [multiaddr])
164
165
  }
165
166
 
166
- if (await this.components.connectionGater.denyDialPeer(peerId)) {
167
- throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED)
167
+ if ((await this.components.connectionGater.denyDialPeer?.(peerId)) === true) {
168
+ throw new CodeError('The dial request is blocked by gater.allowDialPeer', codes.ERR_PEER_DIAL_INTERCEPTED)
168
169
  }
169
170
  }
170
171
 
@@ -194,7 +195,7 @@ export class DefaultDialer implements Startable, Dialer {
194
195
  }
195
196
 
196
197
  if (dialTarget.addrs.length === 0) {
197
- throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES)
198
+ throw new CodeError('The dial request has no valid addresses', codes.ERR_NO_VALID_ADDRESSES)
198
199
  }
199
200
 
200
201
  // try to join an in-flight dial for this peer if one is available
@@ -266,7 +267,7 @@ export class DefaultDialer implements Startable, Dialer {
266
267
  addrs = [...new Set(addrs.map(ma => ma.toString()))].map(ma => multiaddr(ma))
267
268
 
268
269
  if (addrs.length > this.maxAddrsToDial) {
269
- throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES)
270
+ throw new CodeError('dial with more addresses than allowed', codes.ERR_TOO_MANY_ADDRESSES)
270
271
  }
271
272
 
272
273
  const peerId = isPeerId(peerIdOrMultiaddr.peerId) ? peerIdOrMultiaddr.peerId : undefined
@@ -298,9 +299,9 @@ export class DefaultDialer implements Startable, Dialer {
298
299
 
299
300
  return (await Promise.all(
300
301
  addresses.map(async address => {
301
- const deny = await this.components.connectionGater.denyDialMultiaddr(peer, address.multiaddr)
302
+ const deny = await this.components.connectionGater.denyDialMultiaddr?.(peer, address.multiaddr)
302
303
 
303
- if (deny) {
304
+ if (deny === true) {
304
305
  return false
305
306
  }
306
307
 
@@ -323,7 +324,7 @@ export class DefaultDialer implements Startable, Dialer {
323
324
  */
324
325
  const dialAction: DialAction = async (addr, options = {}) => {
325
326
  if (options.signal?.aborted === true) {
326
- throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED)
327
+ throw new CodeError('already aborted', codes.ERR_ALREADY_ABORTED)
327
328
  }
328
329
 
329
330
  return await this.components.transportManager.dial(addr, options).catch(err => {
@@ -366,14 +367,14 @@ export class DefaultDialer implements Startable, Dialer {
366
367
  return pendingDial
367
368
  }
368
369
 
369
- getTokens (num: number) {
370
+ getTokens (num: number): number[] {
370
371
  const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length)
371
372
  const tokens = this.tokens.splice(0, total)
372
373
  log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length)
373
374
  return tokens
374
375
  }
375
376
 
376
- releaseToken (token: number) {
377
+ releaseToken (token: number): void {
377
378
  // Guard against duplicate releases
378
379
  if (this.tokens.includes(token)) {
379
380
  return
@@ -1,5 +1,5 @@
1
1
  import { logger } from '@libp2p/logger'
2
- import errCode from 'err-code'
2
+ import { CodeError } from '@libp2p/interfaces/errors'
3
3
  import mergeOptions from 'merge-options'
4
4
  import { LatencyMonitor, SummaryObject } from './latency-monitor.js'
5
5
  import type { AbortOptions } from '@libp2p/interfaces'
@@ -44,11 +44,6 @@ export interface ConnectionManagerConfig {
44
44
  */
45
45
  pollInterval?: number
46
46
 
47
- /**
48
- * If true, try to connect to all discovered peers up to the connection manager limit
49
- */
50
- autoDial?: boolean
51
-
52
47
  /**
53
48
  * How long to wait between attempting to keep our number of concurrent connections
54
49
  * above minConnections
@@ -168,7 +163,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
168
163
  this.opts = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, init)
169
164
 
170
165
  if (this.opts.maxConnections < this.opts.minConnections) {
171
- throw errCode(new Error('Connection Manager maxConnections must be greater than minConnections'), codes.ERR_INVALID_PARAMETERS)
166
+ throw new CodeError('Connection Manager maxConnections must be greater than minConnections', codes.ERR_INVALID_PARAMETERS)
172
167
  }
173
168
 
174
169
  log('options: %o', this.opts)
@@ -211,7 +206,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
211
206
  this.incomingPendingConnections = 0
212
207
  }
213
208
 
214
- isStarted () {
209
+ isStarted (): boolean {
215
210
  return this.started
216
211
  }
217
212
 
@@ -219,7 +214,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
219
214
  * Starts the Connection Manager. If Metrics are not enabled on libp2p
220
215
  * only event loop and connection limits will be monitored.
221
216
  */
222
- async start () {
217
+ async start (): Promise<void> {
223
218
  // track inbound/outbound connections
224
219
  this.components.metrics?.registerMetricGroup('libp2p_connection_manager_connections', {
225
220
  calculate: () => {
@@ -307,7 +302,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
307
302
  log('started')
308
303
  }
309
304
 
310
- async afterStart () {
305
+ async afterStart (): Promise<void> {
311
306
  this.components.upgrader.addEventListener('connection', this.onConnect)
312
307
  this.components.upgrader.addEventListener('connectionEnd', this.onDisconnect)
313
308
 
@@ -352,7 +347,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
352
347
  })
353
348
  }
354
349
 
355
- async beforeStop () {
350
+ async beforeStop (): Promise<void> {
356
351
  // if we are still dialing KEEP_ALIVE peers, abort those dials
357
352
  this.connectOnStartupController?.abort()
358
353
  this.components.upgrader.removeEventListener('connection', this.onConnect)
@@ -362,7 +357,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
362
357
  /**
363
358
  * Stops the Connection Manager
364
359
  */
365
- async stop () {
360
+ async stop (): Promise<void> {
366
361
  this.latencyMonitor?.removeEventListener('data', this._onLatencyMeasure)
367
362
  this.latencyMonitor?.stop()
368
363
 
@@ -374,7 +369,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
374
369
  /**
375
370
  * Cleans up the connections
376
371
  */
377
- async _close () {
372
+ async _close (): Promise<void> {
378
373
  // Close all connections we're tracking
379
374
  const tasks: Array<Promise<void>> = []
380
375
  for (const connectionList of this.connections.values()) {
@@ -394,7 +389,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
394
389
  this.connections.clear()
395
390
  }
396
391
 
397
- onConnect (evt: CustomEvent<Connection>) {
392
+ onConnect (evt: CustomEvent<Connection>): void {
398
393
  void this._onConnect(evt).catch(err => {
399
394
  log.error(err)
400
395
  })
@@ -403,7 +398,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
403
398
  /**
404
399
  * Tracks the incoming connection and check the connection limit
405
400
  */
406
- async _onConnect (evt: CustomEvent<Connection>) {
401
+ async _onConnect (evt: CustomEvent<Connection>): Promise<void> {
407
402
  const { detail: connection } = evt
408
403
 
409
404
  if (!this.started) {
@@ -436,7 +431,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
436
431
  /**
437
432
  * Removes the connection from tracking
438
433
  */
439
- onDisconnect (evt: CustomEvent<Connection>) {
434
+ onDisconnect (evt: CustomEvent<Connection>): void {
440
435
  const { detail: connection } = evt
441
436
 
442
437
  if (!this.started) {
@@ -478,7 +473,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
478
473
  const { peerId, multiaddr } = getPeerAddress(peerIdOrMultiaddr)
479
474
 
480
475
  if (peerId == null && multiaddr == null) {
481
- throw errCode(new TypeError('Can only open connections to PeerIds or Multiaddrs'), codes.ERR_INVALID_PARAMETERS)
476
+ throw new CodeError('Can only open connections to PeerIds or Multiaddrs', codes.ERR_INVALID_PARAMETERS)
482
477
  }
483
478
 
484
479
  if (peerId != null) {
@@ -542,7 +537,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
542
537
 
543
538
  await Promise.all(
544
539
  connections.map(async connection => {
545
- return await connection.close()
540
+ await connection.close()
546
541
  })
547
542
  )
548
543
  }
@@ -552,7 +547,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
552
547
  */
553
548
  getAll (peerId: PeerId): Connection[] {
554
549
  if (!isPeerId(peerId)) {
555
- throw errCode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)
550
+ throw new CodeError('peerId must be an instance of peer-id', codes.ERR_INVALID_PARAMETERS)
556
551
  }
557
552
 
558
553
  const id = peerId.toString()
@@ -569,7 +564,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
569
564
  /**
570
565
  * If the event loop is slow, maybe close a connection
571
566
  */
572
- _onLatencyMeasure (evt: CustomEvent<SummaryObject>) {
567
+ _onLatencyMeasure (evt: CustomEvent<SummaryObject>): void {
573
568
  const { detail: summary } = evt
574
569
 
575
570
  this._checkMaxLimit('maxEventLoopDelay', summary.avgMs, 1)
@@ -581,7 +576,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
581
576
  /**
582
577
  * If the `value` of `name` has exceeded its limit, maybe close a connection
583
578
  */
584
- async _checkMaxLimit (name: keyof ConnectionManagerInit, value: number, toPrune: number = 1) {
579
+ async _checkMaxLimit (name: keyof ConnectionManagerInit, value: number, toPrune: number = 1): Promise<void> {
585
580
  const limit = this.opts[name]
586
581
 
587
582
  if (limit == null) {
@@ -600,7 +595,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
600
595
  * If we have more connections than our maximum, select some excess connections
601
596
  * to prune based on peer value
602
597
  */
603
- async _pruneConnections (toPrune: number) {
598
+ async _pruneConnections (toPrune: number): Promise<void> {
604
599
  const connections = this.getConnections()
605
600
  const peerValues = new PeerMap<number>()
606
601
 
@@ -726,7 +721,7 @@ export class DefaultConnectionManager extends EventEmitter<ConnectionManagerEven
726
721
  return false
727
722
  }
728
723
 
729
- afterUpgradeInbound () {
724
+ afterUpgradeInbound (): void {
730
725
  this.incomingPendingConnections--
731
726
  }
732
727
  }
@@ -148,7 +148,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
148
148
  this.latencyData = this.initLatencyData()
149
149
  }
150
150
 
151
- start () {
151
+ start (): void {
152
152
  // We check for isBrowser because of browsers set max rates of timeouts when a page is hidden,
153
153
  // so we fall back to another library
154
154
  // See: http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs
@@ -172,7 +172,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
172
172
  }
173
173
  }
174
174
 
175
- stop () {
175
+ stop (): void {
176
176
  this._stopTimers()
177
177
  }
178
178
 
@@ -181,7 +181,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
181
181
  *
182
182
  * @private
183
183
  */
184
- _startTimers () {
184
+ _startTimers (): void {
185
185
  // Timer already started, ignore this
186
186
  if (this.checkLatencyID != null) {
187
187
  return
@@ -190,7 +190,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
190
190
  this.checkLatency()
191
191
 
192
192
  if (this.dataEmitIntervalMs != null) {
193
- this.emitIntervalID = setInterval(() => this._emitSummary(), this.dataEmitIntervalMs)
193
+ this.emitIntervalID = setInterval(() => { this._emitSummary() }, this.dataEmitIntervalMs)
194
194
  if (typeof this.emitIntervalID.unref === 'function') {
195
195
  this.emitIntervalID.unref() // Doesn't block exit
196
196
  }
@@ -202,7 +202,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
202
202
  *
203
203
  * @private
204
204
  */
205
- _stopTimers () {
205
+ _stopTimers (): void {
206
206
  if (this.checkLatencyID != null) {
207
207
  clearTimeout(this.checkLatencyID)
208
208
  this.checkLatencyID = undefined
@@ -218,7 +218,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
218
218
  *
219
219
  * @private
220
220
  */
221
- _emitSummary () {
221
+ _emitSummary (): void {
222
222
  const summary = this.getSummary()
223
223
  if (summary.events > 0) {
224
224
  this.dispatchEvent(new CustomEvent<SummaryObject>('data', {
@@ -254,7 +254,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
254
254
  * Randomly calls an async fn every roughly latencyCheckIntervalMs (plus some randomness). If no async fn is found,
255
255
  * it will simply report on event loop latency.
256
256
  */
257
- checkLatency () {
257
+ checkLatency (): void {
258
258
  // Randomness is needed to avoid alignment by accident to regular things in the event loop
259
259
  const randomness = (Math.random() * this.latencyCheckMultiply) - this.latencyCheckSubtract
260
260
 
@@ -264,7 +264,7 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
264
264
  startTime: this.now()
265
265
  }
266
266
 
267
- const cb = () => {
267
+ const cb = (): void => {
268
268
  // We are already stopped, ignore this datapoint
269
269
  if (this.checkLatencyID == null) {
270
270
  return
@@ -314,6 +314,6 @@ export class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
314
314
  }
315
315
  }
316
316
 
317
- function isBrowser () {
317
+ function isBrowser (): boolean {
318
318
  return typeof globalThis.window !== 'undefined'
319
319
  }
@@ -60,7 +60,7 @@ export class VisibilityChangeEmitter extends EventEmitter<VisibilityChangeEmitte
60
60
  *
61
61
  * @private
62
62
  */
63
- _initializeVisibilityVarNames () {
63
+ _initializeVisibilityVarNames (): void {
64
64
  let hidden: Hidden = 'hidden'
65
65
  let visibilityChange = 'visibilitychange'
66
66
 
@@ -91,7 +91,7 @@ export class VisibilityChangeEmitter extends EventEmitter<VisibilityChangeEmitte
91
91
  *
92
92
  * @private
93
93
  */
94
- _addVisibilityChangeListener () {
94
+ _addVisibilityChangeListener (): void {
95
95
  // @ts-expect-error cannot index document object with string key
96
96
  if (typeof globalThis.document.addEventListener === 'undefined' || typeof document[this.hidden] === 'undefined') {
97
97
  log('Checking page visibility requires a browser that supports the Page Visibility API.')
@@ -105,7 +105,7 @@ export class VisibilityChangeEmitter extends EventEmitter<VisibilityChangeEmitte
105
105
  * The function returns ```true``` if the page is visible or ```false``` if the page is not visible and
106
106
  * ```undefined``` if the page visibility API is not supported by the browser.
107
107
  */
108
- isVisible () {
108
+ isVisible (): boolean | undefined {
109
109
  // @ts-expect-error cannot index document object with string key
110
110
  if (this.hidden === undefined || document[this.hidden] === undefined) {
111
111
  return undefined
@@ -122,7 +122,7 @@ export class VisibilityChangeEmitter extends EventEmitter<VisibilityChangeEmitte
122
122
  *
123
123
  * @private
124
124
  */
125
- _handleVisibilityChange () {
125
+ _handleVisibilityChange (): void {
126
126
  // @ts-expect-error cannot index document object with string key
127
127
  const visible = globalThis.document[this.hidden] === false
128
128
  log(visible ? 'Page Visible' : 'Page Hidden')