libp2p 0.36.1-902f10d → 0.36.2-64bfcee

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 (398) 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 +25 -52
  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 +16 -8
  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 +16 -35
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +60 -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/{protocol → pb}/index.d.ts +0 -0
  44. package/{src/circuit/protocol → dist/src/circuit/pb}/index.js +7 -9
  45. package/dist/src/circuit/transport.d.ts +18 -78
  46. package/dist/src/circuit/transport.d.ts.map +1 -1
  47. package/dist/src/circuit/transport.js +190 -0
  48. package/dist/src/circuit/transport.js.map +1 -0
  49. package/dist/src/circuit/utils.d.ts +5 -2
  50. package/dist/src/circuit/utils.d.ts.map +1 -1
  51. package/dist/src/circuit/utils.js +11 -0
  52. package/dist/src/circuit/utils.js.map +1 -0
  53. package/dist/src/config.d.ts +3 -85
  54. package/dist/src/config.d.ts.map +1 -1
  55. package/dist/src/config.js +93 -0
  56. package/dist/src/config.js.map +1 -0
  57. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  58. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  59. package/dist/src/connection-manager/auto-dialler.js +105 -0
  60. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  61. package/dist/src/connection-manager/index.d.ts +79 -144
  62. package/dist/src/connection-manager/index.d.ts.map +1 -1
  63. package/dist/src/connection-manager/index.js +295 -0
  64. package/dist/src/connection-manager/index.js.map +1 -0
  65. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  66. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  67. package/dist/src/connection-manager/latency-monitor.js +220 -0
  68. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  69. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  70. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  71. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  72. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  73. package/dist/src/constants.d.ts +22 -10
  74. package/dist/src/constants.d.ts.map +1 -1
  75. package/dist/src/constants.js +27 -0
  76. package/dist/src/constants.js.map +1 -0
  77. package/dist/src/content-routing/index.d.ts +26 -81
  78. package/dist/src/content-routing/index.d.ts.map +1 -1
  79. package/dist/src/content-routing/index.js +99 -0
  80. package/dist/src/content-routing/index.js.map +1 -0
  81. package/dist/src/content-routing/utils.d.ts +6 -49
  82. package/dist/src/content-routing/utils.d.ts.map +1 -1
  83. package/dist/src/content-routing/utils.js +42 -0
  84. package/dist/src/content-routing/utils.js.map +1 -0
  85. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  86. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  87. package/dist/src/dht/dht-content-routing.js +32 -0
  88. package/dist/src/dht/dht-content-routing.js.map +1 -0
  89. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  90. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  91. package/dist/src/dht/dht-peer-routing.js +26 -0
  92. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  93. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  94. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  95. package/dist/src/dialer/auto-dialer.js +24 -0
  96. package/dist/src/dialer/auto-dialer.js.map +1 -0
  97. package/dist/src/dialer/dial-request.d.ts +18 -46
  98. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  99. package/dist/src/dialer/dial-request.js +83 -0
  100. package/dist/src/dialer/dial-request.js.map +1 -0
  101. package/dist/src/dialer/index.d.ts +41 -148
  102. package/dist/src/dialer/index.d.ts.map +1 -1
  103. package/dist/src/dialer/index.js +281 -0
  104. package/dist/src/dialer/index.js.map +1 -0
  105. package/dist/src/errors.d.ts +68 -63
  106. package/dist/src/errors.d.ts.map +1 -1
  107. package/dist/src/errors.js +73 -0
  108. package/dist/src/errors.js.map +1 -0
  109. package/dist/src/fetch/constants.d.ts +1 -1
  110. package/dist/src/fetch/constants.d.ts.map +1 -1
  111. package/dist/src/fetch/constants.js +3 -0
  112. package/dist/src/fetch/constants.js.map +1 -0
  113. package/dist/src/fetch/index.d.ts +30 -49
  114. package/dist/src/fetch/index.d.ts.map +1 -1
  115. package/dist/src/fetch/index.js +130 -0
  116. package/dist/src/fetch/index.js.map +1 -0
  117. package/dist/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  118. package/{src/fetch → dist/src/fetch/pb}/proto.js +7 -9
  119. package/dist/src/get-peer.d.ts +4 -11
  120. package/dist/src/get-peer.d.ts.map +1 -1
  121. package/dist/src/get-peer.js +43 -0
  122. package/dist/src/get-peer.js.map +1 -0
  123. package/dist/src/identify/consts.d.ts +9 -9
  124. package/dist/src/identify/consts.d.ts.map +1 -1
  125. package/dist/src/identify/consts.js +11 -0
  126. package/dist/src/identify/consts.js.map +1 -0
  127. package/dist/src/identify/index.d.ts +40 -96
  128. package/dist/src/identify/index.d.ts.map +1 -1
  129. package/dist/src/identify/index.js +322 -0
  130. package/dist/src/identify/index.js.map +1 -0
  131. package/{src/identify → dist/src/identify/pb}/message.d.ts +20 -5
  132. package/{src/identify → dist/src/identify/pb}/message.js +83 -42
  133. package/dist/src/index.d.ts +159 -493
  134. package/dist/src/index.d.ts.map +1 -1
  135. package/dist/src/index.js +9 -0
  136. package/dist/src/index.js.map +1 -0
  137. package/dist/src/insecure/index.d.ts +9 -0
  138. package/dist/src/insecure/index.d.ts.map +1 -0
  139. package/dist/src/insecure/index.js +78 -0
  140. package/dist/src/insecure/index.js.map +1 -0
  141. package/dist/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  142. package/{src/insecure → dist/src/insecure/pb}/proto.js +39 -22
  143. package/dist/src/keychain/cms.d.ts +6 -14
  144. package/dist/src/keychain/cms.d.ts.map +1 -1
  145. package/dist/src/keychain/cms.js +129 -0
  146. package/dist/src/keychain/cms.js.map +1 -0
  147. package/dist/src/keychain/index.d.ts +62 -82
  148. package/dist/src/keychain/index.d.ts.map +1 -1
  149. package/dist/src/keychain/index.js +493 -0
  150. package/dist/src/keychain/index.js.map +1 -0
  151. package/dist/src/keychain/util.d.ts +3 -6
  152. package/dist/src/keychain/util.d.ts.map +1 -1
  153. package/dist/src/keychain/util.js +79 -0
  154. package/dist/src/keychain/util.js.map +1 -0
  155. package/dist/src/libp2p.d.ts +78 -0
  156. package/dist/src/libp2p.d.ts.map +1 -0
  157. package/dist/src/libp2p.js +372 -0
  158. package/dist/src/libp2p.js.map +1 -0
  159. package/dist/src/metrics/index.d.ts +47 -104
  160. package/dist/src/metrics/index.d.ts.map +1 -1
  161. package/dist/src/metrics/index.js +231 -0
  162. package/dist/src/metrics/index.js.map +1 -0
  163. package/dist/src/metrics/moving-average.d.ts +14 -0
  164. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  165. package/dist/src/metrics/moving-average.js +40 -0
  166. package/dist/src/metrics/moving-average.js.map +1 -0
  167. package/dist/src/metrics/stats.d.ts +45 -93
  168. package/dist/src/metrics/stats.d.ts.map +1 -1
  169. package/dist/src/metrics/stats.js +183 -0
  170. package/dist/src/metrics/stats.js.map +1 -0
  171. package/dist/src/nat-manager.d.ts +42 -99
  172. package/dist/src/nat-manager.d.ts.map +1 -1
  173. package/dist/src/nat-manager.js +114 -0
  174. package/dist/src/nat-manager.js.map +1 -0
  175. package/dist/src/peer-record-updater.d.ts +15 -0
  176. package/dist/src/peer-record-updater.d.ts.map +1 -0
  177. package/dist/src/peer-record-updater.js +44 -0
  178. package/dist/src/peer-record-updater.js.map +1 -0
  179. package/dist/src/peer-routing.d.ts +39 -84
  180. package/dist/src/peer-routing.d.ts.map +1 -1
  181. package/dist/src/peer-routing.js +108 -0
  182. package/dist/src/peer-routing.js.map +1 -0
  183. package/dist/src/ping/constants.d.ts +4 -4
  184. package/dist/src/ping/constants.d.ts.map +1 -1
  185. package/dist/src/ping/constants.js +5 -0
  186. package/dist/src/ping/constants.js.map +1 -0
  187. package/dist/src/ping/index.d.ts +17 -31
  188. package/dist/src/ping/index.d.ts.map +1 -1
  189. package/dist/src/ping/index.js +56 -0
  190. package/dist/src/ping/index.js.map +1 -0
  191. package/dist/src/pnet/crypto.d.ts +15 -5
  192. package/dist/src/pnet/crypto.d.ts.map +1 -1
  193. package/dist/src/pnet/crypto.js +60 -0
  194. package/dist/src/pnet/crypto.js.map +1 -0
  195. package/dist/src/pnet/errors.d.ts +5 -5
  196. package/dist/src/pnet/errors.d.ts.map +1 -1
  197. package/dist/src/pnet/errors.js +6 -0
  198. package/dist/src/pnet/errors.js.map +1 -0
  199. package/dist/src/pnet/index.d.ts +11 -20
  200. package/dist/src/pnet/index.d.ts.map +1 -1
  201. package/dist/src/pnet/index.js +66 -0
  202. package/dist/src/pnet/index.js.map +1 -0
  203. package/dist/src/pnet/key-generator.d.ts +3 -7
  204. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  205. package/dist/src/pnet/key-generator.js +25 -0
  206. package/dist/src/pnet/key-generator.js.map +1 -0
  207. package/dist/src/registrar.d.ts +27 -65
  208. package/dist/src/registrar.d.ts.map +1 -1
  209. package/dist/src/registrar.js +159 -0
  210. package/dist/src/registrar.js.map +1 -0
  211. package/dist/src/transport-manager.d.ts +34 -82
  212. package/dist/src/transport-manager.d.ts.map +1 -1
  213. package/dist/src/transport-manager.js +223 -0
  214. package/dist/src/transport-manager.js.map +1 -0
  215. package/dist/src/upgrader.d.ts +49 -129
  216. package/dist/src/upgrader.d.ts.map +1 -1
  217. package/dist/src/upgrader.js +402 -0
  218. package/dist/src/upgrader.js.map +1 -0
  219. package/dist/src/version.d.ts +3 -0
  220. package/dist/src/version.d.ts.map +1 -0
  221. package/dist/src/version.js +3 -0
  222. package/dist/src/version.js.map +1 -0
  223. package/package.json +148 -197
  224. package/src/address-manager/index.ts +129 -0
  225. package/src/circuit/README.md +16 -11
  226. package/src/circuit/auto-relay.ts +284 -0
  227. package/src/circuit/circuit/hop.ts +211 -0
  228. package/src/circuit/circuit/stop.ts +78 -0
  229. package/src/circuit/circuit/stream-handler.ts +87 -0
  230. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  231. package/src/circuit/constants.ts +31 -0
  232. package/src/circuit/index.ts +120 -0
  233. package/src/circuit/{listener.js → listener.ts} +21 -27
  234. package/src/circuit/multicodec.ts +2 -0
  235. package/src/circuit/{protocol → pb}/index.d.ts +0 -0
  236. package/src/circuit/pb/index.js +528 -0
  237. package/src/circuit/{protocol → pb}/index.proto +0 -0
  238. package/src/circuit/transport.ts +216 -0
  239. package/src/circuit/utils.ts +12 -0
  240. package/src/config.ts +101 -0
  241. package/src/connection-manager/auto-dialler.ts +154 -0
  242. package/src/connection-manager/index.ts +422 -0
  243. package/src/connection-manager/latency-monitor.ts +319 -0
  244. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  245. package/src/constants.ts +31 -0
  246. package/src/content-routing/index.ts +143 -0
  247. package/src/content-routing/utils.ts +54 -0
  248. package/src/dht/dht-content-routing.ts +43 -0
  249. package/src/dht/dht-peer-routing.ts +35 -0
  250. package/src/dialer/auto-dialer.ts +40 -0
  251. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  252. package/src/dialer/index.ts +374 -0
  253. package/src/errors.ts +71 -0
  254. package/src/fetch/README.md +1 -1
  255. package/src/fetch/constants.ts +3 -0
  256. package/src/fetch/{index.js → index.ts} +79 -70
  257. package/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  258. package/src/fetch/pb/proto.js +331 -0
  259. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  260. package/src/get-peer.ts +57 -0
  261. package/src/identify/consts.ts +13 -0
  262. package/src/identify/index.ts +445 -0
  263. package/{dist/src/identify → src/identify/pb}/message.d.ts +20 -5
  264. package/src/identify/pb/message.js +369 -0
  265. package/src/identify/{message.proto → pb/message.proto} +0 -0
  266. package/src/index.ts +236 -0
  267. package/src/insecure/index.ts +97 -0
  268. package/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  269. package/src/insecure/pb/proto.js +388 -0
  270. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  271. package/src/keychain/{cms.js → cms.ts} +62 -58
  272. package/src/keychain/index.ts +588 -0
  273. package/src/keychain/{util.js → util.ts} +7 -17
  274. package/src/libp2p.ts +509 -0
  275. package/src/metrics/index.ts +310 -0
  276. package/src/metrics/moving-average.ts +53 -0
  277. package/src/metrics/stats.ts +243 -0
  278. package/src/nat-manager.ts +194 -0
  279. package/src/peer-record-updater.ts +55 -0
  280. package/src/peer-routing.ts +185 -0
  281. package/src/ping/README.md +1 -1
  282. package/src/ping/constants.ts +5 -0
  283. package/src/ping/index.ts +83 -0
  284. package/src/pnet/README.md +2 -2
  285. package/src/pnet/crypto.ts +67 -0
  286. package/src/pnet/errors.ts +5 -0
  287. package/src/pnet/index.ts +95 -0
  288. package/src/pnet/key-generator.ts +28 -0
  289. package/src/registrar.ts +205 -0
  290. package/src/transport-manager.ts +279 -0
  291. package/src/upgrader.ts +499 -0
  292. package/src/version.ts +3 -0
  293. package/dist/index.min.js +0 -55
  294. package/dist/src/insecure/plaintext.d.ts +0 -12
  295. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  296. package/dist/src/metrics/old-peers.d.ts +0 -3
  297. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  298. package/dist/src/metrics/tracked-map.d.ts +0 -8
  299. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  300. package/dist/src/peer-store/address-book.d.ts +0 -67
  301. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  302. package/dist/src/peer-store/index.d.ts +0 -58
  303. package/dist/src/peer-store/index.d.ts.map +0 -1
  304. package/dist/src/peer-store/key-book.d.ts +0 -40
  305. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  306. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  307. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  308. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  309. package/dist/src/peer-store/proto-book.d.ts +0 -43
  310. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  311. package/dist/src/peer-store/store.d.ts +0 -73
  312. package/dist/src/peer-store/store.d.ts.map +0 -1
  313. package/dist/src/peer-store/types.d.ts +0 -202
  314. package/dist/src/peer-store/types.d.ts.map +0 -1
  315. package/dist/src/ping/util.d.ts +0 -5
  316. package/dist/src/ping/util.d.ts.map +0 -1
  317. package/dist/src/pubsub-adapter.d.ts +0 -22
  318. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  319. package/dist/src/record/envelope/envelope.d.ts +0 -77
  320. package/dist/src/record/envelope/index.d.ts +0 -80
  321. package/dist/src/record/envelope/index.d.ts.map +0 -1
  322. package/dist/src/record/peer-record/consts.d.ts +0 -4
  323. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  324. package/dist/src/record/peer-record/index.d.ts +0 -60
  325. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  326. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  327. package/dist/src/record/utils.d.ts +0 -12
  328. package/dist/src/record/utils.d.ts.map +0 -1
  329. package/dist/src/types.d.ts +0 -90
  330. package/dist/src/types.d.ts.map +0 -1
  331. package/src/address-manager/index.js +0 -96
  332. package/src/circuit/auto-relay.js +0 -302
  333. package/src/circuit/circuit/hop.js +0 -205
  334. package/src/circuit/circuit/stop.js +0 -81
  335. package/src/circuit/circuit/stream-handler.js +0 -94
  336. package/src/circuit/constants.js +0 -12
  337. package/src/circuit/index.js +0 -102
  338. package/src/circuit/multicodec.js +0 -5
  339. package/src/circuit/transport.js +0 -229
  340. package/src/circuit/utils.js +0 -17
  341. package/src/config.js +0 -114
  342. package/src/connection-manager/auto-dialler.js +0 -132
  343. package/src/connection-manager/index.js +0 -374
  344. package/src/connection-manager/latency-monitor.js +0 -264
  345. package/src/constants.js +0 -18
  346. package/src/content-routing/index.js +0 -163
  347. package/src/content-routing/utils.js +0 -89
  348. package/src/dht/dht-content-routing.js +0 -44
  349. package/src/dht/dht-peer-routing.js +0 -51
  350. package/src/dialer/index.js +0 -376
  351. package/src/errors.js +0 -66
  352. package/src/fetch/constants.js +0 -6
  353. package/src/get-peer.js +0 -49
  354. package/src/identify/consts.js +0 -15
  355. package/src/identify/index.js +0 -384
  356. package/src/index.js +0 -813
  357. package/src/insecure/plaintext.js +0 -95
  358. package/src/keychain/index.js +0 -561
  359. package/src/metrics/index.js +0 -290
  360. package/src/metrics/old-peers.js +0 -16
  361. package/src/metrics/stats.js +0 -270
  362. package/src/metrics/tracked-map.js +0 -94
  363. package/src/nat-manager.js +0 -197
  364. package/src/peer-routing.js +0 -176
  365. package/src/peer-store/README.md +0 -145
  366. package/src/peer-store/address-book.js +0 -382
  367. package/src/peer-store/index.js +0 -121
  368. package/src/peer-store/key-book.js +0 -141
  369. package/src/peer-store/metadata-book.js +0 -250
  370. package/src/peer-store/pb/peer.d.ts +0 -222
  371. package/src/peer-store/pb/peer.js +0 -643
  372. package/src/peer-store/pb/peer.proto +0 -31
  373. package/src/peer-store/proto-book.js +0 -237
  374. package/src/peer-store/store.js +0 -263
  375. package/src/peer-store/types.ts +0 -245
  376. package/src/ping/constants.js +0 -8
  377. package/src/ping/index.js +0 -84
  378. package/src/ping/util.js +0 -18
  379. package/src/pnet/crypto.js +0 -84
  380. package/src/pnet/errors.js +0 -7
  381. package/src/pnet/index.js +0 -86
  382. package/src/pnet/key-generator.js +0 -33
  383. package/src/pubsub-adapter.js +0 -61
  384. package/src/record/README.md +0 -130
  385. package/src/record/envelope/envelope.d.ts +0 -77
  386. package/src/record/envelope/envelope.js +0 -243
  387. package/src/record/envelope/envelope.proto +0 -19
  388. package/src/record/envelope/index.js +0 -183
  389. package/src/record/peer-record/consts.js +0 -14
  390. package/src/record/peer-record/index.js +0 -113
  391. package/src/record/peer-record/peer-record.d.ts +0 -133
  392. package/src/record/peer-record/peer-record.js +0 -367
  393. package/src/record/peer-record/peer-record.proto +0 -18
  394. package/src/record/utils.js +0 -25
  395. package/src/registrar.js +0 -127
  396. package/src/transport-manager.js +0 -269
  397. package/src/types.ts +0 -98
  398. package/src/upgrader.js +0 -492
package/src/libp2p.ts ADDED
@@ -0,0 +1,509 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { AbortOptions, EventEmitter, Startable, CustomEvent, isStartable } from '@libp2p/interfaces'
3
+ import type { Multiaddr } from '@multiformats/multiaddr'
4
+ import { MemoryDatastore } from 'datastore-core/memory'
5
+ import { DefaultPeerRouting } from './peer-routing.js'
6
+ import { CompoundContentRouting } from './content-routing/index.js'
7
+ import { getPeer } from './get-peer.js'
8
+ import { codes } from './errors.js'
9
+ import { DefaultAddressManager } from './address-manager/index.js'
10
+ import { DefaultConnectionManager } from './connection-manager/index.js'
11
+ import { AutoDialler } from './connection-manager/auto-dialler.js'
12
+ import { Circuit } from './circuit/transport.js'
13
+ import { Relay } from './circuit/index.js'
14
+ import { DefaultDialer } from './dialer/index.js'
15
+ import { KeyChain } from './keychain/index.js'
16
+ import { DefaultMetrics } from './metrics/index.js'
17
+ import { DefaultTransportManager } from './transport-manager.js'
18
+ import { DefaultUpgrader } from './upgrader.js'
19
+ import { DefaultRegistrar } from './registrar.js'
20
+ import { IdentifyService } from './identify/index.js'
21
+ import { FetchService } from './fetch/index.js'
22
+ import { PingService } from './ping/index.js'
23
+ import { NatManager } from './nat-manager.js'
24
+ import { PeerRecordUpdater } from './peer-record-updater.js'
25
+ import { DHTPeerRouting } from './dht/dht-peer-routing.js'
26
+ import { PersistentPeerStore } from '@libp2p/peer-store'
27
+ import { DHTContentRouting } from './dht/dht-content-routing.js'
28
+ import { AutoDialer } from './dialer/auto-dialer.js'
29
+ import { Initializable, Components, isInitializable } from '@libp2p/interfaces/components'
30
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
31
+ import type { Connection } from '@libp2p/interfaces/connection'
32
+ import type { PeerRouting } from '@libp2p/interfaces/peer-routing'
33
+ import type { ContentRouting } from '@libp2p/interfaces/content-routing'
34
+ import type { PubSub } from '@libp2p/interfaces/pubsub'
35
+ import type { ConnectionManager, Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
36
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info'
37
+ import type { Libp2p, Libp2pEvents, Libp2pInit, Libp2pOptions } from './index.js'
38
+ import { validateConfig } from './config.js'
39
+ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
40
+ import type { PeerStore } from '@libp2p/interfaces/peer-store'
41
+ import type { DualDHT } from '@libp2p/interfaces/dht'
42
+ import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
43
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
44
+ import errCode from 'err-code'
45
+ import { unmarshalPublicKey } from '@libp2p/crypto/keys'
46
+ import type { Metrics } from '@libp2p/interfaces/metrics'
47
+
48
+ const log = logger('libp2p')
49
+
50
+ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
51
+ public peerId: PeerId
52
+ public dht?: DualDHT
53
+ public pubsub?: PubSub
54
+ public identifyService?: IdentifyService
55
+ public fetchService: FetchService
56
+ public pingService: PingService
57
+ public components: Components
58
+ public peerStore: PeerStore
59
+ public contentRouting: ContentRouting
60
+ public peerRouting: PeerRouting
61
+ public keychain: KeyChain
62
+ public connectionManager: ConnectionManager
63
+ public registrar: Registrar
64
+ public metrics?: Metrics
65
+
66
+ private started: boolean
67
+ private readonly services: Startable[]
68
+ private readonly initializables: Initializable[]
69
+
70
+ constructor (init: Libp2pInit) {
71
+ super()
72
+
73
+ this.services = []
74
+ this.initializables = []
75
+ this.started = false
76
+ this.peerId = init.peerId
77
+ this.components = new Components({
78
+ peerId: init.peerId,
79
+ datastore: init.datastore ?? new MemoryDatastore()
80
+ })
81
+
82
+ // Create Metrics
83
+ if (init.metrics.enabled) {
84
+ this.metrics = this.components.setMetrics(this.configureComponent(new DefaultMetrics(init.metrics)))
85
+ }
86
+
87
+ this.components.setConnectionGater(this.configureComponent({
88
+ denyDialPeer: async () => await Promise.resolve(false),
89
+ denyDialMultiaddr: async () => await Promise.resolve(false),
90
+ denyInboundConnection: async () => await Promise.resolve(false),
91
+ denyOutboundConnection: async () => await Promise.resolve(false),
92
+ denyInboundEncryptedConnection: async () => await Promise.resolve(false),
93
+ denyOutboundEncryptedConnection: async () => await Promise.resolve(false),
94
+ denyInboundUpgradedConnection: async () => await Promise.resolve(false),
95
+ denyOutboundUpgradedConnection: async () => await Promise.resolve(false),
96
+ filterMultiaddrForPeer: async () => await Promise.resolve(true),
97
+ ...init.connectionGater
98
+ }))
99
+
100
+ this.peerStore = this.components.setPeerStore(this.configureComponent(new PersistentPeerStore(this.components, init.peerStore)))
101
+
102
+ this.peerStore.addEventListener('peer', evt => {
103
+ const { detail: peerData } = evt
104
+
105
+ this.dispatchEvent(new CustomEvent<PeerInfo>('peer:discovery', { detail: peerData }))
106
+ })
107
+
108
+ // Set up connection protector if configured
109
+ if (init.connectionProtector != null) {
110
+ this.components.setConnectionProtector(this.configureComponent(init.connectionProtector))
111
+ }
112
+
113
+ // Set up the Upgrader
114
+ this.components.setUpgrader(this.configureComponent(new DefaultUpgrader(this.components, {
115
+ connectionEncryption: (init.connectionEncryption ?? []).map(component => this.configureComponent(component)),
116
+ muxers: (init.streamMuxers ?? []).map(component => this.configureComponent(component))
117
+ })))
118
+
119
+ // Create the Connection Manager
120
+ this.connectionManager = this.components.setConnectionManager(this.configureComponent(new DefaultConnectionManager(this.components, init.connectionManager)))
121
+
122
+ // Create the Registrar
123
+ this.registrar = this.components.setRegistrar(this.configureComponent(new DefaultRegistrar(this.components)))
124
+
125
+ // Setup the transport manager
126
+ this.components.setTransportManager(this.configureComponent(new DefaultTransportManager(this.components, init.transportManager)))
127
+
128
+ // Addresses {listen, announce, noAnnounce}
129
+ this.components.setAddressManager(this.configureComponent(new DefaultAddressManager(this.components, init.addresses)))
130
+
131
+ // update our peer record when addresses change
132
+ this.configureComponent(new PeerRecordUpdater(this.components))
133
+
134
+ this.components.setDialer(this.configureComponent(new DefaultDialer(this.components, init.dialer)))
135
+
136
+ this.configureComponent(new AutoDialler(this.components, {
137
+ enabled: init.connectionManager.autoDial,
138
+ minConnections: init.connectionManager.minConnections,
139
+ autoDialInterval: init.connectionManager.autoDialInterval
140
+ }))
141
+
142
+ // Create keychain
143
+ const keychainOpts = KeyChain.generateOptions()
144
+ this.keychain = this.configureComponent(new KeyChain(this.components, {
145
+ ...keychainOpts,
146
+ ...init.keychain
147
+ }))
148
+
149
+ // Create the Nat Manager
150
+ this.services.push(new NatManager(this.components, init.nat))
151
+
152
+ init.transports.forEach((transport) => {
153
+ this.components.getTransportManager().add(this.configureComponent(transport))
154
+ })
155
+
156
+ // Attach stream multiplexers
157
+ if (init.streamMuxers != null && init.streamMuxers.length > 0) {
158
+ // Add the identify service since we can multiplex
159
+ this.identifyService = new IdentifyService(this.components, {
160
+ protocolPrefix: init.protocolPrefix,
161
+ host: {
162
+ agentVersion: init.host.agentVersion
163
+ }
164
+ })
165
+ this.configureComponent(this.identifyService)
166
+ }
167
+
168
+ // dht provided components (peerRouting, contentRouting, dht)
169
+ if (init.dht != null) {
170
+ this.dht = this.components.setDHT(this.configureComponent(init.dht))
171
+ }
172
+
173
+ // Create pubsub if provided
174
+ if (init.pubsub != null) {
175
+ this.pubsub = this.components.setPubSub(this.configureComponent(init.pubsub))
176
+ }
177
+
178
+ // Attach remaining APIs
179
+ // peer and content routing will automatically get modules from _modules and _dht
180
+
181
+ const peerRouters: PeerRouting[] = (init.peerRouters ?? []).map(component => this.configureComponent(component))
182
+
183
+ if (this.dht != null) {
184
+ // add dht to routers
185
+ peerRouters.push(this.configureComponent(new DHTPeerRouting(this.dht)))
186
+
187
+ // use dht for peer discovery
188
+ this.dht.addEventListener('peer', (evt) => {
189
+ this.onDiscoveryPeer(evt)
190
+ })
191
+ }
192
+
193
+ this.peerRouting = this.components.setPeerRouting(this.configureComponent(new DefaultPeerRouting(this.components, {
194
+ ...init.peerRouting,
195
+ routers: peerRouters
196
+ })))
197
+
198
+ const contentRouters: ContentRouting[] = (init.contentRouters ?? []).map(component => this.configureComponent(component))
199
+
200
+ if (this.dht != null) {
201
+ // add dht to routers
202
+ contentRouters.push(this.configureComponent(new DHTContentRouting(this.dht)))
203
+ }
204
+
205
+ this.contentRouting = this.components.setContentRouting(this.configureComponent(new CompoundContentRouting(this.components, {
206
+ routers: contentRouters
207
+ })))
208
+
209
+ if (init.relay.enabled) {
210
+ this.components.getTransportManager().add(this.configureComponent(new Circuit()))
211
+
212
+ this.configureComponent(new Relay(this.components, {
213
+ addressSorter: init.dialer.addressSorter,
214
+ ...init.relay
215
+ }))
216
+ }
217
+
218
+ this.fetchService = this.configureComponent(new FetchService(this.components, {
219
+ protocolPrefix: init.protocolPrefix
220
+ }))
221
+
222
+ this.pingService = this.configureComponent(new PingService(this.components, {
223
+ protocolPrefix: init.protocolPrefix
224
+ }))
225
+
226
+ const autoDialer = this.configureComponent(new AutoDialer(this.components, {
227
+ enabled: init.connectionManager.autoDial !== false,
228
+ minConnections: init.connectionManager.minConnections ?? Infinity
229
+ }))
230
+
231
+ this.addEventListener('peer:discovery', evt => {
232
+ if (!this.isStarted()) {
233
+ return
234
+ }
235
+
236
+ autoDialer.handle(evt)
237
+ })
238
+
239
+ // Discovery modules
240
+ for (const service of init.peerDiscovery ?? []) {
241
+ this.configureComponent(service)
242
+
243
+ service.addEventListener('peer', (evt) => {
244
+ this.onDiscoveryPeer(evt)
245
+ })
246
+ }
247
+ }
248
+
249
+ private configureComponent <T> (component: T): T {
250
+ if (isStartable(component)) {
251
+ this.services.push(component)
252
+ }
253
+
254
+ if (isInitializable(component)) {
255
+ this.initializables.push(component)
256
+ }
257
+
258
+ return component
259
+ }
260
+
261
+ /**
262
+ * Starts the libp2p node and all its subsystems
263
+ */
264
+ async start () {
265
+ if (this.started) {
266
+ return
267
+ }
268
+
269
+ this.started = true
270
+
271
+ log('libp2p is starting')
272
+
273
+ try {
274
+ // Set available components on all modules interested in components
275
+ this.initializables.forEach(obj => {
276
+ obj.init(this.components)
277
+ })
278
+
279
+ await Promise.all(
280
+ this.services.map(async service => {
281
+ if (service.beforeStart != null) {
282
+ await service.beforeStart()
283
+ }
284
+ })
285
+ )
286
+
287
+ // start any startables
288
+ await Promise.all(
289
+ this.services.map(service => service.start())
290
+ )
291
+
292
+ await Promise.all(
293
+ this.services.map(async service => {
294
+ if (service.afterStart != null) {
295
+ await service.afterStart()
296
+ }
297
+ })
298
+ )
299
+
300
+ log('libp2p has started')
301
+
302
+ // Once we start, emit any peers we may have already discovered
303
+ // TODO: this should be removed, as we already discovered these peers in the past
304
+ await this.components.getPeerStore().forEach(peer => {
305
+ this.dispatchEvent(new CustomEvent<PeerInfo>('peer:discovery', {
306
+ detail: {
307
+ id: peer.id,
308
+ multiaddrs: peer.addresses.map(addr => addr.multiaddr),
309
+ protocols: peer.protocols
310
+ }
311
+ }))
312
+ })
313
+ } catch (err: any) {
314
+ log.error('An error occurred starting libp2p', err)
315
+ await this.stop()
316
+ throw err
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Stop the libp2p node by closing its listeners and open connections
322
+ */
323
+ async stop () {
324
+ if (!this.started) {
325
+ return
326
+ }
327
+
328
+ log('libp2p is stopping')
329
+
330
+ this.started = false
331
+
332
+ await Promise.all(
333
+ this.services.map(async service => {
334
+ if (service.beforeStop != null) {
335
+ await service.beforeStop()
336
+ }
337
+ })
338
+ )
339
+
340
+ await Promise.all(
341
+ this.services.map(servce => servce.stop())
342
+ )
343
+
344
+ await Promise.all(
345
+ this.services.map(async service => {
346
+ if (service.afterStop != null) {
347
+ await service.afterStop()
348
+ }
349
+ })
350
+ )
351
+
352
+ log('libp2p has stopped')
353
+ }
354
+
355
+ /**
356
+ * Load keychain keys from the datastore.
357
+ * Imports the private key as 'self', if needed.
358
+ */
359
+ async loadKeychain () {
360
+ if (this.keychain == null) {
361
+ return
362
+ }
363
+
364
+ try {
365
+ await this.keychain.findKeyByName('self')
366
+ } catch (err: any) {
367
+ await this.keychain.importPeer('self', this.peerId)
368
+ }
369
+ }
370
+
371
+ isStarted () {
372
+ return this.started
373
+ }
374
+
375
+ getConnections (peerId?: PeerId): Connection[] {
376
+ if (peerId == null) {
377
+ return this.components.getConnectionManager().getConnectionList()
378
+ }
379
+
380
+ return this.components.getConnectionManager().getConnections(peerId)
381
+ }
382
+
383
+ getPeers (): PeerId[] {
384
+ return this.components.getConnectionManager().getConnectionList()
385
+ .map(conn => conn.remotePeer)
386
+ }
387
+
388
+ async dial (peer: PeerId | Multiaddr, options: AbortOptions = {}): Promise<Connection> {
389
+ return await this.components.getDialer().dial(peer, options)
390
+ }
391
+
392
+ async dialProtocol (peer: PeerId | Multiaddr, protocols: string | string[], options: AbortOptions = {}) {
393
+ return await this.components.getDialer().dialProtocol(peer, protocols, options)
394
+ }
395
+
396
+ getMultiaddrs (): Multiaddr[] {
397
+ return this.components.getAddressManager().getAddresses()
398
+ }
399
+
400
+ async hangUp (peer: PeerId | Multiaddr | string): Promise<void> {
401
+ const { id } = getPeer(peer)
402
+
403
+ const connections = this.components.getConnectionManager().getConnections(id)
404
+
405
+ await Promise.all(
406
+ connections.map(async connection => {
407
+ return await connection.close()
408
+ })
409
+ )
410
+ }
411
+
412
+ /**
413
+ * Get the public key for the given peer id
414
+ */
415
+ async getPublicKey (peer: PeerId, options: AbortOptions = {}) {
416
+ log('getPublicKey %p', peer)
417
+
418
+ const peerInfo = await this.peerStore.get(peer)
419
+
420
+ if (peerInfo.pubKey != null) {
421
+ return peerInfo.pubKey
422
+ }
423
+
424
+ if (this.dht == null) {
425
+ throw errCode(new Error('Public key was not in the peer store and the DHT is not enabled'), codes.ERR_NO_ROUTERS_AVAILABLE)
426
+ }
427
+
428
+ const peerKey = uint8ArrayConcat([
429
+ uint8ArrayFromString('/pk/'),
430
+ peer.multihash.digest
431
+ ])
432
+
433
+ // search the dht
434
+ for await (const event of this.dht.get(peerKey, options)) {
435
+ if (event.name === 'VALUE') {
436
+ const key = unmarshalPublicKey(event.value)
437
+
438
+ await this.peerStore.keyBook.set(peer, event.value)
439
+
440
+ return key
441
+ }
442
+ }
443
+
444
+ throw errCode(new Error(`Node not responding with its public key: ${peer.toString()}`), codes.ERR_INVALID_RECORD)
445
+ }
446
+
447
+ async fetch (peer: PeerId | Multiaddr | string, key: string): Promise<Uint8Array | null> {
448
+ const { id, multiaddrs } = getPeer(peer)
449
+
450
+ if (multiaddrs != null) {
451
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs)
452
+ }
453
+
454
+ return await this.fetchService.fetch(id, key)
455
+ }
456
+
457
+ async ping (peer: PeerId | Multiaddr | string): Promise<number> {
458
+ const { id, multiaddrs } = getPeer(peer)
459
+
460
+ if (multiaddrs.length > 0) {
461
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs)
462
+ }
463
+
464
+ return await this.pingService.ping(id)
465
+ }
466
+
467
+ async handle (protocols: string | string[], handler: StreamHandler): Promise<void> {
468
+ return await this.components.getRegistrar().handle(protocols, handler)
469
+ }
470
+
471
+ async unhandle (protocols: string[] | string): Promise<void> {
472
+ return await this.components.getRegistrar().unhandle(protocols)
473
+ }
474
+
475
+ /**
476
+ * Called whenever peer discovery services emit `peer` events.
477
+ * Known peers may be emitted.
478
+ */
479
+ onDiscoveryPeer (evt: CustomEvent<PeerInfo>) {
480
+ const { detail: peer } = evt
481
+
482
+ if (peer.id.toString() === this.peerId.toString()) {
483
+ log.error(new Error(codes.ERR_DISCOVERED_SELF))
484
+ return
485
+ }
486
+
487
+ if (peer.multiaddrs.length > 0) {
488
+ void this.components.getPeerStore().addressBook.add(peer.id, peer.multiaddrs).catch(err => log.error(err))
489
+ }
490
+
491
+ if (peer.protocols.length > 0) {
492
+ void this.components.getPeerStore().protoBook.set(peer.id, peer.protocols).catch(err => log.error(err))
493
+ }
494
+
495
+ this.dispatchEvent(new CustomEvent<PeerInfo>('peer:discovery', { detail: peer }))
496
+ }
497
+ }
498
+
499
+ /**
500
+ * Returns a new Libp2pNode instance - this exposes more of the internals than the
501
+ * libp2p interface and is useful for testing and debugging.
502
+ */
503
+ export async function createLibp2pNode (options: Libp2pOptions): Promise<Libp2pNode> {
504
+ if (options.peerId == null) {
505
+ options.peerId = await createEd25519PeerId()
506
+ }
507
+
508
+ return new Libp2pNode(validateConfig(options))
509
+ }