libp2p 0.36.0 → 0.36.2-1473044

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/LICENSE +3 -21
  2. package/README.md +13 -10
  3. package/dist/src/address-manager/index.d.ts +33 -52
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +81 -0
  6. package/dist/src/address-manager/index.js.map +1 -0
  7. package/dist/src/circuit/auto-relay.d.ts +24 -85
  8. package/dist/src/circuit/auto-relay.d.ts.map +1 -1
  9. package/dist/src/circuit/auto-relay.js +215 -0
  10. package/dist/src/circuit/auto-relay.js.map +1 -0
  11. package/dist/src/circuit/circuit/hop.d.ts +26 -53
  12. package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
  13. package/dist/src/circuit/circuit/hop.js +138 -0
  14. package/dist/src/circuit/circuit/hop.js.map +1 -0
  15. package/dist/src/circuit/circuit/stop.d.ts +18 -10
  16. package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
  17. package/dist/src/circuit/circuit/stop.js +49 -0
  18. package/dist/src/circuit/circuit/stop.js.map +1 -0
  19. package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +59 -0
  22. package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
  23. package/dist/src/circuit/circuit/utils.d.ts +3 -6
  24. package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
  25. package/dist/src/circuit/circuit/utils.js +43 -0
  26. package/dist/src/circuit/circuit/utils.js.map +1 -0
  27. package/dist/src/circuit/constants.d.ts +24 -6
  28. package/dist/src/circuit/constants.d.ts.map +1 -1
  29. package/dist/src/circuit/constants.js +26 -0
  30. package/dist/src/circuit/constants.js.map +1 -0
  31. package/dist/src/circuit/index.d.ts +41 -74
  32. package/dist/src/circuit/index.d.ts.map +1 -1
  33. package/dist/src/circuit/index.js +69 -0
  34. package/dist/src/circuit/index.js.map +1 -0
  35. package/dist/src/circuit/listener.d.ts +8 -3
  36. package/dist/src/circuit/listener.d.ts.map +1 -1
  37. package/dist/src/circuit/listener.js +54 -0
  38. package/dist/src/circuit/listener.js.map +1 -0
  39. package/dist/src/circuit/multicodec.d.ts +1 -1
  40. package/dist/src/circuit/multicodec.d.ts.map +1 -1
  41. package/dist/src/circuit/multicodec.js +2 -0
  42. package/dist/src/circuit/multicodec.js.map +1 -0
  43. package/dist/src/circuit/pb/index.d.ts +51 -0
  44. package/dist/src/circuit/pb/index.d.ts.map +1 -0
  45. package/dist/src/circuit/pb/index.js +72 -0
  46. package/dist/src/circuit/pb/index.js.map +1 -0
  47. package/dist/src/circuit/transport.d.ts +18 -78
  48. package/dist/src/circuit/transport.d.ts.map +1 -1
  49. package/dist/src/circuit/transport.js +190 -0
  50. package/dist/src/circuit/transport.js.map +1 -0
  51. package/dist/src/circuit/utils.d.ts +5 -2
  52. package/dist/src/circuit/utils.d.ts.map +1 -1
  53. package/dist/src/circuit/utils.js +11 -0
  54. package/dist/src/circuit/utils.js.map +1 -0
  55. package/dist/src/config.d.ts +3 -85
  56. package/dist/src/config.d.ts.map +1 -1
  57. package/dist/src/config.js +93 -0
  58. package/dist/src/config.js.map +1 -0
  59. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  60. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  61. package/dist/src/connection-manager/auto-dialler.js +105 -0
  62. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  63. package/dist/src/connection-manager/index.d.ts +79 -144
  64. package/dist/src/connection-manager/index.d.ts.map +1 -1
  65. package/dist/src/connection-manager/index.js +295 -0
  66. package/dist/src/connection-manager/index.js.map +1 -0
  67. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  68. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  69. package/dist/src/connection-manager/latency-monitor.js +220 -0
  70. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  71. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  72. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  73. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  74. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  75. package/dist/src/constants.d.ts +22 -10
  76. package/dist/src/constants.d.ts.map +1 -1
  77. package/dist/src/constants.js +27 -0
  78. package/dist/src/constants.js.map +1 -0
  79. package/dist/src/content-routing/index.d.ts +26 -81
  80. package/dist/src/content-routing/index.d.ts.map +1 -1
  81. package/dist/src/content-routing/index.js +99 -0
  82. package/dist/src/content-routing/index.js.map +1 -0
  83. package/dist/src/content-routing/utils.d.ts +6 -49
  84. package/dist/src/content-routing/utils.d.ts.map +1 -1
  85. package/dist/src/content-routing/utils.js +42 -0
  86. package/dist/src/content-routing/utils.js.map +1 -0
  87. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  88. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  89. package/dist/src/dht/dht-content-routing.js +32 -0
  90. package/dist/src/dht/dht-content-routing.js.map +1 -0
  91. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  92. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  93. package/dist/src/dht/dht-peer-routing.js +26 -0
  94. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  95. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  96. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  97. package/dist/src/dialer/auto-dialer.js +24 -0
  98. package/dist/src/dialer/auto-dialer.js.map +1 -0
  99. package/dist/src/dialer/dial-request.d.ts +18 -46
  100. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  101. package/dist/src/dialer/dial-request.js +83 -0
  102. package/dist/src/dialer/dial-request.js.map +1 -0
  103. package/dist/src/dialer/index.d.ts +41 -148
  104. package/dist/src/dialer/index.d.ts.map +1 -1
  105. package/dist/src/dialer/index.js +280 -0
  106. package/dist/src/dialer/index.js.map +1 -0
  107. package/dist/src/errors.d.ts +68 -63
  108. package/dist/src/errors.d.ts.map +1 -1
  109. package/dist/src/errors.js +73 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/fetch/constants.d.ts +1 -1
  112. package/dist/src/fetch/constants.d.ts.map +1 -1
  113. package/dist/src/fetch/constants.js +3 -0
  114. package/dist/src/fetch/constants.js.map +1 -0
  115. package/dist/src/fetch/index.d.ts +30 -49
  116. package/dist/src/fetch/index.d.ts.map +1 -1
  117. package/dist/src/fetch/index.js +129 -0
  118. package/dist/src/fetch/index.js.map +1 -0
  119. package/dist/src/fetch/pb/proto.d.ts +26 -0
  120. package/dist/src/fetch/pb/proto.d.ts.map +1 -0
  121. package/dist/src/fetch/pb/proto.js +44 -0
  122. package/dist/src/fetch/pb/proto.js.map +1 -0
  123. package/dist/src/get-peer.d.ts +4 -11
  124. package/dist/src/get-peer.d.ts.map +1 -1
  125. package/dist/src/get-peer.js +43 -0
  126. package/dist/src/get-peer.js.map +1 -0
  127. package/dist/src/identify/consts.d.ts +9 -9
  128. package/dist/src/identify/consts.d.ts.map +1 -1
  129. package/dist/src/identify/consts.js +11 -0
  130. package/dist/src/identify/consts.js.map +1 -0
  131. package/dist/src/identify/index.d.ts +42 -96
  132. package/dist/src/identify/index.d.ts.map +1 -1
  133. package/dist/src/identify/index.js +322 -0
  134. package/dist/src/identify/index.js.map +1 -0
  135. package/dist/src/identify/pb/message.d.ts +15 -0
  136. package/dist/src/identify/pb/message.d.ts.map +1 -0
  137. package/dist/src/identify/pb/message.js +24 -0
  138. package/dist/src/identify/pb/message.js.map +1 -0
  139. package/dist/src/index.d.ts +162 -581
  140. package/dist/src/index.d.ts.map +1 -1
  141. package/dist/src/index.js +9 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/insecure/index.d.ts +9 -0
  144. package/dist/src/insecure/index.d.ts.map +1 -0
  145. package/dist/src/insecure/index.js +81 -0
  146. package/dist/src/insecure/index.js.map +1 -0
  147. package/dist/src/insecure/pb/proto.d.ts +28 -0
  148. package/dist/src/insecure/pb/proto.d.ts.map +1 -0
  149. package/dist/src/insecure/pb/proto.js +46 -0
  150. package/dist/src/insecure/pb/proto.js.map +1 -0
  151. package/dist/src/keychain/cms.d.ts +6 -14
  152. package/dist/src/keychain/cms.d.ts.map +1 -1
  153. package/dist/src/keychain/cms.js +129 -0
  154. package/dist/src/keychain/cms.js.map +1 -0
  155. package/dist/src/keychain/index.d.ts +61 -81
  156. package/dist/src/keychain/index.d.ts.map +1 -1
  157. package/dist/src/keychain/index.js +493 -0
  158. package/dist/src/keychain/index.js.map +1 -0
  159. package/dist/src/keychain/util.d.ts +3 -6
  160. package/dist/src/keychain/util.d.ts.map +1 -1
  161. package/dist/src/keychain/util.js +79 -0
  162. package/dist/src/keychain/util.js.map +1 -0
  163. package/dist/src/libp2p.d.ts +78 -0
  164. package/dist/src/libp2p.d.ts.map +1 -0
  165. package/dist/src/libp2p.js +375 -0
  166. package/dist/src/libp2p.js.map +1 -0
  167. package/dist/src/metrics/index.d.ts +47 -104
  168. package/dist/src/metrics/index.d.ts.map +1 -1
  169. package/dist/src/metrics/index.js +231 -0
  170. package/dist/src/metrics/index.js.map +1 -0
  171. package/dist/src/metrics/moving-average.d.ts +14 -0
  172. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  173. package/dist/src/metrics/moving-average.js +40 -0
  174. package/dist/src/metrics/moving-average.js.map +1 -0
  175. package/dist/src/metrics/stats.d.ts +41 -93
  176. package/dist/src/metrics/stats.d.ts.map +1 -1
  177. package/dist/src/metrics/stats.js +183 -0
  178. package/dist/src/metrics/stats.js.map +1 -0
  179. package/dist/src/nat-manager.d.ts +42 -99
  180. package/dist/src/nat-manager.d.ts.map +1 -1
  181. package/dist/src/nat-manager.js +114 -0
  182. package/dist/src/nat-manager.js.map +1 -0
  183. package/dist/src/peer-record-updater.d.ts +15 -0
  184. package/dist/src/peer-record-updater.d.ts.map +1 -0
  185. package/dist/src/peer-record-updater.js +44 -0
  186. package/dist/src/peer-record-updater.js.map +1 -0
  187. package/dist/src/peer-routing.d.ts +39 -84
  188. package/dist/src/peer-routing.d.ts.map +1 -1
  189. package/dist/src/peer-routing.js +108 -0
  190. package/dist/src/peer-routing.js.map +1 -0
  191. package/dist/src/ping/constants.d.ts +4 -4
  192. package/dist/src/ping/constants.d.ts.map +1 -1
  193. package/dist/src/ping/constants.js +5 -0
  194. package/dist/src/ping/constants.js.map +1 -0
  195. package/dist/src/ping/index.d.ts +26 -33
  196. package/dist/src/ping/index.d.ts.map +1 -1
  197. package/dist/src/ping/index.js +56 -0
  198. package/dist/src/ping/index.js.map +1 -0
  199. package/dist/src/pnet/crypto.d.ts +15 -5
  200. package/dist/src/pnet/crypto.d.ts.map +1 -1
  201. package/dist/src/pnet/crypto.js +60 -0
  202. package/dist/src/pnet/crypto.js.map +1 -0
  203. package/dist/src/pnet/errors.d.ts +5 -5
  204. package/dist/src/pnet/errors.d.ts.map +1 -1
  205. package/dist/src/pnet/errors.js +6 -0
  206. package/dist/src/pnet/errors.js.map +1 -0
  207. package/dist/src/pnet/index.d.ts +11 -20
  208. package/dist/src/pnet/index.d.ts.map +1 -1
  209. package/dist/src/pnet/index.js +66 -0
  210. package/dist/src/pnet/index.js.map +1 -0
  211. package/dist/src/pnet/key-generator.d.ts +3 -7
  212. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  213. package/dist/src/pnet/key-generator.js +25 -0
  214. package/dist/src/pnet/key-generator.js.map +1 -0
  215. package/dist/src/registrar.d.ts +27 -65
  216. package/dist/src/registrar.d.ts.map +1 -1
  217. package/dist/src/registrar.js +159 -0
  218. package/dist/src/registrar.js.map +1 -0
  219. package/dist/src/transport-manager.d.ts +34 -82
  220. package/dist/src/transport-manager.d.ts.map +1 -1
  221. package/dist/src/transport-manager.js +223 -0
  222. package/dist/src/transport-manager.js.map +1 -0
  223. package/dist/src/upgrader.d.ts +49 -129
  224. package/dist/src/upgrader.d.ts.map +1 -1
  225. package/dist/src/upgrader.js +402 -0
  226. package/dist/src/upgrader.js.map +1 -0
  227. package/dist/src/version.d.ts +3 -0
  228. package/dist/src/version.d.ts.map +1 -0
  229. package/dist/src/version.js +3 -0
  230. package/dist/src/version.js.map +1 -0
  231. package/package.json +150 -197
  232. package/src/address-manager/index.ts +129 -0
  233. package/src/circuit/README.md +16 -11
  234. package/src/circuit/auto-relay.ts +284 -0
  235. package/src/circuit/circuit/hop.ts +211 -0
  236. package/src/circuit/circuit/stop.ts +78 -0
  237. package/src/circuit/circuit/stream-handler.ts +86 -0
  238. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  239. package/src/circuit/constants.ts +31 -0
  240. package/src/circuit/index.ts +120 -0
  241. package/src/circuit/{listener.js → listener.ts} +21 -27
  242. package/src/circuit/multicodec.ts +2 -0
  243. package/src/circuit/{protocol → pb}/index.proto +1 -1
  244. package/src/circuit/pb/index.ts +88 -0
  245. package/src/circuit/transport.ts +216 -0
  246. package/src/circuit/utils.ts +12 -0
  247. package/src/config.ts +101 -0
  248. package/src/connection-manager/auto-dialler.ts +154 -0
  249. package/src/connection-manager/index.ts +422 -0
  250. package/src/connection-manager/latency-monitor.ts +319 -0
  251. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  252. package/src/constants.ts +31 -0
  253. package/src/content-routing/index.ts +143 -0
  254. package/src/content-routing/utils.ts +54 -0
  255. package/src/dht/dht-content-routing.ts +43 -0
  256. package/src/dht/dht-peer-routing.ts +35 -0
  257. package/src/dialer/auto-dialer.ts +40 -0
  258. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  259. package/src/dialer/index.ts +371 -0
  260. package/src/errors.ts +71 -0
  261. package/src/fetch/README.md +1 -1
  262. package/src/fetch/constants.ts +3 -0
  263. package/src/fetch/index.ts +167 -0
  264. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  265. package/src/fetch/pb/proto.ts +58 -0
  266. package/src/get-peer.ts +57 -0
  267. package/src/identify/consts.ts +13 -0
  268. package/src/identify/index.ts +445 -0
  269. package/src/identify/{message.proto → pb/message.proto} +0 -0
  270. package/src/identify/pb/message.ts +36 -0
  271. package/src/index.ts +242 -0
  272. package/src/insecure/index.ts +101 -0
  273. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  274. package/src/insecure/pb/proto.ts +61 -0
  275. package/src/keychain/{cms.js → cms.ts} +62 -58
  276. package/src/keychain/index.ts +588 -0
  277. package/src/keychain/{util.js → util.ts} +7 -17
  278. package/src/libp2p.ts +513 -0
  279. package/src/metrics/index.ts +310 -0
  280. package/src/metrics/moving-average.ts +53 -0
  281. package/src/metrics/stats.ts +238 -0
  282. package/src/nat-manager.ts +194 -0
  283. package/src/peer-record-updater.ts +55 -0
  284. package/src/peer-routing.ts +185 -0
  285. package/src/ping/README.md +1 -1
  286. package/src/ping/constants.ts +5 -0
  287. package/src/ping/index.ts +83 -0
  288. package/src/pnet/README.md +2 -2
  289. package/src/pnet/crypto.ts +67 -0
  290. package/src/pnet/errors.ts +5 -0
  291. package/src/pnet/index.ts +95 -0
  292. package/src/pnet/key-generator.ts +28 -0
  293. package/src/registrar.ts +205 -0
  294. package/src/transport-manager.ts +279 -0
  295. package/src/upgrader.ts +499 -0
  296. package/src/version.ts +3 -0
  297. package/dist/index.min.js +0 -55
  298. package/dist/src/circuit/protocol/index.d.ts +0 -173
  299. package/dist/src/fetch/proto.d.ts +0 -134
  300. package/dist/src/identify/message.d.ts +0 -95
  301. package/dist/src/insecure/plaintext.d.ts +0 -12
  302. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  303. package/dist/src/insecure/proto.d.ts +0 -128
  304. package/dist/src/metrics/old-peers.d.ts +0 -3
  305. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  306. package/dist/src/metrics/tracked-map.d.ts +0 -8
  307. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  308. package/dist/src/peer-store/address-book.d.ts +0 -67
  309. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  310. package/dist/src/peer-store/index.d.ts +0 -58
  311. package/dist/src/peer-store/index.d.ts.map +0 -1
  312. package/dist/src/peer-store/key-book.d.ts +0 -40
  313. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  314. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  315. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  316. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  317. package/dist/src/peer-store/proto-book.d.ts +0 -43
  318. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  319. package/dist/src/peer-store/store.d.ts +0 -73
  320. package/dist/src/peer-store/store.d.ts.map +0 -1
  321. package/dist/src/peer-store/types.d.ts +0 -202
  322. package/dist/src/peer-store/types.d.ts.map +0 -1
  323. package/dist/src/ping/util.d.ts +0 -5
  324. package/dist/src/ping/util.d.ts.map +0 -1
  325. package/dist/src/pubsub-adapter.d.ts +0 -22
  326. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  327. package/dist/src/record/envelope/envelope.d.ts +0 -77
  328. package/dist/src/record/envelope/index.d.ts +0 -80
  329. package/dist/src/record/envelope/index.d.ts.map +0 -1
  330. package/dist/src/record/peer-record/consts.d.ts +0 -4
  331. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  332. package/dist/src/record/peer-record/index.d.ts +0 -60
  333. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  334. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  335. package/dist/src/record/utils.d.ts +0 -12
  336. package/dist/src/record/utils.d.ts.map +0 -1
  337. package/dist/src/types.d.ts +0 -90
  338. package/dist/src/types.d.ts.map +0 -1
  339. package/src/address-manager/index.js +0 -96
  340. package/src/circuit/auto-relay.js +0 -302
  341. package/src/circuit/circuit/hop.js +0 -205
  342. package/src/circuit/circuit/stop.js +0 -81
  343. package/src/circuit/circuit/stream-handler.js +0 -94
  344. package/src/circuit/constants.js +0 -12
  345. package/src/circuit/index.js +0 -102
  346. package/src/circuit/multicodec.js +0 -5
  347. package/src/circuit/protocol/index.d.ts +0 -173
  348. package/src/circuit/protocol/index.js +0 -530
  349. package/src/circuit/transport.js +0 -229
  350. package/src/circuit/utils.js +0 -17
  351. package/src/config.js +0 -114
  352. package/src/connection-manager/auto-dialler.js +0 -132
  353. package/src/connection-manager/index.js +0 -363
  354. package/src/connection-manager/latency-monitor.js +0 -264
  355. package/src/constants.js +0 -18
  356. package/src/content-routing/index.js +0 -163
  357. package/src/content-routing/utils.js +0 -89
  358. package/src/dht/dht-content-routing.js +0 -44
  359. package/src/dht/dht-peer-routing.js +0 -51
  360. package/src/dialer/index.js +0 -376
  361. package/src/errors.js +0 -66
  362. package/src/fetch/constants.js +0 -6
  363. package/src/fetch/index.js +0 -159
  364. package/src/fetch/proto.d.ts +0 -134
  365. package/src/fetch/proto.js +0 -333
  366. package/src/get-peer.js +0 -49
  367. package/src/identify/consts.js +0 -15
  368. package/src/identify/index.js +0 -384
  369. package/src/identify/message.d.ts +0 -95
  370. package/src/identify/message.js +0 -328
  371. package/src/index.js +0 -811
  372. package/src/insecure/plaintext.js +0 -95
  373. package/src/insecure/proto.d.ts +0 -128
  374. package/src/insecure/proto.js +0 -371
  375. package/src/keychain/index.js +0 -561
  376. package/src/metrics/index.js +0 -290
  377. package/src/metrics/old-peers.js +0 -16
  378. package/src/metrics/stats.js +0 -270
  379. package/src/metrics/tracked-map.js +0 -94
  380. package/src/nat-manager.js +0 -197
  381. package/src/peer-routing.js +0 -176
  382. package/src/peer-store/README.md +0 -145
  383. package/src/peer-store/address-book.js +0 -382
  384. package/src/peer-store/index.js +0 -121
  385. package/src/peer-store/key-book.js +0 -141
  386. package/src/peer-store/metadata-book.js +0 -250
  387. package/src/peer-store/pb/peer.d.ts +0 -222
  388. package/src/peer-store/pb/peer.js +0 -643
  389. package/src/peer-store/pb/peer.proto +0 -31
  390. package/src/peer-store/proto-book.js +0 -237
  391. package/src/peer-store/store.js +0 -263
  392. package/src/peer-store/types.ts +0 -245
  393. package/src/ping/constants.js +0 -8
  394. package/src/ping/index.js +0 -85
  395. package/src/ping/util.js +0 -18
  396. package/src/pnet/crypto.js +0 -84
  397. package/src/pnet/errors.js +0 -7
  398. package/src/pnet/index.js +0 -86
  399. package/src/pnet/key-generator.js +0 -33
  400. package/src/pubsub-adapter.js +0 -61
  401. package/src/record/README.md +0 -130
  402. package/src/record/envelope/envelope.d.ts +0 -77
  403. package/src/record/envelope/envelope.js +0 -243
  404. package/src/record/envelope/envelope.proto +0 -19
  405. package/src/record/envelope/index.js +0 -183
  406. package/src/record/peer-record/consts.js +0 -14
  407. package/src/record/peer-record/index.js +0 -113
  408. package/src/record/peer-record/peer-record.d.ts +0 -133
  409. package/src/record/peer-record/peer-record.js +0 -367
  410. package/src/record/peer-record/peer-record.proto +0 -18
  411. package/src/record/utils.js +0 -25
  412. package/src/registrar.js +0 -127
  413. package/src/transport-manager.js +0 -269
  414. package/src/types.ts +0 -98
  415. package/src/upgrader.js +0 -492
@@ -0,0 +1,445 @@
1
+ import { logger } from '@libp2p/logger'
2
+ import errCode from 'err-code'
3
+ import * as lp from 'it-length-prefixed'
4
+ import { pipe } from 'it-pipe'
5
+ import all from 'it-all'
6
+ import take from 'it-take'
7
+ import drain from 'it-drain'
8
+ import first from 'it-first'
9
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
10
+ import { Multiaddr, protocols } from '@multiformats/multiaddr'
11
+ import { Identify } from './pb/message.js'
12
+ import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
13
+ import {
14
+ MULTICODEC_IDENTIFY,
15
+ MULTICODEC_IDENTIFY_PUSH,
16
+ IDENTIFY_PROTOCOL_VERSION,
17
+ MULTICODEC_IDENTIFY_PROTOCOL_NAME,
18
+ MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME,
19
+ MULTICODEC_IDENTIFY_PROTOCOL_VERSION,
20
+ MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION
21
+ } from './consts.js'
22
+ import { codes } from '../errors.js'
23
+ import type { IncomingStreamData } from '@libp2p/interfaces/registrar'
24
+ import type { Connection } from '@libp2p/interfaces/connection'
25
+ import type { Startable } from '@libp2p/interfaces'
26
+ import { peerIdFromKeys, peerIdFromString } from '@libp2p/peer-id'
27
+ import type { Components } from '@libp2p/interfaces/components'
28
+
29
+ const log = logger('libp2p:identify')
30
+
31
+ export interface HostProperties {
32
+ agentVersion: string
33
+ }
34
+
35
+ export interface IdentifyServiceInit {
36
+ protocolPrefix: string
37
+ host: HostProperties
38
+ }
39
+
40
+ export class IdentifyService implements Startable {
41
+ private readonly components: Components
42
+ private readonly identifyProtocolStr: string
43
+ private readonly identifyPushProtocolStr: string
44
+ private readonly host: {
45
+ protocolVersion: string
46
+ agentVersion: string
47
+ }
48
+
49
+ private started: boolean
50
+
51
+ constructor (components: Components, init: IdentifyServiceInit) {
52
+ this.components = components
53
+ this.started = false
54
+
55
+ this.handleMessage = this.handleMessage.bind(this)
56
+
57
+ this.identifyProtocolStr = `/${init.protocolPrefix}/${MULTICODEC_IDENTIFY_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PROTOCOL_VERSION}`
58
+ this.identifyPushProtocolStr = `/${init.protocolPrefix}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION}`
59
+
60
+ // Store self host metadata
61
+ this.host = {
62
+ protocolVersion: `${init.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,
63
+ ...init.host
64
+ }
65
+
66
+ // When a new connection happens, trigger identify
67
+ this.components.getConnectionManager().addEventListener('peer:connect', (evt) => {
68
+ const connection = evt.detail
69
+ this.identify(connection).catch(log.error)
70
+ })
71
+
72
+ // When self multiaddrs change, trigger identify-push
73
+ this.components.getPeerStore().addEventListener('change:multiaddrs', (evt) => {
74
+ const { peerId } = evt.detail
75
+
76
+ if (this.components.getPeerId().equals(peerId)) {
77
+ void this.pushToPeerStore().catch(err => log.error(err))
78
+ }
79
+ })
80
+
81
+ // When self protocols change, trigger identify-push
82
+ this.components.getPeerStore().addEventListener('change:protocols', (evt) => {
83
+ const { peerId } = evt.detail
84
+
85
+ if (this.components.getPeerId().equals(peerId)) {
86
+ void this.pushToPeerStore().catch(err => log.error(err))
87
+ }
88
+ })
89
+ }
90
+
91
+ isStarted () {
92
+ return this.started
93
+ }
94
+
95
+ async start () {
96
+ if (this.started) {
97
+ return
98
+ }
99
+
100
+ await this.components.getPeerStore().metadataBook.setValue(this.components.getPeerId(), 'AgentVersion', uint8ArrayFromString(this.host.agentVersion))
101
+ await this.components.getPeerStore().metadataBook.setValue(this.components.getPeerId(), 'ProtocolVersion', uint8ArrayFromString(this.host.protocolVersion))
102
+
103
+ await this.components.getRegistrar().handle([
104
+ this.identifyProtocolStr,
105
+ this.identifyPushProtocolStr
106
+ ], (data) => {
107
+ void this.handleMessage(data)?.catch(err => {
108
+ log.error(err)
109
+ })
110
+ })
111
+
112
+ this.started = true
113
+ }
114
+
115
+ async stop () {
116
+ await this.components.getRegistrar().unhandle(this.identifyProtocolStr)
117
+ await this.components.getRegistrar().unhandle(this.identifyPushProtocolStr)
118
+
119
+ this.started = false
120
+ }
121
+
122
+ /**
123
+ * Send an Identify Push update to the list of connections
124
+ */
125
+ async push (connections: Connection[]): Promise<void> {
126
+ const signedPeerRecord = await this.components.getPeerStore().addressBook.getRawEnvelope(this.components.getPeerId())
127
+ const listenAddrs = this.components.getAddressManager().getAddresses().map((ma) => ma.bytes)
128
+ const protocols = await this.components.getPeerStore().protoBook.get(this.components.getPeerId())
129
+
130
+ const pushes = connections.map(async connection => {
131
+ try {
132
+ const { stream } = await connection.newStream([this.identifyPushProtocolStr])
133
+
134
+ await pipe(
135
+ [Identify.encode({
136
+ listenAddrs,
137
+ signedPeerRecord,
138
+ protocols
139
+ })],
140
+ lp.encode(),
141
+ stream,
142
+ drain
143
+ )
144
+ } catch (err: any) {
145
+ // Just log errors
146
+ log.error('could not push identify update to peer', err)
147
+ }
148
+ })
149
+
150
+ await Promise.all(pushes)
151
+ }
152
+
153
+ /**
154
+ * Calls `push` on all peer connections
155
+ */
156
+ async pushToPeerStore () {
157
+ // Do not try to push if we are not running
158
+ if (!this.isStarted()) {
159
+ return
160
+ }
161
+
162
+ const connections: Connection[] = []
163
+
164
+ for (const [peerIdStr, conns] of this.components.getConnectionManager().getConnectionMap().entries()) {
165
+ const peerId = peerIdFromString(peerIdStr)
166
+ const peer = await this.components.getPeerStore().get(peerId)
167
+
168
+ if (!peer.protocols.includes(this.identifyPushProtocolStr)) {
169
+ continue
170
+ }
171
+
172
+ connections.push(...conns)
173
+ }
174
+
175
+ await this.push(connections)
176
+ }
177
+
178
+ /**
179
+ * Requests the `Identify` message from peer associated with the given `connection`.
180
+ * If the identified peer does not match the `PeerId` associated with the connection,
181
+ * an error will be thrown.
182
+ */
183
+ async identify (connection: Connection): Promise<void> {
184
+ const { stream } = await connection.newStream([this.identifyProtocolStr])
185
+ const [data] = await pipe(
186
+ [],
187
+ stream,
188
+ lp.decode(),
189
+ (source) => take(source, 1),
190
+ async (source) => await all(source)
191
+ )
192
+
193
+ if (data == null) {
194
+ throw errCode(new Error('No data could be retrieved'), codes.ERR_CONNECTION_ENDED)
195
+ }
196
+
197
+ let message: Identify
198
+ try {
199
+ message = Identify.decode(data)
200
+ } catch (err: any) {
201
+ throw errCode(err, codes.ERR_INVALID_MESSAGE)
202
+ }
203
+
204
+ const {
205
+ publicKey,
206
+ listenAddrs,
207
+ protocols,
208
+ observedAddr,
209
+ signedPeerRecord,
210
+ agentVersion,
211
+ protocolVersion
212
+ } = message
213
+
214
+ if (publicKey == null) {
215
+ throw errCode(new Error('public key was missing from identify message'), codes.ERR_MISSING_PUBLIC_KEY)
216
+ }
217
+
218
+ const id = await peerIdFromKeys(publicKey)
219
+
220
+ if (!connection.remotePeer.equals(id)) {
221
+ throw errCode(new Error('identified peer does not match the expected peer'), codes.ERR_INVALID_PEER)
222
+ }
223
+
224
+ if (this.components.getPeerId().equals(id)) {
225
+ throw errCode(new Error('identified peer is our own peer id?'), codes.ERR_INVALID_PEER)
226
+ }
227
+
228
+ // Get the observedAddr if there is one
229
+ const cleanObservedAddr = IdentifyService.getCleanMultiaddr(observedAddr)
230
+
231
+ if (signedPeerRecord != null) {
232
+ log('received signed peer record from %p', id)
233
+
234
+ try {
235
+ const envelope = await RecordEnvelope.openAndCertify(signedPeerRecord, PeerRecord.DOMAIN)
236
+
237
+ if (!envelope.peerId.equals(id)) {
238
+ throw errCode(new Error('identified peer does not match the expected peer'), codes.ERR_INVALID_PEER)
239
+ }
240
+
241
+ if (await this.components.getPeerStore().addressBook.consumePeerRecord(envelope)) {
242
+ await this.components.getPeerStore().protoBook.set(id, protocols)
243
+
244
+ if (agentVersion != null) {
245
+ await this.components.getPeerStore().metadataBook.setValue(id, 'AgentVersion', uint8ArrayFromString(agentVersion))
246
+ }
247
+
248
+ if (protocolVersion != null) {
249
+ await this.components.getPeerStore().metadataBook.setValue(id, 'ProtocolVersion', uint8ArrayFromString(protocolVersion))
250
+ }
251
+
252
+ log('identify completed for peer %p and protocols %o', id, protocols)
253
+
254
+ return
255
+ }
256
+ } catch (err: any) {
257
+ log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
258
+ }
259
+ } else {
260
+ log('no signed peer record received from %p', id)
261
+ }
262
+
263
+ log('falling back to legacy addresses from %p', id)
264
+
265
+ // LEGACY: Update peers data in PeerStore
266
+ try {
267
+ await this.components.getPeerStore().addressBook.set(id, listenAddrs.map((addr) => new Multiaddr(addr)))
268
+ } catch (err: any) {
269
+ log.error('received invalid addrs', err)
270
+ }
271
+
272
+ await this.components.getPeerStore().protoBook.set(id, protocols)
273
+
274
+ if (agentVersion != null) {
275
+ await this.components.getPeerStore().metadataBook.setValue(id, 'AgentVersion', uint8ArrayFromString(agentVersion))
276
+ }
277
+
278
+ if (protocolVersion != null) {
279
+ await this.components.getPeerStore().metadataBook.setValue(id, 'ProtocolVersion', uint8ArrayFromString(protocolVersion))
280
+ }
281
+
282
+ log('identify completed for peer %p and protocols %o', id, protocols)
283
+
284
+ // TODO: Add and score our observed addr
285
+ log('received observed address of %s', cleanObservedAddr?.toString())
286
+ // this.components.getAddressManager().addObservedAddr(observedAddr)
287
+ }
288
+
289
+ /**
290
+ * A handler to register with Libp2p to process identify messages
291
+ */
292
+ handleMessage (data: IncomingStreamData) {
293
+ const { protocol } = data
294
+
295
+ switch (protocol) {
296
+ case this.identifyProtocolStr:
297
+ return this._handleIdentify(data)
298
+ case this.identifyPushProtocolStr:
299
+ return this._handlePush(data)
300
+ default:
301
+ log.error('cannot handle unknown protocol %s', protocol)
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Sends the `Identify` response with the Signed Peer Record
307
+ * to the requesting peer over the given `connection`
308
+ */
309
+ async _handleIdentify (data: IncomingStreamData) {
310
+ const { connection, stream } = data
311
+ try {
312
+ const publicKey = this.components.getPeerId().publicKey ?? new Uint8Array(0)
313
+ const peerData = await this.components.getPeerStore().get(this.components.getPeerId())
314
+ const multiaddrs = this.components.getAddressManager().getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
315
+ let signedPeerRecord = peerData.peerRecordEnvelope
316
+
317
+ if (multiaddrs.length > 0 && signedPeerRecord == null) {
318
+ const peerRecord = new PeerRecord({
319
+ peerId: this.components.getPeerId(),
320
+ multiaddrs
321
+ })
322
+
323
+ const envelope = await RecordEnvelope.seal(peerRecord, this.components.getPeerId())
324
+ await this.components.getPeerStore().addressBook.consumePeerRecord(envelope)
325
+ signedPeerRecord = envelope.marshal()
326
+ }
327
+
328
+ const message = Identify.encode({
329
+ protocolVersion: this.host.protocolVersion,
330
+ agentVersion: this.host.agentVersion,
331
+ publicKey,
332
+ listenAddrs: multiaddrs.map(addr => addr.bytes),
333
+ signedPeerRecord,
334
+ observedAddr: connection.remoteAddr.bytes,
335
+ protocols: peerData.protocols
336
+ })
337
+
338
+ await pipe(
339
+ [message],
340
+ lp.encode(),
341
+ stream,
342
+ drain
343
+ )
344
+ } catch (err: any) {
345
+ log.error('could not respond to identify request', err)
346
+ }
347
+ }
348
+
349
+ /**
350
+ * Reads the Identify Push message from the given `connection`
351
+ */
352
+ async _handlePush (data: IncomingStreamData) {
353
+ const { connection, stream } = data
354
+
355
+ let message: Identify | undefined
356
+ try {
357
+ const data = await pipe(
358
+ [],
359
+ stream,
360
+ lp.decode(),
361
+ async (source) => await first(source)
362
+ )
363
+
364
+ if (data != null) {
365
+ message = Identify.decode(data)
366
+ }
367
+ } catch (err: any) {
368
+ return log.error('received invalid message', err)
369
+ }
370
+
371
+ if (message == null) {
372
+ return log.error('received invalid message')
373
+ }
374
+
375
+ const id = connection.remotePeer
376
+
377
+ if (this.components.getPeerId().equals(id)) {
378
+ log('received push from ourselves?')
379
+ return
380
+ }
381
+
382
+ log('received push from %p', id)
383
+
384
+ if (message.signedPeerRecord != null) {
385
+ log('received signedPeerRecord in push')
386
+
387
+ try {
388
+ const envelope = await RecordEnvelope.openAndCertify(message.signedPeerRecord, PeerRecord.DOMAIN)
389
+
390
+ if (await this.components.getPeerStore().addressBook.consumePeerRecord(envelope)) {
391
+ log('consumed signedPeerRecord sent in push')
392
+
393
+ await this.components.getPeerStore().protoBook.set(id, message.protocols)
394
+ return
395
+ } else {
396
+ log('failed to consume signedPeerRecord sent in push')
397
+ }
398
+ } catch (err: any) {
399
+ log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
400
+ }
401
+ } else {
402
+ log('did not receive signedPeerRecord in push')
403
+ }
404
+
405
+ // LEGACY: Update peers data in PeerStore
406
+ try {
407
+ await this.components.getPeerStore().addressBook.set(id,
408
+ message.listenAddrs.map((addr) => new Multiaddr(addr)))
409
+ } catch (err: any) {
410
+ log.error('received invalid addrs', err)
411
+ }
412
+
413
+ // Update the protocols
414
+ try {
415
+ await this.components.getPeerStore().protoBook.set(id, message.protocols)
416
+ } catch (err: any) {
417
+ log.error('received invalid protocols', err)
418
+ }
419
+
420
+ log('handled push from %p', id)
421
+ }
422
+
423
+ /**
424
+ * Takes the `addr` and converts it to a Multiaddr if possible
425
+ */
426
+ static getCleanMultiaddr (addr: Uint8Array | string | null | undefined) {
427
+ if (addr != null && addr.length > 0) {
428
+ try {
429
+ return new Multiaddr(addr)
430
+ } catch {
431
+
432
+ }
433
+ }
434
+ }
435
+ }
436
+
437
+ /**
438
+ * The protocols the IdentifyService supports
439
+ */
440
+ export const multicodecs = {
441
+ IDENTIFY: MULTICODEC_IDENTIFY,
442
+ IDENTIFY_PUSH: MULTICODEC_IDENTIFY_PUSH
443
+ }
444
+
445
+ export const Message = { Identify }
File without changes
@@ -0,0 +1,36 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable @typescript-eslint/no-namespace */
3
+
4
+ import { encodeMessage, decodeMessage, message, string, bytes } from 'protons-runtime'
5
+
6
+ export interface Identify {
7
+ protocolVersion?: string
8
+ agentVersion?: string
9
+ publicKey?: Uint8Array
10
+ listenAddrs: Uint8Array[]
11
+ observedAddr?: Uint8Array
12
+ protocols: string[]
13
+ signedPeerRecord?: Uint8Array
14
+ }
15
+
16
+ export namespace Identify {
17
+ export const codec = () => {
18
+ return message<Identify>({
19
+ 5: { name: 'protocolVersion', codec: string, optional: true },
20
+ 6: { name: 'agentVersion', codec: string, optional: true },
21
+ 1: { name: 'publicKey', codec: bytes, optional: true },
22
+ 2: { name: 'listenAddrs', codec: bytes, repeats: true },
23
+ 4: { name: 'observedAddr', codec: bytes, optional: true },
24
+ 3: { name: 'protocols', codec: string, repeats: true },
25
+ 8: { name: 'signedPeerRecord', codec: bytes, optional: true }
26
+ })
27
+ }
28
+
29
+ export const encode = (obj: Identify): Uint8Array => {
30
+ return encodeMessage(obj, Identify.codec())
31
+ }
32
+
33
+ export const decode = (buf: Uint8Array): Identify => {
34
+ return decodeMessage(buf, Identify.codec())
35
+ }
36
+ }