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
package/LICENSE CHANGED
@@ -1,22 +1,4 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2015 David Dias
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ This project is dual licensed under MIT and Apache-2.0.
22
2
 
3
+ MIT: https://www.opensource.org/licenses/mit
4
+ Apache-2.0: https://www.apache.org/licenses/license-2.0
package/README.md CHANGED
@@ -39,26 +39,22 @@ If you are looking for the documentation of the latest release, you can view the
39
39
 
40
40
  **Want to update libp2p in your project?** Check our [migrations folder](./doc/migrations).
41
41
 
42
- [**`Weekly Core Dev Calls`**](https://github.com/libp2p/team-mgmt/issues/16)
43
-
44
- ## Lead Maintainer
45
-
46
- [Jacob Heun](https://github.com/jacobheun/)
47
-
48
- ## Table of Contents
42
+ ## Table of Contents <!-- omit in toc -->
49
43
 
50
44
  - [Background](#background)
51
45
  - [Install](#install)
52
46
  - [Usage](#usage)
53
47
  - [Configuration](#configuration)
54
48
  - [API](#api)
55
- - [Getting Started](#getting-started)
49
+ - [Getting started](#getting-started)
56
50
  - [Tutorials and Examples](#tutorials-and-examples)
57
51
  - [Development](#development)
58
52
  - [Tests](#tests)
53
+ - [Run unit tests](#run-unit-tests)
59
54
  - [Packages](#packages)
60
55
  - [Contribute](#contribute)
61
56
  - [License](#license)
57
+ - [Contribution](#contribution)
62
58
 
63
59
  ## Background
64
60
 
@@ -123,7 +119,7 @@ You can find multiple examples on the [examples folder](./examples) that will gu
123
119
  > npm run test:node
124
120
 
125
121
  # run just Browser tests (Chrome)
126
- > npm run test:browser
122
+ > npm run test:chrome
127
123
  ```
128
124
 
129
125
  ### Packages
@@ -183,4 +179,11 @@ The libp2p implementation in JavaScript is a work in progress. As such, there ar
183
179
 
184
180
  ## License
185
181
 
186
- [MIT](LICENSE) © Protocol Labs
182
+ Licensed under either of
183
+
184
+ * Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / http://www.apache.org/licenses/LICENSE-2.0)
185
+ * MIT ([LICENSE-MIT](LICENSE-MIT) / http://opensource.org/licenses/MIT)
186
+
187
+ ### Contribution
188
+
189
+ Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
@@ -1,72 +1,53 @@
1
- export = AddressManager;
2
- /**
3
- * @typedef {Object} AddressManagerOptions
4
- * @property {string[]} [listen = []] - list of multiaddrs string representation to listen.
5
- * @property {string[]} [announce = []] - list of multiaddrs string representation to announce.
6
- */
7
- /**
8
- * @fires AddressManager#change:addresses Emitted when a addresses change.
9
- */
10
- declare class AddressManager extends EventEmitter {
1
+ import { AddressManagerEvents, EventEmitter } from '@libp2p/interfaces';
2
+ import { Multiaddr } from '@multiformats/multiaddr';
3
+ import type { Components } from '@libp2p/interfaces/components';
4
+ export interface AddressManagerInit {
5
+ announceFilter?: AddressFilter;
6
+ /**
7
+ * list of multiaddrs string representation to listen
8
+ */
9
+ listen?: string[];
10
+ /**
11
+ * list of multiaddrs string representation to announce
12
+ */
13
+ announce?: string[];
14
+ /**
15
+ * list of multiaddrs string representation to never announce
16
+ */
17
+ noAnnounce?: string[];
18
+ }
19
+ export interface AddressFilter {
20
+ (addrs: Multiaddr[]): Multiaddr[];
21
+ }
22
+ export declare class DefaultAddressManager extends EventEmitter<AddressManagerEvents> {
23
+ private readonly components;
24
+ private readonly listen;
25
+ private readonly announce;
26
+ private readonly observed;
27
+ private readonly announceFilter;
11
28
  /**
12
29
  * Responsible for managing the peer addresses.
13
30
  * Peers can specify their listen and announce addresses.
14
31
  * The listen addresses will be used by the libp2p transports to listen for new connections,
15
32
  * while the announce addresses will be used for the peer addresses' to other peers in the network.
16
- *
17
- * @class
18
- * @param {PeerId} peerId - The Peer ID of the node
19
- * @param {object} [options]
20
- * @param {Array<string>} [options.listen = []] - list of multiaddrs string representation to listen.
21
- * @param {Array<string>} [options.announce = []] - list of multiaddrs string representation to announce.
22
33
  */
23
- constructor(peerId: PeerId, { listen, announce }?: {
24
- listen?: string[] | undefined;
25
- announce?: string[] | undefined;
26
- } | undefined);
27
- peerId: PeerId;
28
- listen: Set<string>;
29
- announce: Set<string>;
30
- observed: Set<any>;
34
+ constructor(components: Components, init: AddressManagerInit);
31
35
  /**
32
- * Get peer listen multiaddrs.
33
- *
34
- * @returns {Multiaddr[]}
36
+ * Get peer listen multiaddrs
35
37
  */
36
38
  getListenAddrs(): Multiaddr[];
37
39
  /**
38
- * Get peer announcing multiaddrs.
39
- *
40
- * @returns {Multiaddr[]}
40
+ * Get peer announcing multiaddrs
41
41
  */
42
42
  getAnnounceAddrs(): Multiaddr[];
43
43
  /**
44
- * Get observed multiaddrs.
45
- *
46
- * @returns {Array<Multiaddr>}
44
+ * Get observed multiaddrs
47
45
  */
48
- getObservedAddrs(): Array<Multiaddr>;
46
+ getObservedAddrs(): Multiaddr[];
49
47
  /**
50
48
  * Add peer observed addresses
51
- *
52
- * @param {string | Multiaddr} addr
53
49
  */
54
50
  addObservedAddr(addr: string | Multiaddr): void;
51
+ getAddresses(): Multiaddr[];
55
52
  }
56
- declare namespace AddressManager {
57
- export { AddressManagerOptions };
58
- }
59
- import { EventEmitter } from "events";
60
- import PeerId = require("peer-id");
61
- import { Multiaddr } from "multiaddr";
62
- type AddressManagerOptions = {
63
- /**
64
- * - list of multiaddrs string representation to listen.
65
- */
66
- listen?: string[] | undefined;
67
- /**
68
- * - list of multiaddrs string representation to announce.
69
- */
70
- announce?: string[] | undefined;
71
- };
72
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/address-manager/index.js"],"names":[],"mappings":";AAMA;;;;GAIG;AAEH;;GAEG;AACH;IACE;;;;;;;;;;;OAWG;IACH,oBALW,MAAM;;;mBAYhB;IAJC,eAAoB;IACpB,oBAAsD;IACtD,sBAA0D;IAC1D,mBAAyB;IAG3B;;;;OAIG;IACH,kBAFa,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,oBAFa,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,oBAFa,MAAM,SAAS,CAAC,CAI5B;IAED;;;;OAIG;IACH,sBAFW,MAAM,GAAG,SAAS,QAyB5B;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/address-manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAE/D,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,aAAa,CAAA;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;CAClC;AAID,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAE9C;;;;;OAKG;gBACU,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB;IAY7D;;OAEG;IACH,cAAc,IAAK,SAAS,EAAE;IAI9B;;OAEG;IACH,gBAAgB,IAAK,SAAS,EAAE;IAIhC;;OAEG;IACH,gBAAgB,IAAK,SAAS,EAAE;IAIhC;;OAEG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAyBhD,YAAY,IAAK,SAAS,EAAE;CAwB7B"}
@@ -0,0 +1,81 @@
1
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
2
+ import { Multiaddr } from '@multiformats/multiaddr';
3
+ import { peerIdFromString } from '@libp2p/peer-id';
4
+ const defaultAddressFilter = (addrs) => addrs;
5
+ export class DefaultAddressManager extends EventEmitter {
6
+ /**
7
+ * Responsible for managing the peer addresses.
8
+ * Peers can specify their listen and announce addresses.
9
+ * The listen addresses will be used by the libp2p transports to listen for new connections,
10
+ * while the announce addresses will be used for the peer addresses' to other peers in the network.
11
+ */
12
+ constructor(components, init) {
13
+ super();
14
+ const { listen = [], announce = [] } = init;
15
+ this.components = components;
16
+ this.listen = new Set(listen.map(ma => ma.toString()));
17
+ this.announce = new Set(announce.map(ma => ma.toString()));
18
+ this.observed = new Set();
19
+ this.announceFilter = init.announceFilter ?? defaultAddressFilter;
20
+ }
21
+ /**
22
+ * Get peer listen multiaddrs
23
+ */
24
+ getListenAddrs() {
25
+ return Array.from(this.listen).map((a) => new Multiaddr(a));
26
+ }
27
+ /**
28
+ * Get peer announcing multiaddrs
29
+ */
30
+ getAnnounceAddrs() {
31
+ return Array.from(this.announce).map((a) => new Multiaddr(a));
32
+ }
33
+ /**
34
+ * Get observed multiaddrs
35
+ */
36
+ getObservedAddrs() {
37
+ return Array.from(this.observed).map((a) => new Multiaddr(a));
38
+ }
39
+ /**
40
+ * Add peer observed addresses
41
+ */
42
+ addObservedAddr(addr) {
43
+ let ma = new Multiaddr(addr);
44
+ const remotePeer = ma.getPeerId();
45
+ // strip our peer id if it has been passed
46
+ if (remotePeer != null) {
47
+ const remotePeerId = peerIdFromString(remotePeer);
48
+ // use same encoding for comparison
49
+ if (remotePeerId.equals(this.components.getPeerId())) {
50
+ ma = ma.decapsulate(new Multiaddr(`/p2p/${this.components.getPeerId().toString()}`));
51
+ }
52
+ }
53
+ const addrString = ma.toString();
54
+ // do not trigger the change:addresses event if we already know about this address
55
+ if (this.observed.has(addrString)) {
56
+ return;
57
+ }
58
+ this.observed.add(addrString);
59
+ this.dispatchEvent(new CustomEvent('change:addresses'));
60
+ }
61
+ getAddresses() {
62
+ let addrs = this.getAnnounceAddrs().map(ma => ma.toString());
63
+ if (addrs.length === 0) {
64
+ // no configured announce addrs, add configured listen addresses
65
+ addrs = this.components.getTransportManager().getAddrs().map(ma => ma.toString());
66
+ }
67
+ addrs = addrs.concat(this.getObservedAddrs().map(ma => ma.toString()));
68
+ // dedupe multiaddrs
69
+ const addrSet = new Set(addrs);
70
+ // Create advertising list
71
+ return this.announceFilter(Array.from(addrSet)
72
+ .map(str => new Multiaddr(str)))
73
+ .map(ma => {
74
+ if (ma.getPeerId() === this.components.getPeerId().toString()) {
75
+ return ma;
76
+ }
77
+ return ma.encapsulate(`/p2p/${this.components.getPeerId().toString()}`);
78
+ });
79
+ }
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/address-manager/index.ts"],"names":[],"mappings":"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"}
@@ -1,107 +1,46 @@
1
- export = AutoRelay;
2
- /**
3
- * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
4
- * @typedef {import('../peer-store/types').Address} Address
5
- * @typedef {import('peer-id')} PeerId
6
- */
7
- /**
8
- * @typedef {Object} AutoRelayProperties
9
- * @property {import('../')} libp2p
10
- *
11
- * @typedef {Object} AutoRelayOptions
12
- * @property {number} [maxListeners = 1] - maximum number of relays to listen.
13
- * @property {(error: Error, msg?: string) => {}} [onError]
14
- */
15
- declare class AutoRelay {
16
- /**
17
- * Creates an instance of AutoRelay.
18
- *
19
- * @class
20
- * @param {AutoRelayProperties & AutoRelayOptions} props
21
- */
22
- constructor({ libp2p, maxListeners, onError }: AutoRelayProperties & AutoRelayOptions);
23
- _libp2p: import("../");
24
- _peerId: import("peer-id");
25
- _peerStore: import("../peer-store/types").PeerStore;
26
- _connectionManager: import("../connection-manager");
27
- _transportManager: import("../transport-manager");
28
- _addressSorter: (addresses: import("../peer-store/types").Address[]) => import("../peer-store/types").Address[];
29
- maxListeners: number;
30
- /**
31
- * @type {Set<string>}
32
- */
33
- _listenRelays: Set<string>;
1
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
2
+ import type { AddressSorter, PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store';
3
+ import type { Connection } from '@libp2p/interfaces/connection';
4
+ import type { Components } from '@libp2p/interfaces/components';
5
+ export interface AutoRelayInit {
6
+ addressSorter?: AddressSorter;
7
+ maxListeners?: number;
8
+ onError?: (error: Error, msg?: string) => void;
9
+ }
10
+ export declare class AutoRelay {
11
+ private readonly components;
12
+ private readonly addressSorter;
13
+ private readonly maxListeners;
14
+ private readonly listenRelays;
15
+ private readonly onError;
16
+ constructor(components: Components, init: AutoRelayInit);
34
17
  /**
35
18
  * Check if a peer supports the relay protocol.
36
19
  * If the protocol is not supported, check if it was supported before and remove it as a listen relay.
37
20
  * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if
38
21
  * inside the threshold.
39
- *
40
- * @param {Object} props
41
- * @param {PeerId} props.peerId
42
- * @param {string[]} props.protocols
43
- * @returns {Promise<void>}
44
- */
45
- _onProtocolChange({ peerId, protocols }: {
46
- peerId: PeerId;
47
- protocols: string[];
48
- }): Promise<void>;
49
- /**
50
- * Peer disconnects.
51
- *
52
- * @param {Connection} connection - connection to the peer
53
22
  */
54
- _onPeerDisconnected(connection: Connection): void;
23
+ _onProtocolChange(evt: CustomEvent<PeerProtocolsChangeData>): Promise<void>;
55
24
  /**
56
- * @param {Error} error
57
- * @param {string} [msg]
25
+ * Peer disconnects
58
26
  */
59
- _onError: (error: Error, msg?: string | undefined) => void;
27
+ _onPeerDisconnected(evt: CustomEvent<Connection>): void;
60
28
  /**
61
- * Attempt to listen on the given relay connection.
62
- *
63
- * @private
64
- * @param {Connection} connection - connection to the peer
65
- * @param {string} id - peer identifier string
66
- * @returns {Promise<void>}
29
+ * Attempt to listen on the given relay connection
67
30
  */
68
- private _addListenRelay;
31
+ _addListenRelay(connection: Connection, id: string): Promise<void>;
69
32
  /**
70
- * Remove listen relay.
71
- *
72
- * @private
73
- * @param {string} id - peer identifier string.
33
+ * Remove listen relay
74
34
  */
75
- private _removeListenRelay;
35
+ _removeListenRelay(id: string): Promise<void>;
76
36
  /**
77
37
  * Try to listen on available hop relay connections.
78
38
  * The following order will happen while we do not have enough relays.
79
39
  * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.
80
40
  * 2. Dial and try to listen on the peers we know that support hop but are not connected.
81
41
  * 3. Search the network.
82
- *
83
- * @param {string[]} [peersToIgnore]
84
- */
85
- _listenOnAvailableHopRelays(peersToIgnore?: string[] | undefined): Promise<void>;
86
- /**
87
- * @param {PeerId} peerId
88
42
  */
43
+ _listenOnAvailableHopRelays(peersToIgnore?: string[]): Promise<void>;
89
44
  _tryToListenOnRelay(peerId: PeerId): Promise<void>;
90
45
  }
91
- declare namespace AutoRelay {
92
- export { Connection, Address, PeerId, AutoRelayProperties, AutoRelayOptions };
93
- }
94
- type PeerId = import('peer-id');
95
- type Connection = import("libp2p-interfaces/src/connection/connection");
96
- type AutoRelayProperties = {
97
- libp2p: import('../');
98
- };
99
- type AutoRelayOptions = {
100
- /**
101
- * - maximum number of relays to listen.
102
- */
103
- maxListeners?: number | undefined;
104
- onError?: ((error: Error, msg?: string | undefined) => {}) | undefined;
105
- };
106
- type Address = import('../peer-store/types').Address;
107
46
  //# sourceMappingURL=auto-relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-relay.d.ts","sourceRoot":"","sources":["../../../src/circuit/auto-relay.js"],"names":[],"mappings":";AAsBA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH;IACE;;;;;OAKG;IACH,+CAFW,mBAAmB,GAAG,gBAAgB,EA+BhD;IA5BC,uBAAqB;IACrB,2BAA4B;IAC5B,oDAAkC;IAClC,oDAAkD;IAClD,kDAAgD;IAChD,gHAAiD;IAEjD,qBAAgC;IAEhC;;OAEG;IACH,eAFU,IAAI,MAAM,CAAC,CAES;IAkBhC;;;;;;;;;;OAUG;IACH;QAJyB,MAAM,EAApB,MAAM;QACU,SAAS,EAAzB,MAAM,EAAE;QACN,QAAQ,IAAI,CAAC,CAsCzB;IAED;;;;OAIG;IACH,gCAFW,UAAU,QAcpB;IA5EC;;;OAGG;IACH,kBAHW,KAAK,oCAMf;IAuEH;;;;;;;OAOG;IACH,wBAkCC;IAED;;;;;OAKG;IACH,2BAKC;IAED;;;;;;;;OAQG;IACH,iFA6EC;IAED;;OAEG;IACH,4BAFW,MAAM,iBAShB;CACF;;;;cAlRY,OAAO,SAAS,CAAC;;;YAKhB,OAAO,KAAK,CAAC;;;;;;;uBAIL,KAAK,+BAAmB,EAAE;;eAVnC,OAAO,qBAAqB,EAAE,OAAO"}
1
+ {"version":3,"file":"auto-relay.d.ts","sourceRoot":"","sources":["../../../src/circuit/auto-relay.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAU/D,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/C;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEjD,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa;IAkBxD;;;;;OAKG;IACG,iBAAiB,CAAE,GAAG,EAAE,WAAW,CAAC,uBAAuB,CAAC;IAgDlE;;OAEG;IACH,mBAAmB,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAejD;;OAEG;IACG,eAAe,CAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzE;;OAEG;IACG,kBAAkB,CAAE,EAAE,EAAE,MAAM;IAOpC;;;;;;OAMG;IACG,2BAA2B,CAAE,aAAa,GAAE,MAAM,EAAO;IA+EzD,mBAAmB,CAAE,MAAM,EAAE,MAAM;CAS1C"}
@@ -0,0 +1,215 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
3
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
4
+ import { RELAY_CODEC } from './multicodec.js';
5
+ import { canHop } from './circuit/hop.js';
6
+ import { namespaceToCid } from './utils.js';
7
+ import { CIRCUIT_PROTO_CODE, HOP_METADATA_KEY, HOP_METADATA_VALUE, RELAY_RENDEZVOUS_NS } from './constants.js';
8
+ import sort from 'it-sort';
9
+ import all from 'it-all';
10
+ import { pipe } from 'it-pipe';
11
+ import { publicAddressesFirst } from '@libp2p/utils/address-sort';
12
+ const log = logger('libp2p:auto-relay');
13
+ const noop = () => { };
14
+ export class AutoRelay {
15
+ constructor(components, init) {
16
+ this.components = components;
17
+ this.addressSorter = init.addressSorter ?? publicAddressesFirst;
18
+ this.maxListeners = init.maxListeners ?? 1;
19
+ this.listenRelays = new Set();
20
+ this.onError = init.onError ?? noop;
21
+ this._onProtocolChange = this._onProtocolChange.bind(this);
22
+ this._onPeerDisconnected = this._onPeerDisconnected.bind(this);
23
+ this.components.getPeerStore().addEventListener('change:protocols', (evt) => {
24
+ void this._onProtocolChange(evt).catch(err => {
25
+ log.error(err);
26
+ });
27
+ });
28
+ this.components.getConnectionManager().addEventListener('peer:disconnect', this._onPeerDisconnected);
29
+ }
30
+ /**
31
+ * Check if a peer supports the relay protocol.
32
+ * If the protocol is not supported, check if it was supported before and remove it as a listen relay.
33
+ * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if
34
+ * inside the threshold.
35
+ */
36
+ async _onProtocolChange(evt) {
37
+ const { peerId, protocols } = evt.detail;
38
+ const id = peerId.toString();
39
+ // Check if it has the protocol
40
+ const hasProtocol = protocols.find(protocol => protocol === RELAY_CODEC);
41
+ // If no protocol, check if we were keeping the peer before as a listenRelay
42
+ if (hasProtocol == null) {
43
+ if (this.listenRelays.has(id)) {
44
+ await this._removeListenRelay(id);
45
+ }
46
+ return;
47
+ }
48
+ if (this.listenRelays.has(id)) {
49
+ return;
50
+ }
51
+ // If protocol, check if can hop, store info in the metadataBook and listen on it
52
+ try {
53
+ const connection = this.components.getConnectionManager().getConnection(peerId);
54
+ if (connection == null) {
55
+ return;
56
+ }
57
+ // Do not hop on a relayed connection
58
+ if (connection.remoteAddr.protoCodes().includes(CIRCUIT_PROTO_CODE)) {
59
+ log(`relayed connection to ${id} will not be used to hop on`);
60
+ return;
61
+ }
62
+ const supportsHop = await canHop({ connection });
63
+ if (supportsHop) {
64
+ await this.components.getPeerStore().metadataBook.setValue(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE));
65
+ await this._addListenRelay(connection, id);
66
+ }
67
+ }
68
+ catch (err) {
69
+ this.onError(err);
70
+ }
71
+ }
72
+ /**
73
+ * Peer disconnects
74
+ */
75
+ _onPeerDisconnected(evt) {
76
+ const connection = evt.detail;
77
+ const peerId = connection.remotePeer;
78
+ const id = peerId.toString();
79
+ // Not listening on this relay
80
+ if (!this.listenRelays.has(id)) {
81
+ return;
82
+ }
83
+ this._removeListenRelay(id).catch(err => {
84
+ log.error(err);
85
+ });
86
+ }
87
+ /**
88
+ * Attempt to listen on the given relay connection
89
+ */
90
+ async _addListenRelay(connection, id) {
91
+ try {
92
+ // Check if already listening on enough relays
93
+ if (this.listenRelays.size >= this.maxListeners) {
94
+ return;
95
+ }
96
+ // Get peer known addresses and sort them with public addresses first
97
+ const remoteAddrs = await pipe(await this.components.getPeerStore().addressBook.get(connection.remotePeer), (source) => sort(source, this.addressSorter), async (source) => await all(source));
98
+ // Attempt to listen on relay
99
+ const result = await Promise.all(remoteAddrs.map(async (addr) => {
100
+ try {
101
+ let multiaddr = addr.multiaddr;
102
+ if (multiaddr.getPeerId() == null) {
103
+ multiaddr = multiaddr.encapsulate(`/p2p/${connection.remotePeer.toString()}`);
104
+ }
105
+ multiaddr = multiaddr.encapsulate('/p2p-circuit');
106
+ // Announce multiaddrs will update on listen success by TransportManager event being triggered
107
+ await this.components.getTransportManager().listen([multiaddr]);
108
+ return true;
109
+ }
110
+ catch (err) {
111
+ log.error('error listening on circuit address', err);
112
+ this.onError(err);
113
+ }
114
+ return false;
115
+ }));
116
+ if (result.includes(true)) {
117
+ this.listenRelays.add(id);
118
+ }
119
+ }
120
+ catch (err) {
121
+ this.onError(err);
122
+ this.listenRelays.delete(id);
123
+ }
124
+ }
125
+ /**
126
+ * Remove listen relay
127
+ */
128
+ async _removeListenRelay(id) {
129
+ if (this.listenRelays.delete(id)) {
130
+ // TODO: this should be responsibility of the connMgr
131
+ await this._listenOnAvailableHopRelays([id]);
132
+ }
133
+ }
134
+ /**
135
+ * Try to listen on available hop relay connections.
136
+ * The following order will happen while we do not have enough relays.
137
+ * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.
138
+ * 2. Dial and try to listen on the peers we know that support hop but are not connected.
139
+ * 3. Search the network.
140
+ */
141
+ async _listenOnAvailableHopRelays(peersToIgnore = []) {
142
+ // TODO: The peer redial issue on disconnect should be handled by connection gating
143
+ // Check if already listening on enough relays
144
+ if (this.listenRelays.size >= this.maxListeners) {
145
+ return;
146
+ }
147
+ const knownHopsToDial = [];
148
+ const peers = await this.components.getPeerStore().all();
149
+ // Check if we have known hop peers to use and attempt to listen on the already connected
150
+ for (const { id, metadata } of peers) {
151
+ const idStr = id.toString();
152
+ // Continue to next if listening on this or peer to ignore
153
+ if (this.listenRelays.has(idStr)) {
154
+ continue;
155
+ }
156
+ if (peersToIgnore.includes(idStr)) {
157
+ continue;
158
+ }
159
+ const supportsHop = metadata.get(HOP_METADATA_KEY);
160
+ // Continue to next if it does not support Hop
161
+ if ((supportsHop == null) || uint8ArrayToString(supportsHop) !== HOP_METADATA_VALUE) {
162
+ continue;
163
+ }
164
+ const connection = this.components.getConnectionManager().getConnection(id);
165
+ // If not connected, store for possible later use.
166
+ if (connection == null) {
167
+ knownHopsToDial.push(id);
168
+ continue;
169
+ }
170
+ await this._addListenRelay(connection, idStr);
171
+ // Check if already listening on enough relays
172
+ if (this.listenRelays.size >= this.maxListeners) {
173
+ return;
174
+ }
175
+ }
176
+ // Try to listen on known peers that are not connected
177
+ for (const peerId of knownHopsToDial) {
178
+ await this._tryToListenOnRelay(peerId);
179
+ // Check if already listening on enough relays
180
+ if (this.listenRelays.size >= this.maxListeners) {
181
+ return;
182
+ }
183
+ }
184
+ // Try to find relays to hop on the network
185
+ try {
186
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS);
187
+ for await (const provider of this.components.getContentRouting().findProviders(cid)) {
188
+ if (provider.multiaddrs.length === 0) {
189
+ continue;
190
+ }
191
+ const peerId = provider.id;
192
+ await this.components.getPeerStore().addressBook.add(peerId, provider.multiaddrs);
193
+ await this._tryToListenOnRelay(peerId);
194
+ // Check if already listening on enough relays
195
+ if (this.listenRelays.size >= this.maxListeners) {
196
+ return;
197
+ }
198
+ }
199
+ }
200
+ catch (err) {
201
+ this.onError(err);
202
+ }
203
+ }
204
+ async _tryToListenOnRelay(peerId) {
205
+ try {
206
+ const connection = await this.components.getDialer().dial(peerId);
207
+ await this._addListenRelay(connection, peerId.toString());
208
+ }
209
+ catch (err) {
210
+ log.error('Could not use %p as relay', peerId, err);
211
+ this.onError(err, `could not connect and listen on known hop relay ${peerId.toString()}`);
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=auto-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-relay.js","sourceRoot":"","sources":["../../../src/circuit/auto-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,gBAAgB,CAAA;AAKvB,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEjE,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAEvC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAQrB,MAAM,OAAO,SAAS;IAOpB,YAAa,UAAsB,EAAE,IAAmB;QACtD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAA;QAC/D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAA;QAEnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9D,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1E,KAAK,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC3C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;IACtG,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAE,GAAyC;QAChE,MAAM,EACJ,MAAM,EACN,SAAS,EACV,GAAG,GAAG,CAAC,MAAM,CAAA;QACd,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;QAE5B,+BAA+B;QAC/B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAA;QAExE,4EAA4E;QAC5E,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC7B,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;aAClC;YAED,OAAM;SACP;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC7B,OAAM;SACP;QAED,iFAAiF;QACjF,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAE/E,IAAI,UAAU,IAAI,IAAI,EAAE;gBACtB,OAAM;aACP;YAED,qCAAqC;YACrC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBACnE,GAAG,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAA;gBAC7D,OAAM;aACP;YAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAEhD,IAAI,WAAW,EAAE;gBACf,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,CAAA;gBAC9H,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;aAC3C;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAClB;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAE,GAA4B;QAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAA;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAA;QACpC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;QAE5B,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC9B,OAAM;SACP;QAED,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACtC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAE,UAAsB,EAAE,EAAU;QACvD,IAAI;YACF,8CAA8C;YAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC/C,OAAM;aACP;YAED,qEAAqE;YACrE,MAAM,WAAW,GAAG,MAAM,IAAI,CAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAC3E,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,EAC5C,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CACpC,CAAA;YAED,6BAA6B;YAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;gBAC3B,IAAI;oBACF,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;oBAE9B,IAAI,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE;wBACjC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;qBAC9E;oBAED,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;oBAEjD,8FAA8F;oBAC9F,MAAM,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;oBAC/D,OAAO,IAAI,CAAA;iBACZ;gBAAC,OAAO,GAAQ,EAAE;oBACjB,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAA;oBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;iBAClB;gBAED,OAAO,KAAK,CAAA;YACd,CAAC,CAAC,CACH,CAAA;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;aAC1B;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACjB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;SAC7B;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAE,EAAU;QAClC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAChC,qDAAqD;YACrD,MAAM,IAAI,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SAC7C;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,2BAA2B,CAAE,gBAA0B,EAAE;QAC7D,mFAAmF;QACnF,8CAA8C;QAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,OAAM;SACP;QAED,MAAM,eAAe,GAAG,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAA;QAExD,yFAAyF;QACzF,KAAK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE;YACpC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;YAE3B,0DAA0D;YAC1D,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAChC,SAAQ;aACT;YAED,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACjC,SAAQ;aACT;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAElD,8CAA8C;YAC9C,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,kBAAkB,EAAE;gBACnF,SAAQ;aACT;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YAE3E,kDAAkD;YAClD,IAAI,UAAU,IAAI,IAAI,EAAE;gBACtB,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxB,SAAQ;aACT;YAED,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YAE7C,8CAA8C;YAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC/C,OAAM;aACP;SACF;QAED,sDAAsD;QACtD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;YACpC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YAEtC,8CAA8C;YAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC/C,OAAM;aACP;SACF;QAED,2CAA2C;QAC3C,IAAI;YACF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACrD,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBACnF,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpC,SAAQ;iBACT;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAA;gBAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAEjF,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;gBAEtC,8CAA8C;gBAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC/C,OAAM;iBACP;aACF;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAClB;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,MAAc;QACvC,IAAI;YACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACjE,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;SAC1D;QAAC,OAAO,GAAQ,EAAE;YACjB,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACnD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,mDAAmD,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;SAC1F;IACH,CAAC;CACF"}