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