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
@@ -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