libp2p 0.36.0 → 0.36.2-1473044

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +215 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +54 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +190 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +93 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. package/src/upgrader.js +0 -492
package/LICENSE CHANGED
@@ -1,22 +1,4 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2015 David Dias
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ This project is dual licensed under MIT and Apache-2.0.
22
2
 
3
+ MIT: https://www.opensource.org/licenses/mit
4
+ Apache-2.0: https://www.apache.org/licenses/license-2.0
package/README.md CHANGED
@@ -39,26 +39,22 @@ If you are looking for the documentation of the latest release, you can view the
39
39
 
40
40
  **Want to update libp2p in your project?** Check our [migrations folder](./doc/migrations).
41
41
 
42
- [**`Weekly Core Dev Calls`**](https://github.com/libp2p/team-mgmt/issues/16)
43
-
44
- ## Lead Maintainer
45
-
46
- [Jacob Heun](https://github.com/jacobheun/)
47
-
48
- ## Table of Contents
42
+ ## Table of Contents <!-- omit in toc -->
49
43
 
50
44
  - [Background](#background)
51
45
  - [Install](#install)
52
46
  - [Usage](#usage)
53
47
  - [Configuration](#configuration)
54
48
  - [API](#api)
55
- - [Getting Started](#getting-started)
49
+ - [Getting started](#getting-started)
56
50
  - [Tutorials and Examples](#tutorials-and-examples)
57
51
  - [Development](#development)
58
52
  - [Tests](#tests)
53
+ - [Run unit tests](#run-unit-tests)
59
54
  - [Packages](#packages)
60
55
  - [Contribute](#contribute)
61
56
  - [License](#license)
57
+ - [Contribution](#contribution)
62
58
 
63
59
  ## Background
64
60
 
@@ -123,7 +119,7 @@ You can find multiple examples on the [examples folder](./examples) that will gu
123
119
  > npm run test:node
124
120
 
125
121
  # run just Browser tests (Chrome)
126
- > npm run test:browser
122
+ > npm run test:chrome
127
123
  ```
128
124
 
129
125
  ### Packages
@@ -183,4 +179,11 @@ The libp2p implementation in JavaScript is a work in progress. As such, there ar
183
179
 
184
180
  ## License
185
181
 
186
- [MIT](LICENSE) © Protocol Labs
182
+ Licensed under either of
183
+
184
+ * Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / http://www.apache.org/licenses/LICENSE-2.0)
185
+ * MIT ([LICENSE-MIT](LICENSE-MIT) / http://opensource.org/licenses/MIT)
186
+
187
+ ### Contribution
188
+
189
+ Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
@@ -1,72 +1,53 @@
1
- export = AddressManager;
2
- /**
3
- * @typedef {Object} AddressManagerOptions
4
- * @property {string[]} [listen = []] - list of multiaddrs string representation to listen.
5
- * @property {string[]} [announce = []] - list of multiaddrs string representation to announce.
6
- */
7
- /**
8
- * @fires AddressManager#change:addresses Emitted when a addresses change.
9
- */
10
- declare class AddressManager extends EventEmitter {
1
+ import { AddressManagerEvents, EventEmitter } from '@libp2p/interfaces';
2
+ import { Multiaddr } from '@multiformats/multiaddr';
3
+ import type { Components } from '@libp2p/interfaces/components';
4
+ export interface AddressManagerInit {
5
+ announceFilter?: AddressFilter;
6
+ /**
7
+ * list of multiaddrs string representation to listen
8
+ */
9
+ listen?: string[];
10
+ /**
11
+ * list of multiaddrs string representation to announce
12
+ */
13
+ announce?: string[];
14
+ /**
15
+ * list of multiaddrs string representation to never announce
16
+ */
17
+ noAnnounce?: string[];
18
+ }
19
+ export interface AddressFilter {
20
+ (addrs: Multiaddr[]): Multiaddr[];
21
+ }
22
+ export declare class DefaultAddressManager extends EventEmitter<AddressManagerEvents> {
23
+ private readonly components;
24
+ private readonly listen;
25
+ private readonly announce;
26
+ private readonly observed;
27
+ private readonly announceFilter;
11
28
  /**
12
29
  * Responsible for managing the peer addresses.
13
30
  * Peers can specify their listen and announce addresses.
14
31
  * The listen addresses will be used by the libp2p transports to listen for new connections,
15
32
  * while the announce addresses will be used for the peer addresses' to other peers in the network.
16
- *
17
- * @class
18
- * @param {PeerId} peerId - The Peer ID of the node
19
- * @param {object} [options]
20
- * @param {Array<string>} [options.listen = []] - list of multiaddrs string representation to listen.
21
- * @param {Array<string>} [options.announce = []] - list of multiaddrs string representation to announce.
22
33
  */
23
- constructor(peerId: PeerId, { listen, announce }?: {
24
- listen?: string[] | undefined;
25
- announce?: string[] | undefined;
26
- } | undefined);
27
- peerId: PeerId;
28
- listen: Set<string>;
29
- announce: Set<string>;
30
- observed: Set<any>;
34
+ constructor(components: Components, init: AddressManagerInit);
31
35
  /**
32
- * Get peer listen multiaddrs.
33
- *
34
- * @returns {Multiaddr[]}
36
+ * Get peer listen multiaddrs
35
37
  */
36
38
  getListenAddrs(): Multiaddr[];
37
39
  /**
38
- * Get peer announcing multiaddrs.
39
- *
40
- * @returns {Multiaddr[]}
40
+ * Get peer announcing multiaddrs
41
41
  */
42
42
  getAnnounceAddrs(): Multiaddr[];
43
43
  /**
44
- * Get observed multiaddrs.
45
- *
46
- * @returns {Array<Multiaddr>}
44
+ * Get observed multiaddrs
47
45
  */
48
- getObservedAddrs(): Array<Multiaddr>;
46
+ getObservedAddrs(): Multiaddr[];
49
47
  /**
50
48
  * Add peer observed addresses
51
- *
52
- * @param {string | Multiaddr} addr
53
49
  */
54
50
  addObservedAddr(addr: string | Multiaddr): void;
51
+ getAddresses(): Multiaddr[];
55
52
  }
56
- declare namespace AddressManager {
57
- export { AddressManagerOptions };
58
- }
59
- import { EventEmitter } from "events";
60
- import PeerId = require("peer-id");
61
- import { Multiaddr } from "multiaddr";
62
- type AddressManagerOptions = {
63
- /**
64
- * - list of multiaddrs string representation to listen.
65
- */
66
- listen?: string[] | undefined;
67
- /**
68
- * - list of multiaddrs string representation to announce.
69
- */
70
- announce?: string[] | undefined;
71
- };
72
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/address-manager/index.js"],"names":[],"mappings":";AAMA;;;;GAIG;AAEH;;GAEG;AACH;IACE;;;;;;;;;;;OAWG;IACH,oBALW,MAAM;;;mBAYhB;IAJC,eAAoB;IACpB,oBAAsD;IACtD,sBAA0D;IAC1D,mBAAyB;IAG3B;;;;OAIG;IACH,kBAFa,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,oBAFa,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,oBAFa,MAAM,SAAS,CAAC,CAI5B;IAED;;;;OAIG;IACH,sBAFW,MAAM,GAAG,SAAS,QAyB5B;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/address-manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAE/D,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,aAAa,CAAA;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;CAClC;AAID,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAE9C;;;;;OAKG;gBACU,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB;IAY7D;;OAEG;IACH,cAAc,IAAK,SAAS,EAAE;IAI9B;;OAEG;IACH,gBAAgB,IAAK,SAAS,EAAE;IAIhC;;OAEG;IACH,gBAAgB,IAAK,SAAS,EAAE;IAIhC;;OAEG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAyBhD,YAAY,IAAK,SAAS,EAAE;CAwB7B"}
@@ -0,0 +1,81 @@
1
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
2
+ import { Multiaddr } from '@multiformats/multiaddr';
3
+ import { peerIdFromString } from '@libp2p/peer-id';
4
+ const defaultAddressFilter = (addrs) => addrs;
5
+ export class DefaultAddressManager extends EventEmitter {
6
+ /**
7
+ * Responsible for managing the peer addresses.
8
+ * Peers can specify their listen and announce addresses.
9
+ * The listen addresses will be used by the libp2p transports to listen for new connections,
10
+ * while the announce addresses will be used for the peer addresses' to other peers in the network.
11
+ */
12
+ constructor(components, init) {
13
+ super();
14
+ const { listen = [], announce = [] } = init;
15
+ this.components = components;
16
+ this.listen = new Set(listen.map(ma => ma.toString()));
17
+ this.announce = new Set(announce.map(ma => ma.toString()));
18
+ this.observed = new Set();
19
+ this.announceFilter = init.announceFilter ?? defaultAddressFilter;
20
+ }
21
+ /**
22
+ * Get peer listen multiaddrs
23
+ */
24
+ getListenAddrs() {
25
+ return Array.from(this.listen).map((a) => new Multiaddr(a));
26
+ }
27
+ /**
28
+ * Get peer announcing multiaddrs
29
+ */
30
+ getAnnounceAddrs() {
31
+ return Array.from(this.announce).map((a) => new Multiaddr(a));
32
+ }
33
+ /**
34
+ * Get observed multiaddrs
35
+ */
36
+ getObservedAddrs() {
37
+ return Array.from(this.observed).map((a) => new Multiaddr(a));
38
+ }
39
+ /**
40
+ * Add peer observed addresses
41
+ */
42
+ addObservedAddr(addr) {
43
+ let ma = new Multiaddr(addr);
44
+ const remotePeer = ma.getPeerId();
45
+ // strip our peer id if it has been passed
46
+ if (remotePeer != null) {
47
+ const remotePeerId = peerIdFromString(remotePeer);
48
+ // use same encoding for comparison
49
+ if (remotePeerId.equals(this.components.getPeerId())) {
50
+ ma = ma.decapsulate(new Multiaddr(`/p2p/${this.components.getPeerId().toString()}`));
51
+ }
52
+ }
53
+ const addrString = ma.toString();
54
+ // do not trigger the change:addresses event if we already know about this address
55
+ if (this.observed.has(addrString)) {
56
+ return;
57
+ }
58
+ this.observed.add(addrString);
59
+ this.dispatchEvent(new CustomEvent('change:addresses'));
60
+ }
61
+ getAddresses() {
62
+ let addrs = this.getAnnounceAddrs().map(ma => ma.toString());
63
+ if (addrs.length === 0) {
64
+ // no configured announce addrs, add configured listen addresses
65
+ addrs = this.components.getTransportManager().getAddrs().map(ma => ma.toString());
66
+ }
67
+ addrs = addrs.concat(this.getObservedAddrs().map(ma => ma.toString()));
68
+ // dedupe multiaddrs
69
+ const addrSet = new Set(addrs);
70
+ // Create advertising list
71
+ return this.announceFilter(Array.from(addrSet)
72
+ .map(str => new Multiaddr(str)))
73
+ .map(ma => {
74
+ if (ma.getPeerId() === this.components.getPeerId().toString()) {
75
+ return ma;
76
+ }
77
+ return ma.encapsulate(`/p2p/${this.components.getPeerId().toString()}`);
78
+ });
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/address-manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AA0BlD,MAAM,oBAAoB,GAAG,CAAC,KAAkB,EAAe,EAAE,CAAC,KAAK,CAAA;AAEvE,MAAM,OAAO,qBAAsB,SAAQ,YAAkC;IAO3E;;;;;OAKG;IACH,YAAa,UAAsB,EAAE,IAAwB;QAC3D,KAAK,EAAE,CAAA;QAEP,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAE3C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,oBAAoB,CAAA;IACnE,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED;;OAEG;IACH,eAAe,CAAE,IAAwB;QACvC,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,SAAS,EAAE,CAAA;QAEjC,0CAA0C;QAC1C,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;YAEjD,mCAAmC;YACnC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE;gBACpD,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;aACrF;SACF;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;QAEhC,kFAAkF;QAClF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACjC,OAAM;SACP;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,YAAY;QACV,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;QAE5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,gEAAgE;YAChE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;SAClF;QAED,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAEtE,oBAAoB;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,0BAA0B;QAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;aAC3C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/B,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC7D,OAAO,EAAE,CAAA;aACV;YAED,OAAO,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;IACN,CAAC;CACF"}
@@ -1,107 +1,46 @@
1
- export = AutoRelay;
2
- /**
3
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
4
- * @typedef {import('../peer-store/types').Address} Address
5
- * @typedef {import('peer-id')} PeerId
6
- */
7
- /**
8
- * @typedef {Object} AutoRelayProperties
9
- * @property {import('../')} libp2p
10
- *
11
- * @typedef {Object} AutoRelayOptions
12
- * @property {number} [maxListeners = 1] - maximum number of relays to listen.
13
- * @property {(error: Error, msg?: string) => {}} [onError]
14
- */
15
- declare class AutoRelay {
16
- /**
17
- * Creates an instance of AutoRelay.
18
- *
19
- * @class
20
- * @param {AutoRelayProperties & AutoRelayOptions} props
21
- */
22
- constructor({ libp2p, maxListeners, onError }: AutoRelayProperties & AutoRelayOptions);
23
- _libp2p: import("../");
24
- _peerId: import("peer-id");
25
- _peerStore: import("../peer-store/types").PeerStore;
26
- _connectionManager: import("../connection-manager");
27
- _transportManager: import("../transport-manager");
28
- _addressSorter: (addresses: import("../peer-store/types").Address[]) => import("../peer-store/types").Address[];
29
- maxListeners: number;
30
- /**
31
- * @type {Set<string>}
32
- */
33
- _listenRelays: Set<string>;
1
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
2
+ import type { AddressSorter, PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store';
3
+ import type { Connection } from '@libp2p/interfaces/connection';
4
+ import type { Components } from '@libp2p/interfaces/components';
5
+ export interface AutoRelayInit {
6
+ addressSorter?: AddressSorter;
7
+ maxListeners?: number;
8
+ onError?: (error: Error, msg?: string) => void;
9
+ }
10
+ export declare class AutoRelay {
11
+ private readonly components;
12
+ private readonly addressSorter;
13
+ private readonly maxListeners;
14
+ private readonly listenRelays;
15
+ private readonly onError;
16
+ constructor(components: Components, init: AutoRelayInit);
34
17
  /**
35
18
  * Check if a peer supports the relay protocol.
36
19
  * If the protocol is not supported, check if it was supported before and remove it as a listen relay.
37
20
  * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if
38
21
  * inside the threshold.
39
- *
40
- * @param {Object} props
41
- * @param {PeerId} props.peerId
42
- * @param {string[]} props.protocols
43
- * @returns {Promise<void>}
44
- */
45
- _onProtocolChange({ peerId, protocols }: {
46
- peerId: PeerId;
47
- protocols: string[];
48
- }): Promise<void>;
49
- /**
50
- * Peer disconnects.
51
- *
52
- * @param {Connection} connection - connection to the peer
53
22
  */
54
- _onPeerDisconnected(connection: Connection): void;
23
+ _onProtocolChange(evt: CustomEvent<PeerProtocolsChangeData>): Promise<void>;
55
24
  /**
56
- * @param {Error} error
57
- * @param {string} [msg]
25
+ * Peer disconnects
58
26
  */
59
- _onError: (error: Error, msg?: string | undefined) => void;
27
+ _onPeerDisconnected(evt: CustomEvent<Connection>): void;
60
28
  /**
61
- * Attempt to listen on the given relay connection.
62
- *
63
- * @private
64
- * @param {Connection} connection - connection to the peer
65
- * @param {string} id - peer identifier string
66
- * @returns {Promise<void>}
29
+ * Attempt to listen on the given relay connection
67
30
  */
68
- private _addListenRelay;
31
+ _addListenRelay(connection: Connection, id: string): Promise<void>;
69
32
  /**
70
- * Remove listen relay.
71
- *
72
- * @private
73
- * @param {string} id - peer identifier string.
33
+ * Remove listen relay
74
34
  */
75
- private _removeListenRelay;
35
+ _removeListenRelay(id: string): Promise<void>;
76
36
  /**
77
37
  * Try to listen on available hop relay connections.
78
38
  * The following order will happen while we do not have enough relays.
79
39
  * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.
80
40
  * 2. Dial and try to listen on the peers we know that support hop but are not connected.
81
41
  * 3. Search the network.
82
- *
83
- * @param {string[]} [peersToIgnore]
84
- */
85
- _listenOnAvailableHopRelays(peersToIgnore?: string[] | undefined): Promise<void>;
86
- /**
87
- * @param {PeerId} peerId
88
42
  */
43
+ _listenOnAvailableHopRelays(peersToIgnore?: string[]): Promise<void>;
89
44
  _tryToListenOnRelay(peerId: PeerId): Promise<void>;
90
45
  }
91
- declare namespace AutoRelay {
92
- export { Connection, Address, PeerId, AutoRelayProperties, AutoRelayOptions };
93
- }
94
- type PeerId = import('peer-id');
95
- type Connection = import("libp2p-interfaces/src/connection/connection");
96
- type AutoRelayProperties = {
97
- libp2p: import('../');
98
- };
99
- type AutoRelayOptions = {
100
- /**
101
- * - maximum number of relays to listen.
102
- */
103
- maxListeners?: number | undefined;
104
- onError?: ((error: Error, msg?: string | undefined) => {}) | undefined;
105
- };
106
- type Address = import('../peer-store/types').Address;
107
46
  //# sourceMappingURL=auto-relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-relay.d.ts","sourceRoot":"","sources":["../../../src/circuit/auto-relay.js"],"names":[],"mappings":";AAsBA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH;IACE;;;;;OAKG;IACH,+CAFW,mBAAmB,GAAG,gBAAgB,EA+BhD;IA5BC,uBAAqB;IACrB,2BAA4B;IAC5B,oDAAkC;IAClC,oDAAkD;IAClD,kDAAgD;IAChD,gHAAiD;IAEjD,qBAAgC;IAEhC;;OAEG;IACH,eAFU,IAAI,MAAM,CAAC,CAES;IAkBhC;;;;;;;;;;OAUG;IACH;QAJyB,MAAM,EAApB,MAAM;QACU,SAAS,EAAzB,MAAM,EAAE;QACN,QAAQ,IAAI,CAAC,CAsCzB;IAED;;;;OAIG;IACH,gCAFW,UAAU,QAcpB;IA5EC;;;OAGG;IACH,kBAHW,KAAK,oCAMf;IAuEH;;;;;;;OAOG;IACH,wBAkCC;IAED;;;;;OAKG;IACH,2BAKC;IAED;;;;;;;;OAQG;IACH,iFA6EC;IAED;;OAEG;IACH,4BAFW,MAAM,iBAShB;CACF;;;;cAlRY,OAAO,SAAS,CAAC;;;YAKhB,OAAO,KAAK,CAAC;;;;;;;uBAIL,KAAK,+BAAmB,EAAE;;eAVnC,OAAO,qBAAqB,EAAE,OAAO"}
1
+ {"version":3,"file":"auto-relay.d.ts","sourceRoot":"","sources":["../../../src/circuit/auto-relay.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAU/D,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEjD,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa;IAkBxD;;;;;OAKG;IACG,iBAAiB,CAAE,GAAG,EAAE,WAAW,CAAC,uBAAuB,CAAC;IAgDlE;;OAEG;IACH,mBAAmB,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAejD;;OAEG;IACG,eAAe,CAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzE;;OAEG;IACG,kBAAkB,CAAE,EAAE,EAAE,MAAM;IAOpC;;;;;;OAMG;IACG,2BAA2B,CAAE,aAAa,GAAE,MAAM,EAAO;IA+EzD,mBAAmB,CAAE,MAAM,EAAE,MAAM;CAS1C"}
@@ -0,0 +1,215 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
3
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
4
+ import { RELAY_CODEC } from './multicodec.js';
5
+ import { canHop } from './circuit/hop.js';
6
+ import { namespaceToCid } from './utils.js';
7
+ import { CIRCUIT_PROTO_CODE, HOP_METADATA_KEY, HOP_METADATA_VALUE, RELAY_RENDEZVOUS_NS } from './constants.js';
8
+ import sort from 'it-sort';
9
+ import all from 'it-all';
10
+ import { pipe } from 'it-pipe';
11
+ import { publicAddressesFirst } from '@libp2p/utils/address-sort';
12
+ const log = logger('libp2p:auto-relay');
13
+ const noop = () => { };
14
+ export class AutoRelay {
15
+ constructor(components, init) {
16
+ this.components = components;
17
+ this.addressSorter = init.addressSorter ?? publicAddressesFirst;
18
+ this.maxListeners = init.maxListeners ?? 1;
19
+ this.listenRelays = new Set();
20
+ this.onError = init.onError ?? noop;
21
+ this._onProtocolChange = this._onProtocolChange.bind(this);
22
+ this._onPeerDisconnected = this._onPeerDisconnected.bind(this);
23
+ this.components.getPeerStore().addEventListener('change:protocols', (evt) => {
24
+ void this._onProtocolChange(evt).catch(err => {
25
+ log.error(err);
26
+ });
27
+ });
28
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onPeerDisconnected);
29
+ }
30
+ /**
31
+ * Check if a peer supports the relay protocol.
32
+ * If the protocol is not supported, check if it was supported before and remove it as a listen relay.
33
+ * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if
34
+ * inside the threshold.
35
+ */
36
+ async _onProtocolChange(evt) {
37
+ const { peerId, protocols } = evt.detail;
38
+ const id = peerId.toString();
39
+ // Check if it has the protocol
40
+ const hasProtocol = protocols.find(protocol => protocol === RELAY_CODEC);
41
+ // If no protocol, check if we were keeping the peer before as a listenRelay
42
+ if (hasProtocol == null) {
43
+ if (this.listenRelays.has(id)) {
44
+ await this._removeListenRelay(id);
45
+ }
46
+ return;
47
+ }
48
+ if (this.listenRelays.has(id)) {
49
+ return;
50
+ }
51
+ // If protocol, check if can hop, store info in the metadataBook and listen on it
52
+ try {
53
+ const connection = this.components.getConnectionManager().getConnection(peerId);
54
+ if (connection == null) {
55
+ return;
56
+ }
57
+ // Do not hop on a relayed connection
58
+ if (connection.remoteAddr.protoCodes().includes(CIRCUIT_PROTO_CODE)) {
59
+ log(`relayed connection to ${id} will not be used to hop on`);
60
+ return;
61
+ }
62
+ const supportsHop = await canHop({ connection });
63
+ if (supportsHop) {
64
+ await this.components.getPeerStore().metadataBook.setValue(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE));
65
+ await this._addListenRelay(connection, id);
66
+ }
67
+ }
68
+ catch (err) {
69
+ this.onError(err);
70
+ }
71
+ }
72
+ /**
73
+ * Peer disconnects
74
+ */
75
+ _onPeerDisconnected(evt) {
76
+ const connection = evt.detail;
77
+ const peerId = connection.remotePeer;
78
+ const id = peerId.toString();
79
+ // Not listening on this relay
80
+ if (!this.listenRelays.has(id)) {
81
+ return;
82
+ }
83
+ this._removeListenRelay(id).catch(err => {
84
+ log.error(err);
85
+ });
86
+ }
87
+ /**
88
+ * Attempt to listen on the given relay connection
89
+ */
90
+ async _addListenRelay(connection, id) {
91
+ try {
92
+ // Check if already listening on enough relays
93
+ if (this.listenRelays.size >= this.maxListeners) {
94
+ return;
95
+ }
96
+ // Get peer known addresses and sort them with public addresses first
97
+ const remoteAddrs = await pipe(await this.components.getPeerStore().addressBook.get(connection.remotePeer), (source) => sort(source, this.addressSorter), async (source) => await all(source));
98
+ // Attempt to listen on relay
99
+ const result = await Promise.all(remoteAddrs.map(async (addr) => {
100
+ try {
101
+ let multiaddr = addr.multiaddr;
102
+ if (multiaddr.getPeerId() == null) {
103
+ multiaddr = multiaddr.encapsulate(`/p2p/${connection.remotePeer.toString()}`);
104
+ }
105
+ multiaddr = multiaddr.encapsulate('/p2p-circuit');
106
+ // Announce multiaddrs will update on listen success by TransportManager event being triggered
107
+ await this.components.getTransportManager().listen([multiaddr]);
108
+ return true;
109
+ }
110
+ catch (err) {
111
+ log.error('error listening on circuit address', err);
112
+ this.onError(err);
113
+ }
114
+ return false;
115
+ }));
116
+ if (result.includes(true)) {
117
+ this.listenRelays.add(id);
118
+ }
119
+ }
120
+ catch (err) {
121
+ this.onError(err);
122
+ this.listenRelays.delete(id);
123
+ }
124
+ }
125
+ /**
126
+ * Remove listen relay
127
+ */
128
+ async _removeListenRelay(id) {
129
+ if (this.listenRelays.delete(id)) {
130
+ // TODO: this should be responsibility of the connMgr
131
+ await this._listenOnAvailableHopRelays([id]);
132
+ }
133
+ }
134
+ /**
135
+ * Try to listen on available hop relay connections.
136
+ * The following order will happen while we do not have enough relays.
137
+ * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.
138
+ * 2. Dial and try to listen on the peers we know that support hop but are not connected.
139
+ * 3. Search the network.
140
+ */
141
+ async _listenOnAvailableHopRelays(peersToIgnore = []) {
142
+ // TODO: The peer redial issue on disconnect should be handled by connection gating
143
+ // Check if already listening on enough relays
144
+ if (this.listenRelays.size >= this.maxListeners) {
145
+ return;
146
+ }
147
+ const knownHopsToDial = [];
148
+ const peers = await this.components.getPeerStore().all();
149
+ // Check if we have known hop peers to use and attempt to listen on the already connected
150
+ for (const { id, metadata } of peers) {
151
+ const idStr = id.toString();
152
+ // Continue to next if listening on this or peer to ignore
153
+ if (this.listenRelays.has(idStr)) {
154
+ continue;
155
+ }
156
+ if (peersToIgnore.includes(idStr)) {
157
+ continue;
158
+ }
159
+ const supportsHop = metadata.get(HOP_METADATA_KEY);
160
+ // Continue to next if it does not support Hop
161
+ if ((supportsHop == null) || uint8ArrayToString(supportsHop) !== HOP_METADATA_VALUE) {
162
+ continue;
163
+ }
164
+ const connection = this.components.getConnectionManager().getConnection(id);
165
+ // If not connected, store for possible later use.
166
+ if (connection == null) {
167
+ knownHopsToDial.push(id);
168
+ continue;
169
+ }
170
+ await this._addListenRelay(connection, idStr);
171
+ // Check if already listening on enough relays
172
+ if (this.listenRelays.size >= this.maxListeners) {
173
+ return;
174
+ }
175
+ }
176
+ // Try to listen on known peers that are not connected
177
+ for (const peerId of knownHopsToDial) {
178
+ await this._tryToListenOnRelay(peerId);
179
+ // Check if already listening on enough relays
180
+ if (this.listenRelays.size >= this.maxListeners) {
181
+ return;
182
+ }
183
+ }
184
+ // Try to find relays to hop on the network
185
+ try {
186
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS);
187
+ for await (const provider of this.components.getContentRouting().findProviders(cid)) {
188
+ if (provider.multiaddrs.length === 0) {
189
+ continue;
190
+ }
191
+ const peerId = provider.id;
192
+ await this.components.getPeerStore().addressBook.add(peerId, provider.multiaddrs);
193
+ await this._tryToListenOnRelay(peerId);
194
+ // Check if already listening on enough relays
195
+ if (this.listenRelays.size >= this.maxListeners) {
196
+ return;
197
+ }
198
+ }
199
+ }
200
+ catch (err) {
201
+ this.onError(err);
202
+ }
203
+ }
204
+ async _tryToListenOnRelay(peerId) {
205
+ try {
206
+ const connection = await this.components.getDialer().dial(peerId);
207
+ await this._addListenRelay(connection, peerId.toString());
208
+ }
209
+ catch (err) {
210
+ log.error('Could not use %p as relay', peerId, err);
211
+ this.onError(err, `could not connect and listen on known hop relay ${peerId.toString()}`);
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=auto-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-relay.js","sourceRoot":"","sources":["../../../src/circuit/auto-relay.ts"],"names":[],"mappings":"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"}