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,6 @@
1
+ export const INVALID_PEER = 'Not a valid peer connection';
2
+ export const INVALID_PSK = 'Your private shared key is invalid';
3
+ export const NO_LOCAL_ID = 'No local private key provided';
4
+ export const NO_HANDSHAKE_CONNECTION = 'No connection for the handshake provided';
5
+ export const STREAM_ENDED = 'Stream ended prematurely';
6
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pnet/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,6BAA6B,CAAA;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,oCAAoC,CAAA;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAA;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,0CAA0C,CAAA;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAA"}
@@ -1,32 +1,24 @@
1
- export = Protector;
2
- /**
3
- * @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
4
- */
5
- declare class Protector {
1
+ import type { MultiaddrConnection } from '@libp2p/interfaces/transport';
2
+ import type { ConnectionProtector } from '@libp2p/interfaces/connection';
3
+ export { generateKey } from './key-generator.js';
4
+ export interface ProtectorInit {
5
+ enabled?: boolean;
6
+ psk: Uint8Array;
7
+ }
8
+ export declare class PreSharedKeyConnectionProtector implements ConnectionProtector {
9
+ tag: string;
10
+ private readonly psk;
11
+ private readonly enabled;
6
12
  /**
7
13
  * Takes a Private Shared Key (psk) and provides a `protect` method
8
14
  * for wrapping existing connections in a private encryption stream.
9
- *
10
- * @param {Uint8Array} keyBuffer - The private shared key buffer
11
- * @class
12
15
  */
13
- constructor(keyBuffer: Uint8Array);
14
- psk: Uint8Array;
15
- tag: string | undefined;
16
+ constructor(init: ProtectorInit);
16
17
  /**
17
18
  * Takes a given Connection and creates a private encryption stream
18
19
  * between its two peers from the PSK the Protector instance was
19
20
  * created with.
20
- *
21
- * @param {MultiaddrConnection} connection - The connection to protect
22
- * @returns {Promise<MultiaddrConnection>} A protected duplex iterable
23
21
  */
24
22
  protect(connection: MultiaddrConnection): Promise<MultiaddrConnection>;
25
23
  }
26
- declare namespace Protector {
27
- export { Errors as errors, generate, MultiaddrConnection };
28
- }
29
- type MultiaddrConnection = import('libp2p-interfaces/src/transport/types').MultiaddrConnection;
30
- import Errors = require("./errors");
31
- declare var generate: typeof import("./key-generator");
32
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pnet/index.js"],"names":[],"mappings":";AAwBA;;GAEG;AAEH;IACE;;;;;;OAMG;IACH,uBAHW,UAAU,EAOpB;IAFC,gBAAyB;IACzB,wBAAyB;IAG3B;;;;;;;OAOG;IACH,oBAHW,mBAAmB,GACjB,QAAQ,mBAAmB,CAAC,CAgCxC;CACF;;;;2BAxDY,OAAO,uCAAuC,EAAE,mBAAmB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pnet/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAIxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,EAAE,UAAU,CAAA;CAChB;AAED,qBAAa,+BAAgC,YAAW,mBAAmB;IAClE,GAAG,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;OAGG;gBACU,IAAI,EAAE,aAAa;IAahC;;;;OAIG;IACG,OAAO,CAAE,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA2C9E"}
@@ -0,0 +1,67 @@
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 { createBoxStream, createUnboxStream, decodeV1PSK } from './crypto.js';
9
+ import { handshake } from 'it-handshake';
10
+ import { NONCE_LENGTH } from './key-generator.js';
11
+ const log = logger('libp2p:pnet');
12
+ export { generateKey } from './key-generator.js';
13
+ export class PreSharedKeyConnectionProtector {
14
+ /**
15
+ * Takes a Private Shared Key (psk) and provides a `protect` method
16
+ * for wrapping existing connections in a private encryption stream.
17
+ */
18
+ constructor(init) {
19
+ this.enabled = init.enabled !== false;
20
+ if (this.enabled) {
21
+ const decodedPSK = decodeV1PSK(init.psk);
22
+ this.psk = decodedPSK.psk;
23
+ this.tag = decodedPSK.tag ?? '';
24
+ }
25
+ else {
26
+ this.psk = new Uint8Array();
27
+ this.tag = '';
28
+ }
29
+ }
30
+ /**
31
+ * Takes a given Connection and creates a private encryption stream
32
+ * between its two peers from the PSK the Protector instance was
33
+ * created with.
34
+ */
35
+ async protect(connection) {
36
+ if (!this.enabled) {
37
+ return connection;
38
+ }
39
+ if (connection == null) {
40
+ throw errCode(new Error(Errors.NO_HANDSHAKE_CONNECTION), codes.ERR_INVALID_PARAMETERS);
41
+ }
42
+ // Exchange nonces
43
+ log('protecting the connection');
44
+ const localNonce = randomBytes(NONCE_LENGTH);
45
+ const shake = handshake(connection);
46
+ shake.write(localNonce);
47
+ const result = await shake.reader.next(NONCE_LENGTH);
48
+ if (result.value == null) {
49
+ throw errCode(new Error(Errors.STREAM_ENDED), codes.ERR_INVALID_PARAMETERS);
50
+ }
51
+ const remoteNonce = result.value.slice();
52
+ shake.rest();
53
+ // Create the boxing/unboxing pipe
54
+ log('exchanged nonces');
55
+ const [internal, external] = duplexPair();
56
+ pipe(external,
57
+ // Encrypt all outbound traffic
58
+ createBoxStream(localNonce, this.psk), shake.stream,
59
+ // Decrypt all inbound traffic
60
+ createUnboxStream(remoteNonce, this.psk), external).catch(log.error);
61
+ return {
62
+ ...connection,
63
+ ...internal
64
+ };
65
+ }
66
+ }
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pnet/index.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,10 @@
1
- export = generate;
2
1
  /**
3
2
  * Generates a PSK that can be used in a libp2p-pnet private network
4
3
  *
5
4
  * @param {Uint8Array} bytes - An object to write the psk into
6
5
  * @returns {void}
7
6
  */
8
- declare function generate(bytes: Uint8Array): void;
9
- declare namespace generate {
10
- export { NONCE_LENGTH, KEY_LENGTH };
11
- }
12
- declare var NONCE_LENGTH: number;
13
- declare const KEY_LENGTH: 32;
7
+ export declare function generateKey(bytes: Uint8Array): void;
8
+ export declare const NONCE_LENGTH = 24;
9
+ export declare const KEY_LENGTH = 32;
14
10
  //# sourceMappingURL=key-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"key-generator.d.ts","sourceRoot":"","sources":["../../../src/pnet/key-generator.js"],"names":[],"mappings":";AAOA;;;;;GAKG;AACH,iCAHW,UAAU,GACR,IAAI,CAOhB;;;;;AAfD,6BAAqB"}
1
+ {"version":3,"file":"key-generator.d.ts","sourceRoot":"","sources":["../../../src/pnet/key-generator.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAE,KAAK,EAAE,UAAU,QAK7C;AAED,eAAO,MAAM,YAAY,KAAK,CAAA;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAA"}
@@ -0,0 +1,25 @@
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
+ * Generates a PSK that can be used in a libp2p-pnet private network
6
+ *
7
+ * @param {Uint8Array} bytes - An object to write the psk into
8
+ * @returns {void}
9
+ */
10
+ export function generateKey(bytes) {
11
+ const psk = uint8ArrayToString(randomBytes(KEY_LENGTH), 'base16');
12
+ const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk);
13
+ bytes.set(key);
14
+ }
15
+ export const NONCE_LENGTH = 24;
16
+ export const KEY_LENGTH = 32;
17
+ try {
18
+ if (require.main === module) {
19
+ // @ts-expect-error
20
+ generate(process.stdout);
21
+ }
22
+ }
23
+ catch (error) {
24
+ }
25
+ //# sourceMappingURL=key-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-generator.js","sourceRoot":"","sources":["../../../src/pnet/key-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAE,KAAiB;IAC5C,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjE,MAAM,GAAG,GAAG,oBAAoB,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAA;IAE3E,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAA;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAE5B,IAAI;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,mBAAmB;QACnB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;KACzB;CACF;AAAC,OAAO,KAAU,EAAE;CAEpB"}
@@ -0,0 +1,17 @@
1
+ import { EventEmitter } from '@libp2p/interfaces/events';
2
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
3
+ import type { PublishResult, PubSub, PubSubEvents, StrictNoSign, StrictSign } from '@libp2p/interfaces/pubsub';
4
+ export declare class DummyPubSub extends EventEmitter<PubSubEvents> implements PubSub {
5
+ isStarted(): boolean;
6
+ start(): void | Promise<void>;
7
+ stop(): void | Promise<void>;
8
+ get globalSignaturePolicy(): typeof StrictSign | typeof StrictNoSign;
9
+ get multicodecs(): string[];
10
+ getPeers(): PeerId[];
11
+ getTopics(): string[];
12
+ subscribe(): void;
13
+ unsubscribe(): void;
14
+ getSubscribers(): PeerId[];
15
+ publish(): Promise<PublishResult>;
16
+ }
17
+ //# sourceMappingURL=dummy-pubsub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy-pubsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/dummy-pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAI9G,qBAAa,WAAY,SAAQ,YAAY,CAAC,YAAY,CAAE,YAAW,MAAM;IAC3E,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9B,IAAI,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7B,IAAI,qBAAqB,IAAK,OAAO,UAAU,GAAG,OAAO,YAAY,CAEpE;IAED,IAAI,WAAW,IAAK,MAAM,EAAE,CAE3B;IAED,QAAQ,IAAK,MAAM,EAAE;IAIrB,SAAS,IAAK,MAAM,EAAE;IAItB,SAAS,IAAK,IAAI;IAIlB,WAAW,IAAK,IAAI;IAIpB,cAAc,IAAK,MAAM,EAAE;IAIrB,OAAO,IAAK,OAAO,CAAC,aAAa,CAAC;CAGzC"}
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@libp2p/interfaces/events';
2
+ import errCode from 'err-code';
3
+ import { messages, codes } from '../errors.js';
4
+ export class DummyPubSub extends EventEmitter {
5
+ isStarted() {
6
+ return false;
7
+ }
8
+ start() {
9
+ }
10
+ stop() {
11
+ }
12
+ get globalSignaturePolicy() {
13
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
14
+ }
15
+ get multicodecs() {
16
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
17
+ }
18
+ getPeers() {
19
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
20
+ }
21
+ getTopics() {
22
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
23
+ }
24
+ subscribe() {
25
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
26
+ }
27
+ unsubscribe() {
28
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
29
+ }
30
+ getSubscribers() {
31
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
32
+ }
33
+ async publish() {
34
+ throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
35
+ }
36
+ }
37
+ //# sourceMappingURL=dummy-pubsub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy-pubsub.js","sourceRoot":"","sources":["../../../src/pubsub/dummy-pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,OAAO,WAAY,SAAQ,YAA0B;IACzD,SAAS;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK;IAEL,CAAC;IAED,IAAI;IAEJ,CAAC;IAED,IAAI,qBAAqB;QACvB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,WAAW;QACb,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,SAAS;QACP,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,SAAS;QACP,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,WAAW;QACT,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;CACF"}
@@ -1,82 +1,43 @@
1
- export = Registrar;
2
- /**
3
- * @typedef {import('peer-id')} PeerId
4
- * @typedef {import('./peer-store/types').PeerStore} PeerStore
5
- * @typedef {import('./connection-manager')} ConnectionManager
6
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
7
- * @typedef {import('./').HandlerProps} HandlerProps
8
- */
9
- /**
10
- *
11
- */
1
+ import { Topology } from '@libp2p/interfaces/topology';
2
+ import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar';
3
+ import type { PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store';
4
+ import type { Connection } from '@libp2p/interfaces/connection';
5
+ import type { Components } from '@libp2p/interfaces/components';
12
6
  /**
13
7
  * Responsible for notifying registered protocols of events in the network.
14
8
  */
15
- declare class Registrar {
9
+ export declare class DefaultRegistrar implements Registrar {
10
+ private readonly topologies;
11
+ private readonly handlers;
12
+ private readonly components;
13
+ constructor(components: Components);
14
+ getProtocols(): string[];
15
+ getHandler(protocol: string): StreamHandler;
16
+ getTopologies(protocol: string): Topology[];
16
17
  /**
17
- * @param {Object} props
18
- * @param {PeerStore} props.peerStore
19
- * @param {ConnectionManager} props.connectionManager
20
- * @class
18
+ * Registers the `handler` for each protocol
21
19
  */
22
- constructor({ peerStore, connectionManager }: {
23
- peerStore: PeerStore;
24
- connectionManager: ConnectionManager;
25
- });
26
- peerStore: import("./peer-store/types").PeerStore;
27
- connectionManager: import("./connection-manager");
20
+ handle(protocols: string | string[], handler: StreamHandler): Promise<void>;
28
21
  /**
29
- * Map of topologies
30
- *
31
- * @type {Map<string, Topology>}
32
- */
33
- topologies: Map<string, Topology>;
34
- /** @type {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void} */
35
- _handle: (protocols: string[] | string, handler: (props: HandlerProps) => void) => void;
36
- /**
37
- * Remove a disconnected peer from the record
38
- *
39
- * @param {Connection} connection
40
- * @returns {void}
22
+ * Removes the handler for each protocol. The protocol
23
+ * will no longer be supported on streams.
41
24
  */
42
- _onDisconnect(connection: Connection): void;
25
+ unhandle(protocols: string | string[]): Promise<void>;
43
26
  /**
44
- * @param {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void} handle
45
- */
46
- set handle(arg: (protocols: string[] | string, handler: (props: HandlerProps) => void) => void);
47
- /**
48
- * @returns {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void}
27
+ * Register handlers for a set of multicodecs given
49
28
  */
50
- get handle(): (protocols: string[] | string, handler: (props: HandlerProps) => void) => void;
29
+ register(protocols: string | string[], topology: Topology): Promise<string>;
51
30
  /**
52
- * Get a connection with a peer.
53
- *
54
- * @param {PeerId} peerId
55
- * @returns {Connection | null}
31
+ * Unregister topology
56
32
  */
57
- getConnection(peerId: PeerId): Connection | null;
33
+ unregister(id: string): void;
58
34
  /**
59
- * Register handlers for a set of multicodecs given
60
- *
61
- * @param {Topology} topology - protocol topology
62
- * @returns {Promise<string>} registrar identifier
35
+ * Remove a disconnected peer from the record
63
36
  */
64
- register(topology: Topology): Promise<string>;
37
+ _onDisconnect(evt: CustomEvent<Connection>): void;
65
38
  /**
66
- * Unregister topology.
67
- *
68
- * @param {string} id - registrar identifier
69
- * @returns {boolean} unregistered successfully
39
+ * Check if a new peer support the multicodecs for this topology
70
40
  */
71
- unregister(id: string): boolean;
72
- }
73
- declare namespace Registrar {
74
- export { PeerId, PeerStore, ConnectionManager, Connection, HandlerProps };
41
+ _onProtocolChange(evt: CustomEvent<PeerProtocolsChangeData>): void;
75
42
  }
76
- import Topology = require("libp2p-interfaces/src/topology");
77
- type Connection = import("libp2p-interfaces/src/connection/connection");
78
- type PeerId = import('peer-id');
79
- type PeerStore = import('./peer-store/types').PeerStore;
80
- type ConnectionManager = import('./connection-manager');
81
- type HandlerProps = import('./').HandlerProps;
82
43
  //# sourceMappingURL=registrar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/registrar.js"],"names":[],"mappings":";AAaA;;;;;;GAMG;AAEH;;GAEG;AAEH;;GAEG;AACH;IACE;;;;;OAKG;IACH;QAJ4B,SAAS,EAA1B,SAAS;QACgB,iBAAiB,EAA1C,iBAAiB;OAsB3B;IAjBC,kDAA0B;IAE1B,kDAA0C;IAE1C;;;;OAIG;IACH,YAFU,IAAI,MAAM,EAAE,QAAQ,CAAC,CAEJ;IAE3B,2FAA2F;IAE3F,qBAFuB,MAAM,EAAE,GAAC,MAAM,mBAAmB,YAAY,KAAK,IAAI,KAAK,IAAI,CAE/D;IA+D1B;;;;;OAKG;IACH,0BAHW,UAAU,GACR,IAAI,CAMhB;IA5DD;;OAEG;IACH,4BATyB,MAAM,EAAE,GAAC,MAAM,mBAAmB,YAAY,KAAK,IAAI,KAAK,IAAI,EAWxF;IAZD;;OAEG;IACH,0BAFyB,MAAM,EAAE,GAAC,MAAM,mBAAmB,YAAY,KAAK,IAAI,KAAK,IAAI,CAIxF;IASD;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,UAAU,GAAG,IAAI,CAI7B;IAED;;;;;OAKG;IACH,mBAHW,QAAQ,GACN,QAAQ,MAAM,CAAC,CAiB3B;IAED;;;;;OAKG;IACH,eAHW,MAAM,GACJ,OAAO,CAInB;CAaF;;;;;;cA9GY,OAAO,SAAS,CAAC;iBACjB,OAAO,oBAAoB,EAAE,SAAS;yBACtC,OAAO,sBAAsB,CAAC;oBAE9B,OAAO,IAAI,EAAE,YAAY"}
1
+ {"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/registrar.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAc/D;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0D;IACrF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,UAAU,EAAE,UAAU;IAcnC,YAAY;IAcZ,UAAU,CAAE,QAAQ,EAAE,MAAM;IAU5B,aAAa,CAAE,QAAQ,EAAE,MAAM;IAY/B;;OAEG;IACG,MAAM,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAelF;;;OAGG;IACG,QAAQ,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAW5C;;OAEG;IACG,QAAQ,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlF;;OAEG;IACH,UAAU,CAAE,EAAE,EAAE,MAAM;IAItB;;OAEG;IACH,aAAa,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAgB3C;;OAEG;IACH,iBAAiB,CAAE,GAAG,EAAE,WAAW,CAAC,uBAAuB,CAAC;CAwB7D"}
@@ -0,0 +1,144 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import errCode from 'err-code';
3
+ import { codes } from './errors.js';
4
+ import { isTopology } from '@libp2p/interfaces/topology';
5
+ const log = logger('libp2p:registrar');
6
+ function supportsProtocol(peerProtocols, topologyProtocols) {
7
+ for (const peerProtocol of peerProtocols) {
8
+ if (topologyProtocols.includes(peerProtocol)) {
9
+ return true;
10
+ }
11
+ }
12
+ return false;
13
+ }
14
+ /**
15
+ * Responsible for notifying registered protocols of events in the network.
16
+ */
17
+ export class DefaultRegistrar {
18
+ constructor(components) {
19
+ this.topologies = new Map();
20
+ this.handlers = new Map();
21
+ this.components = components;
22
+ this._onDisconnect = this._onDisconnect.bind(this);
23
+ this._onProtocolChange = this._onProtocolChange.bind(this);
24
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onDisconnect);
25
+ // happens after identify
26
+ this.components.getPeerStore().addEventListener('change:protocols', this._onProtocolChange);
27
+ }
28
+ getProtocols() {
29
+ const protocols = new Set();
30
+ for (const topology of this.topologies.values()) {
31
+ topology.protocols.forEach(protocol => protocols.add(protocol));
32
+ }
33
+ for (const protocol of this.handlers.keys()) {
34
+ protocols.add(protocol);
35
+ }
36
+ return Array.from(protocols).sort();
37
+ }
38
+ getHandler(protocol) {
39
+ const handler = this.handlers.get(protocol);
40
+ if (handler == null) {
41
+ throw new Error(`No handler registered for protocol ${protocol}`);
42
+ }
43
+ return handler;
44
+ }
45
+ getTopologies(protocol) {
46
+ const output = [];
47
+ for (const { topology, protocols } of this.topologies.values()) {
48
+ if (protocols.includes(protocol)) {
49
+ output.push(topology);
50
+ }
51
+ }
52
+ return output;
53
+ }
54
+ /**
55
+ * Registers the `handler` for each protocol
56
+ */
57
+ async handle(protocols, handler) {
58
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols];
59
+ for (const protocol of protocolList) {
60
+ if (this.handlers.has(protocol)) {
61
+ throw errCode(new Error(`Handler already registered for protocol ${protocol}`), codes.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);
62
+ }
63
+ this.handlers.set(protocol, handler);
64
+ }
65
+ // Add new protocols to self protocols in the Protobook
66
+ await this.components.getPeerStore().protoBook.add(this.components.getPeerId(), protocolList);
67
+ }
68
+ /**
69
+ * Removes the handler for each protocol. The protocol
70
+ * will no longer be supported on streams.
71
+ */
72
+ async unhandle(protocols) {
73
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols];
74
+ protocolList.forEach(protocol => {
75
+ this.handlers.delete(protocol);
76
+ });
77
+ // Remove protocols from self protocols in the Protobook
78
+ await this.components.getPeerStore().protoBook.remove(this.components.getPeerId(), protocolList);
79
+ }
80
+ /**
81
+ * Register handlers for a set of multicodecs given
82
+ */
83
+ async register(protocols, topology) {
84
+ if (!isTopology(topology)) {
85
+ log.error('topology must be an instance of interfaces/topology');
86
+ throw errCode(new Error('topology must be an instance of interfaces/topology'), codes.ERR_INVALID_PARAMETERS);
87
+ }
88
+ // Create topology
89
+ const id = `${(Math.random() * 1e9).toString(36)}${Date.now()}`;
90
+ this.topologies.set(id, {
91
+ topology,
92
+ protocols: Array.isArray(protocols) ? protocols : [protocols]
93
+ });
94
+ // Set registrar
95
+ await topology.setRegistrar(this);
96
+ return id;
97
+ }
98
+ /**
99
+ * Unregister topology
100
+ */
101
+ unregister(id) {
102
+ this.topologies.delete(id);
103
+ }
104
+ /**
105
+ * Remove a disconnected peer from the record
106
+ */
107
+ _onDisconnect(evt) {
108
+ const connection = evt.detail;
109
+ void this.components.getPeerStore().protoBook.get(connection.remotePeer)
110
+ .then(peerProtocols => {
111
+ for (const { topology, protocols } of this.topologies.values()) {
112
+ if (supportsProtocol(peerProtocols, protocols)) {
113
+ topology.onDisconnect(connection.remotePeer);
114
+ }
115
+ }
116
+ })
117
+ .catch(err => {
118
+ log.error(err);
119
+ });
120
+ }
121
+ /**
122
+ * Check if a new peer support the multicodecs for this topology
123
+ */
124
+ _onProtocolChange(evt) {
125
+ const { peerId, protocols, oldProtocols } = evt.detail;
126
+ const removed = oldProtocols.filter(protocol => !protocols.includes(protocol));
127
+ const added = protocols.filter(protocol => !oldProtocols.includes(protocol));
128
+ for (const { topology, protocols } of this.topologies.values()) {
129
+ if (supportsProtocol(removed, protocols)) {
130
+ topology.onDisconnect(peerId);
131
+ }
132
+ }
133
+ for (const { topology, protocols } of this.topologies.values()) {
134
+ if (supportsProtocol(added, protocols)) {
135
+ const connection = this.components.getConnectionManager().getConnections(peerId)[0];
136
+ if (connection == null) {
137
+ continue;
138
+ }
139
+ topology.onConnect(peerId, connection);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ //# sourceMappingURL=registrar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registrar.js","sourceRoot":"","sources":["../../src/registrar.ts"],"names":[],"mappings":"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"}