libp2p 0.36.2 → 0.37.0-b09eb8f

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 (431) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +34 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +216 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +62 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +52 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +98 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +192 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +91 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
  64. package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
  65. package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
  66. package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
  67. package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
  68. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
  69. package/dist/src/connection-manager/dialer/dial-request.js +107 -0
  70. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
  71. package/dist/src/connection-manager/dialer/index.d.ts +104 -0
  72. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
  73. package/dist/src/connection-manager/dialer/index.js +266 -0
  74. package/dist/src/connection-manager/dialer/index.js.map +1 -0
  75. package/dist/src/connection-manager/index.d.ts +102 -136
  76. package/dist/src/connection-manager/index.d.ts.map +1 -1
  77. package/dist/src/connection-manager/index.js +339 -0
  78. package/dist/src/connection-manager/index.js.map +1 -0
  79. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  80. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  81. package/dist/src/connection-manager/latency-monitor.js +220 -0
  82. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  83. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  84. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  85. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  86. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  87. package/dist/src/constants.d.ts +22 -10
  88. package/dist/src/constants.d.ts.map +1 -1
  89. package/dist/src/constants.js +27 -0
  90. package/dist/src/constants.js.map +1 -0
  91. package/dist/src/content-routing/index.d.ts +27 -81
  92. package/dist/src/content-routing/index.d.ts.map +1 -1
  93. package/dist/src/content-routing/index.js +99 -0
  94. package/dist/src/content-routing/index.js.map +1 -0
  95. package/dist/src/content-routing/utils.d.ts +6 -49
  96. package/dist/src/content-routing/utils.d.ts.map +1 -1
  97. package/dist/src/content-routing/utils.js +42 -0
  98. package/dist/src/content-routing/utils.js.map +1 -0
  99. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  100. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  101. package/dist/src/dht/dht-content-routing.js +32 -0
  102. package/dist/src/dht/dht-content-routing.js.map +1 -0
  103. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  104. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  105. package/dist/src/dht/dht-peer-routing.js +26 -0
  106. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  107. package/dist/src/dht/dummy-dht.d.ts +20 -0
  108. package/dist/src/dht/dummy-dht.d.ts.map +1 -0
  109. package/dist/src/dht/dummy-dht.js +46 -0
  110. package/dist/src/dht/dummy-dht.js.map +1 -0
  111. package/dist/src/errors.d.ts +71 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +76 -0
  114. package/dist/src/errors.js.map +1 -0
  115. package/dist/src/fetch/constants.d.ts +1 -1
  116. package/dist/src/fetch/constants.d.ts.map +1 -1
  117. package/dist/src/fetch/constants.js +3 -0
  118. package/dist/src/fetch/constants.js.map +1 -0
  119. package/dist/src/fetch/index.d.ts +30 -49
  120. package/dist/src/fetch/index.d.ts.map +1 -1
  121. package/dist/src/fetch/index.js +129 -0
  122. package/dist/src/fetch/index.js.map +1 -0
  123. package/dist/src/fetch/pb/proto.d.ts +27 -0
  124. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  125. package/dist/src/fetch/pb/proto.js +50 -0
  126. package/dist/src/fetch/pb/proto.js.map +1 -0
  127. package/dist/src/get-peer.d.ts +4 -11
  128. package/dist/src/get-peer.d.ts.map +1 -1
  129. package/dist/src/get-peer.js +43 -0
  130. package/dist/src/get-peer.js.map +1 -0
  131. package/dist/src/identify/consts.d.ts +9 -9
  132. package/dist/src/identify/consts.d.ts.map +1 -1
  133. package/dist/src/identify/consts.js +11 -0
  134. package/dist/src/identify/consts.js.map +1 -0
  135. package/dist/src/identify/index.d.ts +42 -96
  136. package/dist/src/identify/index.d.ts.map +1 -1
  137. package/dist/src/identify/index.js +322 -0
  138. package/dist/src/identify/index.js.map +1 -0
  139. package/dist/src/identify/pb/message.d.ts +16 -0
  140. package/dist/src/identify/pb/message.d.ts.map +1 -0
  141. package/dist/src/identify/pb/message.js +24 -0
  142. package/dist/src/identify/pb/message.js.map +1 -0
  143. package/dist/src/index.d.ts +150 -496
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +9 -0
  146. package/dist/src/index.js.map +1 -0
  147. package/dist/src/insecure/index.d.ts +9 -0
  148. package/dist/src/insecure/index.d.ts.map +1 -0
  149. package/dist/src/insecure/index.js +81 -0
  150. package/dist/src/insecure/index.js.map +1 -0
  151. package/dist/src/insecure/pb/proto.d.ts +29 -0
  152. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  153. package/dist/src/insecure/pb/proto.js +53 -0
  154. package/dist/src/insecure/pb/proto.js.map +1 -0
  155. package/dist/src/keychain/cms.d.ts +6 -14
  156. package/dist/src/keychain/cms.d.ts.map +1 -1
  157. package/dist/src/keychain/cms.js +129 -0
  158. package/dist/src/keychain/cms.js.map +1 -0
  159. package/dist/src/keychain/index.d.ts +60 -81
  160. package/dist/src/keychain/index.d.ts.map +1 -1
  161. package/dist/src/keychain/index.js +492 -0
  162. package/dist/src/keychain/index.js.map +1 -0
  163. package/dist/src/keychain/util.d.ts +3 -6
  164. package/dist/src/keychain/util.d.ts.map +1 -1
  165. package/dist/src/keychain/util.js +79 -0
  166. package/dist/src/keychain/util.js.map +1 -0
  167. package/dist/src/libp2p.d.ts +80 -0
  168. package/dist/src/libp2p.d.ts.map +1 -0
  169. package/dist/src/libp2p.js +397 -0
  170. package/dist/src/libp2p.js.map +1 -0
  171. package/dist/src/metrics/index.d.ts +47 -104
  172. package/dist/src/metrics/index.d.ts.map +1 -1
  173. package/dist/src/metrics/index.js +231 -0
  174. package/dist/src/metrics/index.js.map +1 -0
  175. package/dist/src/metrics/moving-average.d.ts +14 -0
  176. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  177. package/dist/src/metrics/moving-average.js +40 -0
  178. package/dist/src/metrics/moving-average.js.map +1 -0
  179. package/dist/src/metrics/stats.d.ts +41 -93
  180. package/dist/src/metrics/stats.d.ts.map +1 -1
  181. package/dist/src/metrics/stats.js +183 -0
  182. package/dist/src/metrics/stats.js.map +1 -0
  183. package/dist/src/nat-manager.d.ts +45 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +117 -0
  186. package/dist/src/nat-manager.js.map +1 -0
  187. package/dist/src/peer-record-updater.d.ts +15 -0
  188. package/dist/src/peer-record-updater.d.ts.map +1 -0
  189. package/dist/src/peer-record-updater.js +44 -0
  190. package/dist/src/peer-record-updater.js.map +1 -0
  191. package/dist/src/peer-routing.d.ts +40 -84
  192. package/dist/src/peer-routing.d.ts.map +1 -1
  193. package/dist/src/peer-routing.js +107 -0
  194. package/dist/src/peer-routing.js.map +1 -0
  195. package/dist/src/ping/constants.d.ts +4 -4
  196. package/dist/src/ping/constants.d.ts.map +1 -1
  197. package/dist/src/ping/constants.js +5 -0
  198. package/dist/src/ping/constants.js.map +1 -0
  199. package/dist/src/ping/index.d.ts +17 -31
  200. package/dist/src/ping/index.d.ts.map +1 -1
  201. package/dist/src/ping/index.js +57 -0
  202. package/dist/src/ping/index.js.map +1 -0
  203. package/dist/src/pnet/crypto.d.ts +15 -5
  204. package/dist/src/pnet/crypto.d.ts.map +1 -1
  205. package/dist/src/pnet/crypto.js +60 -0
  206. package/dist/src/pnet/crypto.js.map +1 -0
  207. package/dist/src/pnet/errors.d.ts +5 -5
  208. package/dist/src/pnet/errors.d.ts.map +1 -1
  209. package/dist/src/pnet/errors.js +6 -0
  210. package/dist/src/pnet/errors.js.map +1 -0
  211. package/dist/src/pnet/index.d.ts +12 -20
  212. package/dist/src/pnet/index.d.ts.map +1 -1
  213. package/dist/src/pnet/index.js +67 -0
  214. package/dist/src/pnet/index.js.map +1 -0
  215. package/dist/src/pnet/key-generator.d.ts +3 -7
  216. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  217. package/dist/src/pnet/key-generator.js +25 -0
  218. package/dist/src/pnet/key-generator.js.map +1 -0
  219. package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
  220. package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
  221. package/dist/src/pubsub/dummy-pubsub.js +37 -0
  222. package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
  223. package/dist/src/registrar.d.ts +26 -65
  224. package/dist/src/registrar.d.ts.map +1 -1
  225. package/dist/src/registrar.js +144 -0
  226. package/dist/src/registrar.js.map +1 -0
  227. package/dist/src/transport-manager.d.ts +36 -82
  228. package/dist/src/transport-manager.d.ts.map +1 -1
  229. package/dist/src/transport-manager.js +223 -0
  230. package/dist/src/transport-manager.js.map +1 -0
  231. package/dist/src/upgrader.d.ts +49 -129
  232. package/dist/src/upgrader.d.ts.map +1 -1
  233. package/dist/src/upgrader.js +404 -0
  234. package/dist/src/upgrader.js.map +1 -0
  235. package/dist/src/version.d.ts +3 -0
  236. package/dist/src/version.d.ts.map +1 -0
  237. package/dist/src/version.js +3 -0
  238. package/dist/src/version.js.map +1 -0
  239. package/package.json +143 -203
  240. package/src/address-manager/index.ts +130 -0
  241. package/src/circuit/README.md +16 -11
  242. package/src/circuit/auto-relay.ts +286 -0
  243. package/src/circuit/circuit/hop.ts +211 -0
  244. package/src/circuit/circuit/stop.ts +78 -0
  245. package/src/circuit/circuit/stream-handler.ts +86 -0
  246. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  247. package/src/circuit/constants.ts +31 -0
  248. package/src/circuit/index.ts +120 -0
  249. package/src/circuit/listener.ts +82 -0
  250. package/src/circuit/multicodec.ts +2 -0
  251. package/src/circuit/{protocol → pb}/index.proto +1 -1
  252. package/src/circuit/pb/index.ts +117 -0
  253. package/src/circuit/transport.ts +219 -0
  254. package/src/circuit/utils.ts +12 -0
  255. package/src/config.ts +99 -0
  256. package/src/connection-manager/auto-dialler.ts +154 -0
  257. package/src/connection-manager/dialer/auto-dialer.ts +59 -0
  258. package/src/connection-manager/dialer/dial-request.ts +137 -0
  259. package/src/connection-manager/dialer/index.ts +381 -0
  260. package/src/connection-manager/index.ts +513 -0
  261. package/src/connection-manager/latency-monitor.ts +319 -0
  262. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  263. package/src/constants.ts +31 -0
  264. package/src/content-routing/index.ts +144 -0
  265. package/src/content-routing/utils.ts +54 -0
  266. package/src/dht/dht-content-routing.ts +43 -0
  267. package/src/dht/dht-peer-routing.ts +35 -0
  268. package/src/dht/dummy-dht.ts +60 -0
  269. package/src/errors.ts +74 -0
  270. package/src/fetch/README.md +1 -1
  271. package/src/fetch/constants.ts +3 -0
  272. package/src/fetch/index.ts +167 -0
  273. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/fetch/pb/proto.ts +65 -0
  275. package/src/get-peer.ts +57 -0
  276. package/src/identify/consts.ts +13 -0
  277. package/src/identify/index.ts +445 -0
  278. package/src/identify/{message.proto → pb/message.proto} +0 -0
  279. package/src/identify/pb/message.ts +37 -0
  280. package/src/index.ts +220 -0
  281. package/src/insecure/index.ts +101 -0
  282. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  283. package/src/insecure/pb/proto.ts +68 -0
  284. package/src/keychain/{cms.js → cms.ts} +62 -58
  285. package/src/keychain/index.ts +587 -0
  286. package/src/keychain/{util.js → util.ts} +7 -17
  287. package/src/libp2p.ts +538 -0
  288. package/src/metrics/index.ts +310 -0
  289. package/src/metrics/moving-average.ts +53 -0
  290. package/src/metrics/stats.ts +238 -0
  291. package/src/nat-manager.ts +198 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +185 -0
  294. package/src/ping/README.md +1 -1
  295. package/src/ping/constants.ts +5 -0
  296. package/src/ping/index.ts +84 -0
  297. package/src/pnet/README.md +2 -2
  298. package/src/pnet/crypto.ts +67 -0
  299. package/src/pnet/errors.ts +5 -0
  300. package/src/pnet/index.ts +97 -0
  301. package/src/pnet/key-generator.ts +28 -0
  302. package/src/pubsub/dummy-pubsub.ts +51 -0
  303. package/src/registrar.ts +189 -0
  304. package/src/transport-manager.ts +281 -0
  305. package/src/upgrader.ts +501 -0
  306. package/src/version.ts +3 -0
  307. package/dist/index.min.js +0 -55
  308. package/dist/src/circuit/protocol/index.d.ts +0 -173
  309. package/dist/src/dialer/dial-request.d.ts +0 -55
  310. package/dist/src/dialer/dial-request.d.ts.map +0 -1
  311. package/dist/src/dialer/index.d.ts +0 -182
  312. package/dist/src/dialer/index.d.ts.map +0 -1
  313. package/dist/src/fetch/proto.d.ts +0 -134
  314. package/dist/src/identify/message.d.ts +0 -95
  315. package/dist/src/insecure/plaintext.d.ts +0 -12
  316. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  317. package/dist/src/insecure/proto.d.ts +0 -128
  318. package/dist/src/metrics/old-peers.d.ts +0 -3
  319. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  320. package/dist/src/metrics/tracked-map.d.ts +0 -8
  321. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  322. package/dist/src/peer-store/address-book.d.ts +0 -67
  323. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  324. package/dist/src/peer-store/index.d.ts +0 -58
  325. package/dist/src/peer-store/index.d.ts.map +0 -1
  326. package/dist/src/peer-store/key-book.d.ts +0 -40
  327. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  328. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  329. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  330. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  331. package/dist/src/peer-store/proto-book.d.ts +0 -43
  332. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  333. package/dist/src/peer-store/store.d.ts +0 -73
  334. package/dist/src/peer-store/store.d.ts.map +0 -1
  335. package/dist/src/peer-store/types.d.ts +0 -202
  336. package/dist/src/peer-store/types.d.ts.map +0 -1
  337. package/dist/src/ping/util.d.ts +0 -5
  338. package/dist/src/ping/util.d.ts.map +0 -1
  339. package/dist/src/pubsub-adapter.d.ts +0 -22
  340. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  341. package/dist/src/record/envelope/envelope.d.ts +0 -77
  342. package/dist/src/record/envelope/index.d.ts +0 -80
  343. package/dist/src/record/envelope/index.d.ts.map +0 -1
  344. package/dist/src/record/peer-record/consts.d.ts +0 -4
  345. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  346. package/dist/src/record/peer-record/index.d.ts +0 -60
  347. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  348. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  349. package/dist/src/record/utils.d.ts +0 -12
  350. package/dist/src/record/utils.d.ts.map +0 -1
  351. package/dist/src/types.d.ts +0 -90
  352. package/dist/src/types.d.ts.map +0 -1
  353. package/src/address-manager/index.js +0 -96
  354. package/src/circuit/auto-relay.js +0 -302
  355. package/src/circuit/circuit/hop.js +0 -205
  356. package/src/circuit/circuit/stop.js +0 -81
  357. package/src/circuit/circuit/stream-handler.js +0 -94
  358. package/src/circuit/constants.js +0 -12
  359. package/src/circuit/index.js +0 -102
  360. package/src/circuit/listener.js +0 -75
  361. package/src/circuit/multicodec.js +0 -5
  362. package/src/circuit/protocol/index.d.ts +0 -173
  363. package/src/circuit/protocol/index.js +0 -530
  364. package/src/circuit/transport.js +0 -229
  365. package/src/circuit/utils.js +0 -17
  366. package/src/config.js +0 -114
  367. package/src/connection-manager/auto-dialler.js +0 -132
  368. package/src/connection-manager/index.js +0 -374
  369. package/src/connection-manager/latency-monitor.js +0 -264
  370. package/src/constants.js +0 -18
  371. package/src/content-routing/index.js +0 -163
  372. package/src/content-routing/utils.js +0 -89
  373. package/src/dht/dht-content-routing.js +0 -44
  374. package/src/dht/dht-peer-routing.js +0 -51
  375. package/src/dialer/dial-request.js +0 -103
  376. package/src/dialer/index.js +0 -376
  377. package/src/errors.js +0 -66
  378. package/src/fetch/constants.js +0 -6
  379. package/src/fetch/index.js +0 -159
  380. package/src/fetch/proto.d.ts +0 -134
  381. package/src/fetch/proto.js +0 -333
  382. package/src/get-peer.js +0 -49
  383. package/src/identify/consts.js +0 -15
  384. package/src/identify/index.js +0 -384
  385. package/src/identify/message.d.ts +0 -95
  386. package/src/identify/message.js +0 -328
  387. package/src/index.js +0 -813
  388. package/src/insecure/plaintext.js +0 -95
  389. package/src/insecure/proto.d.ts +0 -128
  390. package/src/insecure/proto.js +0 -371
  391. package/src/keychain/index.js +0 -561
  392. package/src/metrics/index.js +0 -290
  393. package/src/metrics/old-peers.js +0 -16
  394. package/src/metrics/stats.js +0 -270
  395. package/src/metrics/tracked-map.js +0 -94
  396. package/src/nat-manager.js +0 -197
  397. package/src/peer-routing.js +0 -176
  398. package/src/peer-store/README.md +0 -145
  399. package/src/peer-store/address-book.js +0 -382
  400. package/src/peer-store/index.js +0 -121
  401. package/src/peer-store/key-book.js +0 -141
  402. package/src/peer-store/metadata-book.js +0 -250
  403. package/src/peer-store/pb/peer.d.ts +0 -222
  404. package/src/peer-store/pb/peer.js +0 -643
  405. package/src/peer-store/pb/peer.proto +0 -31
  406. package/src/peer-store/proto-book.js +0 -237
  407. package/src/peer-store/store.js +0 -263
  408. package/src/peer-store/types.ts +0 -245
  409. package/src/ping/constants.js +0 -8
  410. package/src/ping/index.js +0 -84
  411. package/src/ping/util.js +0 -18
  412. package/src/pnet/crypto.js +0 -84
  413. package/src/pnet/errors.js +0 -7
  414. package/src/pnet/index.js +0 -86
  415. package/src/pnet/key-generator.js +0 -33
  416. package/src/pubsub-adapter.js +0 -61
  417. package/src/record/README.md +0 -130
  418. package/src/record/envelope/envelope.d.ts +0 -77
  419. package/src/record/envelope/envelope.js +0 -243
  420. package/src/record/envelope/envelope.proto +0 -19
  421. package/src/record/envelope/index.js +0 -183
  422. package/src/record/peer-record/consts.js +0 -14
  423. package/src/record/peer-record/index.js +0 -113
  424. package/src/record/peer-record/peer-record.d.ts +0 -133
  425. package/src/record/peer-record/peer-record.js +0 -367
  426. package/src/record/peer-record/peer-record.proto +0 -18
  427. package/src/record/utils.js +0 -25
  428. package/src/registrar.js +0 -127
  429. package/src/transport-manager.js +0 -269
  430. package/src/types.ts +0 -98
  431. package/src/upgrader.js +0 -492
@@ -0,0 +1,501 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import { Dialer, Listener } from '@libp2p/multistream-select'
4
+ import { pipe } from 'it-pipe'
5
+ // @ts-expect-error mutable-proxy does not export types
6
+ import mutableProxy from 'mutable-proxy'
7
+ import { codes } from './errors.js'
8
+ import { createConnection } from '@libp2p/connection'
9
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
10
+ import { peerIdFromString } from '@libp2p/peer-id'
11
+ import type { Connection, ProtocolStream, Stream } from '@libp2p/interfaces/connection'
12
+ import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/interfaces/connection-encrypter'
13
+ import type { StreamMuxer, StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
14
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
15
+ import type { MultiaddrConnection, Upgrader, UpgraderEvents } from '@libp2p/interfaces/transport'
16
+ import type { Duplex } from 'it-stream-types'
17
+ import type { Components } from '@libp2p/interfaces/components'
18
+
19
+ const log = logger('libp2p:upgrader')
20
+
21
+ interface CreateConectionOptions {
22
+ cryptoProtocol: string
23
+ direction: 'inbound' | 'outbound'
24
+ maConn: MultiaddrConnection
25
+ upgradedConn: Duplex<Uint8Array>
26
+ remotePeer: PeerId
27
+ muxerFactory?: StreamMuxerFactory
28
+ }
29
+
30
+ interface OnStreamOptions {
31
+ connection: Connection
32
+ stream: Stream
33
+ protocol: string
34
+ }
35
+
36
+ export interface CryptoResult extends SecuredConnection {
37
+ protocol: string
38
+ }
39
+
40
+ export interface UpgraderInit {
41
+ connectionEncryption: ConnectionEncrypter[]
42
+ muxers: StreamMuxerFactory[]
43
+ }
44
+
45
+ export class DefaultUpgrader extends EventEmitter<UpgraderEvents> implements Upgrader {
46
+ private readonly components: Components
47
+ private readonly connectionEncryption: Map<string, ConnectionEncrypter>
48
+ private readonly muxers: Map<string, StreamMuxerFactory>
49
+
50
+ constructor (components: Components, init: UpgraderInit) {
51
+ super()
52
+
53
+ this.components = components
54
+ this.connectionEncryption = new Map()
55
+
56
+ init.connectionEncryption.forEach(encrypter => {
57
+ this.connectionEncryption.set(encrypter.protocol, encrypter)
58
+ })
59
+
60
+ this.muxers = new Map()
61
+
62
+ init.muxers.forEach(muxer => {
63
+ this.muxers.set(muxer.protocol, muxer)
64
+ })
65
+ }
66
+
67
+ /**
68
+ * Upgrades an inbound connection
69
+ */
70
+ async upgradeInbound (maConn: MultiaddrConnection): Promise<Connection> {
71
+ let encryptedConn
72
+ let remotePeer
73
+ let upgradedConn: Duplex<Uint8Array>
74
+ let muxerFactory: StreamMuxerFactory | undefined
75
+ let cryptoProtocol
76
+ let setPeer
77
+ let proxyPeer
78
+ const metrics = this.components.getMetrics()
79
+
80
+ if (await this.components.getConnectionGater().denyInboundConnection(maConn)) {
81
+ throw errCode(new Error('The multiaddr connection is blocked by gater.acceptConnection'), codes.ERR_CONNECTION_INTERCEPTED)
82
+ }
83
+
84
+ if (metrics != null) {
85
+ ({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
86
+ const idString = `${(Math.random() * 1e9).toString(36)}${Date.now()}`
87
+ setPeer({ toString: () => idString })
88
+ maConn = metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
89
+ }
90
+
91
+ log('starting the inbound connection upgrade')
92
+
93
+ // Protect
94
+ let protectedConn = maConn
95
+ const protector = this.components.getConnectionProtector()
96
+
97
+ if (protector != null) {
98
+ log('protecting the inbound connection')
99
+ protectedConn = await protector.protect(maConn)
100
+ }
101
+
102
+ try {
103
+ // Encrypt the connection
104
+ ({
105
+ conn: encryptedConn,
106
+ remotePeer,
107
+ protocol: cryptoProtocol
108
+ } = await this._encryptInbound(protectedConn))
109
+
110
+ if (await this.components.getConnectionGater().denyInboundEncryptedConnection(remotePeer, {
111
+ ...protectedConn,
112
+ ...encryptedConn
113
+ })) {
114
+ throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
115
+ }
116
+
117
+ // Multiplex the connection
118
+ if (this.muxers.size > 0) {
119
+ const multiplexed = await this._multiplexInbound({
120
+ ...protectedConn,
121
+ ...encryptedConn
122
+ }, this.muxers)
123
+ muxerFactory = multiplexed.muxerFactory
124
+ upgradedConn = multiplexed.stream
125
+ } else {
126
+ upgradedConn = encryptedConn
127
+ }
128
+ } catch (err: any) {
129
+ log.error('Failed to upgrade inbound connection', err)
130
+ await maConn.close(err)
131
+ throw err
132
+ }
133
+
134
+ if (await this.components.getConnectionGater().denyInboundUpgradedConnection(remotePeer, {
135
+ ...protectedConn,
136
+ ...encryptedConn
137
+ })) {
138
+ throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
139
+ }
140
+
141
+ if (metrics != null) {
142
+ metrics.updatePlaceholder(proxyPeer, remotePeer)
143
+ setPeer(remotePeer)
144
+ }
145
+
146
+ log('Successfully upgraded inbound connection')
147
+
148
+ return this._createConnection({
149
+ cryptoProtocol,
150
+ direction: 'inbound',
151
+ maConn,
152
+ upgradedConn,
153
+ muxerFactory,
154
+ remotePeer
155
+ })
156
+ }
157
+
158
+ /**
159
+ * Upgrades an outbound connection
160
+ */
161
+ async upgradeOutbound (maConn: MultiaddrConnection): Promise<Connection> {
162
+ const idStr = maConn.remoteAddr.getPeerId()
163
+ if (idStr == null) {
164
+ throw errCode(new Error('outbound connection must have a peer id'), codes.ERR_INVALID_MULTIADDR)
165
+ }
166
+
167
+ const remotePeerId = peerIdFromString(idStr)
168
+
169
+ if (await this.components.getConnectionGater().denyOutboundConnection(remotePeerId, maConn)) {
170
+ throw errCode(new Error('The multiaddr connection is blocked by connectionGater.denyOutboundConnection'), codes.ERR_CONNECTION_INTERCEPTED)
171
+ }
172
+
173
+ let encryptedConn
174
+ let remotePeer
175
+ let upgradedConn
176
+ let cryptoProtocol
177
+ let muxerFactory
178
+ let setPeer
179
+ let proxyPeer
180
+ const metrics = this.components.getMetrics()
181
+
182
+ if (metrics != null) {
183
+ ({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
184
+ const idString = `${(Math.random() * 1e9).toString(36)}${Date.now()}`
185
+ setPeer({ toB58String: () => idString })
186
+ maConn = metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
187
+ }
188
+
189
+ log('Starting the outbound connection upgrade')
190
+
191
+ // Protect
192
+ let protectedConn = maConn
193
+ const protector = this.components.getConnectionProtector()
194
+
195
+ if (protector != null) {
196
+ protectedConn = await protector.protect(maConn)
197
+ }
198
+
199
+ try {
200
+ // Encrypt the connection
201
+ ({
202
+ conn: encryptedConn,
203
+ remotePeer,
204
+ protocol: cryptoProtocol
205
+ } = await this._encryptOutbound(protectedConn, remotePeerId))
206
+
207
+ if (await this.components.getConnectionGater().denyOutboundEncryptedConnection(remotePeer, {
208
+ ...protectedConn,
209
+ ...encryptedConn
210
+ })) {
211
+ throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
212
+ }
213
+
214
+ // Multiplex the connection
215
+ if (this.muxers.size > 0) {
216
+ const multiplexed = await this._multiplexOutbound({
217
+ ...protectedConn,
218
+ ...encryptedConn
219
+ }, this.muxers)
220
+ muxerFactory = multiplexed.muxerFactory
221
+ upgradedConn = multiplexed.stream
222
+ } else {
223
+ upgradedConn = encryptedConn
224
+ }
225
+ } catch (err: any) {
226
+ log.error('Failed to upgrade outbound connection', err)
227
+ await maConn.close(err)
228
+ throw err
229
+ }
230
+
231
+ if (await this.components.getConnectionGater().denyOutboundUpgradedConnection(remotePeer, {
232
+ ...protectedConn,
233
+ ...encryptedConn
234
+ })) {
235
+ throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
236
+ }
237
+
238
+ if (metrics != null) {
239
+ metrics.updatePlaceholder(proxyPeer, remotePeer)
240
+ setPeer(remotePeer)
241
+ }
242
+
243
+ log('Successfully upgraded outbound connection')
244
+
245
+ return this._createConnection({
246
+ cryptoProtocol,
247
+ direction: 'outbound',
248
+ maConn,
249
+ upgradedConn,
250
+ muxerFactory,
251
+ remotePeer
252
+ })
253
+ }
254
+
255
+ /**
256
+ * A convenience method for generating a new `Connection`
257
+ */
258
+ _createConnection (opts: CreateConectionOptions): Connection {
259
+ const {
260
+ cryptoProtocol,
261
+ direction,
262
+ maConn,
263
+ upgradedConn,
264
+ remotePeer,
265
+ muxerFactory
266
+ } = opts
267
+
268
+ let muxer: StreamMuxer | undefined
269
+ let newStream: ((multicodecs: string[]) => Promise<ProtocolStream>) | undefined
270
+ let connection: Connection // eslint-disable-line prefer-const
271
+
272
+ if (muxerFactory != null) {
273
+ // Create the muxer
274
+ muxer = muxerFactory.createStreamMuxer(this.components, {
275
+ // Run anytime a remote stream is created
276
+ onIncomingStream: muxedStream => {
277
+ if (connection == null) {
278
+ return
279
+ }
280
+
281
+ void Promise.resolve()
282
+ .then(async () => {
283
+ const mss = new Listener(muxedStream)
284
+ const protocols = this.components.getRegistrar().getProtocols()
285
+ const { stream, protocol } = await mss.handle(protocols)
286
+ log('%s: incoming stream opened on %s', direction, protocol)
287
+
288
+ const metrics = this.components.getMetrics()
289
+
290
+ if (metrics != null) {
291
+ metrics.trackStream({ stream, remotePeer, protocol })
292
+ }
293
+
294
+ if (connection == null) {
295
+ return
296
+ }
297
+
298
+ connection.addStream(muxedStream, { protocol })
299
+ this._onStream({ connection, stream: { ...muxedStream, ...stream }, protocol })
300
+ })
301
+ .catch(err => {
302
+ log.error(err)
303
+ })
304
+ },
305
+ // Run anytime a stream closes
306
+ onStreamEnd: muxedStream => {
307
+ connection?.removeStream(muxedStream.id)
308
+ }
309
+ })
310
+
311
+ newStream = async (protocols: string[]): Promise<ProtocolStream> => {
312
+ if (muxer == null) {
313
+ throw errCode(new Error('Stream is not multiplexed'), codes.ERR_MUXER_UNAVAILABLE)
314
+ }
315
+
316
+ log('%s: starting new stream on %s', direction, protocols)
317
+ const muxedStream = muxer.newStream()
318
+ const mss = new Dialer(muxedStream)
319
+ const metrics = this.components.getMetrics()
320
+
321
+ try {
322
+ let { stream, protocol } = await mss.select(protocols)
323
+
324
+ if (metrics != null) {
325
+ stream = metrics.trackStream({ stream, remotePeer, protocol })
326
+ }
327
+
328
+ return { stream: { ...muxedStream, ...stream }, protocol }
329
+ } catch (err: any) {
330
+ log.error('could not create new stream', err)
331
+ throw errCode(err, codes.ERR_UNSUPPORTED_PROTOCOL)
332
+ }
333
+ }
334
+
335
+ // Pipe all data through the muxer
336
+ pipe(upgradedConn, muxer, upgradedConn).catch(log.error)
337
+ }
338
+
339
+ const _timeline = maConn.timeline
340
+ maConn.timeline = new Proxy(_timeline, {
341
+ set: (...args) => {
342
+ if (connection != null && args[1] === 'close' && args[2] != null && _timeline.close == null) {
343
+ // Wait for close to finish before notifying of the closure
344
+ (async () => {
345
+ try {
346
+ if (connection.stat.status === 'OPEN') {
347
+ await connection.close()
348
+ }
349
+ } catch (err: any) {
350
+ log.error(err)
351
+ } finally {
352
+ this.dispatchEvent(new CustomEvent<Connection>('connectionEnd', {
353
+ detail: connection
354
+ }))
355
+ }
356
+ })().catch(err => {
357
+ log.error(err)
358
+ })
359
+ }
360
+
361
+ return Reflect.set(...args)
362
+ }
363
+ })
364
+ maConn.timeline.upgraded = Date.now()
365
+
366
+ const errConnectionNotMultiplexed = () => {
367
+ throw errCode(new Error('connection is not multiplexed'), codes.ERR_CONNECTION_NOT_MULTIPLEXED)
368
+ }
369
+
370
+ // Create the connection
371
+ connection = createConnection({
372
+ remoteAddr: maConn.remoteAddr,
373
+ remotePeer: remotePeer,
374
+ stat: {
375
+ status: 'OPEN',
376
+ direction,
377
+ timeline: maConn.timeline,
378
+ multiplexer: muxer?.protocol,
379
+ encryption: cryptoProtocol
380
+ },
381
+ newStream: newStream ?? errConnectionNotMultiplexed,
382
+ getStreams: () => muxer != null ? muxer.streams : errConnectionNotMultiplexed(),
383
+ close: async () => {
384
+ await maConn.close()
385
+ // Ensure remaining streams are closed
386
+ if (muxer != null) {
387
+ await Promise.all(muxer.streams.map(async stream => {
388
+ await stream.close()
389
+ }))
390
+ }
391
+ }
392
+ })
393
+
394
+ this.dispatchEvent(new CustomEvent<Connection>('connection', {
395
+ detail: connection
396
+ }))
397
+
398
+ return connection
399
+ }
400
+
401
+ /**
402
+ * Routes incoming streams to the correct handler
403
+ */
404
+ _onStream (opts: OnStreamOptions): void {
405
+ const { connection, stream, protocol } = opts
406
+ const handler = this.components.getRegistrar().getHandler(protocol)
407
+ handler({ connection, stream, protocol })
408
+ }
409
+
410
+ /**
411
+ * Attempts to encrypt the incoming `connection` with the provided `cryptos`
412
+ */
413
+ async _encryptInbound (connection: Duplex<Uint8Array>): Promise<CryptoResult> {
414
+ const mss = new Listener(connection)
415
+ const protocols = Array.from(this.connectionEncryption.keys())
416
+ log('handling inbound crypto protocol selection', protocols)
417
+
418
+ try {
419
+ const { stream, protocol } = await mss.handle(protocols)
420
+ const encrypter = this.connectionEncryption.get(protocol)
421
+
422
+ if (encrypter == null) {
423
+ throw new Error(`no crypto module found for ${protocol}`)
424
+ }
425
+
426
+ log('encrypting inbound connection...')
427
+
428
+ return {
429
+ ...await encrypter.secureInbound(this.components.getPeerId(), stream),
430
+ protocol
431
+ }
432
+ } catch (err: any) {
433
+ throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
434
+ }
435
+ }
436
+
437
+ /**
438
+ * Attempts to encrypt the given `connection` with the provided connection encrypters.
439
+ * The first `ConnectionEncrypter` module to succeed will be used
440
+ */
441
+ async _encryptOutbound (connection: MultiaddrConnection, remotePeerId: PeerId): Promise<CryptoResult> {
442
+ const mss = new Dialer(connection)
443
+ const protocols = Array.from(this.connectionEncryption.keys())
444
+ log('selecting outbound crypto protocol', protocols)
445
+
446
+ try {
447
+ const { stream, protocol } = await mss.select(protocols)
448
+ const encrypter = this.connectionEncryption.get(protocol)
449
+
450
+ if (encrypter == null) {
451
+ throw new Error(`no crypto module found for ${protocol}`)
452
+ }
453
+
454
+ log('encrypting outbound connection to %p', remotePeerId)
455
+
456
+ return {
457
+ ...await encrypter.secureOutbound(this.components.getPeerId(), stream, remotePeerId),
458
+ protocol
459
+ }
460
+ } catch (err: any) {
461
+ throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Selects one of the given muxers via multistream-select. That
467
+ * muxer will be used for all future streams on the connection.
468
+ */
469
+ async _multiplexOutbound (connection: MultiaddrConnection, muxers: Map<string, StreamMuxerFactory>): Promise<{ stream: Duplex<Uint8Array>, muxerFactory?: StreamMuxerFactory}> {
470
+ const dialer = new Dialer(connection)
471
+ const protocols = Array.from(muxers.keys())
472
+ log('outbound selecting muxer %s', protocols)
473
+ try {
474
+ const { stream, protocol } = await dialer.select(protocols)
475
+ log('%s selected as muxer protocol', protocol)
476
+ const muxerFactory = muxers.get(protocol)
477
+ return { stream, muxerFactory }
478
+ } catch (err: any) {
479
+ log.error('error multiplexing outbound stream', err)
480
+ throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
481
+ }
482
+ }
483
+
484
+ /**
485
+ * Registers support for one of the given muxers via multistream-select. The
486
+ * selected muxer will be used for all future streams on the connection.
487
+ */
488
+ async _multiplexInbound (connection: MultiaddrConnection, muxers: Map<string, StreamMuxerFactory>): Promise<{ stream: Duplex<Uint8Array>, muxerFactory?: StreamMuxerFactory}> {
489
+ const listener = new Listener(connection)
490
+ const protocols = Array.from(muxers.keys())
491
+ log('inbound handling muxers %s', protocols)
492
+ try {
493
+ const { stream, protocol } = await listener.handle(protocols)
494
+ const muxerFactory = muxers.get(protocol)
495
+ return { stream, muxerFactory }
496
+ } catch (err: any) {
497
+ log.error('error multiplexing inbound stream', err)
498
+ throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
499
+ }
500
+ }
501
+ }
package/src/version.ts ADDED
@@ -0,0 +1,3 @@
1
+
2
+ export const version = '0.0.0'
3
+ export const name = 'libp2p'