libp2p 0.36.0 → 0.36.2-1473044

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 (415) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +215 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +54 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +190 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +93 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. package/src/upgrader.js +0 -492
package/src/index.js DELETED
@@ -1,811 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p'), {
5
- error: debug('libp2p:err')
6
- })
7
- const { EventEmitter } = require('events')
8
-
9
- const errCode = require('err-code')
10
- const PeerId = require('peer-id')
11
- const { Multiaddr } = require('multiaddr')
12
- const { MemoryDatastore } = require('datastore-core/memory')
13
- const PeerRouting = require('./peer-routing')
14
- const ContentRouting = require('./content-routing')
15
- const getPeer = require('./get-peer')
16
- const { validate: validateConfig } = require('./config')
17
- const { codes, messages } = require('./errors')
18
-
19
- const AddressManager = require('./address-manager')
20
- const ConnectionManager = require('./connection-manager')
21
- const AutoDialler = require('./connection-manager/auto-dialler')
22
- const Circuit = require('./circuit/transport')
23
- const Relay = require('./circuit')
24
- const Dialer = require('./dialer')
25
- const Keychain = require('./keychain')
26
- const Metrics = require('./metrics')
27
- const TransportManager = require('./transport-manager')
28
- const Upgrader = require('./upgrader')
29
- const PeerStore = require('./peer-store')
30
- const PubsubAdapter = require('./pubsub-adapter')
31
- const Registrar = require('./registrar')
32
- const ping = require('./ping')
33
- const IdentifyService = require('./identify')
34
- const FetchService = require('./fetch')
35
- const NatManager = require('./nat-manager')
36
- const { updateSelfPeerRecord } = require('./record/utils')
37
-
38
- /**
39
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
40
- * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
41
- * @typedef {import('libp2p-interfaces/src/transport/types').TransportFactory<any, any>} TransportFactory
42
- * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory
43
- * @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
44
- * @typedef {import('libp2p-interfaces/src/peer-discovery/types').PeerDiscoveryFactory} PeerDiscoveryFactory
45
- * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule
46
- * @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto
47
- * @typedef {import('libp2p-interfaces/src/pubsub')} Pubsub
48
- * @typedef {import('libp2p-interfaces/src/pubsub').PubsubOptions} PubsubOptions
49
- * @typedef {import('interface-datastore').Datastore} Datastore
50
- * @typedef {import('./pnet')} Protector
51
- * @typedef {import('./types').ConnectionGater} ConnectionGater
52
- * @typedef {Object} PersistentPeerStoreOptions
53
- * @property {number} [threshold]
54
- */
55
-
56
- /**
57
- * @typedef {Object} HandlerProps
58
- * @property {Connection} connection
59
- * @property {MuxedStream} stream
60
- * @property {string} protocol
61
- *
62
- * @typedef {Object} DhtOptions
63
- * @property {boolean} [enabled = false]
64
- * @property {number} [kBucketSize = 20]
65
- * @property {boolean} [clientMode]
66
- * @property {import('libp2p-interfaces/src/types').DhtSelectors} [selectors]
67
- * @property {import('libp2p-interfaces/src/types').DhtValidators} [validators]
68
- *
69
- * @typedef {Object} KeychainOptions
70
- * @property {Datastore} [datastore]
71
- *
72
- * @typedef {Object} PeerStoreOptions
73
- * @property {boolean} persistence
74
- *
75
- * @typedef {Object} PubsubLocalOptions
76
- * @property {boolean} enabled
77
- *
78
- * @typedef {Object} MetricsOptions
79
- * @property {boolean} enabled
80
- *
81
- * @typedef {Object} RelayOptions
82
- * @property {boolean} [enabled = true]
83
- * @property {import('./circuit').RelayAdvertiseOptions} [advertise]
84
- * @property {import('./circuit').HopOptions} [hop]
85
- * @property {import('./circuit').AutoRelayOptions} [autoRelay]
86
- *
87
- * @typedef {Object} Libp2pConfig
88
- * @property {DhtOptions} [dht] dht module options
89
- * @property {import('./nat-manager').NatManagerOptions} [nat]
90
- * @property {Record<string, Object|boolean>} [peerDiscovery]
91
- * @property {PubsubLocalOptions & PubsubOptions} [pubsub] pubsub module options
92
- * @property {RelayOptions} [relay]
93
- * @property {Record<string, Object>} [transport] transport options indexed by transport key
94
- *
95
- * @typedef {Object} Libp2pModules
96
- * @property {TransportFactory[]} transport
97
- * @property {MuxerFactory[]} streamMuxer
98
- * @property {Crypto[]} connEncryption
99
- * @property {PeerDiscoveryFactory[]} [peerDiscovery]
100
- * @property {PeerRoutingModule[]} [peerRouting]
101
- * @property {ContentRoutingModule[]} [contentRouting]
102
- * @property {Object} [dht]
103
- * @property {{new(...args: any[]): Pubsub}} [pubsub]
104
- * @property {Protector} [connProtector]
105
- *
106
- * @typedef {Object} Libp2pOptions
107
- * @property {Libp2pModules} modules libp2p modules to use
108
- * @property {import('./address-manager').AddressManagerOptions} [addresses]
109
- * @property {import('./connection-manager').ConnectionManagerOptions} [connectionManager]
110
- * @property {Partial<import('./types').ConnectionGater>} [connectionGater]
111
- * @property {Datastore} [datastore]
112
- * @property {import('./dialer').DialerOptions} [dialer]
113
- * @property {import('./identify/index').HostProperties} [host] libp2p host
114
- * @property {KeychainOptions & import('./keychain/index').KeychainOptions} [keychain]
115
- * @property {MetricsOptions & import('./metrics').MetricsOptions} [metrics]
116
- * @property {import('./peer-routing').PeerRoutingOptions} [peerRouting]
117
- * @property {PeerStoreOptions} [peerStore]
118
- * @property {import('./transport-manager').TransportManagerOptions} [transportManager]
119
- * @property {Libp2pConfig} [config]
120
- *
121
- * @typedef {Object} constructorOptions
122
- * @property {PeerId} peerId
123
- *
124
- * @typedef {Object} CreateOptions
125
- * @property {PeerId} [peerId]
126
- *
127
- * @extends {EventEmitter}
128
- * @fires Libp2p#error Emitted when an error occurs
129
- * @fires Libp2p#peer:discovery Emitted when a peer is discovered
130
- */
131
- class Libp2p extends EventEmitter {
132
- /**
133
- * Like `new Libp2p(options)` except it will create a `PeerId`
134
- * instance if one is not provided in options.
135
- *
136
- * @param {Libp2pOptions & CreateOptions} options - Libp2p configuration options
137
- * @returns {Promise<Libp2p>}
138
- */
139
- static async create (options) {
140
- if (options.peerId) {
141
- // @ts-ignore 'Libp2pOptions & CreateOptions' is not assignable to 'Libp2pOptions & constructorOptions'
142
- return new Libp2p(options)
143
- }
144
-
145
- const peerId = await PeerId.create()
146
-
147
- options.peerId = peerId
148
- // @ts-ignore 'Libp2pOptions & CreateOptions' is not assignable to 'Libp2pOptions & constructorOptions'
149
- return new Libp2p(options)
150
- }
151
-
152
- /**
153
- * Libp2p node.
154
- *
155
- * @class
156
- * @param {Libp2pOptions & constructorOptions} _options
157
- */
158
- constructor (_options) {
159
- super()
160
- // validateConfig will ensure the config is correct,
161
- // and add default values where appropriate
162
- this._options = validateConfig(_options)
163
-
164
- /** @type {PeerId} */
165
- this.peerId = this._options.peerId
166
- this.datastore = this._options.datastore
167
-
168
- // Create Metrics
169
- if (this._options.metrics.enabled) {
170
- const metrics = new Metrics({
171
- ...this._options.metrics
172
- })
173
-
174
- this.metrics = metrics
175
- }
176
-
177
- /** @type {ConnectionGater} */
178
- this.connectionGater = {
179
- denyDialPeer: async () => Promise.resolve(false),
180
- denyDialMultiaddr: async () => Promise.resolve(false),
181
- denyInboundConnection: async () => Promise.resolve(false),
182
- denyOutboundConnection: async () => Promise.resolve(false),
183
- denyInboundEncryptedConnection: async () => Promise.resolve(false),
184
- denyOutboundEncryptedConnection: async () => Promise.resolve(false),
185
- denyInboundUpgradedConnection: async () => Promise.resolve(false),
186
- denyOutboundUpgradedConnection: async () => Promise.resolve(false),
187
- filterMultiaddrForPeer: async () => Promise.resolve(true),
188
- ...this._options.connectionGater
189
- }
190
-
191
- /** @type {import('./peer-store/types').PeerStore} */
192
- this.peerStore = new PeerStore({
193
- peerId: this.peerId,
194
- datastore: (this.datastore && this._options.peerStore.persistence) ? this.datastore : new MemoryDatastore(),
195
- addressFilter: this.connectionGater.filterMultiaddrForPeer
196
- })
197
-
198
- // Addresses {listen, announce, noAnnounce}
199
- this.addresses = this._options.addresses
200
- this.addressManager = new AddressManager(this.peerId, this._options.addresses)
201
-
202
- // when addresses change, update our peer record
203
- this.addressManager.on('change:addresses', () => {
204
- updateSelfPeerRecord(this).catch(err => {
205
- log.error('Error updating self peer record', err)
206
- })
207
- })
208
-
209
- this._modules = this._options.modules
210
- this._config = this._options.config
211
- this._transport = [] // Transport instances/references
212
- this._discovery = new Map() // Discovery service instances/references
213
-
214
- // Create the Connection Manager
215
- this.connectionManager = new ConnectionManager(this, {
216
- ...this._options.connectionManager
217
- })
218
- this._autodialler = new AutoDialler(this, {
219
- enabled: this._config.peerDiscovery.autoDial,
220
- minConnections: this._options.connectionManager.minConnections,
221
- autoDialInterval: this._options.connectionManager.autoDialInterval
222
- })
223
-
224
- // Create keychain
225
- if (this._options.keychain && this._options.keychain.datastore) {
226
- log('creating keychain')
227
-
228
- const keychainOpts = Keychain.generateOptions()
229
-
230
- this.keychain = new Keychain(this._options.keychain.datastore, {
231
- ...keychainOpts,
232
- ...this._options.keychain
233
- })
234
-
235
- log('keychain constructed')
236
- }
237
-
238
- // Setup the Upgrader
239
- this.upgrader = new Upgrader({
240
- connectionGater: this.connectionGater,
241
- localPeer: this.peerId,
242
- metrics: this.metrics,
243
- onConnection: (connection) => this.connectionManager.onConnect(connection),
244
- onConnectionEnd: (connection) => this.connectionManager.onDisconnect(connection)
245
- })
246
-
247
- // Setup the transport manager
248
- this.transportManager = new TransportManager({
249
- libp2p: this,
250
- upgrader: this.upgrader,
251
- faultTolerance: this._options.transportManager.faultTolerance
252
- })
253
-
254
- // Create the Nat Manager
255
- this.natManager = new NatManager({
256
- peerId: this.peerId,
257
- addressManager: this.addressManager,
258
- transportManager: this.transportManager,
259
- // @ts-ignore Nat typedef is not understood as Object
260
- ...this._options.config.nat
261
- })
262
-
263
- // Create the Registrar
264
- this.registrar = new Registrar({
265
- peerStore: this.peerStore,
266
- connectionManager: this.connectionManager
267
- })
268
-
269
- this.handle = this.handle.bind(this)
270
- this.registrar.handle = this.handle
271
-
272
- // Attach crypto channels
273
- if (!this._modules.connEncryption || !this._modules.connEncryption.length) {
274
- throw errCode(new Error(messages.CONN_ENCRYPTION_REQUIRED), codes.CONN_ENCRYPTION_REQUIRED)
275
- }
276
- const cryptos = this._modules.connEncryption
277
- cryptos.forEach((crypto) => {
278
- this.upgrader.cryptos.set(crypto.protocol, crypto)
279
- })
280
-
281
- this.dialer = new Dialer({
282
- transportManager: this.transportManager,
283
- connectionGater: this.connectionGater,
284
- peerStore: this.peerStore,
285
- metrics: this.metrics,
286
- ...this._options.dialer
287
- })
288
-
289
- this._modules.transport.forEach((Transport) => {
290
- const key = Transport.prototype[Symbol.toStringTag]
291
- const transportOptions = this._config.transport[key]
292
- this.transportManager.add(key, Transport, transportOptions)
293
- })
294
-
295
- if (this._config.relay.enabled) {
296
- // @ts-ignore Circuit prototype
297
- this.transportManager.add(Circuit.prototype[Symbol.toStringTag], Circuit)
298
- this.relay = new Relay(this)
299
- }
300
-
301
- // Attach stream multiplexers
302
- if (this._modules.streamMuxer) {
303
- const muxers = this._modules.streamMuxer
304
- muxers.forEach((muxer) => {
305
- this.upgrader.muxers.set(muxer.multicodec, muxer)
306
- })
307
-
308
- // Add the identify service since we can multiplex
309
- this.identifyService = new IdentifyService({ libp2p: this })
310
- }
311
-
312
- // Attach private network protector
313
- if (this._modules.connProtector) {
314
- this.upgrader.protector = this._modules.connProtector
315
- } else if (globalThis.process !== undefined && globalThis.process.env && globalThis.process.env.LIBP2P_FORCE_PNET) { // eslint-disable-line no-undef
316
- throw new Error('Private network is enforced, but no protector was provided')
317
- }
318
-
319
- // dht provided components (peerRouting, contentRouting, dht)
320
- if (this._modules.dht) {
321
- const DHT = this._modules.dht
322
- // @ts-ignore TODO: types need fixing - DHT is an `object` which has no `create` method
323
- this._dht = DHT.create({
324
- libp2p: this,
325
- ...this._config.dht
326
- })
327
- }
328
-
329
- // Create pubsub if provided
330
- if (this._modules.pubsub) {
331
- const Pubsub = this._modules.pubsub
332
- // using pubsub adapter with *DEPRECATED* handlers functionality
333
- /** @type {Pubsub} */
334
- this.pubsub = PubsubAdapter(Pubsub, this, this._config.pubsub)
335
- }
336
-
337
- // Attach remaining APIs
338
- // peer and content routing will automatically get modules from _modules and _dht
339
- this.peerRouting = new PeerRouting(this)
340
- this.contentRouting = new ContentRouting(this)
341
-
342
- // Mount default protocols
343
- ping.mount(this)
344
-
345
- this._onDiscoveryPeer = this._onDiscoveryPeer.bind(this)
346
-
347
- this.fetchService = new FetchService(this)
348
- }
349
-
350
- /**
351
- * Overrides EventEmitter.emit to conditionally emit errors
352
- * if there is a handler. If not, errors will be logged.
353
- *
354
- * @param {string} eventName
355
- * @param {...any} args
356
- * @returns {boolean}
357
- */
358
- emit (eventName, ...args) {
359
- // TODO: do we still need this?
360
- // @ts-ignore _events does not exist in libp2p
361
- if (eventName === 'error' && !this._events.error) {
362
- log.error(args)
363
- return false
364
- } else {
365
- return super.emit(eventName, ...args)
366
- }
367
- }
368
-
369
- /**
370
- * Starts the libp2p node and all its subsystems
371
- *
372
- * @returns {Promise<void>}
373
- */
374
- async start () {
375
- log('libp2p is starting')
376
-
377
- if (this.identifyService) {
378
- await this.handle(Object.values(IdentifyService.getProtocolStr(this)), this.identifyService.handleMessage)
379
- }
380
-
381
- if (this.fetchService) {
382
- await this.handle(FetchService.PROTOCOL, this.fetchService.handleMessage)
383
- }
384
-
385
- try {
386
- await this._onStarting()
387
- await this._onDidStart()
388
- log('libp2p has started')
389
- } catch (/** @type {any} */ err) {
390
- this.emit('error', err)
391
- log.error('An error occurred starting libp2p', err)
392
- await this.stop()
393
- throw err
394
- }
395
- }
396
-
397
- /**
398
- * Stop the libp2p node by closing its listeners and open connections
399
- *
400
- * @async
401
- * @returns {Promise<void>}
402
- */
403
- async stop () {
404
- log('libp2p is stopping')
405
-
406
- try {
407
- this._isStarted = false
408
-
409
- if (this.identifyService) {
410
- await this.identifyService.stop()
411
- }
412
-
413
- this.relay && this.relay.stop()
414
- this.peerRouting.stop()
415
- await this._autodialler.stop()
416
- await (this._dht && this._dht.stop())
417
-
418
- for (const service of this._discovery.values()) {
419
- service.removeListener('peer', this._onDiscoveryPeer)
420
- }
421
-
422
- await Promise.all(Array.from(this._discovery.values(), s => s.stop()))
423
-
424
- this._discovery = new Map()
425
-
426
- await this.connectionManager.stop()
427
-
428
- await Promise.all([
429
- this.pubsub && this.pubsub.stop(),
430
- this.metrics && this.metrics.stop()
431
- ])
432
-
433
- await this.natManager.stop()
434
- await this.transportManager.close()
435
-
436
- this.unhandle(FetchService.PROTOCOL)
437
-
438
- ping.unmount(this)
439
- this.dialer.destroy()
440
- } catch (/** @type {any} */ err) {
441
- if (err) {
442
- log.error(err)
443
- this.emit('error', err)
444
- }
445
- }
446
- log('libp2p has stopped')
447
- }
448
-
449
- /**
450
- * Load keychain keys from the datastore.
451
- * Imports the private key as 'self', if needed.
452
- *
453
- * @async
454
- * @returns {Promise<void>}
455
- */
456
- async loadKeychain () {
457
- if (!this.keychain) {
458
- return
459
- }
460
-
461
- try {
462
- await this.keychain.findKeyByName('self')
463
- } catch (/** @type {any} */ err) {
464
- await this.keychain.importPeer('self', this.peerId)
465
- }
466
- }
467
-
468
- isStarted () {
469
- return this._isStarted
470
- }
471
-
472
- /**
473
- * Gets a Map of the current connections. The keys are the stringified
474
- * `PeerId` of the peer. The value is an array of Connections to that peer.
475
- *
476
- * @returns {Map<string, Connection[]>}
477
- */
478
- get connections () {
479
- return this.connectionManager.connections
480
- }
481
-
482
- /**
483
- * Dials to the provided peer. If successful, the known metadata of the
484
- * peer will be added to the nodes `peerStore`
485
- *
486
- * @param {PeerId|Multiaddr|string} peer - The peer to dial
487
- * @param {object} [options]
488
- * @param {AbortSignal} [options.signal]
489
- * @returns {Promise<Connection>}
490
- */
491
- dial (peer, options) {
492
- return this._dial(peer, options)
493
- }
494
-
495
- /**
496
- * Dials to the provided peer and tries to handshake with the given protocols in order.
497
- * If successful, the known metadata of the peer will be added to the nodes `peerStore`,
498
- * and the `MuxedStream` will be returned together with the successful negotiated protocol.
499
- *
500
- * @async
501
- * @param {PeerId|Multiaddr|string} peer - The peer to dial
502
- * @param {string[]|string} protocols
503
- * @param {object} [options]
504
- * @param {AbortSignal} [options.signal]
505
- */
506
- async dialProtocol (peer, protocols, options) {
507
- if (!protocols || !protocols.length) {
508
- throw errCode(new Error('no protocols were provided to open a stream'), codes.ERR_INVALID_PROTOCOLS_FOR_STREAM)
509
- }
510
-
511
- const connection = await this._dial(peer, options)
512
- return connection.newStream(protocols)
513
- }
514
-
515
- /**
516
- * @async
517
- * @param {PeerId|Multiaddr|string} peer - The peer to dial
518
- * @param {object} [options]
519
- * @returns {Promise<Connection>}
520
- */
521
- async _dial (peer, options) {
522
- const { id, multiaddrs } = getPeer(peer)
523
-
524
- if (id.equals(this.peerId)) {
525
- throw errCode(new Error('Cannot dial self'), codes.ERR_DIALED_SELF)
526
- }
527
-
528
- let connection = this.connectionManager.get(id)
529
-
530
- if (!connection) {
531
- connection = await this.dialer.connectToPeer(peer, options)
532
- } else if (multiaddrs) {
533
- await this.peerStore.addressBook.add(id, multiaddrs)
534
- }
535
-
536
- return connection
537
- }
538
-
539
- /**
540
- * Get a deduplicated list of peer advertising multiaddrs by concatenating
541
- * the listen addresses used by transports with any configured
542
- * announce addresses as well as observed addresses reported by peers.
543
- *
544
- * If Announce addrs are specified, configured listen addresses will be
545
- * ignored though observed addresses will still be included.
546
- *
547
- * @returns {Multiaddr[]}
548
- */
549
- get multiaddrs () {
550
- let addrs = this.addressManager.getAnnounceAddrs().map(ma => ma.toString())
551
-
552
- if (!addrs.length) {
553
- // no configured announce addrs, add configured listen addresses
554
- addrs = this.transportManager.getAddrs().map(ma => ma.toString())
555
- }
556
-
557
- addrs = addrs.concat(this.addressManager.getObservedAddrs().map(ma => ma.toString()))
558
-
559
- const announceFilter = this._options.addresses.announceFilter
560
-
561
- // dedupe multiaddrs
562
- const addrSet = new Set(addrs)
563
-
564
- // Create advertising list
565
- return announceFilter(Array.from(addrSet).map(str => new Multiaddr(str)))
566
- }
567
-
568
- /**
569
- * Disconnects all connections to the given `peer`
570
- *
571
- * @param {PeerId|Multiaddr|string} peer - the peer to close connections to
572
- * @returns {Promise<void>}
573
- */
574
- async hangUp (peer) {
575
- const { id } = getPeer(peer)
576
-
577
- const connections = this.connectionManager.connections.get(id.toB58String())
578
-
579
- if (!connections) {
580
- return
581
- }
582
-
583
- await Promise.all(
584
- connections.map(connection => {
585
- return connection.close()
586
- })
587
- )
588
- }
589
-
590
- /**
591
- * Sends a request to fetch the value associated with the given key from the given peer.
592
- *
593
- * @param {PeerId|Multiaddr} peer
594
- * @param {string} key
595
- * @returns {Promise<Uint8Array | null>}
596
- */
597
- fetch (peer, key) {
598
- return this.fetchService.fetch(peer, key)
599
- }
600
-
601
- /**
602
- * Pings the given peer in order to obtain the operation latency.
603
- *
604
- * @param {PeerId|Multiaddr|string} peer - The peer to ping
605
- * @returns {Promise<number>}
606
- */
607
- ping (peer) {
608
- const { id, multiaddrs } = getPeer(peer)
609
-
610
- // If received multiaddr, ping it
611
- if (multiaddrs) {
612
- return ping(this, multiaddrs[0])
613
- }
614
-
615
- return ping(this, id)
616
- }
617
-
618
- /**
619
- * Registers the `handler` for each protocol
620
- *
621
- * @param {string[]|string} protocols
622
- * @param {(props: HandlerProps) => void} handler
623
- */
624
- async handle (protocols, handler) {
625
- protocols = Array.isArray(protocols) ? protocols : [protocols]
626
- protocols.forEach(protocol => {
627
- this.upgrader.protocols.set(protocol, handler)
628
- })
629
-
630
- // Add new protocols to self protocols in the Protobook
631
- await this.peerStore.protoBook.add(this.peerId, protocols)
632
- }
633
-
634
- /**
635
- * Removes the handler for each protocol. The protocol
636
- * will no longer be supported on streams.
637
- *
638
- * @param {string[]|string} protocols
639
- */
640
- async unhandle (protocols) {
641
- protocols = Array.isArray(protocols) ? protocols : [protocols]
642
- protocols.forEach(protocol => {
643
- this.upgrader.protocols.delete(protocol)
644
- })
645
-
646
- // Remove protocols from self protocols in the Protobook
647
- await this.peerStore.protoBook.remove(this.peerId, protocols)
648
- }
649
-
650
- async _onStarting () {
651
- // Listen on the provided transports for the provided addresses
652
- const addrs = this.addressManager.getListenAddrs()
653
- await this.transportManager.listen(addrs)
654
-
655
- // Manage your NATs
656
- this.natManager.start()
657
-
658
- if (this._config.pubsub.enabled) {
659
- this.pubsub && await this.pubsub.start()
660
- }
661
-
662
- // DHT subsystem
663
- if (this._config.dht.enabled) {
664
- this._dht && await this._dht.start()
665
-
666
- // TODO: this should be modified once random-walk is used as
667
- // the other discovery modules
668
- this._dht.on('peer', this._onDiscoveryPeer)
669
- }
670
-
671
- // Start metrics if present
672
- this.metrics && this.metrics.start()
673
-
674
- if (this.identifyService) {
675
- await this.identifyService.start()
676
- }
677
- }
678
-
679
- /**
680
- * Called when libp2p has started and before it returns
681
- *
682
- * @private
683
- */
684
- async _onDidStart () {
685
- this._isStarted = true
686
-
687
- this.peerStore.on('peer', peerId => {
688
- this.emit('peer:discovery', peerId)
689
- this._maybeConnect(peerId).catch(err => {
690
- log.error(err)
691
- })
692
- })
693
-
694
- // Once we start, emit any peers we may have already discovered
695
- // TODO: this should be removed, as we already discovered these peers in the past
696
- for await (const peer of this.peerStore.getPeers()) {
697
- this.emit('peer:discovery', peer.id)
698
- }
699
-
700
- this.connectionManager.start()
701
- await this._autodialler.start()
702
-
703
- // Peer discovery
704
- await this._setupPeerDiscovery()
705
-
706
- // Relay
707
- this.relay && this.relay.start()
708
-
709
- this.peerRouting.start()
710
- }
711
-
712
- /**
713
- * Called whenever peer discovery services emit `peer` events.
714
- * Known peers may be emitted.
715
- *
716
- * @private
717
- * @param {{ id: PeerId, multiaddrs: Multiaddr[], protocols: string[] }} peer
718
- */
719
- _onDiscoveryPeer (peer) {
720
- if (peer.id.toB58String() === this.peerId.toB58String()) {
721
- log.error(new Error(codes.ERR_DISCOVERED_SELF))
722
- return
723
- }
724
-
725
- peer.multiaddrs && this.peerStore.addressBook.add(peer.id, peer.multiaddrs).catch(err => log.error(err))
726
- peer.protocols && this.peerStore.protoBook.set(peer.id, peer.protocols).catch(err => log.error(err))
727
- }
728
-
729
- /**
730
- * Will dial to the given `peerId` if the current number of
731
- * connected peers is less than the configured `ConnectionManager`
732
- * minConnections.
733
- *
734
- * @private
735
- * @param {PeerId} peerId
736
- */
737
- async _maybeConnect (peerId) {
738
- // If auto dialing is on and we have no connection to the peer, check if we should dial
739
- if (this._config.peerDiscovery.autoDial === true && !this.connectionManager.get(peerId)) {
740
- const minConnections = this._options.connectionManager.minConnections || 0
741
- if (minConnections > this.connectionManager.size) {
742
- log('connecting to discovered peer %s', peerId.toB58String())
743
- try {
744
- await this.dialer.connectToPeer(peerId)
745
- } catch (/** @type {any} */ err) {
746
- log.error(`could not connect to discovered peer ${peerId.toB58String()} with ${err}`)
747
- }
748
- }
749
- }
750
- }
751
-
752
- /**
753
- * Initializes and starts peer discovery services
754
- *
755
- * @async
756
- * @private
757
- */
758
- async _setupPeerDiscovery () {
759
- /**
760
- * @param {PeerDiscoveryFactory} DiscoveryService
761
- */
762
- const setupService = (DiscoveryService) => {
763
- let config = {
764
- enabled: true // on by default
765
- }
766
-
767
- if (DiscoveryService.tag &&
768
- this._config.peerDiscovery &&
769
- this._config.peerDiscovery[DiscoveryService.tag]) {
770
- // @ts-ignore PeerDiscovery not understood as an Object for spread
771
- config = { ...config, ...this._config.peerDiscovery[DiscoveryService.tag] }
772
- }
773
-
774
- if (config.enabled &&
775
- !this._discovery.has(DiscoveryService.tag)) { // not already added
776
- let discoveryService
777
-
778
- if (typeof DiscoveryService === 'function') {
779
- // @ts-ignore DiscoveryService has no constructor type inferred
780
- discoveryService = new DiscoveryService(Object.assign({}, config, {
781
- peerId: this.peerId,
782
- libp2p: this
783
- }))
784
- } else {
785
- discoveryService = DiscoveryService
786
- }
787
-
788
- discoveryService.on('peer', this._onDiscoveryPeer)
789
- this._discovery.set(DiscoveryService.tag, discoveryService)
790
- }
791
- }
792
-
793
- // Discovery modules
794
- for (const DiscoveryService of this._modules.peerDiscovery || []) {
795
- setupService(DiscoveryService)
796
- }
797
-
798
- // Transport modules with discovery
799
- for (const Transport of this.transportManager.getTransports()) {
800
- // @ts-ignore Transport interface does not include discovery
801
- if (Transport.discovery) {
802
- // @ts-ignore Transport interface does not include discovery
803
- setupService(Transport.discovery)
804
- }
805
- }
806
-
807
- await Promise.all(Array.from(this._discovery.values(), d => d.start()))
808
- }
809
- }
810
-
811
- module.exports = Libp2p