libp2p 0.42.2-593deefe → 0.42.2-5e63ee2d

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 (228) hide show
  1. package/dist/index.min.js +30 -30
  2. package/dist/src/address-manager/index.d.ts +1 -10
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/address-manager/index.js +46 -29
  5. package/dist/src/address-manager/index.js.map +1 -1
  6. package/dist/src/autonat/constants.d.ts +4 -0
  7. package/dist/src/autonat/constants.d.ts.map +1 -0
  8. package/dist/src/autonat/constants.js +4 -0
  9. package/dist/src/autonat/constants.js.map +1 -0
  10. package/dist/src/autonat/index.d.ts +64 -0
  11. package/dist/src/autonat/index.d.ts.map +1 -0
  12. package/dist/src/autonat/index.js +417 -0
  13. package/dist/src/autonat/index.js.map +1 -0
  14. package/dist/src/autonat/pb/index.d.ts +57 -0
  15. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  16. package/dist/src/autonat/pb/index.js +250 -0
  17. package/dist/src/autonat/pb/index.js.map +1 -0
  18. package/dist/src/circuit/constants.d.ts +29 -3
  19. package/dist/src/circuit/constants.d.ts.map +1 -1
  20. package/dist/src/circuit/constants.js +32 -5
  21. package/dist/src/circuit/constants.js.map +1 -1
  22. package/dist/src/circuit/index.d.ts +16 -61
  23. package/dist/src/circuit/index.d.ts.map +1 -1
  24. package/dist/src/circuit/index.js +2 -1
  25. package/dist/src/circuit/index.js.map +1 -1
  26. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  27. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  28. package/dist/src/circuit/server/advert-service.js +69 -0
  29. package/dist/src/circuit/server/advert-service.js.map +1 -0
  30. package/dist/src/circuit/server/index.d.ts +60 -0
  31. package/dist/src/circuit/server/index.d.ts.map +1 -0
  32. package/dist/src/circuit/server/index.js +287 -0
  33. package/dist/src/circuit/server/index.js.map +1 -0
  34. package/dist/src/circuit/{reservation-store.d.ts → server/reservation-store.d.ts} +17 -10
  35. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  36. package/dist/src/circuit/server/reservation-store.js +57 -0
  37. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  38. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  39. package/dist/src/circuit/{reservation-voucher.js → server/reservation-voucher.js} +1 -1
  40. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  41. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  42. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  43. package/dist/src/circuit/transport/discovery.js +82 -0
  44. package/dist/src/circuit/transport/discovery.js.map +1 -0
  45. package/dist/src/circuit/transport/index.d.ts +33 -0
  46. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  47. package/dist/src/circuit/transport/index.js +225 -0
  48. package/dist/src/circuit/transport/index.js.map +1 -0
  49. package/dist/src/circuit/transport/listener.d.ts +9 -0
  50. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  51. package/dist/src/circuit/transport/listener.js +76 -0
  52. package/dist/src/circuit/transport/listener.js.map +1 -0
  53. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  54. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  55. package/dist/src/circuit/transport/reservation-store.js +165 -0
  56. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  57. package/dist/src/circuit/utils.d.ts +4 -2
  58. package/dist/src/circuit/utils.d.ts.map +1 -1
  59. package/dist/src/circuit/utils.js +75 -102
  60. package/dist/src/circuit/utils.js.map +1 -1
  61. package/dist/src/components.d.ts +2 -1
  62. package/dist/src/components.d.ts.map +1 -1
  63. package/dist/src/components.js.map +1 -1
  64. package/dist/src/config.d.ts.map +1 -1
  65. package/dist/src/config.js +17 -20
  66. package/dist/src/config.js.map +1 -1
  67. package/dist/src/connection/index.d.ts +2 -2
  68. package/dist/src/connection/index.d.ts.map +1 -1
  69. package/dist/src/connection/index.js +1 -1
  70. package/dist/src/connection/index.js.map +1 -1
  71. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  72. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  73. package/dist/src/connection-manager/auto-dialler.js +0 -9
  74. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  75. package/dist/src/connection-manager/dialer/dial-request.js +1 -1
  76. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  77. package/dist/src/connection-manager/dialer/index.d.ts +2 -1
  78. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  79. package/dist/src/connection-manager/dialer/index.js +3 -3
  80. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  81. package/dist/src/connection-manager/index.d.ts +0 -4
  82. package/dist/src/connection-manager/index.d.ts.map +1 -1
  83. package/dist/src/connection-manager/index.js +1 -1
  84. package/dist/src/connection-manager/index.js.map +1 -1
  85. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  86. package/dist/src/connection-manager/latency-monitor.js +1 -1
  87. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  88. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  89. package/dist/src/content-routing/index.d.ts +6 -4
  90. package/dist/src/content-routing/index.d.ts.map +1 -1
  91. package/dist/src/content-routing/index.js +1 -1
  92. package/dist/src/content-routing/index.js.map +1 -1
  93. package/dist/src/content-routing/utils.d.ts +3 -3
  94. package/dist/src/content-routing/utils.d.ts.map +1 -1
  95. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  96. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  97. package/dist/src/dht/dht-content-routing.js.map +1 -1
  98. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  99. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  100. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  101. package/dist/src/dht/dummy-dht.d.ts +1 -1
  102. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  103. package/dist/src/fetch/index.d.ts.map +1 -1
  104. package/dist/src/identify/index.d.ts +3 -1
  105. package/dist/src/identify/index.d.ts.map +1 -1
  106. package/dist/src/identify/index.js +12 -7
  107. package/dist/src/identify/index.js.map +1 -1
  108. package/dist/src/index.d.ts +13 -7
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/insecure/index.d.ts.map +1 -1
  112. package/dist/src/insecure/index.js.map +1 -1
  113. package/dist/src/libp2p.d.ts +6 -4
  114. package/dist/src/libp2p.d.ts.map +1 -1
  115. package/dist/src/libp2p.js +19 -28
  116. package/dist/src/libp2p.js.map +1 -1
  117. package/dist/src/nat-manager.d.ts.map +1 -1
  118. package/dist/src/nat-manager.js +3 -1
  119. package/dist/src/nat-manager.js.map +1 -1
  120. package/dist/src/peer-record-updater.d.ts.map +1 -1
  121. package/dist/src/peer-routing.d.ts.map +1 -1
  122. package/dist/src/ping/index.d.ts.map +1 -1
  123. package/dist/src/pnet/crypto.d.ts +1 -1
  124. package/dist/src/pnet/crypto.d.ts.map +1 -1
  125. package/dist/src/pnet/crypto.js +1 -1
  126. package/dist/src/pnet/crypto.js.map +1 -1
  127. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  128. package/dist/src/registrar.d.ts.map +1 -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 +2 -1
  133. package/dist/src/upgrader.d.ts.map +1 -1
  134. package/dist/src/upgrader.js +19 -14
  135. package/dist/src/upgrader.js.map +1 -1
  136. package/package.json +23 -18
  137. package/src/address-manager/index.ts +62 -35
  138. package/src/autonat/constants.ts +4 -0
  139. package/src/autonat/index.ts +567 -0
  140. package/src/autonat/pb/index.proto +35 -0
  141. package/src/autonat/pb/index.ts +320 -0
  142. package/src/circuit/constants.ts +40 -5
  143. package/src/circuit/index.ts +17 -67
  144. package/src/circuit/server/advert-service.ts +108 -0
  145. package/src/circuit/server/index.ts +421 -0
  146. package/src/circuit/server/reservation-store.ts +111 -0
  147. package/src/circuit/{reservation-voucher.ts → server/reservation-voucher.ts} +3 -3
  148. package/src/circuit/transport/discovery.ts +127 -0
  149. package/src/circuit/transport/index.ts +325 -0
  150. package/src/circuit/transport/listener.ts +99 -0
  151. package/src/circuit/transport/reservation-store.ts +249 -0
  152. package/src/circuit/utils.ts +78 -115
  153. package/src/components.ts +9 -8
  154. package/src/config.ts +17 -20
  155. package/src/connection/index.ts +7 -7
  156. package/src/connection-manager/auto-dialler.ts +4 -20
  157. package/src/connection-manager/dialer/dial-request.ts +1 -1
  158. package/src/connection-manager/dialer/index.ts +10 -9
  159. package/src/connection-manager/index.ts +14 -19
  160. package/src/connection-manager/latency-monitor.ts +9 -9
  161. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  162. package/src/content-routing/index.ts +10 -8
  163. package/src/content-routing/utils.ts +3 -3
  164. package/src/dht/dht-content-routing.ts +3 -2
  165. package/src/dht/dht-peer-routing.ts +3 -2
  166. package/src/dht/dummy-dht.ts +1 -1
  167. package/src/fetch/index.ts +7 -7
  168. package/src/identify/index.ts +22 -17
  169. package/src/index.ts +14 -7
  170. package/src/insecure/index.ts +2 -1
  171. package/src/libp2p.ts +33 -41
  172. package/src/nat-manager.ts +9 -7
  173. package/src/peer-record-updater.ts +4 -4
  174. package/src/peer-routing.ts +4 -4
  175. package/src/ping/index.ts +4 -4
  176. package/src/pnet/crypto.ts +3 -3
  177. package/src/pnet/key-generator.ts +1 -1
  178. package/src/registrar.ts +8 -8
  179. package/src/transport-manager.ts +10 -10
  180. package/src/upgrader.ts +20 -19
  181. package/src/version.ts +1 -1
  182. package/dist/src/circuit/client.d.ts +0 -81
  183. package/dist/src/circuit/client.d.ts.map +0 -1
  184. package/dist/src/circuit/client.js +0 -285
  185. package/dist/src/circuit/client.js.map +0 -1
  186. package/dist/src/circuit/hop.d.ts +0 -23
  187. package/dist/src/circuit/hop.d.ts.map +0 -1
  188. package/dist/src/circuit/hop.js +0 -167
  189. package/dist/src/circuit/hop.js.map +0 -1
  190. package/dist/src/circuit/interfaces.d.ts +0 -27
  191. package/dist/src/circuit/interfaces.d.ts.map +0 -1
  192. package/dist/src/circuit/interfaces.js +0 -2
  193. package/dist/src/circuit/interfaces.js.map +0 -1
  194. package/dist/src/circuit/listener.d.ts +0 -9
  195. package/dist/src/circuit/listener.d.ts.map +0 -1
  196. package/dist/src/circuit/listener.js +0 -62
  197. package/dist/src/circuit/listener.js.map +0 -1
  198. package/dist/src/circuit/multicodec.d.ts +0 -3
  199. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  200. package/dist/src/circuit/multicodec.js +0 -3
  201. package/dist/src/circuit/multicodec.js.map +0 -1
  202. package/dist/src/circuit/relay.d.ts +0 -34
  203. package/dist/src/circuit/relay.d.ts.map +0 -1
  204. package/dist/src/circuit/relay.js +0 -61
  205. package/dist/src/circuit/relay.js.map +0 -1
  206. package/dist/src/circuit/reservation-store.d.ts.map +0 -1
  207. package/dist/src/circuit/reservation-store.js +0 -59
  208. package/dist/src/circuit/reservation-store.js.map +0 -1
  209. package/dist/src/circuit/reservation-voucher.d.ts.map +0 -1
  210. package/dist/src/circuit/reservation-voucher.js.map +0 -1
  211. package/dist/src/circuit/stop.d.ts +0 -19
  212. package/dist/src/circuit/stop.d.ts.map +0 -1
  213. package/dist/src/circuit/stop.js +0 -67
  214. package/dist/src/circuit/stop.js.map +0 -1
  215. package/dist/src/circuit/transport.d.ts +0 -66
  216. package/dist/src/circuit/transport.d.ts.map +0 -1
  217. package/dist/src/circuit/transport.js +0 -238
  218. package/dist/src/circuit/transport.js.map +0 -1
  219. package/src/circuit/client.ts +0 -381
  220. package/src/circuit/hop.ts +0 -210
  221. package/src/circuit/interfaces.ts +0 -28
  222. package/src/circuit/listener.ts +0 -83
  223. package/src/circuit/multicodec.ts +0 -3
  224. package/src/circuit/relay.ts +0 -87
  225. package/src/circuit/reservation-store.ts +0 -106
  226. package/src/circuit/stop.ts +0 -92
  227. package/src/circuit/transport.ts +0 -313
  228. /package/dist/src/circuit/{reservation-voucher.d.ts → server/reservation-voucher.d.ts} +0 -0
@@ -5,140 +5,101 @@ import type { Uint8ArrayList } from 'uint8arraylist'
5
5
  import type { Limit } from './pb/index.js'
6
6
  import { logger } from '@libp2p/logger'
7
7
  import type { Stream } from '@libp2p/interface-connection'
8
+ import { DEFAULT_DATA_LIMIT, DEFAULT_DURATION_LIMIT } from './constants.js'
9
+ import { abortableSource } from 'abortable-iterator'
10
+ import anySignal from 'any-signal'
8
11
 
9
- const log = logger('libp2p:circuit:v2:util')
12
+ const log = logger('libp2p:circuit-relay:utils')
10
13
 
11
- const doRelay = (src: Stream, dst: Stream) => {
12
- queueMicrotask(() => {
13
- void dst.sink(src.source).catch(err => log.error('error while relating streams:', err))
14
- })
14
+ async function * countStreamBytes (source: Source<Uint8Array | Uint8ArrayList>, limit: { remaining: bigint }): AsyncGenerator<Uint8Array | Uint8ArrayList, void, unknown> {
15
+ for await (const buf of source) {
16
+ const len = BigInt(buf.byteLength)
15
17
 
16
- queueMicrotask(() => {
17
- void src.sink(dst.source).catch(err => log.error('error while relaying streams:', err))
18
- })
19
- }
18
+ if ((limit.remaining - len) < 0) {
19
+ // this is a safe downcast since len is guarantee to be in the range for a number
20
+ const remaining = Number(limit.remaining)
21
+ limit.remaining = 0n
20
22
 
21
- export function createLimitedRelay (source: Stream, destination: Stream, limit?: Limit) {
22
- // trivial case
23
- if (limit == null) {
24
- doRelay(source, destination)
25
- return
26
- }
27
-
28
- const dataLimit = limit.data ?? 0n
29
- const durationLimit = limit.duration ?? 0
30
- const src = durationLimitDuplex(dataLimitDuplex(source, dataLimit), durationLimit)
31
- const dst = durationLimitDuplex(dataLimitDuplex(destination, dataLimit), durationLimit)
32
-
33
- doRelay(src, dst)
34
- }
35
-
36
- const dataLimitSource = (stream: Stream, limit: bigint): Stream => {
37
- if (limit === 0n) {
38
- return stream
39
- }
40
-
41
- const source = stream.source
42
-
43
- stream.source = (async function * (): Source<Uint8ArrayList> {
44
- let total = 0n
45
-
46
- for await (const buf of source) {
47
- const len = BigInt(buf.byteLength)
48
- if (total + len > limit) {
49
- // this is a safe downcast since len is guarantee to be in the range for a number
50
- const remaining = Number(limit - total)
51
- try {
52
- if (remaining !== 0) {
53
- yield buf
54
- }
55
- } finally {
56
- stream.abort(new Error('data limit exceeded'))
23
+ try {
24
+ if (remaining !== 0) {
25
+ yield buf.subarray(0, remaining)
57
26
  }
58
- return
27
+ } catch (err: any) {
28
+ log.error(err)
59
29
  }
60
30
 
61
- yield buf
62
-
63
- total += len
31
+ throw new Error('data limit exceeded')
64
32
  }
65
- })()
66
33
 
67
- return stream
68
- }
69
-
70
- const dataLimitSink = (stream: Stream, limit: bigint): Stream => {
71
- if (limit === 0n) {
72
- return stream
34
+ limit.remaining -= len
35
+ yield buf
73
36
  }
37
+ }
74
38
 
75
- const sink = stream.sink
76
-
77
- stream.sink = async (source: Source<Uint8ArrayList | Uint8Array>) => {
78
- await sink((async function * (): Source<Uint8ArrayList | Uint8Array> {
79
- let total = 0n
80
-
81
- for await (const buf of source) {
82
- const len = BigInt(buf.byteLength)
83
- if (total + len > limit) {
84
- // this is a safe downcast since len is guarantee to be in the range for a number
85
- const remaining = Number(limit - total)
86
- try {
87
- if (remaining !== 0) {
88
- yield buf.subarray(0, remaining)
89
- }
90
- } finally {
91
- stream.abort(new Error('data limit exceeded'))
92
- }
93
- return
94
- }
95
-
96
- total += len
97
- yield buf
98
- }
99
- })())
39
+ const doRelay = (src: Stream, dst: Stream, abortSignal: AbortSignal, limit: Required<Limit>): void => {
40
+ function abortStreams (err: Error): void {
41
+ src.abort(err)
42
+ dst.abort(err)
43
+ clearTimeout(timeout)
100
44
  }
101
45
 
102
- return stream
103
- }
46
+ const abortController = new AbortController()
47
+ const signal = anySignal([abortSignal, abortController.signal])
104
48
 
105
- const dataLimitDuplex = (stream: Stream, limit: bigint): Stream => {
106
- dataLimitSource(stream, limit)
107
- dataLimitSink(stream, limit)
49
+ const timeout = setTimeout(() => {
50
+ abortController.abort()
51
+ }, limit.duration)
108
52
 
109
- return stream
110
- }
53
+ let srcDstFinished = false
54
+ let dstSrcFinished = false
111
55
 
112
- const durationLimitDuplex = (stream: Stream, limit: number): Stream => {
113
- if (limit === 0) {
114
- return stream
56
+ const dataLimit = {
57
+ remaining: limit.data
115
58
  }
116
59
 
117
- let timedOut = false
118
- const timeout = setTimeout(
119
- () => {
120
- timedOut = true
121
- stream.abort(new Error('exceeded connection duration limit'))
122
- },
123
- limit
124
- )
125
-
126
- const source = stream.source
127
-
128
- stream.source = (async function * (): Source<Uint8ArrayList> {
129
- try {
130
- for await (const buf of source) {
131
- if (timedOut) {
132
- return
60
+ queueMicrotask(() => {
61
+ void dst.sink(countStreamBytes(abortableSource(src.source, signal, {
62
+ abortMessage: 'duration limit exceeded'
63
+ }), dataLimit))
64
+ .catch(err => {
65
+ log.error('error while relaying streams src -> dst', err)
66
+ abortStreams(err)
67
+ })
68
+ .finally(() => {
69
+ srcDstFinished = true
70
+
71
+ if (dstSrcFinished) {
72
+ clearTimeout(timeout)
133
73
  }
134
- yield buf
135
- }
136
- } finally {
137
- clearTimeout(timeout)
138
- }
139
- })()
74
+ })
75
+ })
140
76
 
141
- return stream
77
+ queueMicrotask(() => {
78
+ void src.sink(countStreamBytes(abortableSource(dst.source, signal, {
79
+ abortMessage: 'duration limit exceeded'
80
+ }), dataLimit))
81
+ .catch(err => {
82
+ log.error('error while relaying streams dst -> src', err)
83
+ abortStreams(err)
84
+ })
85
+ .finally(() => {
86
+ dstSrcFinished = true
87
+
88
+ if (srcDstFinished) {
89
+ clearTimeout(timeout)
90
+ }
91
+ })
92
+ })
93
+ }
94
+
95
+ export function createLimitedRelay (source: Stream, destination: Stream, abortSignal: AbortSignal, limit?: Limit): void {
96
+ const dataLimit = limit?.data ?? BigInt(DEFAULT_DATA_LIMIT)
97
+ const durationLimit = limit?.duration ?? DEFAULT_DURATION_LIMIT
98
+
99
+ doRelay(source, destination, abortSignal, {
100
+ data: dataLimit,
101
+ duration: durationLimit
102
+ })
142
103
  }
143
104
 
144
105
  /**
@@ -151,7 +112,9 @@ export async function namespaceToCid (namespace: string): Promise<CID> {
151
112
  return CID.createV0(hash)
152
113
  }
153
114
 
154
- /** returns number of ms beween now and expiration time */
115
+ /**
116
+ * returns number of ms between now and expiration time
117
+ */
155
118
  export function getExpiration (expireTime: bigint): number {
156
119
  return Number(expireTime) - new Date().getTime()
157
120
  }
package/src/components.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import errCode from 'err-code'
2
- import type { ConnectionGater, ConnectionProtector } from '@libp2p/interface-connection'
2
+ import type { ConnectionProtector } from '@libp2p/interface-connection'
3
3
  import type { ContentRouting } from '@libp2p/interface-content-routing'
4
4
  import type { AddressManager } from '@libp2p/interface-address-manager'
5
5
  import { isStartable, Startable } from '@libp2p/interfaces/startable'
@@ -13,6 +13,7 @@ import type { Datastore } from 'interface-datastore'
13
13
  import type { PubSub } from '@libp2p/interface-pubsub'
14
14
  import type { DualDHT } from '@libp2p/interface-dht'
15
15
  import type { ConnectionManager, Dialer } from '@libp2p/interface-connection-manager'
16
+ import type { ConnectionGater } from '@libp2p/interface-connection-gater'
16
17
 
17
18
  export interface Components {
18
19
  peerId: PeerId
@@ -90,11 +91,11 @@ export class DefaultComponents implements Components, Startable {
90
91
  this._dialer = init.dialer
91
92
  }
92
93
 
93
- isStarted () {
94
+ isStarted (): boolean {
94
95
  return this._started
95
96
  }
96
97
 
97
- async beforeStart () {
98
+ async beforeStart (): Promise<void> {
98
99
  await Promise.all(
99
100
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
100
101
  if (startable.beforeStart != null) {
@@ -104,7 +105,7 @@ export class DefaultComponents implements Components, Startable {
104
105
  )
105
106
  }
106
107
 
107
- async start () {
108
+ async start (): Promise<void> {
108
109
  await Promise.all(
109
110
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
110
111
  await startable.start()
@@ -114,7 +115,7 @@ export class DefaultComponents implements Components, Startable {
114
115
  this._started = true
115
116
  }
116
117
 
117
- async afterStart () {
118
+ async afterStart (): Promise<void> {
118
119
  await Promise.all(
119
120
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
120
121
  if (startable.afterStart != null) {
@@ -124,7 +125,7 @@ export class DefaultComponents implements Components, Startable {
124
125
  )
125
126
  }
126
127
 
127
- async beforeStop () {
128
+ async beforeStop (): Promise<void> {
128
129
  await Promise.all(
129
130
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
130
131
  if (startable.beforeStop != null) {
@@ -134,7 +135,7 @@ export class DefaultComponents implements Components, Startable {
134
135
  )
135
136
  }
136
137
 
137
- async stop () {
138
+ async stop (): Promise<void> {
138
139
  await Promise.all(
139
140
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
140
141
  await startable.stop()
@@ -144,7 +145,7 @@ export class DefaultComponents implements Components, Startable {
144
145
  this._started = false
145
146
  }
146
147
 
147
- async afterStop () {
148
+ async afterStop (): Promise<void> {
148
149
  await Promise.all(
149
150
  Object.values(this).filter(obj => isStartable(obj)).map(async (startable: Startable) => {
150
151
  if (startable.afterStop != null) {
package/src/config.ts CHANGED
@@ -2,7 +2,6 @@ import mergeOptions from 'merge-options'
2
2
  import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
3
3
  import * as Constants from './constants.js'
4
4
  import { AGENT_VERSION } from './identify/consts.js'
5
- import * as RelayConstants from './circuit/constants.js'
6
5
  import { publicAddressesFirst } from '@libp2p/utils/address-sort'
7
6
  import { FaultTolerance } from '@libp2p/interface-transport'
8
7
  import type { Multiaddr } from '@multiformats/multiaddr'
@@ -22,7 +21,6 @@ const DefaultConfig: Partial<Libp2pInit> = {
22
21
  connectionManager: {
23
22
  maxConnections: 300,
24
23
  minConnections: 50,
25
- autoDial: true,
26
24
  autoDialInterval: 10000,
27
25
  maxParallelDials: Constants.MAX_PARALLEL_DIALS,
28
26
  maxDialsPerPeer: Constants.MAX_PER_PEER_DIALS,
@@ -49,22 +47,6 @@ const DefaultConfig: Partial<Libp2pInit> = {
49
47
  ttl: 7200,
50
48
  keepAlive: true
51
49
  },
52
- relay: {
53
- enabled: true,
54
- advertise: {
55
- bootDelay: RelayConstants.ADVERTISE_BOOT_DELAY,
56
- enabled: false,
57
- ttl: RelayConstants.ADVERTISE_TTL
58
- },
59
- hop: {
60
- enabled: false,
61
- timeout: 30000
62
- },
63
- reservationManager: {
64
- enabled: false,
65
- maxReservations: 2
66
- }
67
- },
68
50
  identify: {
69
51
  protocolPrefix: 'ipfs',
70
52
  host: {
@@ -75,11 +57,18 @@ const DefaultConfig: Partial<Libp2pInit> = {
75
57
  maxInboundStreams: 1,
76
58
  maxOutboundStreams: 1,
77
59
  maxPushIncomingStreams: 1,
78
- maxPushOutgoingStreams: 1
60
+ maxPushOutgoingStreams: 1,
61
+ maxObservedAddresses: 10
79
62
  },
80
63
  ping: {
81
64
  protocolPrefix: 'ipfs',
82
- maxInboundStreams: 1,
65
+ // See https://github.com/libp2p/specs/blob/d4b5fb0152a6bb86cfd9ea/ping/ping.md?plain=1#L38-L43
66
+ // The dialing peer MUST NOT keep more than one outbound stream for the ping protocol per peer.
67
+ // The listening peer SHOULD accept at most two streams per peer since cross-stream behavior is
68
+ // non-linear and stream writes occur asynchronously. The listening peer may perceive the
69
+ // dialing peer closing and opening the wrong streams (for instance, closing stream B and
70
+ // opening stream A even though the dialing peer is opening stream B and closing stream A).
71
+ maxInboundStreams: 2,
83
72
  maxOutboundStreams: 1,
84
73
  timeout: 10000
85
74
  },
@@ -88,6 +77,14 @@ const DefaultConfig: Partial<Libp2pInit> = {
88
77
  maxInboundStreams: 1,
89
78
  maxOutboundStreams: 1,
90
79
  timeout: 10000
80
+ },
81
+ autonat: {
82
+ protocolPrefix: 'libp2p',
83
+ maxInboundStreams: 1,
84
+ maxOutboundStreams: 1,
85
+ timeout: 30000,
86
+ startupDelay: 5000,
87
+ refreshInterval: 60000
91
88
  }
92
89
  }
93
90
 
@@ -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
 
@@ -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
  }
@@ -138,7 +138,7 @@ export class DialRequest {
138
138
  c.abort()
139
139
  }
140
140
  })
141
- 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
142
142
  }
143
143
  }
144
144
  }
@@ -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()) {
@@ -163,7 +164,7 @@ 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
+ if ((await this.components.connectionGater.denyDialPeer?.(peerId)) === true) {
167
168
  throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED)
168
169
  }
169
170
  }
@@ -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
 
@@ -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