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/libp2p.ts ADDED
@@ -0,0 +1,513 @@
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 = {}): Promise<Uint8Array> {
416
+ log('getPublicKey %p', peer)
417
+
418
+ if (peer.publicKey != null) {
419
+ return peer.publicKey
420
+ }
421
+
422
+ const peerInfo = await this.peerStore.get(peer)
423
+
424
+ if (peerInfo.pubKey != null) {
425
+ return peerInfo.pubKey
426
+ }
427
+
428
+ if (this.dht == null) {
429
+ throw errCode(new Error('Public key was not in the peer store and the DHT is not enabled'), codes.ERR_NO_ROUTERS_AVAILABLE)
430
+ }
431
+
432
+ const peerKey = uint8ArrayConcat([
433
+ uint8ArrayFromString('/pk/'),
434
+ peer.multihash.digest
435
+ ])
436
+
437
+ // search the dht
438
+ for await (const event of this.dht.get(peerKey, options)) {
439
+ if (event.name === 'VALUE') {
440
+ const key = unmarshalPublicKey(event.value)
441
+
442
+ await this.peerStore.keyBook.set(peer, event.value)
443
+
444
+ return key.bytes
445
+ }
446
+ }
447
+
448
+ throw errCode(new Error(`Node not responding with its public key: ${peer.toString()}`), codes.ERR_INVALID_RECORD)
449
+ }
450
+
451
+ async fetch (peer: PeerId | Multiaddr | string, key: string): Promise<Uint8Array | null> {
452
+ const { id, multiaddrs } = getPeer(peer)
453
+
454
+ if (multiaddrs != null) {
455
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs)
456
+ }
457
+
458
+ return await this.fetchService.fetch(id, key)
459
+ }
460
+
461
+ async ping (peer: PeerId | Multiaddr | string): Promise<number> {
462
+ const { id, multiaddrs } = getPeer(peer)
463
+
464
+ if (multiaddrs.length > 0) {
465
+ await this.components.getPeerStore().addressBook.add(id, multiaddrs)
466
+ }
467
+
468
+ return await this.pingService.ping(id)
469
+ }
470
+
471
+ async handle (protocols: string | string[], handler: StreamHandler): Promise<void> {
472
+ return await this.components.getRegistrar().handle(protocols, handler)
473
+ }
474
+
475
+ async unhandle (protocols: string[] | string): Promise<void> {
476
+ return await this.components.getRegistrar().unhandle(protocols)
477
+ }
478
+
479
+ /**
480
+ * Called whenever peer discovery services emit `peer` events.
481
+ * Known peers may be emitted.
482
+ */
483
+ onDiscoveryPeer (evt: CustomEvent<PeerInfo>) {
484
+ const { detail: peer } = evt
485
+
486
+ if (peer.id.toString() === this.peerId.toString()) {
487
+ log.error(new Error(codes.ERR_DISCOVERED_SELF))
488
+ return
489
+ }
490
+
491
+ if (peer.multiaddrs.length > 0) {
492
+ void this.components.getPeerStore().addressBook.add(peer.id, peer.multiaddrs).catch(err => log.error(err))
493
+ }
494
+
495
+ if (peer.protocols.length > 0) {
496
+ void this.components.getPeerStore().protoBook.set(peer.id, peer.protocols).catch(err => log.error(err))
497
+ }
498
+
499
+ this.dispatchEvent(new CustomEvent<PeerInfo>('peer:discovery', { detail: peer }))
500
+ }
501
+ }
502
+
503
+ /**
504
+ * Returns a new Libp2pNode instance - this exposes more of the internals than the
505
+ * libp2p interface and is useful for testing and debugging.
506
+ */
507
+ export async function createLibp2pNode (options: Libp2pOptions): Promise<Libp2pNode> {
508
+ if (options.peerId == null) {
509
+ options.peerId = await createEd25519PeerId()
510
+ }
511
+
512
+ return new Libp2pNode(validateConfig(options))
513
+ }