libp2p 0.36.0 → 0.36.2-199395d

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 (398) 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 +25 -52
  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 +16 -8
  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 +16 -35
  20. package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
  21. package/dist/src/circuit/circuit/stream-handler.js +60 -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/{protocol → pb}/index.d.ts +0 -0
  44. package/{src/circuit/protocol → dist/src/circuit/pb}/index.js +7 -9
  45. package/dist/src/circuit/transport.d.ts +18 -78
  46. package/dist/src/circuit/transport.d.ts.map +1 -1
  47. package/dist/src/circuit/transport.js +190 -0
  48. package/dist/src/circuit/transport.js.map +1 -0
  49. package/dist/src/circuit/utils.d.ts +5 -2
  50. package/dist/src/circuit/utils.d.ts.map +1 -1
  51. package/dist/src/circuit/utils.js +11 -0
  52. package/dist/src/circuit/utils.js.map +1 -0
  53. package/dist/src/config.d.ts +3 -85
  54. package/dist/src/config.d.ts.map +1 -1
  55. package/dist/src/config.js +93 -0
  56. package/dist/src/config.js.map +1 -0
  57. package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
  58. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  59. package/dist/src/connection-manager/auto-dialler.js +105 -0
  60. package/dist/src/connection-manager/auto-dialler.js.map +1 -0
  61. package/dist/src/connection-manager/index.d.ts +79 -144
  62. package/dist/src/connection-manager/index.d.ts.map +1 -1
  63. package/dist/src/connection-manager/index.js +295 -0
  64. package/dist/src/connection-manager/index.js.map +1 -0
  65. package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
  66. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  67. package/dist/src/connection-manager/latency-monitor.js +220 -0
  68. package/dist/src/connection-manager/latency-monitor.js.map +1 -0
  69. package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
  70. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  71. package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
  72. package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
  73. package/dist/src/constants.d.ts +22 -10
  74. package/dist/src/constants.d.ts.map +1 -1
  75. package/dist/src/constants.js +27 -0
  76. package/dist/src/constants.js.map +1 -0
  77. package/dist/src/content-routing/index.d.ts +26 -81
  78. package/dist/src/content-routing/index.d.ts.map +1 -1
  79. package/dist/src/content-routing/index.js +99 -0
  80. package/dist/src/content-routing/index.js.map +1 -0
  81. package/dist/src/content-routing/utils.d.ts +6 -49
  82. package/dist/src/content-routing/utils.d.ts.map +1 -1
  83. package/dist/src/content-routing/utils.js +42 -0
  84. package/dist/src/content-routing/utils.js.map +1 -0
  85. package/dist/src/dht/dht-content-routing.d.ts +10 -24
  86. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  87. package/dist/src/dht/dht-content-routing.js +32 -0
  88. package/dist/src/dht/dht-content-routing.js.map +1 -0
  89. package/dist/src/dht/dht-peer-routing.d.ts +9 -24
  90. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  91. package/dist/src/dht/dht-peer-routing.js +26 -0
  92. package/dist/src/dht/dht-peer-routing.js.map +1 -0
  93. package/dist/src/dialer/auto-dialer.d.ts +14 -0
  94. package/dist/src/dialer/auto-dialer.d.ts.map +1 -0
  95. package/dist/src/dialer/auto-dialer.js +24 -0
  96. package/dist/src/dialer/auto-dialer.js.map +1 -0
  97. package/dist/src/dialer/dial-request.d.ts +18 -46
  98. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  99. package/dist/src/dialer/dial-request.js +83 -0
  100. package/dist/src/dialer/dial-request.js.map +1 -0
  101. package/dist/src/dialer/index.d.ts +41 -148
  102. package/dist/src/dialer/index.d.ts.map +1 -1
  103. package/dist/src/dialer/index.js +281 -0
  104. package/dist/src/dialer/index.js.map +1 -0
  105. package/dist/src/errors.d.ts +68 -63
  106. package/dist/src/errors.d.ts.map +1 -1
  107. package/dist/src/errors.js +73 -0
  108. package/dist/src/errors.js.map +1 -0
  109. package/dist/src/fetch/constants.d.ts +1 -1
  110. package/dist/src/fetch/constants.d.ts.map +1 -1
  111. package/dist/src/fetch/constants.js +3 -0
  112. package/dist/src/fetch/constants.js.map +1 -0
  113. package/dist/src/fetch/index.d.ts +30 -49
  114. package/dist/src/fetch/index.d.ts.map +1 -1
  115. package/dist/src/fetch/index.js +130 -0
  116. package/dist/src/fetch/index.js.map +1 -0
  117. package/dist/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  118. package/{src/fetch → dist/src/fetch/pb}/proto.js +7 -9
  119. package/dist/src/get-peer.d.ts +4 -11
  120. package/dist/src/get-peer.d.ts.map +1 -1
  121. package/dist/src/get-peer.js +43 -0
  122. package/dist/src/get-peer.js.map +1 -0
  123. package/dist/src/identify/consts.d.ts +9 -9
  124. package/dist/src/identify/consts.d.ts.map +1 -1
  125. package/dist/src/identify/consts.js +11 -0
  126. package/dist/src/identify/consts.js.map +1 -0
  127. package/dist/src/identify/index.d.ts +40 -96
  128. package/dist/src/identify/index.d.ts.map +1 -1
  129. package/dist/src/identify/index.js +322 -0
  130. package/dist/src/identify/index.js.map +1 -0
  131. package/{src/identify → dist/src/identify/pb}/message.d.ts +20 -5
  132. package/{src/identify → dist/src/identify/pb}/message.js +83 -42
  133. package/dist/src/index.d.ts +157 -583
  134. package/dist/src/index.d.ts.map +1 -1
  135. package/dist/src/index.js +9 -0
  136. package/dist/src/index.js.map +1 -0
  137. package/dist/src/insecure/index.d.ts +9 -0
  138. package/dist/src/insecure/index.d.ts.map +1 -0
  139. package/dist/src/insecure/index.js +78 -0
  140. package/dist/src/insecure/index.js.map +1 -0
  141. package/dist/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  142. package/{src/insecure → dist/src/insecure/pb}/proto.js +39 -22
  143. package/dist/src/keychain/cms.d.ts +6 -14
  144. package/dist/src/keychain/cms.d.ts.map +1 -1
  145. package/dist/src/keychain/cms.js +129 -0
  146. package/dist/src/keychain/cms.js.map +1 -0
  147. package/dist/src/keychain/index.d.ts +62 -82
  148. package/dist/src/keychain/index.d.ts.map +1 -1
  149. package/dist/src/keychain/index.js +493 -0
  150. package/dist/src/keychain/index.js.map +1 -0
  151. package/dist/src/keychain/util.d.ts +3 -6
  152. package/dist/src/keychain/util.d.ts.map +1 -1
  153. package/dist/src/keychain/util.js +79 -0
  154. package/dist/src/keychain/util.js.map +1 -0
  155. package/dist/src/libp2p.d.ts +75 -0
  156. package/dist/src/libp2p.d.ts.map +1 -0
  157. package/dist/src/libp2p.js +368 -0
  158. package/dist/src/libp2p.js.map +1 -0
  159. package/dist/src/metrics/index.d.ts +47 -104
  160. package/dist/src/metrics/index.d.ts.map +1 -1
  161. package/dist/src/metrics/index.js +231 -0
  162. package/dist/src/metrics/index.js.map +1 -0
  163. package/dist/src/metrics/moving-average.d.ts +14 -0
  164. package/dist/src/metrics/moving-average.d.ts.map +1 -0
  165. package/dist/src/metrics/moving-average.js +40 -0
  166. package/dist/src/metrics/moving-average.js.map +1 -0
  167. package/dist/src/metrics/stats.d.ts +45 -93
  168. package/dist/src/metrics/stats.d.ts.map +1 -1
  169. package/dist/src/metrics/stats.js +183 -0
  170. package/dist/src/metrics/stats.js.map +1 -0
  171. package/dist/src/nat-manager.d.ts +42 -99
  172. package/dist/src/nat-manager.d.ts.map +1 -1
  173. package/dist/src/nat-manager.js +114 -0
  174. package/dist/src/nat-manager.js.map +1 -0
  175. package/dist/src/peer-record-updater.d.ts +15 -0
  176. package/dist/src/peer-record-updater.d.ts.map +1 -0
  177. package/dist/src/peer-record-updater.js +44 -0
  178. package/dist/src/peer-record-updater.js.map +1 -0
  179. package/dist/src/peer-routing.d.ts +39 -84
  180. package/dist/src/peer-routing.d.ts.map +1 -1
  181. package/dist/src/peer-routing.js +108 -0
  182. package/dist/src/peer-routing.js.map +1 -0
  183. package/dist/src/ping/constants.d.ts +4 -4
  184. package/dist/src/ping/constants.d.ts.map +1 -1
  185. package/dist/src/ping/constants.js +5 -0
  186. package/dist/src/ping/constants.js.map +1 -0
  187. package/dist/src/ping/index.d.ts +26 -33
  188. package/dist/src/ping/index.d.ts.map +1 -1
  189. package/dist/src/ping/index.js +56 -0
  190. package/dist/src/ping/index.js.map +1 -0
  191. package/dist/src/pnet/crypto.d.ts +15 -5
  192. package/dist/src/pnet/crypto.d.ts.map +1 -1
  193. package/dist/src/pnet/crypto.js +60 -0
  194. package/dist/src/pnet/crypto.js.map +1 -0
  195. package/dist/src/pnet/errors.d.ts +5 -5
  196. package/dist/src/pnet/errors.d.ts.map +1 -1
  197. package/dist/src/pnet/errors.js +6 -0
  198. package/dist/src/pnet/errors.js.map +1 -0
  199. package/dist/src/pnet/index.d.ts +11 -20
  200. package/dist/src/pnet/index.d.ts.map +1 -1
  201. package/dist/src/pnet/index.js +66 -0
  202. package/dist/src/pnet/index.js.map +1 -0
  203. package/dist/src/pnet/key-generator.d.ts +3 -7
  204. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  205. package/dist/src/pnet/key-generator.js +25 -0
  206. package/dist/src/pnet/key-generator.js.map +1 -0
  207. package/dist/src/registrar.d.ts +27 -65
  208. package/dist/src/registrar.d.ts.map +1 -1
  209. package/dist/src/registrar.js +159 -0
  210. package/dist/src/registrar.js.map +1 -0
  211. package/dist/src/transport-manager.d.ts +34 -82
  212. package/dist/src/transport-manager.d.ts.map +1 -1
  213. package/dist/src/transport-manager.js +223 -0
  214. package/dist/src/transport-manager.js.map +1 -0
  215. package/dist/src/upgrader.d.ts +49 -129
  216. package/dist/src/upgrader.d.ts.map +1 -1
  217. package/dist/src/upgrader.js +402 -0
  218. package/dist/src/upgrader.js.map +1 -0
  219. package/dist/src/version.d.ts +3 -0
  220. package/dist/src/version.d.ts.map +1 -0
  221. package/dist/src/version.js +3 -0
  222. package/dist/src/version.js.map +1 -0
  223. package/package.json +145 -197
  224. package/src/address-manager/index.ts +129 -0
  225. package/src/circuit/README.md +16 -11
  226. package/src/circuit/auto-relay.ts +284 -0
  227. package/src/circuit/circuit/hop.ts +211 -0
  228. package/src/circuit/circuit/stop.ts +78 -0
  229. package/src/circuit/circuit/stream-handler.ts +87 -0
  230. package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
  231. package/src/circuit/constants.ts +31 -0
  232. package/src/circuit/index.ts +120 -0
  233. package/src/circuit/{listener.js → listener.ts} +21 -27
  234. package/src/circuit/multicodec.ts +2 -0
  235. package/src/circuit/{protocol → pb}/index.d.ts +0 -0
  236. package/src/circuit/pb/index.js +528 -0
  237. package/src/circuit/{protocol → pb}/index.proto +0 -0
  238. package/src/circuit/transport.ts +216 -0
  239. package/src/circuit/utils.ts +12 -0
  240. package/src/config.ts +101 -0
  241. package/src/connection-manager/auto-dialler.ts +154 -0
  242. package/src/connection-manager/index.ts +422 -0
  243. package/src/connection-manager/latency-monitor.ts +319 -0
  244. package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
  245. package/src/constants.ts +31 -0
  246. package/src/content-routing/index.ts +143 -0
  247. package/src/content-routing/utils.ts +54 -0
  248. package/src/dht/dht-content-routing.ts +43 -0
  249. package/src/dht/dht-peer-routing.ts +35 -0
  250. package/src/dialer/auto-dialer.ts +40 -0
  251. package/src/dialer/{dial-request.js → dial-request.ts} +60 -51
  252. package/src/dialer/index.ts +374 -0
  253. package/src/errors.ts +71 -0
  254. package/src/fetch/README.md +1 -1
  255. package/src/fetch/constants.ts +3 -0
  256. package/src/fetch/{index.js → index.ts} +79 -70
  257. package/src/fetch/{proto.d.ts → pb/proto.d.ts} +0 -0
  258. package/src/fetch/pb/proto.js +331 -0
  259. package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
  260. package/src/get-peer.ts +57 -0
  261. package/src/identify/consts.ts +13 -0
  262. package/src/identify/index.ts +445 -0
  263. package/{dist/src/identify → src/identify/pb}/message.d.ts +20 -5
  264. package/src/identify/pb/message.js +369 -0
  265. package/src/identify/{message.proto → pb/message.proto} +0 -0
  266. package/src/index.ts +234 -0
  267. package/src/insecure/index.ts +97 -0
  268. package/src/insecure/{proto.d.ts → pb/proto.d.ts} +7 -1
  269. package/src/insecure/pb/proto.js +388 -0
  270. package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
  271. package/src/keychain/{cms.js → cms.ts} +62 -58
  272. package/src/keychain/index.ts +588 -0
  273. package/src/keychain/{util.js → util.ts} +7 -17
  274. package/src/libp2p.ts +501 -0
  275. package/src/metrics/index.ts +310 -0
  276. package/src/metrics/moving-average.ts +53 -0
  277. package/src/metrics/stats.ts +243 -0
  278. package/src/nat-manager.ts +194 -0
  279. package/src/peer-record-updater.ts +55 -0
  280. package/src/peer-routing.ts +185 -0
  281. package/src/ping/README.md +1 -1
  282. package/src/ping/constants.ts +5 -0
  283. package/src/ping/index.ts +83 -0
  284. package/src/pnet/README.md +2 -2
  285. package/src/pnet/crypto.ts +67 -0
  286. package/src/pnet/errors.ts +5 -0
  287. package/src/pnet/index.ts +95 -0
  288. package/src/pnet/key-generator.ts +28 -0
  289. package/src/registrar.ts +205 -0
  290. package/src/transport-manager.ts +279 -0
  291. package/src/upgrader.ts +499 -0
  292. package/src/version.ts +3 -0
  293. package/dist/index.min.js +0 -55
  294. package/dist/src/insecure/plaintext.d.ts +0 -12
  295. package/dist/src/insecure/plaintext.d.ts.map +0 -1
  296. package/dist/src/metrics/old-peers.d.ts +0 -3
  297. package/dist/src/metrics/old-peers.d.ts.map +0 -1
  298. package/dist/src/metrics/tracked-map.d.ts +0 -8
  299. package/dist/src/metrics/tracked-map.d.ts.map +0 -1
  300. package/dist/src/peer-store/address-book.d.ts +0 -67
  301. package/dist/src/peer-store/address-book.d.ts.map +0 -1
  302. package/dist/src/peer-store/index.d.ts +0 -58
  303. package/dist/src/peer-store/index.d.ts.map +0 -1
  304. package/dist/src/peer-store/key-book.d.ts +0 -40
  305. package/dist/src/peer-store/key-book.d.ts.map +0 -1
  306. package/dist/src/peer-store/metadata-book.d.ts +0 -58
  307. package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
  308. package/dist/src/peer-store/pb/peer.d.ts +0 -222
  309. package/dist/src/peer-store/proto-book.d.ts +0 -43
  310. package/dist/src/peer-store/proto-book.d.ts.map +0 -1
  311. package/dist/src/peer-store/store.d.ts +0 -73
  312. package/dist/src/peer-store/store.d.ts.map +0 -1
  313. package/dist/src/peer-store/types.d.ts +0 -202
  314. package/dist/src/peer-store/types.d.ts.map +0 -1
  315. package/dist/src/ping/util.d.ts +0 -5
  316. package/dist/src/ping/util.d.ts.map +0 -1
  317. package/dist/src/pubsub-adapter.d.ts +0 -22
  318. package/dist/src/pubsub-adapter.d.ts.map +0 -1
  319. package/dist/src/record/envelope/envelope.d.ts +0 -77
  320. package/dist/src/record/envelope/index.d.ts +0 -80
  321. package/dist/src/record/envelope/index.d.ts.map +0 -1
  322. package/dist/src/record/peer-record/consts.d.ts +0 -4
  323. package/dist/src/record/peer-record/consts.d.ts.map +0 -1
  324. package/dist/src/record/peer-record/index.d.ts +0 -60
  325. package/dist/src/record/peer-record/index.d.ts.map +0 -1
  326. package/dist/src/record/peer-record/peer-record.d.ts +0 -133
  327. package/dist/src/record/utils.d.ts +0 -12
  328. package/dist/src/record/utils.d.ts.map +0 -1
  329. package/dist/src/types.d.ts +0 -90
  330. package/dist/src/types.d.ts.map +0 -1
  331. package/src/address-manager/index.js +0 -96
  332. package/src/circuit/auto-relay.js +0 -302
  333. package/src/circuit/circuit/hop.js +0 -205
  334. package/src/circuit/circuit/stop.js +0 -81
  335. package/src/circuit/circuit/stream-handler.js +0 -94
  336. package/src/circuit/constants.js +0 -12
  337. package/src/circuit/index.js +0 -102
  338. package/src/circuit/multicodec.js +0 -5
  339. package/src/circuit/transport.js +0 -229
  340. package/src/circuit/utils.js +0 -17
  341. package/src/config.js +0 -114
  342. package/src/connection-manager/auto-dialler.js +0 -132
  343. package/src/connection-manager/index.js +0 -363
  344. package/src/connection-manager/latency-monitor.js +0 -264
  345. package/src/constants.js +0 -18
  346. package/src/content-routing/index.js +0 -163
  347. package/src/content-routing/utils.js +0 -89
  348. package/src/dht/dht-content-routing.js +0 -44
  349. package/src/dht/dht-peer-routing.js +0 -51
  350. package/src/dialer/index.js +0 -376
  351. package/src/errors.js +0 -66
  352. package/src/fetch/constants.js +0 -6
  353. package/src/get-peer.js +0 -49
  354. package/src/identify/consts.js +0 -15
  355. package/src/identify/index.js +0 -384
  356. package/src/index.js +0 -811
  357. package/src/insecure/plaintext.js +0 -95
  358. package/src/keychain/index.js +0 -561
  359. package/src/metrics/index.js +0 -290
  360. package/src/metrics/old-peers.js +0 -16
  361. package/src/metrics/stats.js +0 -270
  362. package/src/metrics/tracked-map.js +0 -94
  363. package/src/nat-manager.js +0 -197
  364. package/src/peer-routing.js +0 -176
  365. package/src/peer-store/README.md +0 -145
  366. package/src/peer-store/address-book.js +0 -382
  367. package/src/peer-store/index.js +0 -121
  368. package/src/peer-store/key-book.js +0 -141
  369. package/src/peer-store/metadata-book.js +0 -250
  370. package/src/peer-store/pb/peer.d.ts +0 -222
  371. package/src/peer-store/pb/peer.js +0 -643
  372. package/src/peer-store/pb/peer.proto +0 -31
  373. package/src/peer-store/proto-book.js +0 -237
  374. package/src/peer-store/store.js +0 -263
  375. package/src/peer-store/types.ts +0 -245
  376. package/src/ping/constants.js +0 -8
  377. package/src/ping/index.js +0 -85
  378. package/src/ping/util.js +0 -18
  379. package/src/pnet/crypto.js +0 -84
  380. package/src/pnet/errors.js +0 -7
  381. package/src/pnet/index.js +0 -86
  382. package/src/pnet/key-generator.js +0 -33
  383. package/src/pubsub-adapter.js +0 -61
  384. package/src/record/README.md +0 -130
  385. package/src/record/envelope/envelope.d.ts +0 -77
  386. package/src/record/envelope/envelope.js +0 -243
  387. package/src/record/envelope/envelope.proto +0 -19
  388. package/src/record/envelope/index.js +0 -183
  389. package/src/record/peer-record/consts.js +0 -14
  390. package/src/record/peer-record/index.js +0 -113
  391. package/src/record/peer-record/peer-record.d.ts +0 -133
  392. package/src/record/peer-record/peer-record.js +0 -367
  393. package/src/record/peer-record/peer-record.proto +0 -18
  394. package/src/record/utils.js +0 -25
  395. package/src/registrar.js +0 -127
  396. package/src/transport-manager.js +0 -269
  397. package/src/types.ts +0 -98
  398. package/src/upgrader.js +0 -492
@@ -0,0 +1,57 @@
1
+ import { peerIdFromString } from '@libp2p/peer-id'
2
+ import { Multiaddr } from '@multiformats/multiaddr'
3
+ import errCode from 'err-code'
4
+ import { codes } from './errors.js'
5
+ import { isPeerId } from '@libp2p/interfaces/peer-id'
6
+ import type { PeerId } from '@libp2p/interfaces/peer-id'
7
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info'
8
+
9
+ function peerIdFromMultiaddr (ma: Multiaddr) {
10
+ const idStr = ma.getPeerId()
11
+
12
+ if (idStr == null) {
13
+ throw errCode(
14
+ new Error(`${ma.toString()} does not have a valid peer type`),
15
+ codes.ERR_INVALID_MULTIADDR
16
+ )
17
+ }
18
+
19
+ try {
20
+ return peerIdFromString(idStr)
21
+ } catch (err: any) {
22
+ throw errCode(
23
+ new Error(`${ma.toString()} is not a valid peer type`),
24
+ codes.ERR_INVALID_MULTIADDR
25
+ )
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Converts the given `peer` to a `Peer` object.
31
+ */
32
+ export function getPeer (peer: PeerId | Multiaddr | string): PeerInfo {
33
+ if (isPeerId(peer)) {
34
+ return {
35
+ id: peer,
36
+ multiaddrs: [],
37
+ protocols: []
38
+ }
39
+ }
40
+
41
+ if (typeof peer === 'string') {
42
+ peer = new Multiaddr(peer)
43
+ }
44
+
45
+ let addr
46
+
47
+ if (Multiaddr.isMultiaddr(peer)) {
48
+ addr = peer
49
+ peer = peerIdFromMultiaddr(peer)
50
+ }
51
+
52
+ return {
53
+ id: peer,
54
+ multiaddrs: addr != null ? [addr] : [],
55
+ protocols: []
56
+ }
57
+ }
@@ -0,0 +1,13 @@
1
+
2
+ import { version } from '../version.js'
3
+
4
+ export const PROTOCOL_VERSION = 'ipfs/0.1.0' // deprecated
5
+ export const AGENT_VERSION = `js-libp2p/${version}`
6
+ export const MULTICODEC_IDENTIFY = '/ipfs/id/1.0.0' // deprecated
7
+ export const MULTICODEC_IDENTIFY_PUSH = '/ipfs/id/push/1.0.0' // deprecated
8
+
9
+ export const IDENTIFY_PROTOCOL_VERSION = '0.1.0'
10
+ export const MULTICODEC_IDENTIFY_PROTOCOL_NAME = 'id'
11
+ export const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = 'id/push'
12
+ export const MULTICODEC_IDENTIFY_PROTOCOL_VERSION = '1.0.0'
13
+ export const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0'
@@ -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 Message 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
+ [Message.Identify.encode({
136
+ listenAddrs,
137
+ signedPeerRecord,
138
+ protocols
139
+ }).finish()],
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
198
+ try {
199
+ message = 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 = 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
+ }).finish()
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
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 = 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 { Message }
@@ -34,25 +34,40 @@ export class Identify implements IIdentify {
34
34
  constructor(p?: IIdentify);
35
35
 
36
36
  /** Identify protocolVersion. */
37
- public protocolVersion: string;
37
+ public protocolVersion?: (string|null);
38
38
 
39
39
  /** Identify agentVersion. */
40
- public agentVersion: string;
40
+ public agentVersion?: (string|null);
41
41
 
42
42
  /** Identify publicKey. */
43
- public publicKey: Uint8Array;
43
+ public publicKey?: (Uint8Array|null);
44
44
 
45
45
  /** Identify listenAddrs. */
46
46
  public listenAddrs: Uint8Array[];
47
47
 
48
48
  /** Identify observedAddr. */
49
- public observedAddr: Uint8Array;
49
+ public observedAddr?: (Uint8Array|null);
50
50
 
51
51
  /** Identify protocols. */
52
52
  public protocols: string[];
53
53
 
54
54
  /** Identify signedPeerRecord. */
55
- public signedPeerRecord: Uint8Array;
55
+ public signedPeerRecord?: (Uint8Array|null);
56
+
57
+ /** Identify _protocolVersion. */
58
+ public _protocolVersion?: "protocolVersion";
59
+
60
+ /** Identify _agentVersion. */
61
+ public _agentVersion?: "agentVersion";
62
+
63
+ /** Identify _publicKey. */
64
+ public _publicKey?: "publicKey";
65
+
66
+ /** Identify _observedAddr. */
67
+ public _observedAddr?: "observedAddr";
68
+
69
+ /** Identify _signedPeerRecord. */
70
+ public _signedPeerRecord?: "signedPeerRecord";
56
71
 
57
72
  /**
58
73
  * Encodes the specified Identify message. Does not implicitly {@link Identify.verify|verify} messages.