libp2p 0.36.2 → 0.37.0

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 (430) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +34 -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 +216 -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 +62 -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 +52 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +98 -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 +192 -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 +91 -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/dialer/auto-dialer.d.ts +16 -0
  64. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
  65. package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
  66. package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
  67. package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
  68. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
  69. package/dist/src/connection-manager/dialer/dial-request.js +83 -0
  70. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
  71. package/dist/src/connection-manager/dialer/index.d.ts +104 -0
  72. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
  73. package/dist/src/connection-manager/dialer/index.js +267 -0
  74. package/dist/src/connection-manager/dialer/index.js.map +1 -0
  75. package/dist/src/connection-manager/index.d.ts +102 -136
  76. package/dist/src/connection-manager/index.d.ts.map +1 -1
  77. package/dist/src/connection-manager/index.js +333 -0
  78. package/dist/src/connection-manager/index.js.map +1 -0
  79. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  80. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  81. package/dist/src/connection-manager/latency-monitor.js +220 -0
  82. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  83. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  84. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  85. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  86. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  87. package/dist/src/constants.d.ts +22 -10
  88. package/dist/src/constants.d.ts.map +1 -1
  89. package/dist/src/constants.js +27 -0
  90. package/dist/src/constants.js.map +1 -0
  91. package/dist/src/content-routing/index.d.ts +27 -81
  92. package/dist/src/content-routing/index.d.ts.map +1 -1
  93. package/dist/src/content-routing/index.js +99 -0
  94. package/dist/src/content-routing/index.js.map +1 -0
  95. package/dist/src/content-routing/utils.d.ts +6 -49
  96. package/dist/src/content-routing/utils.d.ts.map +1 -1
  97. package/dist/src/content-routing/utils.js +42 -0
  98. package/dist/src/content-routing/utils.js.map +1 -0
  99. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  100. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  101. package/dist/src/dht/dht-content-routing.js +32 -0
  102. package/dist/src/dht/dht-content-routing.js.map +1 -0
  103. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  104. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  105. package/dist/src/dht/dht-peer-routing.js +26 -0
  106. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  107. package/dist/src/dht/dummy-dht.d.ts +20 -0
  108. package/dist/src/dht/dummy-dht.d.ts.map +1 -0
  109. package/dist/src/dht/dummy-dht.js +46 -0
  110. package/dist/src/dht/dummy-dht.js.map +1 -0
  111. package/dist/src/errors.d.ts +70 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +75 -0
  114. package/dist/src/errors.js.map +1 -0
  115. package/dist/src/fetch/constants.d.ts +1 -1
  116. package/dist/src/fetch/constants.d.ts.map +1 -1
  117. package/dist/src/fetch/constants.js +3 -0
  118. package/dist/src/fetch/constants.js.map +1 -0
  119. package/dist/src/fetch/index.d.ts +30 -49
  120. package/dist/src/fetch/index.d.ts.map +1 -1
  121. package/dist/src/fetch/index.js +129 -0
  122. package/dist/src/fetch/index.js.map +1 -0
  123. package/dist/src/fetch/pb/proto.d.ts +27 -0
  124. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  125. package/dist/src/fetch/pb/proto.js +50 -0
  126. package/dist/src/fetch/pb/proto.js.map +1 -0
  127. package/dist/src/get-peer.d.ts +4 -11
  128. package/dist/src/get-peer.d.ts.map +1 -1
  129. package/dist/src/get-peer.js +43 -0
  130. package/dist/src/get-peer.js.map +1 -0
  131. package/dist/src/identify/consts.d.ts +9 -9
  132. package/dist/src/identify/consts.d.ts.map +1 -1
  133. package/dist/src/identify/consts.js +11 -0
  134. package/dist/src/identify/consts.js.map +1 -0
  135. package/dist/src/identify/index.d.ts +42 -96
  136. package/dist/src/identify/index.d.ts.map +1 -1
  137. package/dist/src/identify/index.js +322 -0
  138. package/dist/src/identify/index.js.map +1 -0
  139. package/dist/src/identify/pb/message.d.ts +16 -0
  140. package/dist/src/identify/pb/message.d.ts.map +1 -0
  141. package/dist/src/identify/pb/message.js +24 -0
  142. package/dist/src/identify/pb/message.js.map +1 -0
  143. package/dist/src/index.d.ts +150 -496
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +9 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/insecure/index.d.ts +9 -0
  148. package/dist/src/insecure/index.d.ts.map +1 -0
  149. package/dist/src/insecure/index.js +81 -0
  150. package/dist/src/insecure/index.js.map +1 -0
  151. package/dist/src/insecure/pb/proto.d.ts +29 -0
  152. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  153. package/dist/src/insecure/pb/proto.js +53 -0
  154. package/dist/src/insecure/pb/proto.js.map +1 -0
  155. package/dist/src/keychain/cms.d.ts +6 -14
  156. package/dist/src/keychain/cms.d.ts.map +1 -1
  157. package/dist/src/keychain/cms.js +129 -0
  158. package/dist/src/keychain/cms.js.map +1 -0
  159. package/dist/src/keychain/index.d.ts +60 -81
  160. package/dist/src/keychain/index.d.ts.map +1 -1
  161. package/dist/src/keychain/index.js +492 -0
  162. package/dist/src/keychain/index.js.map +1 -0
  163. package/dist/src/keychain/util.d.ts +3 -6
  164. package/dist/src/keychain/util.d.ts.map +1 -1
  165. package/dist/src/keychain/util.js +79 -0
  166. package/dist/src/keychain/util.js.map +1 -0
  167. package/dist/src/libp2p.d.ts +80 -0
  168. package/dist/src/libp2p.d.ts.map +1 -0
  169. package/dist/src/libp2p.js +397 -0
  170. package/dist/src/libp2p.js.map +1 -0
  171. package/dist/src/metrics/index.d.ts +47 -104
  172. package/dist/src/metrics/index.d.ts.map +1 -1
  173. package/dist/src/metrics/index.js +231 -0
  174. package/dist/src/metrics/index.js.map +1 -0
  175. package/dist/src/metrics/moving-average.d.ts +14 -0
  176. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  177. package/dist/src/metrics/moving-average.js +40 -0
  178. package/dist/src/metrics/moving-average.js.map +1 -0
  179. package/dist/src/metrics/stats.d.ts +41 -93
  180. package/dist/src/metrics/stats.d.ts.map +1 -1
  181. package/dist/src/metrics/stats.js +183 -0
  182. package/dist/src/metrics/stats.js.map +1 -0
  183. package/dist/src/nat-manager.d.ts +42 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +114 -0
  186. package/dist/src/nat-manager.js.map +1 -0
  187. package/dist/src/peer-record-updater.d.ts +15 -0
  188. package/dist/src/peer-record-updater.d.ts.map +1 -0
  189. package/dist/src/peer-record-updater.js +44 -0
  190. package/dist/src/peer-record-updater.js.map +1 -0
  191. package/dist/src/peer-routing.d.ts +40 -84
  192. package/dist/src/peer-routing.d.ts.map +1 -1
  193. package/dist/src/peer-routing.js +108 -0
  194. package/dist/src/peer-routing.js.map +1 -0
  195. package/dist/src/ping/constants.d.ts +4 -4
  196. package/dist/src/ping/constants.d.ts.map +1 -1
  197. package/dist/src/ping/constants.js +5 -0
  198. package/dist/src/ping/constants.js.map +1 -0
  199. package/dist/src/ping/index.d.ts +17 -31
  200. package/dist/src/ping/index.d.ts.map +1 -1
  201. package/dist/src/ping/index.js +57 -0
  202. package/dist/src/ping/index.js.map +1 -0
  203. package/dist/src/pnet/crypto.d.ts +15 -5
  204. package/dist/src/pnet/crypto.d.ts.map +1 -1
  205. package/dist/src/pnet/crypto.js +60 -0
  206. package/dist/src/pnet/crypto.js.map +1 -0
  207. package/dist/src/pnet/errors.d.ts +5 -5
  208. package/dist/src/pnet/errors.d.ts.map +1 -1
  209. package/dist/src/pnet/errors.js +6 -0
  210. package/dist/src/pnet/errors.js.map +1 -0
  211. package/dist/src/pnet/index.d.ts +12 -20
  212. package/dist/src/pnet/index.d.ts.map +1 -1
  213. package/dist/src/pnet/index.js +67 -0
  214. package/dist/src/pnet/index.js.map +1 -0
  215. package/dist/src/pnet/key-generator.d.ts +3 -7
  216. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  217. package/dist/src/pnet/key-generator.js +25 -0
  218. package/dist/src/pnet/key-generator.js.map +1 -0
  219. package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
  220. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
  221. package/dist/src/pubsub/dummy-pubsub.js +37 -0
  222. package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
  223. package/dist/src/registrar.d.ts +26 -65
  224. package/dist/src/registrar.d.ts.map +1 -1
  225. package/dist/src/registrar.js +144 -0
  226. package/dist/src/registrar.js.map +1 -0
  227. package/dist/src/transport-manager.d.ts +36 -82
  228. package/dist/src/transport-manager.d.ts.map +1 -1
  229. package/dist/src/transport-manager.js +223 -0
  230. package/dist/src/transport-manager.js.map +1 -0
  231. package/dist/src/upgrader.d.ts +49 -129
  232. package/dist/src/upgrader.d.ts.map +1 -1
  233. package/dist/src/upgrader.js +402 -0
  234. package/dist/src/upgrader.js.map +1 -0
  235. package/dist/src/version.d.ts +3 -0
  236. package/dist/src/version.d.ts.map +1 -0
  237. package/dist/src/version.js +3 -0
  238. package/dist/src/version.js.map +1 -0
  239. package/package.json +144 -201
  240. package/src/address-manager/index.ts +130 -0
  241. package/src/circuit/README.md +16 -11
  242. package/src/circuit/auto-relay.ts +286 -0
  243. package/src/circuit/circuit/hop.ts +211 -0
  244. package/src/circuit/circuit/stop.ts +78 -0
  245. package/src/circuit/circuit/stream-handler.ts +86 -0
  246. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  247. package/src/circuit/constants.ts +31 -0
  248. package/src/circuit/index.ts +120 -0
  249. package/src/circuit/listener.ts +82 -0
  250. package/src/circuit/multicodec.ts +2 -0
  251. package/src/circuit/{protocol → pb}/index.proto +1 -1
  252. package/src/circuit/pb/index.ts +117 -0
  253. package/src/circuit/transport.ts +219 -0
  254. package/src/circuit/utils.ts +12 -0
  255. package/src/config.ts +99 -0
  256. package/src/connection-manager/auto-dialler.ts +154 -0
  257. package/src/connection-manager/dialer/auto-dialer.ts +59 -0
  258. package/src/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
  259. package/src/connection-manager/dialer/index.ts +382 -0
  260. package/src/connection-manager/index.ts +508 -0
  261. package/src/connection-manager/latency-monitor.ts +319 -0
  262. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  263. package/src/constants.ts +31 -0
  264. package/src/content-routing/index.ts +144 -0
  265. package/src/content-routing/utils.ts +54 -0
  266. package/src/dht/dht-content-routing.ts +43 -0
  267. package/src/dht/dht-peer-routing.ts +35 -0
  268. package/src/dht/dummy-dht.ts +60 -0
  269. package/src/errors.ts +73 -0
  270. package/src/fetch/README.md +1 -1
  271. package/src/fetch/constants.ts +3 -0
  272. package/src/fetch/index.ts +167 -0
  273. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/fetch/pb/proto.ts +65 -0
  275. package/src/get-peer.ts +57 -0
  276. package/src/identify/consts.ts +13 -0
  277. package/src/identify/index.ts +445 -0
  278. package/src/identify/{message.proto → pb/message.proto} +0 -0
  279. package/src/identify/pb/message.ts +37 -0
  280. package/src/index.ts +220 -0
  281. package/src/insecure/index.ts +101 -0
  282. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  283. package/src/insecure/pb/proto.ts +68 -0
  284. package/src/keychain/{cms.js → cms.ts} +62 -58
  285. package/src/keychain/index.ts +587 -0
  286. package/src/keychain/{util.js → util.ts} +7 -17
  287. package/src/libp2p.ts +538 -0
  288. package/src/metrics/index.ts +310 -0
  289. package/src/metrics/moving-average.ts +53 -0
  290. package/src/metrics/stats.ts +238 -0
  291. package/src/nat-manager.ts +194 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +186 -0
  294. package/src/ping/README.md +1 -1
  295. package/src/ping/constants.ts +5 -0
  296. package/src/ping/index.ts +84 -0
  297. package/src/pnet/README.md +2 -2
  298. package/src/pnet/crypto.ts +67 -0
  299. package/src/pnet/errors.ts +5 -0
  300. package/src/pnet/index.ts +97 -0
  301. package/src/pnet/key-generator.ts +28 -0
  302. package/src/pubsub/dummy-pubsub.ts +51 -0
  303. package/src/registrar.ts +189 -0
  304. package/src/transport-manager.ts +281 -0
  305. package/src/upgrader.ts +499 -0
  306. package/src/version.ts +3 -0
  307. package/dist/index.min.js +0 -55
  308. package/dist/src/circuit/protocol/index.d.ts +0 -173
  309. package/dist/src/dialer/dial-request.d.ts +0 -55
  310. package/dist/src/dialer/dial-request.d.ts.map +0 -1
  311. package/dist/src/dialer/index.d.ts +0 -182
  312. package/dist/src/dialer/index.d.ts.map +0 -1
  313. package/dist/src/fetch/proto.d.ts +0 -134
  314. package/dist/src/identify/message.d.ts +0 -95
  315. package/dist/src/insecure/plaintext.d.ts +0 -12
  316. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  317. package/dist/src/insecure/proto.d.ts +0 -128
  318. package/dist/src/metrics/old-peers.d.ts +0 -3
  319. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  320. package/dist/src/metrics/tracked-map.d.ts +0 -8
  321. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  322. package/dist/src/peer-store/address-book.d.ts +0 -67
  323. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  324. package/dist/src/peer-store/index.d.ts +0 -58
  325. package/dist/src/peer-store/index.d.ts.map +0 -1
  326. package/dist/src/peer-store/key-book.d.ts +0 -40
  327. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  328. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  329. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  330. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  331. package/dist/src/peer-store/proto-book.d.ts +0 -43
  332. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  333. package/dist/src/peer-store/store.d.ts +0 -73
  334. package/dist/src/peer-store/store.d.ts.map +0 -1
  335. package/dist/src/peer-store/types.d.ts +0 -202
  336. package/dist/src/peer-store/types.d.ts.map +0 -1
  337. package/dist/src/ping/util.d.ts +0 -5
  338. package/dist/src/ping/util.d.ts.map +0 -1
  339. package/dist/src/pubsub-adapter.d.ts +0 -22
  340. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  341. package/dist/src/record/envelope/envelope.d.ts +0 -77
  342. package/dist/src/record/envelope/index.d.ts +0 -80
  343. package/dist/src/record/envelope/index.d.ts.map +0 -1
  344. package/dist/src/record/peer-record/consts.d.ts +0 -4
  345. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  346. package/dist/src/record/peer-record/index.d.ts +0 -60
  347. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  348. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  349. package/dist/src/record/utils.d.ts +0 -12
  350. package/dist/src/record/utils.d.ts.map +0 -1
  351. package/dist/src/types.d.ts +0 -90
  352. package/dist/src/types.d.ts.map +0 -1
  353. package/src/address-manager/index.js +0 -96
  354. package/src/circuit/auto-relay.js +0 -302
  355. package/src/circuit/circuit/hop.js +0 -205
  356. package/src/circuit/circuit/stop.js +0 -81
  357. package/src/circuit/circuit/stream-handler.js +0 -94
  358. package/src/circuit/constants.js +0 -12
  359. package/src/circuit/index.js +0 -102
  360. package/src/circuit/listener.js +0 -75
  361. package/src/circuit/multicodec.js +0 -5
  362. package/src/circuit/protocol/index.d.ts +0 -173
  363. package/src/circuit/protocol/index.js +0 -530
  364. package/src/circuit/transport.js +0 -229
  365. package/src/circuit/utils.js +0 -17
  366. package/src/config.js +0 -114
  367. package/src/connection-manager/auto-dialler.js +0 -132
  368. package/src/connection-manager/index.js +0 -374
  369. package/src/connection-manager/latency-monitor.js +0 -264
  370. package/src/constants.js +0 -18
  371. package/src/content-routing/index.js +0 -163
  372. package/src/content-routing/utils.js +0 -89
  373. package/src/dht/dht-content-routing.js +0 -44
  374. package/src/dht/dht-peer-routing.js +0 -51
  375. package/src/dialer/index.js +0 -376
  376. package/src/errors.js +0 -66
  377. package/src/fetch/constants.js +0 -6
  378. package/src/fetch/index.js +0 -159
  379. package/src/fetch/proto.d.ts +0 -134
  380. package/src/fetch/proto.js +0 -333
  381. package/src/get-peer.js +0 -49
  382. package/src/identify/consts.js +0 -15
  383. package/src/identify/index.js +0 -384
  384. package/src/identify/message.d.ts +0 -95
  385. package/src/identify/message.js +0 -328
  386. package/src/index.js +0 -813
  387. package/src/insecure/plaintext.js +0 -95
  388. package/src/insecure/proto.d.ts +0 -128
  389. package/src/insecure/proto.js +0 -371
  390. package/src/keychain/index.js +0 -561
  391. package/src/metrics/index.js +0 -290
  392. package/src/metrics/old-peers.js +0 -16
  393. package/src/metrics/stats.js +0 -270
  394. package/src/metrics/tracked-map.js +0 -94
  395. package/src/nat-manager.js +0 -197
  396. package/src/peer-routing.js +0 -176
  397. package/src/peer-store/README.md +0 -145
  398. package/src/peer-store/address-book.js +0 -382
  399. package/src/peer-store/index.js +0 -121
  400. package/src/peer-store/key-book.js +0 -141
  401. package/src/peer-store/metadata-book.js +0 -250
  402. package/src/peer-store/pb/peer.d.ts +0 -222
  403. package/src/peer-store/pb/peer.js +0 -643
  404. package/src/peer-store/pb/peer.proto +0 -31
  405. package/src/peer-store/proto-book.js +0 -237
  406. package/src/peer-store/store.js +0 -263
  407. package/src/peer-store/types.ts +0 -245
  408. package/src/ping/constants.js +0 -8
  409. package/src/ping/index.js +0 -84
  410. package/src/ping/util.js +0 -18
  411. package/src/pnet/crypto.js +0 -84
  412. package/src/pnet/errors.js +0 -7
  413. package/src/pnet/index.js +0 -86
  414. package/src/pnet/key-generator.js +0 -33
  415. package/src/pubsub-adapter.js +0 -61
  416. package/src/record/README.md +0 -130
  417. package/src/record/envelope/envelope.d.ts +0 -77
  418. package/src/record/envelope/envelope.js +0 -243
  419. package/src/record/envelope/envelope.proto +0 -19
  420. package/src/record/envelope/index.js +0 -183
  421. package/src/record/peer-record/consts.js +0 -14
  422. package/src/record/peer-record/index.js +0 -113
  423. package/src/record/peer-record/peer-record.d.ts +0 -133
  424. package/src/record/peer-record/peer-record.js +0 -367
  425. package/src/record/peer-record/peer-record.proto +0 -18
  426. package/src/record/utils.js +0 -25
  427. package/src/registrar.js +0 -127
  428. package/src/transport-manager.js +0 -269
  429. package/src/types.ts +0 -98
  430. package/src/upgrader.js +0 -492
@@ -1,197 +0,0 @@
1
- 'use strict'
2
-
3
- // @ts-ignore nat-api does not export types
4
- const NatAPI = require('nat-api')
5
- const debug = require('debug')
6
- const { promisify } = require('es6-promisify')
7
- const { Multiaddr } = require('multiaddr')
8
- const log = Object.assign(debug('libp2p:nat'), {
9
- error: debug('libp2p:nat:err')
10
- })
11
- const { isBrowser } = require('wherearewe')
12
- const retry = require('p-retry')
13
- const isPrivateIp = require('private-ip')
14
- const pkg = require('../package.json')
15
- const errcode = require('err-code')
16
- const {
17
- codes: { ERR_INVALID_PARAMETERS }
18
- } = require('./errors')
19
- const isLoopback = require('libp2p-utils/src/multiaddr/is-loopback')
20
-
21
- const DEFAULT_TTL = 7200
22
-
23
- /**
24
- * @typedef {import('peer-id')} PeerId
25
- * @typedef {import('./transport-manager')} TransportManager
26
- * @typedef {import('./address-manager')} AddressManager
27
- */
28
-
29
- /**
30
- * @typedef {Object} NatManagerProperties
31
- * @property {PeerId} peerId - The peer ID of the current node
32
- * @property {TransportManager} transportManager - A transport manager
33
- * @property {AddressManager} addressManager - An address manager
34
- *
35
- * @typedef {Object} NatManagerOptions
36
- * @property {boolean} enabled - Whether to enable the NAT manager
37
- * @property {string} [externalIp] - Pass a value to use instead of auto-detection
38
- * @property {string} [description] - A string value to use for the port mapping description on the gateway
39
- * @property {number} [ttl = DEFAULT_TTL] - How long UPnP port mappings should last for in seconds (minimum 1200)
40
- * @property {boolean} [keepAlive] - Whether to automatically refresh UPnP port mappings when their TTL is reached
41
- * @property {string} [gateway] - Pass a value to use instead of auto-detection
42
- * @property {object} [pmp] - PMP options
43
- * @property {boolean} [pmp.enabled] - Whether to enable PMP as well as UPnP
44
- */
45
-
46
- function highPort (min = 1024, max = 65535) {
47
- return Math.floor(Math.random() * (max - min + 1) + min)
48
- }
49
-
50
- class NatManager {
51
- /**
52
- * @class
53
- * @param {NatManagerProperties & NatManagerOptions} options
54
- */
55
- constructor ({ peerId, addressManager, transportManager, ...options }) {
56
- this._peerId = peerId
57
- this._addressManager = addressManager
58
- this._transportManager = transportManager
59
-
60
- this._enabled = options.enabled
61
- this._externalIp = options.externalIp
62
- this._options = {
63
- description: options.description || `${pkg.name}@${pkg.version} ${this._peerId}`,
64
- ttl: options.ttl || DEFAULT_TTL,
65
- autoUpdate: options.keepAlive || true,
66
- gateway: options.gateway,
67
- enablePMP: Boolean(options.pmp && options.pmp.enabled)
68
- }
69
-
70
- if (this._options.ttl < DEFAULT_TTL) {
71
- throw errcode(new Error(`NatManager ttl should be at least ${DEFAULT_TTL} seconds`), ERR_INVALID_PARAMETERS)
72
- }
73
- }
74
-
75
- /**
76
- * Starts the NAT manager
77
- */
78
- start () {
79
- if (isBrowser || !this._enabled) {
80
- return
81
- }
82
-
83
- // done async to not slow down startup
84
- this._start().catch((err) => {
85
- // hole punching errors are non-fatal
86
- log.error(err)
87
- })
88
- }
89
-
90
- async _start () {
91
- const addrs = this._transportManager.getAddrs()
92
-
93
- for (const addr of addrs) {
94
- // try to open uPnP ports for each thin waist address
95
- const { family, host, port, transport } = addr.toOptions()
96
-
97
- if (!addr.isThinWaistAddress() || transport !== 'tcp') {
98
- // only bare tcp addresses
99
- // eslint-disable-next-line no-continue
100
- continue
101
- }
102
-
103
- if (isLoopback(addr)) {
104
- // eslint-disable-next-line no-continue
105
- continue
106
- }
107
-
108
- if (family !== 4) {
109
- // ignore ipv6
110
- // eslint-disable-next-line no-continue
111
- continue
112
- }
113
-
114
- const client = this._getClient()
115
- const publicIp = this._externalIp || await client.externalIp()
116
-
117
- // @ts-expect-error types are wrong
118
- if (isPrivateIp(publicIp)) {
119
- throw new Error(`${publicIp} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`)
120
- }
121
-
122
- const publicPort = highPort()
123
-
124
- log(`opening uPnP connection from ${publicIp}:${publicPort} to ${host}:${port}`)
125
-
126
- await client.map({
127
- publicPort,
128
- privatePort: port,
129
- protocol: transport.toUpperCase()
130
- })
131
-
132
- this._addressManager.addObservedAddr(Multiaddr.fromNodeAddress({
133
- family: 4,
134
- address: publicIp,
135
- port: publicPort
136
- }, transport))
137
- }
138
- }
139
-
140
- _getClient () {
141
- if (this._client) {
142
- return this._client
143
- }
144
-
145
- const client = new NatAPI(this._options)
146
-
147
- /** @type {(...any: any) => any} */
148
- const map = promisify(client.map.bind(client))
149
- /** @type {(...any: any) => any} */
150
- const destroy = promisify(client.destroy.bind(client))
151
- /** @type {(...any: any) => any} */
152
- const externalIp = promisify(client.externalIp.bind(client))
153
-
154
- // these are all network operations so add a retry
155
- this._client = {
156
- /**
157
- * @param {...any} args
158
- * @returns {Promise<void>}
159
- */
160
- map: (...args) => retry(() => map(...args), { onFailedAttempt: log.error, unref: true }),
161
-
162
- /**
163
- * @param {...any} args
164
- * @returns {Promise<void>}
165
- */
166
- destroy: (...args) => retry(() => destroy(...args), { onFailedAttempt: log.error, unref: true }),
167
-
168
- /**
169
- * @param {...any} args
170
- * @returns {Promise<string>}
171
- */
172
- externalIp: (...args) => retry(() => externalIp(...args), { onFailedAttempt: log.error, unref: true })
173
- }
174
-
175
- return this._client
176
- }
177
-
178
- /**
179
- * Stops the NAT manager
180
- *
181
- * @async
182
- */
183
- async stop () {
184
- if (isBrowser || !this._client) {
185
- return
186
- }
187
-
188
- try {
189
- await this._client.destroy()
190
- this._client = null
191
- } catch (/** @type {any} */ err) {
192
- log.error(err)
193
- }
194
- }
195
- }
196
-
197
- module.exports = NatManager
@@ -1,176 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:peer-routing'), {
5
- error: debug('libp2p:peer-routing:err')
6
- })
7
- const errCode = require('err-code')
8
- const errors = require('./errors')
9
- const {
10
- storeAddresses,
11
- uniquePeers,
12
- requirePeers
13
- } = require('./content-routing/utils')
14
- const { TimeoutController } = require('timeout-abort-controller')
15
-
16
- const merge = require('it-merge')
17
- const { pipe } = require('it-pipe')
18
- const first = require('it-first')
19
- const drain = require('it-drain')
20
- const filter = require('it-filter')
21
- const {
22
- setDelayedInterval,
23
- clearDelayedInterval
24
- // @ts-ignore module with no types
25
- } = require('set-delayed-interval')
26
- const { DHTPeerRouting } = require('./dht/dht-peer-routing')
27
- // @ts-expect-error setMaxListeners is missing from the types
28
- const { setMaxListeners } = require('events')
29
-
30
- /**
31
- * @typedef {import('peer-id')} PeerId
32
- * @typedef {import('multiaddr').Multiaddr} Multiaddr
33
- * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule
34
- */
35
-
36
- /**
37
- * @typedef {Object} RefreshManagerOptions
38
- * @property {boolean} [enabled = true] - Whether to enable the Refresh manager
39
- * @property {number} [bootDelay = 6e5] - Boot delay to start the Refresh Manager (in ms)
40
- * @property {number} [interval = 10e3] - Interval between each Refresh Manager run (in ms)
41
- * @property {number} [timeout = 10e3] - How long to let each refresh run (in ms)
42
- *
43
- * @typedef {Object} PeerRoutingOptions
44
- * @property {RefreshManagerOptions} [refreshManager]
45
- */
46
-
47
- class PeerRouting {
48
- /**
49
- * @class
50
- * @param {import('./')} libp2p
51
- */
52
- constructor (libp2p) {
53
- this._peerId = libp2p.peerId
54
- this._peerStore = libp2p.peerStore
55
- /** @type {PeerRoutingModule[]} */
56
- this._routers = libp2p._modules.peerRouting || []
57
-
58
- // If we have the dht, add it to the available peer routers
59
- if (libp2p._dht && libp2p._config.dht.enabled) {
60
- this._routers.push(new DHTPeerRouting(libp2p._dht))
61
- }
62
-
63
- this._refreshManagerOptions = libp2p._options.peerRouting.refreshManager
64
-
65
- this._findClosestPeersTask = this._findClosestPeersTask.bind(this)
66
- }
67
-
68
- /**
69
- * Start peer routing service.
70
- */
71
- start () {
72
- if (!this._routers.length || this._timeoutId || !this._refreshManagerOptions.enabled) {
73
- return
74
- }
75
-
76
- this._timeoutId = setDelayedInterval(
77
- this._findClosestPeersTask, this._refreshManagerOptions.interval, this._refreshManagerOptions.bootDelay
78
- )
79
- }
80
-
81
- /**
82
- * Recurrent task to find closest peers and add their addresses to the Address Book.
83
- */
84
- async _findClosestPeersTask () {
85
- try {
86
- // nb getClosestPeers adds the addresses to the address book
87
- await drain(this.getClosestPeers(this._peerId.id, { timeout: this._refreshManagerOptions.timeout || 10e3 }))
88
- } catch (/** @type {any} */ err) {
89
- log.error(err)
90
- }
91
- }
92
-
93
- /**
94
- * Stop peer routing service.
95
- */
96
- stop () {
97
- clearDelayedInterval(this._timeoutId)
98
- }
99
-
100
- /**
101
- * Iterates over all peer routers in parallel to find the given peer.
102
- *
103
- * @param {PeerId} id - The id of the peer to find
104
- * @param {object} [options]
105
- * @param {number} [options.timeout] - How long the query should run
106
- * @returns {Promise<{ id: PeerId, multiaddrs: Multiaddr[] }>}
107
- */
108
- async findPeer (id, options) { // eslint-disable-line require-await
109
- if (!this._routers.length) {
110
- throw errCode(new Error('No peer routers available'), errors.codes.ERR_NO_ROUTERS_AVAILABLE)
111
- }
112
-
113
- if (id.toB58String() === this._peerId.toB58String()) {
114
- throw errCode(new Error('Should not try to find self'), errors.codes.ERR_FIND_SELF)
115
- }
116
-
117
- const output = await pipe(
118
- merge(
119
- ...this._routers.map(router => (async function * () {
120
- try {
121
- yield await router.findPeer(id, options)
122
- } catch (err) {
123
- log.error(err)
124
- }
125
- })())
126
- ),
127
- (source) => filter(source, Boolean),
128
- (source) => storeAddresses(source, this._peerStore),
129
- (source) => first(source)
130
- )
131
-
132
- if (output) {
133
- return output
134
- }
135
-
136
- throw errCode(new Error(errors.messages.NOT_FOUND), errors.codes.ERR_NOT_FOUND)
137
- }
138
-
139
- /**
140
- * Attempt to find the closest peers on the network to the given key.
141
- *
142
- * @param {Uint8Array} key - A CID like key
143
- * @param {Object} [options]
144
- * @param {number} [options.timeout=30e3] - How long the query can take
145
- * @param {AbortSignal} [options.signal] - An AbortSignal to abort the request
146
- * @returns {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>}
147
- */
148
- async * getClosestPeers (key, options = { timeout: 30e3 }) {
149
- if (!this._routers.length) {
150
- throw errCode(new Error('No peer routers available'), errors.codes.ERR_NO_ROUTERS_AVAILABLE)
151
- }
152
-
153
- if (options.timeout) {
154
- const controller = new TimeoutController(options.timeout)
155
- // this controller will potentially be used while dialing lots of
156
- // peers so prevent MaxListenersExceededWarning appearing in the console
157
- try {
158
- // fails on node < 15.4
159
- setMaxListeners && setMaxListeners(Infinity, controller.signal)
160
- } catch {}
161
-
162
- options.signal = controller.signal
163
- }
164
-
165
- yield * pipe(
166
- merge(
167
- ...this._routers.map(router => router.getClosestPeers(key, options))
168
- ),
169
- (source) => storeAddresses(source, this._peerStore),
170
- (source) => uniquePeers(source),
171
- (source) => requirePeers(source)
172
- )
173
- }
174
- }
175
-
176
- module.exports = PeerRouting
@@ -1,145 +0,0 @@
1
- # PeerStore
2
-
3
- Libp2p's PeerStore is responsible for keeping an updated register with the relevant information of the known peers. It should be the single source of truth for all peer data, where a subsystem can learn about peers' data and where someone can listen for updates. The PeerStore comprises four main components: `addressBook`, `keyBook`, `protocolBook` and `metadataBook`.
4
-
5
- The PeerStore manages the high level operations on its inner books. Moreover, the PeerStore should be responsible for notifying interested parties of relevant events, through its Event Emitter.
6
-
7
- ## Submitting records to the PeerStore
8
-
9
- Several libp2p subsystems will perform operations that might gather relevant information about peers.
10
-
11
- ### Identify
12
- - The Identify protocol automatically runs on every connection when multiplexing is enabled. The protocol will put the multiaddrs and protocols provided by the peer to the PeerStore.
13
- - In the background, the Identify Service is also waiting for protocol change notifications of peers via the IdentifyPush protocol. Peers may leverage the `identify-push` message to communicate protocol changes to all connected peers, so that their PeerStore can be updated with the updated protocols.
14
- - While it is currently not supported in js-libp2p, future iterations may also support the [IdentifyDelta protocol](https://github.com/libp2p/specs/pull/176).
15
- - Taking into account that the Identify protocol records are directly from the peer, they should be considered the source of truth and weighted accordingly.
16
-
17
- ### Peer Discovery
18
- - Libp2p discovery protocols aim to discover new peers in the network. In a typical discovery protocol, addresses of the peer are discovered along with its peer id. Once this happens, a libp2p discovery protocol should emit a `peer` event with the information of the discovered peer and this information will be added to the PeerStore by libp2p.
19
-
20
- ### Dialer
21
- - Libp2p API supports dialing a peer given a `multiaddr`, and no prior knowledge of the peer. If the node is able to establish a connection with the peer, it and its multiaddr is added to the PeerStore.
22
- - When a connection is being upgraded, more precisely after its encryption, or even in a discovery protocol, a libp2p node can get to know other parties public keys. In this scenario, libp2p will add the peer's public key to its `KeyBook`.
23
-
24
- ### DHT
25
- - On some DHT operations, such as finding providers for a given CID, nodes may exchange peer data as part of the query. This passive peer discovery should result in the DHT emitting the `peer` event in the same way [Peer Discovery](#peerdiscovery) does.
26
-
27
- ## Retrieving records from the PeerStore
28
-
29
- When data in the PeerStore is updated the PeerStore will emit events based on the changes, to allow applications and other subsystems to take action on those changes. Any subsystem interested in these notifications should subscribe the [`PeerStore events`][peer-store-events].
30
-
31
- ### Peer
32
- - Each time a new peer is discovered, the PeerStore should emit a [`peer` event][peer-store-events], so that interested parties can leverage this peer and establish a connection with it.
33
-
34
- ### Protocols
35
- - When the known protocols of a peer change, the PeerStore emits a [`change:protocols` event][peer-store-events].
36
-
37
- ### Multiaddrs
38
- - When the known listening `multiaddrs` of a peer change, the PeerStore emits a [`change:multiaddrs` event][peer-store-events].
39
-
40
- ## PeerStore implementation
41
-
42
- The PeerStore wraps four main components: `addressBook`, `keyBook`, `protocolBook` and `metadataBook`. Moreover, it provides a high level API for those components, as well as data events.
43
-
44
- ### Components
45
-
46
- #### Address Book
47
-
48
- The `addressBook` keeps the known multiaddrs of a peer. The multiaddrs of each peer may change over time and the Address Book must account for this.
49
-
50
- `Map<string, Address>`
51
-
52
- A `peerId.toB58String()` identifier mapping to a `Address` object, which should have the following structure:
53
-
54
- ```js
55
- {
56
- multiaddr: <Multiaddr>
57
- }
58
- ```
59
-
60
- #### Key Book
61
-
62
- The `keyBook` tracks the public keys of the peers by keeping their [`PeerId`][peer-id].
63
-
64
- `Map<string, PeerId`
65
-
66
- A `peerId.toB58String()` identifier mapping to a `PeerId` of the peer. This instance contains the peer public key.
67
-
68
- #### Protocol Book
69
-
70
- The `protoBook` holds the identifiers of the protocols supported by each peer. The protocols supported by each peer are dynamic and will change over time.
71
-
72
- `Map<string, Set<string>>`
73
-
74
- A `peerId.toB58String()` identifier mapping to a `Set` of protocol identifier strings.
75
-
76
- #### Metadata Book
77
-
78
- The `metadataBook` keeps track of the known metadata of a peer. Its metadata is stored in a key value fashion, where a key identifier (`string`) represents a metadata value (`Uint8Array`).
79
-
80
- `Map<string, Map<string, Uint8Array>>`
81
-
82
- A `peerId.toB58String()` identifier mapping to the peer metadata Map.
83
-
84
- ### API
85
-
86
- For the complete API documentation, you should check the [API.md](../../doc/API.md).
87
-
88
- Access to its underlying books:
89
-
90
- - `peerStore.addressBook.*`
91
- - `peerStore.keyBook.*`
92
- - `peerStore.metadataBook.*`
93
- - `peerStore.protoBook.*`
94
-
95
- ### Events
96
-
97
- - `peer` - emitted when a new peer is added.
98
- - `change:multiaadrs` - emitted when a known peer has a different set of multiaddrs.
99
- - `change:protocols` - emitted when a known peer supports a different set of protocols.
100
- - `change:pubkey` - emitted when a peer's public key is known.
101
- - `change:metadata` - emitted when known metadata of a peer changes.
102
-
103
- ## Data Persistence
104
-
105
- The data stored in the PeerStore can be persisted if configured appropriately. Keeping a record of the peers already discovered by the peer, as well as their known data aims to improve the efficiency of peers joining the network after being offline.
106
-
107
- The libp2p node will need to receive a [datastore](https://github.com/ipfs/interface-datastore), in order to persist this data across restarts. A [datastore](https://github.com/ipfs/interface-datastore) stores its data in a key-value fashion. As a result, we need coherent keys so that we do not overwrite data.
108
-
109
- The PeerStore should not continuously update the datastore whenever data is changed. Instead, it should only store new data after reaching a certain threshold of "dirty" peers, as well as when the node is stopped, in order to batch writes to the datastore.
110
-
111
- The peer id will be appended to the datastore key for each data namespace. The namespaces were defined as follows:
112
-
113
- **AddressBook**
114
-
115
- All the known peer addresses are stored with a key pattern as follows:
116
-
117
- `/peers/addrs/<b32 peer id no padding>`
118
-
119
- **ProtoBook**
120
-
121
- All the known peer protocols are stored with a key pattern as follows:
122
-
123
- `/peers/protos/<b32 peer id no padding>`
124
-
125
- **KeyBook**
126
-
127
- All public keys are stored under the following pattern:
128
-
129
- ` /peers/keys/<b32 peer id no padding>`
130
-
131
- **MetadataBook**
132
-
133
- Metadata is stored under the following key pattern:
134
-
135
- `/peers/metadata/<b32 peer id no padding>/<key>`
136
-
137
- ## Future Considerations
138
-
139
- - If multiaddr TTLs are added, the PeerStore may schedule jobs to delete all addresses that exceed the TTL to prevent AddressBook bloating
140
- - Further API methods will probably need to be added in the context of multiaddr validity and confidence.
141
- - When improving libp2p configuration for specific runtimes, we should take into account the PeerStore recommended datastore.
142
- - When improving libp2p configuration, we should think about a possible way of allowing the configuration of Bootstrap to be influenced by the persisted peers, as a way to decrease the load on Bootstrap nodes.
143
-
144
- [peer-id]: https://github.com/libp2p/js-peer-id
145
- [peer-store-events]: ../../doc/API.md#libp2ppeerstore