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
@@ -0,0 +1,95 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import { pipe } from 'it-pipe'
3
+ import errCode from 'err-code'
4
+ import { duplexPair } from 'it-pair/duplex'
5
+ import { randomBytes } from '@libp2p/crypto'
6
+ import * as Errors from './errors.js'
7
+ import { codes } from '../errors.js'
8
+ import {
9
+ createBoxStream,
10
+ createUnboxStream,
11
+ decodeV1PSK
12
+ } from './crypto.js'
13
+ import { handshake } from 'it-handshake'
14
+ import { NONCE_LENGTH } from './key-generator.js'
15
+ import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
16
+ import type { ConnectionProtector } from '@libp2p/interfaces/connection'
17
+
18
+ const log = logger('libp2p:pnet')
19
+
20
+ export interface ProtectorInit {
21
+ enabled?: boolean
22
+ psk: Uint8Array
23
+ }
24
+
25
+ export class PreSharedKeyConnectionProtector implements ConnectionProtector {
26
+ public tag: string
27
+ private readonly psk: Uint8Array
28
+ private readonly enabled: boolean
29
+
30
+ /**
31
+ * Takes a Private Shared Key (psk) and provides a `protect` method
32
+ * for wrapping existing connections in a private encryption stream.
33
+ */
34
+ constructor (init: ProtectorInit) {
35
+ this.enabled = init.enabled !== false
36
+
37
+ if (this.enabled) {
38
+ const decodedPSK = decodeV1PSK(init.psk)
39
+ this.psk = decodedPSK.psk
40
+ this.tag = decodedPSK.tag ?? ''
41
+ } else {
42
+ this.psk = new Uint8Array()
43
+ this.tag = ''
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Takes a given Connection and creates a private encryption stream
49
+ * between its two peers from the PSK the Protector instance was
50
+ * created with.
51
+ */
52
+ async protect (connection: MultiaddrConnection): Promise<MultiaddrConnection> {
53
+ if (!this.enabled) {
54
+ return connection
55
+ }
56
+
57
+ if (connection == null) {
58
+ throw errCode(new Error(Errors.NO_HANDSHAKE_CONNECTION), codes.ERR_INVALID_PARAMETERS)
59
+ }
60
+
61
+ // Exchange nonces
62
+ log('protecting the connection')
63
+ const localNonce = randomBytes(NONCE_LENGTH)
64
+
65
+ const shake = handshake(connection)
66
+ shake.write(localNonce)
67
+
68
+ const result = await shake.reader.next(NONCE_LENGTH)
69
+
70
+ if (result.value == null) {
71
+ throw errCode(new Error(Errors.STREAM_ENDED), codes.ERR_INVALID_PARAMETERS)
72
+ }
73
+
74
+ const remoteNonce = result.value.slice()
75
+ shake.rest()
76
+
77
+ // Create the boxing/unboxing pipe
78
+ log('exchanged nonces')
79
+ const [internal, external] = duplexPair<Uint8Array>()
80
+ pipe(
81
+ external,
82
+ // Encrypt all outbound traffic
83
+ createBoxStream(localNonce, this.psk),
84
+ shake.stream,
85
+ // Decrypt all inbound traffic
86
+ createUnboxStream(remoteNonce, this.psk),
87
+ external
88
+ ).catch(log.error)
89
+
90
+ return {
91
+ ...connection,
92
+ ...internal
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,28 @@
1
+ import { randomBytes } from '@libp2p/crypto'
2
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
4
+
5
+ /**
6
+ * Generates a PSK that can be used in a libp2p-pnet private network
7
+ *
8
+ * @param {Uint8Array} bytes - An object to write the psk into
9
+ * @returns {void}
10
+ */
11
+ export function generate (bytes: Uint8Array) {
12
+ const psk = uint8ArrayToString(randomBytes(KEY_LENGTH), 'base16')
13
+ const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk)
14
+
15
+ bytes.set(key)
16
+ }
17
+
18
+ export const NONCE_LENGTH = 24
19
+ export const KEY_LENGTH = 32
20
+
21
+ try {
22
+ if (require.main === module) {
23
+ // @ts-expect-error
24
+ generate(process.stdout)
25
+ }
26
+ } catch (error: any) {
27
+
28
+ }
@@ -0,0 +1,205 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { codes } from './errors.js'
4
+ import { isTopology, Topology } from '@libp2p/interfaces/topology'
5
+ import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
6
+ import type { PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store'
7
+ import type { Connection } from '@libp2p/interfaces/connection'
8
+ import type { Components } from '@libp2p/interfaces/components'
9
+
10
+ const log = logger('libp2p:registrar')
11
+
12
+ function supportsProtocol (peerProtocols: string[], topologyProtocols: string[]) {
13
+ for (const peerProtocol of peerProtocols) {
14
+ if (topologyProtocols.includes(peerProtocol)) {
15
+ return true
16
+ }
17
+ }
18
+
19
+ return false
20
+ }
21
+
22
+ /**
23
+ * Responsible for notifying registered protocols of events in the network.
24
+ */
25
+ export class DefaultRegistrar implements Registrar {
26
+ private readonly topologies: Map<string, { topology: Topology, protocols: string[] }>
27
+ private readonly handlers: Map<string, StreamHandler>
28
+ private readonly components: Components
29
+
30
+ constructor (components: Components) {
31
+ this.topologies = new Map()
32
+ this.handlers = new Map()
33
+ this.components = components
34
+
35
+ this._onDisconnect = this._onDisconnect.bind(this)
36
+ this._onConnect = this._onConnect.bind(this)
37
+ this._onProtocolChange = this._onProtocolChange.bind(this)
38
+
39
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onDisconnect)
40
+ this.components.getConnectionManager().addEventListener('peer:connect', this._onConnect)
41
+ this.components.getPeerStore().addEventListener('change:protocols', this._onProtocolChange)
42
+ }
43
+
44
+ getProtocols () {
45
+ const protocols = new Set<string>()
46
+
47
+ for (const topology of this.topologies.values()) {
48
+ topology.protocols.forEach(protocol => protocols.add(protocol))
49
+ }
50
+
51
+ for (const protocol of this.handlers.keys()) {
52
+ protocols.add(protocol)
53
+ }
54
+
55
+ return Array.from(protocols).sort()
56
+ }
57
+
58
+ getHandler (protocol: string) {
59
+ const handler = this.handlers.get(protocol)
60
+
61
+ if (handler == null) {
62
+ throw new Error(`No handler registered for protocol ${protocol}`)
63
+ }
64
+
65
+ return handler
66
+ }
67
+
68
+ getTopologies (protocol: string) {
69
+ const output: Topology[] = []
70
+
71
+ for (const { topology, protocols } of this.topologies.values()) {
72
+ if (protocols.includes(protocol)) {
73
+ output.push(topology)
74
+ }
75
+ }
76
+
77
+ return output
78
+ }
79
+
80
+ /**
81
+ * Registers the `handler` for each protocol
82
+ */
83
+ async handle (protocols: string | string[], handler: StreamHandler): Promise<void> {
84
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols]
85
+
86
+ for (const protocol of protocolList) {
87
+ if (this.handlers.has(protocol)) {
88
+ throw errCode(new Error(`Handler already registered for protocol ${protocol}`), codes.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED)
89
+ }
90
+
91
+ this.handlers.set(protocol, handler)
92
+ }
93
+
94
+ // Add new protocols to self protocols in the Protobook
95
+ await this.components.getPeerStore().protoBook.add(this.components.getPeerId(), protocolList)
96
+ }
97
+
98
+ /**
99
+ * Removes the handler for each protocol. The protocol
100
+ * will no longer be supported on streams.
101
+ */
102
+ async unhandle (protocols: string | string[]) {
103
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols]
104
+
105
+ protocolList.forEach(protocol => {
106
+ this.handlers.delete(protocol)
107
+ })
108
+
109
+ // Remove protocols from self protocols in the Protobook
110
+ await this.components.getPeerStore().protoBook.remove(this.components.getPeerId(), protocolList)
111
+ }
112
+
113
+ /**
114
+ * Register handlers for a set of multicodecs given
115
+ */
116
+ async register (protocols: string | string[], topology: Topology): Promise<string> {
117
+ if (!isTopology(topology)) {
118
+ log.error('topology must be an instance of interfaces/topology')
119
+ throw errCode(new Error('topology must be an instance of interfaces/topology'), codes.ERR_INVALID_PARAMETERS)
120
+ }
121
+
122
+ // Create topology
123
+ const id = `${(Math.random() * 1e9).toString(36)}${Date.now()}`
124
+
125
+ this.topologies.set(id, {
126
+ topology,
127
+ protocols: Array.isArray(protocols) ? protocols : [protocols]
128
+ })
129
+
130
+ // Set registrar
131
+ await topology.setRegistrar(this)
132
+
133
+ return id
134
+ }
135
+
136
+ /**
137
+ * Unregister topology
138
+ */
139
+ unregister (id: string) {
140
+ this.topologies.delete(id)
141
+ }
142
+
143
+ /**
144
+ * Remove a disconnected peer from the record
145
+ */
146
+ _onDisconnect (evt: CustomEvent<Connection>) {
147
+ const connection = evt.detail
148
+
149
+ void this.components.getPeerStore().protoBook.get(connection.remotePeer)
150
+ .then(peerProtocols => {
151
+ for (const { topology, protocols } of this.topologies.values()) {
152
+ if (supportsProtocol(peerProtocols, protocols)) {
153
+ topology.onDisconnect(connection.remotePeer)
154
+ }
155
+ }
156
+ })
157
+ .catch(err => {
158
+ log.error(err)
159
+ })
160
+ }
161
+
162
+ _onConnect (evt: CustomEvent<Connection>) {
163
+ const connection = evt.detail
164
+
165
+ void this.components.getPeerStore().protoBook.get(connection.remotePeer)
166
+ .then(peerProtocols => {
167
+ for (const { topology, protocols } of this.topologies.values()) {
168
+ if (supportsProtocol(peerProtocols, protocols)) {
169
+ topology.onConnect(connection.remotePeer, connection)
170
+ }
171
+ }
172
+ })
173
+ .catch(err => {
174
+ log.error(err)
175
+ })
176
+ }
177
+
178
+ /**
179
+ * Check if a new peer support the multicodecs for this topology
180
+ */
181
+ _onProtocolChange (evt: CustomEvent<PeerProtocolsChangeData>) {
182
+ const { peerId, protocols, oldProtocols } = evt.detail
183
+
184
+ const removed = oldProtocols.filter(protocol => !protocols.includes(protocol))
185
+ const added = protocols.filter(protocol => !oldProtocols.includes(protocol))
186
+
187
+ for (const { topology, protocols } of this.topologies.values()) {
188
+ if (supportsProtocol(removed, protocols)) {
189
+ topology.onDisconnect(peerId)
190
+ }
191
+ }
192
+
193
+ for (const { topology, protocols } of this.topologies.values()) {
194
+ if (supportsProtocol(added, protocols)) {
195
+ const connection = this.components.getConnectionManager().getConnection(peerId)
196
+
197
+ if (connection == null) {
198
+ continue
199
+ }
200
+
201
+ topology.onConnect(peerId, connection)
202
+ }
203
+ }
204
+ }
205
+ }
@@ -0,0 +1,279 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import pSettle from 'p-settle'
3
+ import { codes } from './errors.js'
4
+ import errCode from 'err-code'
5
+ import type { Listener, Transport, TransportManager, TransportManagerEvents } from '@libp2p/interfaces/transport'
6
+ import type { Multiaddr } from '@multiformats/multiaddr'
7
+ import type { Connection } from '@libp2p/interfaces/connection'
8
+ import { AbortOptions, CustomEvent, EventEmitter, Startable } from '@libp2p/interfaces'
9
+ import type { Components } from '@libp2p/interfaces/components'
10
+ import { trackedMap } from '@libp2p/tracked-map'
11
+
12
+ const log = logger('libp2p:transports')
13
+
14
+ export interface TransportManagerInit {
15
+ faultTolerance?: FaultTolerance
16
+ }
17
+
18
+ export class DefaultTransportManager extends EventEmitter<TransportManagerEvents> implements TransportManager, Startable {
19
+ private readonly components: Components
20
+ private readonly transports: Map<string, Transport>
21
+ private readonly listeners: Map<string, Listener[]>
22
+ private readonly faultTolerance: FaultTolerance
23
+ private started: boolean
24
+
25
+ constructor (components: Components, init: TransportManagerInit = {}) {
26
+ super()
27
+
28
+ this.components = components
29
+ this.started = false
30
+ this.transports = new Map<string, Transport>()
31
+ this.listeners = trackedMap({
32
+ component: 'transport-manager',
33
+ metric: 'listeners',
34
+ metrics: this.components.getMetrics()
35
+ })
36
+ this.faultTolerance = init.faultTolerance ?? FaultTolerance.FATAL_ALL
37
+ }
38
+
39
+ /**
40
+ * Adds a `Transport` to the manager
41
+ */
42
+ add (transport: Transport) {
43
+ const tag = transport[Symbol.toStringTag]
44
+
45
+ if (tag == null) {
46
+ throw errCode(new Error('Transport must have a valid tag'), codes.ERR_INVALID_KEY)
47
+ }
48
+
49
+ if (this.transports.has(tag)) {
50
+ throw errCode(new Error('There is already a transport with this tag'), codes.ERR_DUPLICATE_TRANSPORT)
51
+ }
52
+
53
+ log('adding transport %s', tag)
54
+
55
+ this.transports.set(tag, transport)
56
+
57
+ if (!this.listeners.has(tag)) {
58
+ this.listeners.set(tag, [])
59
+ }
60
+ }
61
+
62
+ isStarted () {
63
+ return this.started
64
+ }
65
+
66
+ async start () {
67
+ // Listen on the provided transports for the provided addresses
68
+ const addrs = this.components.getAddressManager().getListenAddrs()
69
+
70
+ await this.listen(addrs)
71
+
72
+ this.started = true
73
+ }
74
+
75
+ /**
76
+ * Stops all listeners
77
+ */
78
+ async stop () {
79
+ const tasks = []
80
+ for (const [key, listeners] of this.listeners) {
81
+ log('closing listeners for %s', key)
82
+ while (listeners.length > 0) {
83
+ const listener = listeners.pop()
84
+
85
+ if (listener == null) {
86
+ continue
87
+ }
88
+
89
+ tasks.push(listener.close())
90
+ }
91
+ }
92
+
93
+ await Promise.all(tasks)
94
+ log('all listeners closed')
95
+ for (const key of this.listeners.keys()) {
96
+ this.listeners.set(key, [])
97
+ }
98
+
99
+ this.started = false
100
+ }
101
+
102
+ /**
103
+ * Dials the given Multiaddr over it's supported transport
104
+ */
105
+ async dial (ma: Multiaddr, options?: AbortOptions): Promise<Connection> {
106
+ const transport = this.transportForMultiaddr(ma)
107
+
108
+ if (transport == null) {
109
+ throw errCode(new Error(`No transport available for address ${String(ma)}`), codes.ERR_TRANSPORT_UNAVAILABLE)
110
+ }
111
+
112
+ try {
113
+ return await transport.dial(ma, {
114
+ ...options,
115
+ upgrader: this.components.getUpgrader()
116
+ })
117
+ } catch (err: any) {
118
+ if (err.code == null) {
119
+ err.code = codes.ERR_TRANSPORT_DIAL_FAILED
120
+ }
121
+
122
+ throw err
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Returns all Multiaddr's the listeners are using
128
+ */
129
+ getAddrs (): Multiaddr[] {
130
+ let addrs: Multiaddr[] = []
131
+ for (const listeners of this.listeners.values()) {
132
+ for (const listener of listeners) {
133
+ addrs = [...addrs, ...listener.getAddrs()]
134
+ }
135
+ }
136
+ return addrs
137
+ }
138
+
139
+ /**
140
+ * Returns all the transports instances
141
+ */
142
+ getTransports () {
143
+ return Array.of(...this.transports.values())
144
+ }
145
+
146
+ /**
147
+ * Finds a transport that matches the given Multiaddr
148
+ */
149
+ transportForMultiaddr (ma: Multiaddr) {
150
+ for (const transport of this.transports.values()) {
151
+ const addrs = transport.filter([ma])
152
+
153
+ if (addrs.length > 0) {
154
+ return transport
155
+ }
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Starts listeners for each listen Multiaddr
161
+ */
162
+ async listen (addrs: Multiaddr[]) {
163
+ if (addrs == null || addrs.length === 0) {
164
+ log('no addresses were provided for listening, this node is dial only')
165
+ return
166
+ }
167
+
168
+ const couldNotListen = []
169
+
170
+ for (const [key, transport] of this.transports.entries()) {
171
+ const supportedAddrs = transport.filter(addrs)
172
+ const tasks = []
173
+
174
+ // For each supported multiaddr, create a listener
175
+ for (const addr of supportedAddrs) {
176
+ log('creating listener for %s on %s', key, addr)
177
+ const listener = transport.createListener({
178
+ upgrader: this.components.getUpgrader()
179
+ })
180
+
181
+ let listeners = this.listeners.get(key)
182
+
183
+ if (listeners == null) {
184
+ listeners = []
185
+ this.listeners.set(key, listeners)
186
+ }
187
+
188
+ listeners.push(listener)
189
+
190
+ // Track listen/close events
191
+ listener.addEventListener('listening', () => {
192
+ this.dispatchEvent(new CustomEvent<Listener>('listener:listening', {
193
+ detail: listener
194
+ }))
195
+ })
196
+ listener.addEventListener('close', () => {
197
+ this.dispatchEvent(new CustomEvent<Listener>('listener:close', {
198
+ detail: listener
199
+ }))
200
+ })
201
+
202
+ // We need to attempt to listen on everything
203
+ tasks.push(listener.listen(addr))
204
+ }
205
+
206
+ // Keep track of transports we had no addresses for
207
+ if (tasks.length === 0) {
208
+ couldNotListen.push(key)
209
+ continue
210
+ }
211
+
212
+ const results = await pSettle(tasks)
213
+ // If we are listening on at least 1 address, succeed.
214
+ // TODO: we should look at adding a retry (`p-retry`) here to better support
215
+ // listening on remote addresses as they may be offline. We could then potentially
216
+ // just wait for any (`p-any`) listener to succeed on each transport before returning
217
+ const isListening = results.find(r => r.isFulfilled)
218
+ if ((isListening == null) && this.faultTolerance !== FaultTolerance.NO_FATAL) {
219
+ throw errCode(new Error(`Transport (${key}) could not listen on any available address`), codes.ERR_NO_VALID_ADDRESSES)
220
+ }
221
+ }
222
+
223
+ // If no transports were able to listen, throw an error. This likely
224
+ // means we were given addresses we do not have transports for
225
+ if (couldNotListen.length === this.transports.size) {
226
+ const message = `no valid addresses were provided for transports [${couldNotListen.join(', ')}]`
227
+ if (this.faultTolerance === FaultTolerance.FATAL_ALL) {
228
+ throw errCode(new Error(message), codes.ERR_NO_VALID_ADDRESSES)
229
+ }
230
+ log(`libp2p in dial mode only: ${message}`)
231
+ }
232
+ }
233
+
234
+ /**
235
+ * Removes the given transport from the manager.
236
+ * If a transport has any running listeners, they will be closed.
237
+ */
238
+ async remove (key: string) {
239
+ log('removing %s', key)
240
+
241
+ // Close any running listeners
242
+ for (const listener of this.listeners.get(key) ?? []) {
243
+ await listener.close()
244
+ }
245
+
246
+ this.transports.delete(key)
247
+ this.listeners.delete(key)
248
+ }
249
+
250
+ /**
251
+ * Removes all transports from the manager.
252
+ * If any listeners are running, they will be closed.
253
+ *
254
+ * @async
255
+ */
256
+ async removeAll () {
257
+ const tasks = []
258
+ for (const key of this.transports.keys()) {
259
+ tasks.push(this.remove(key))
260
+ }
261
+
262
+ await Promise.all(tasks)
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Enum Transport Manager Fault Tolerance values
268
+ */
269
+ export enum FaultTolerance {
270
+ /**
271
+ * should be used for failing in any listen circumstance
272
+ */
273
+ FATAL_ALL = 0,
274
+
275
+ /**
276
+ * should be used for not failing when not listening
277
+ */
278
+ NO_FATAL
279
+ }