libp2p 0.36.2 → 0.37.0

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 (430) 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 +83 -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 +267 -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 +333 -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 +70 -63
  112. package/dist/src/errors.d.ts.map +1 -1
  113. package/dist/src/errors.js +75 -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 +42 -99
  184. package/dist/src/nat-manager.d.ts.map +1 -1
  185. package/dist/src/nat-manager.js +114 -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 +108 -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 +402 -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 +144 -201
  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/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
  259. package/src/connection-manager/dialer/index.ts +382 -0
  260. package/src/connection-manager/index.ts +508 -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 +73 -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 +194 -0
  292. package/src/peer-record-updater.ts +55 -0
  293. package/src/peer-routing.ts +186 -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 +499 -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/index.js +0 -376
  376. package/src/errors.js +0 -66
  377. package/src/fetch/constants.js +0 -6
  378. package/src/fetch/index.js +0 -159
  379. package/src/fetch/proto.d.ts +0 -134
  380. package/src/fetch/proto.js +0 -333
  381. package/src/get-peer.js +0 -49
  382. package/src/identify/consts.js +0 -15
  383. package/src/identify/index.js +0 -384
  384. package/src/identify/message.d.ts +0 -95
  385. package/src/identify/message.js +0 -328
  386. package/src/index.js +0 -813
  387. package/src/insecure/plaintext.js +0 -95
  388. package/src/insecure/proto.d.ts +0 -128
  389. package/src/insecure/proto.js +0 -371
  390. package/src/keychain/index.js +0 -561
  391. package/src/metrics/index.js +0 -290
  392. package/src/metrics/old-peers.js +0 -16
  393. package/src/metrics/stats.js +0 -270
  394. package/src/metrics/tracked-map.js +0 -94
  395. package/src/nat-manager.js +0 -197
  396. package/src/peer-routing.js +0 -176
  397. package/src/peer-store/README.md +0 -145
  398. package/src/peer-store/address-book.js +0 -382
  399. package/src/peer-store/index.js +0 -121
  400. package/src/peer-store/key-book.js +0 -141
  401. package/src/peer-store/metadata-book.js +0 -250
  402. package/src/peer-store/pb/peer.d.ts +0 -222
  403. package/src/peer-store/pb/peer.js +0 -643
  404. package/src/peer-store/pb/peer.proto +0 -31
  405. package/src/peer-store/proto-book.js +0 -237
  406. package/src/peer-store/store.js +0 -263
  407. package/src/peer-store/types.ts +0 -245
  408. package/src/ping/constants.js +0 -8
  409. package/src/ping/index.js +0 -84
  410. package/src/ping/util.js +0 -18
  411. package/src/pnet/crypto.js +0 -84
  412. package/src/pnet/errors.js +0 -7
  413. package/src/pnet/index.js +0 -86
  414. package/src/pnet/key-generator.js +0 -33
  415. package/src/pubsub-adapter.js +0 -61
  416. package/src/record/README.md +0 -130
  417. package/src/record/envelope/envelope.d.ts +0 -77
  418. package/src/record/envelope/envelope.js +0 -243
  419. package/src/record/envelope/envelope.proto +0 -19
  420. package/src/record/envelope/index.js +0 -183
  421. package/src/record/peer-record/consts.js +0 -14
  422. package/src/record/peer-record/index.js +0 -113
  423. package/src/record/peer-record/peer-record.d.ts +0 -133
  424. package/src/record/peer-record/peer-record.js +0 -367
  425. package/src/record/peer-record/peer-record.proto +0 -18
  426. package/src/record/utils.js +0 -25
  427. package/src/registrar.js +0 -127
  428. package/src/transport-manager.js +0 -269
  429. package/src/types.ts +0 -98
  430. package/src/upgrader.js +0 -492
@@ -1,245 +0,0 @@
1
- import type PeerId from 'peer-id'
2
- import type { Multiaddr } from 'multiaddr'
3
- import type Envelope from '../record/envelope'
4
- import type { PublicKey } from 'libp2p-interfaces/src/keys/types'
5
-
6
- export interface Address {
7
- /**
8
- * Peer multiaddr
9
- */
10
- multiaddr: Multiaddr
11
-
12
- /**
13
- * Obtained from a signed peer record
14
- */
15
- isCertified: boolean
16
- }
17
-
18
- export interface Peer {
19
- /**
20
- * Peer's peer-id instance
21
- */
22
- id: PeerId
23
-
24
- /**
25
- * Peer's addresses containing its multiaddrs and metadata
26
- */
27
- addresses: Address[]
28
-
29
- /**
30
- * Peer's supported protocols
31
- */
32
- protocols: string[]
33
-
34
- /**
35
- * Peer's metadata map
36
- */
37
- metadata: Map<string, Uint8Array>
38
-
39
- /**
40
- * May be set if the key that this Peer has is an RSA key
41
- */
42
- pubKey?: PublicKey
43
-
44
- /**
45
- * The last peer record envelope received
46
- */
47
- peerRecordEnvelope?: Uint8Array
48
- }
49
-
50
- export interface CertifiedRecord {
51
- raw: Uint8Array
52
- seqNumber: number
53
- }
54
-
55
- export interface AddressBookEntry {
56
- addresses: Address[]
57
- record: CertifiedRecord
58
- }
59
-
60
- export interface Book<Type> {
61
- /**
62
- * Get the known data of a peer
63
- */
64
- get: (peerId: PeerId) => Promise<Type>
65
-
66
- /**
67
- * Set the known data of a peer
68
- */
69
- set: (peerId: PeerId, data: Type) => Promise<void>
70
-
71
- /**
72
- * Remove the known data of a peer
73
- */
74
- delete: (peerId: PeerId) => Promise<void>
75
- }
76
-
77
- /**
78
- * AddressBook containing a map of peerIdStr to Address.
79
- */
80
- export interface AddressBook {
81
- /**
82
- * ConsumePeerRecord adds addresses from a signed peer record contained in a record envelope.
83
- * This will return a boolean that indicates if the record was successfully processed and added
84
- * into the AddressBook
85
- */
86
- consumePeerRecord: (envelope: Envelope) => Promise<boolean>
87
-
88
- /**
89
- * Get the raw Envelope for a peer. Returns
90
- * undefined if no Envelope is found
91
- */
92
- getRawEnvelope: (peerId: PeerId) => Promise<Uint8Array | undefined>
93
-
94
- /**
95
- * Get an Envelope containing a PeerRecord for the given peer.
96
- * Returns undefined if no record exists.
97
- */
98
- getPeerRecord: (peerId: PeerId) => Promise<Envelope | undefined>
99
-
100
- /**
101
- * Add known addresses of a provided peer.
102
- * If the peer is not known, it is set with the given addresses.
103
- */
104
- add: (peerId: PeerId, multiaddrs: Multiaddr[]) => Promise<void>
105
-
106
- /**
107
- * Set the known addresses of a peer
108
- */
109
- set: (peerId: PeerId, data: Multiaddr[]) => Promise<void>
110
-
111
- /**
112
- * Return the known addresses of a peer
113
- */
114
- get: (peerId: PeerId) => Promise<Address[]>
115
-
116
- /**
117
- * Get the known multiaddrs for a given peer. All returned multiaddrs
118
- * will include the encapsulated `PeerId` of the peer.
119
- */
120
- getMultiaddrsForPeer: (peerId: PeerId, addressSorter?: (ms: Address[]) => Address[]) => Promise<Multiaddr[]>
121
- }
122
-
123
- /**
124
- * KeyBook containing a map of peerIdStr to their PeerId with public keys.
125
- */
126
- export interface KeyBook {
127
- /**
128
- * Get the known data of a peer
129
- */
130
- get: (peerId: PeerId) => Promise<PublicKey | undefined>
131
-
132
- /**
133
- * Set the known data of a peer
134
- */
135
- set: (peerId: PeerId, data: PublicKey) => Promise<void>
136
-
137
- /**
138
- * Remove the known data of a peer
139
- */
140
- delete: (peerId: PeerId) => Promise<void>
141
- }
142
-
143
- /**
144
- * MetadataBook containing a map of peerIdStr to their metadata Map.
145
- */
146
- export interface MetadataBook extends Book<Map<string, Uint8Array>> {
147
- /**
148
- * Set a specific metadata value
149
- */
150
- setValue: (peerId: PeerId, key: string, value: Uint8Array) => Promise<void>
151
-
152
- /**
153
- * Get specific metadata value, if it exists
154
- */
155
- getValue: (peerId: PeerId, key: string) => Promise<Uint8Array | undefined>
156
-
157
- /**
158
- * Deletes the provided peer metadata key from the book
159
- */
160
- deleteValue: (peerId: PeerId, key: string) => Promise<void>
161
- }
162
-
163
- /**
164
- * ProtoBook containing a map of peerIdStr to supported protocols.
165
- */
166
- export interface ProtoBook extends Book<string[]> {
167
- /**
168
- * Adds known protocols of a provided peer.
169
- * If the peer was not known before, it will be added.
170
- */
171
- add: (peerId: PeerId, protocols: string[]) => Promise<void>
172
-
173
- /**
174
- * Removes known protocols of a provided peer.
175
- * If the protocols did not exist before, nothing will be done.
176
- */
177
- remove: (peerId: PeerId, protocols: string[]) => Promise<void>
178
- }
179
-
180
- export interface PeerProtocolsChangeEvent {
181
- peerId: PeerId
182
- protocols: string[]
183
- }
184
-
185
- export interface PeerMultiaddrsChangeEvent {
186
- peerId: PeerId
187
- multiaddrs: Multiaddr[]
188
- }
189
-
190
- export interface PeerPublicKeyChangeEvent {
191
- peerId: PeerId
192
- pubKey?: PublicKey
193
- }
194
-
195
- export interface PeerMetadataChangeEvent {
196
- peerId: PeerId
197
- metadata: Map<string, Uint8Array>
198
- }
199
-
200
- export type EventName = 'peer' | 'change:protocols' | 'change:multiaddrs' | 'change:pubkey' | 'change:metadata'
201
-
202
- export interface PeerStoreEvents {
203
- 'peer': (event: PeerId) => void
204
- 'change:protocols': (event: PeerProtocolsChangeEvent) => void
205
- 'change:multiaddrs': (event: PeerMultiaddrsChangeEvent) => void
206
- 'change:pubkey': (event: PeerPublicKeyChangeEvent) => void
207
- 'change:metadata': (event: PeerMetadataChangeEvent) => void
208
- }
209
-
210
- export interface PeerStore {
211
- addressBook: AddressBook
212
- keyBook: KeyBook
213
- metadataBook: MetadataBook
214
- protoBook: ProtoBook
215
-
216
- getPeers: () => AsyncIterable<Peer>
217
- delete: (peerId: PeerId) => Promise<void>
218
- has: (peerId: PeerId) => Promise<boolean>
219
- get: (peerId: PeerId) => Promise<Peer>
220
- on: <U extends keyof PeerStoreEvents>(
221
- event: U, listener: PeerStoreEvents[U]
222
- ) => this
223
- once: <U extends keyof PeerStoreEvents>(
224
- event: U, listener: PeerStoreEvents[U]
225
- ) => this
226
- emit: <U extends keyof PeerStoreEvents>(
227
- event: U, ...args: Parameters<PeerStoreEvents[U]>
228
- ) => boolean
229
- }
230
-
231
- export interface Store {
232
- has: (peerId: PeerId) => Promise<boolean>
233
- save: (peer: Peer) => Promise<Peer>
234
- load: (peerId: PeerId) => Promise<Peer>
235
- merge: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
236
- mergeOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
237
- patch: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
238
- patchOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
239
- all: () => AsyncIterable<Peer>
240
-
241
- lock: {
242
- readLock: () => Promise<() => void>
243
- writeLock: () => Promise<() => void>
244
- }
245
- }
@@ -1,8 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports = {
4
- PROTOCOL: '/ipfs/ping/1.0.0', // deprecated
5
- PING_LENGTH: 32,
6
- PROTOCOL_VERSION: '1.0.0',
7
- PROTOCOL_NAME: 'ping'
8
- }
package/src/ping/index.js DELETED
@@ -1,84 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:ping'), {
5
- error: debug('libp2p:ping:err')
6
- })
7
- const errCode = require('err-code')
8
- const { codes } = require('../errors')
9
- const crypto = require('libp2p-crypto')
10
- const { pipe } = require('it-pipe')
11
- // @ts-ignore it-buffer has no types exported
12
- const { toBuffer } = require('it-buffer')
13
- const { collect, take } = require('streaming-iterables')
14
- const { equals } = require('uint8arrays/equals')
15
-
16
- const { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } = require('./constants')
17
-
18
- /**
19
- * @typedef {import('../')} Libp2p
20
- * @typedef {import('multiaddr').Multiaddr} Multiaddr
21
- * @typedef {import('peer-id')} PeerId
22
- * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
23
- */
24
-
25
- class PingService {
26
- /**
27
- * @param {import('../')} libp2p
28
- */
29
- static getProtocolStr (libp2p) {
30
- return `/${libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
31
- }
32
-
33
- /**
34
- * @param {Libp2p} libp2p
35
- */
36
- constructor (libp2p) {
37
- this._libp2p = libp2p
38
- }
39
-
40
- /**
41
- * A handler to register with Libp2p to process ping messages
42
- *
43
- * @param {Object} options
44
- * @param {MuxedStream} options.stream
45
- */
46
- handleMessage ({ stream }) {
47
- return pipe(stream, stream)
48
- }
49
-
50
- /**
51
- * Ping a given peer and wait for its response, getting the operation latency.
52
- *
53
- * @param {PeerId|Multiaddr} peer
54
- * @returns {Promise<number>}
55
- */
56
- async ping (peer) {
57
- const protocol = `/${this._libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
58
- // @ts-ignore multiaddr might not have toB58String
59
- log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)
60
-
61
- const connection = await this._libp2p.dial(peer)
62
- const { stream } = await connection.newStream(protocol)
63
-
64
- const start = Date.now()
65
- const data = crypto.randomBytes(PING_LENGTH)
66
-
67
- const [result] = await pipe(
68
- [data],
69
- stream,
70
- (/** @type {MuxedStream} */ stream) => take(1, stream),
71
- toBuffer,
72
- collect
73
- )
74
- const end = Date.now()
75
-
76
- if (!equals(data, result)) {
77
- throw errCode(new Error('Received wrong ping ack'), codes.ERR_WRONG_PING_ACK)
78
- }
79
-
80
- return end - start
81
- }
82
- }
83
-
84
- module.exports = PingService
package/src/ping/util.js DELETED
@@ -1,18 +0,0 @@
1
- 'use strict'
2
-
3
- const crypto = require('libp2p-crypto')
4
- const constants = require('./constants')
5
-
6
- /**
7
- * @param {number} length
8
- */
9
- function rnd (length) {
10
- if (!length) {
11
- length = constants.PING_LENGTH
12
- }
13
- return crypto.randomBytes(length)
14
- }
15
-
16
- module.exports = {
17
- rnd
18
- }
@@ -1,84 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:pnet'), {
5
- trace: debug('libp2p:pnet:trace'),
6
- error: debug('libp2p:pnet:err')
7
- })
8
-
9
- const Errors = require('./errors')
10
- // @ts-ignore xsalsa20 has no types exported
11
- const xsalsa20 = require('xsalsa20')
12
- const KEY_LENGTH = require('./key-generator').KEY_LENGTH
13
- const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
14
- const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
15
-
16
- /**
17
- * Creates a stream iterable to encrypt messages in a private network
18
- *
19
- * @param {Uint8Array} nonce - The nonce to use in encryption
20
- * @param {Uint8Array} psk - The private shared key to use in encryption
21
- * @returns {*} a through iterable
22
- */
23
- module.exports.createBoxStream = (nonce, psk) => {
24
- const xor = xsalsa20(nonce, psk)
25
-
26
- return (/** @type {AsyncIterable<Uint8Array>} */ source) => (async function * () {
27
- for await (const chunk of source) {
28
- yield Uint8Array.from(xor.update(chunk.slice()))
29
- }
30
- })()
31
- }
32
-
33
- /**
34
- * Creates a stream iterable to decrypt messages in a private network
35
- *
36
- * @param {Uint8Array} nonce - The nonce of the remote peer
37
- * @param {Uint8Array} psk - The private shared key to use in decryption
38
- * @returns {*} a through iterable
39
- */
40
- module.exports.createUnboxStream = (nonce, psk) => {
41
- return (/** @type {AsyncIterable<Uint8Array>} */ source) => (async function * () {
42
- const xor = xsalsa20(nonce, psk)
43
- log.trace('Decryption enabled')
44
-
45
- for await (const chunk of source) {
46
- yield Uint8Array.from(xor.update(chunk.slice()))
47
- }
48
- })()
49
- }
50
-
51
- /**
52
- * Decode the version 1 psk from the given Uint8Array
53
- *
54
- * @param {Uint8Array} pskBuffer
55
- * @throws {INVALID_PSK}
56
- * @returns {{ tag?: string, codecName?: string, psk: Uint8Array }} The PSK metadata (tag, codecName, psk)
57
- */
58
- module.exports.decodeV1PSK = (pskBuffer) => {
59
- try {
60
- // This should pull from multibase/multicodec to allow for
61
- // more encoding flexibility. Ideally we'd consume the codecs
62
- // from the buffer line by line to evaluate the next line
63
- // programmatically instead of making assumptions about the
64
- // encodings of each line.
65
- const metadata = uint8ArrayToString(pskBuffer).split(/(?:\r\n|\r|\n)/g)
66
- const pskTag = metadata.shift()
67
- const codec = metadata.shift()
68
- const pskString = metadata.shift()
69
- const psk = pskString && uint8ArrayFromString(pskString, 'base16')
70
-
71
- if (!psk || psk.byteLength !== KEY_LENGTH) {
72
- throw new Error(Errors.INVALID_PSK)
73
- }
74
-
75
- return {
76
- tag: pskTag,
77
- codecName: codec,
78
- psk: psk
79
- }
80
- } catch (/** @type {any} */ err) {
81
- log.error(err)
82
- throw new Error(Errors.INVALID_PSK)
83
- }
84
- }
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports.INVALID_PEER = 'Not a valid peer connection'
4
- module.exports.INVALID_PSK = 'Your private shared key is invalid'
5
- module.exports.NO_LOCAL_ID = 'No local private key provided'
6
- module.exports.NO_HANDSHAKE_CONNECTION = 'No connection for the handshake provided'
7
- module.exports.STREAM_ENDED = 'Stream ended prematurely'
package/src/pnet/index.js DELETED
@@ -1,86 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')
4
- const log = Object.assign(debug('libp2p:pnet'), {
5
- error: debug('libp2p:pnet:err')
6
- })
7
- const { pipe } = require('it-pipe')
8
- const errcode = require('err-code')
9
- // @ts-ignore it-pair has no types exported
10
- const duplexPair = require('it-pair/duplex')
11
- const crypto = require('libp2p-crypto')
12
- const Errors = require('./errors')
13
- const {
14
- codes: { ERR_INVALID_PARAMETERS }
15
- } = require('../errors')
16
- const {
17
- createBoxStream,
18
- createUnboxStream,
19
- decodeV1PSK
20
- } = require('./crypto')
21
- // @ts-ignore it-handshake has no types exported
22
- const handshake = require('it-handshake')
23
- const { NONCE_LENGTH } = require('./key-generator')
24
-
25
- /**
26
- * @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
27
- */
28
-
29
- class Protector {
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
- * @param {Uint8Array} keyBuffer - The private shared key buffer
35
- * @class
36
- */
37
- constructor (keyBuffer) {
38
- const decodedPSK = decodeV1PSK(keyBuffer)
39
- this.psk = decodedPSK.psk
40
- this.tag = decodedPSK.tag
41
- }
42
-
43
- /**
44
- * Takes a given Connection and creates a private encryption stream
45
- * between its two peers from the PSK the Protector instance was
46
- * created with.
47
- *
48
- * @param {MultiaddrConnection} connection - The connection to protect
49
- * @returns {Promise<MultiaddrConnection>} A protected duplex iterable
50
- */
51
- async protect (connection) {
52
- if (!connection) {
53
- throw errcode(new Error(Errors.NO_HANDSHAKE_CONNECTION), ERR_INVALID_PARAMETERS)
54
- }
55
-
56
- // Exchange nonces
57
- log('protecting the connection')
58
- const localNonce = crypto.randomBytes(NONCE_LENGTH)
59
-
60
- const shake = handshake(connection)
61
- shake.write(localNonce)
62
-
63
- const result = await shake.reader.next(NONCE_LENGTH)
64
- const remoteNonce = result.value.slice()
65
- shake.rest()
66
-
67
- // Create the boxing/unboxing pipe
68
- log('exchanged nonces')
69
- const [internal, external] = duplexPair()
70
- pipe(
71
- external,
72
- // Encrypt all outbound traffic
73
- createBoxStream(localNonce, this.psk),
74
- shake.stream,
75
- // Decrypt all inbound traffic
76
- createUnboxStream(remoteNonce, this.psk),
77
- external
78
- ).catch(log.error)
79
-
80
- return internal
81
- }
82
- }
83
-
84
- module.exports = Protector
85
- module.exports.errors = Errors
86
- module.exports.generate = require('./key-generator')
@@ -1,33 +0,0 @@
1
- 'use strict'
2
-
3
- const crypto = require('libp2p-crypto')
4
- const KEY_LENGTH = 32
5
- const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
6
- const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
7
-
8
- /**
9
- * Generates a PSK that can be used in a libp2p-pnet private network
10
- *
11
- * @param {Uint8Array} bytes - An object to write the psk into
12
- * @returns {void}
13
- */
14
- function generate (bytes) {
15
- const psk = uint8ArrayToString(crypto.randomBytes(KEY_LENGTH), 'base16')
16
- const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk)
17
-
18
- bytes.set(key)
19
- }
20
-
21
- module.exports = generate
22
- module.exports.NONCE_LENGTH = 24
23
- module.exports.KEY_LENGTH = KEY_LENGTH
24
-
25
- try {
26
- // @ts-ignore This condition will always return 'false' since the types 'Module | undefined'
27
- if (require.main === module) {
28
- // @ts-ignore
29
- generate(process.stdout)
30
- }
31
- } catch (/** @type {any} */ error) {
32
-
33
- }
@@ -1,61 +0,0 @@
1
- 'use strict'
2
-
3
- // Pubsub adapter to keep API with handlers while not removed.
4
- /**
5
- * @typedef {import('libp2p-interfaces/src/pubsub').InMessage} InMessage
6
- * @typedef {import('libp2p-interfaces/src/pubsub')} PubsubRouter
7
- */
8
-
9
- /**
10
- * @param {{new(...args: any[]): PubsubRouter}} PubsubRouter
11
- * @param {import('.')} libp2p
12
- * @param {{ enabled: boolean; } & import(".").PubsubLocalOptions & import("libp2p-interfaces/src/pubsub").PubsubOptions} options
13
- */
14
- function pubsubAdapter (PubsubRouter, libp2p, options) {
15
- /** @type {PubsubRouter & { _subscribeAdapter: PubsubRouter['subscribe'], _unsubscribeAdapter: PubsubRouter['unsubscribe'] }} */
16
- // @ts-ignore we set the extra _subscribeAdapter and _unsubscribeAdapter properties afterwards
17
- const pubsub = new PubsubRouter(libp2p, options)
18
- pubsub._subscribeAdapter = pubsub.subscribe
19
- pubsub._unsubscribeAdapter = pubsub.unsubscribe
20
-
21
- /**
22
- * Subscribes to a given topic.
23
- *
24
- * @override
25
- * @param {string} topic
26
- * @param {(msg: InMessage) => void} [handler]
27
- * @returns {void}
28
- */
29
- function subscribe (topic, handler) {
30
- // Bind provided handler
31
- handler && pubsub.on(topic, handler)
32
- pubsub._subscribeAdapter(topic)
33
- }
34
-
35
- /**
36
- * Unsubscribe from the given topic.
37
- *
38
- * @override
39
- * @param {string} topic
40
- * @param {(msg: InMessage) => void} [handler]
41
- * @returns {void}
42
- */
43
- function unsubscribe (topic, handler) {
44
- if (!handler) {
45
- pubsub.removeAllListeners(topic)
46
- } else {
47
- pubsub.removeListener(topic, handler)
48
- }
49
-
50
- if (pubsub.listenerCount(topic) === 0) {
51
- pubsub._unsubscribeAdapter(topic)
52
- }
53
- }
54
-
55
- pubsub.subscribe = subscribe
56
- pubsub.unsubscribe = unsubscribe
57
-
58
- return pubsub
59
- }
60
-
61
- module.exports = pubsubAdapter