libp2p 0.36.0 → 0.36.2-199395d

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