libp2p 0.42.2 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +4 -4
  2. package/dist/index.min.js +29 -29
  3. package/dist/src/address-manager/index.d.ts +1 -10
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +46 -29
  6. package/dist/src/address-manager/index.js.map +1 -1
  7. package/dist/src/autonat/constants.d.ts +4 -0
  8. package/dist/src/autonat/constants.d.ts.map +1 -0
  9. package/dist/src/autonat/constants.js +4 -0
  10. package/dist/src/autonat/constants.js.map +1 -0
  11. package/dist/src/autonat/index.d.ts +64 -0
  12. package/dist/src/autonat/index.d.ts.map +1 -0
  13. package/dist/src/autonat/index.js +417 -0
  14. package/dist/src/autonat/index.js.map +1 -0
  15. package/dist/src/autonat/pb/index.d.ts +57 -0
  16. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  17. package/dist/src/autonat/pb/index.js +250 -0
  18. package/dist/src/autonat/pb/index.js.map +1 -0
  19. package/dist/src/circuit/constants.d.ts +31 -6
  20. package/dist/src/circuit/constants.d.ts.map +1 -1
  21. package/dist/src/circuit/constants.js +37 -7
  22. package/dist/src/circuit/constants.js.map +1 -1
  23. package/dist/src/circuit/index.d.ts +16 -61
  24. package/dist/src/circuit/index.d.ts.map +1 -1
  25. package/dist/src/circuit/index.js +2 -68
  26. package/dist/src/circuit/index.js.map +1 -1
  27. package/dist/src/circuit/pb/index.d.ts +83 -43
  28. package/dist/src/circuit/pb/index.d.ts.map +1 -1
  29. package/dist/src/circuit/pb/index.js +363 -127
  30. package/dist/src/circuit/pb/index.js.map +1 -1
  31. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  32. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  33. package/dist/src/circuit/server/advert-service.js +69 -0
  34. package/dist/src/circuit/server/advert-service.js.map +1 -0
  35. package/dist/src/circuit/server/index.d.ts +60 -0
  36. package/dist/src/circuit/server/index.d.ts.map +1 -0
  37. package/dist/src/circuit/server/index.js +287 -0
  38. package/dist/src/circuit/server/index.js.map +1 -0
  39. package/dist/src/circuit/server/reservation-store.d.ts +49 -0
  40. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  41. package/dist/src/circuit/server/reservation-store.js +57 -0
  42. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  43. package/dist/src/circuit/server/reservation-voucher.d.ts +18 -0
  44. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  45. package/dist/src/circuit/server/reservation-voucher.js +33 -0
  46. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  47. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  48. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  49. package/dist/src/circuit/transport/discovery.js +82 -0
  50. package/dist/src/circuit/transport/discovery.js.map +1 -0
  51. package/dist/src/circuit/transport/index.d.ts +33 -0
  52. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  53. package/dist/src/circuit/transport/index.js +225 -0
  54. package/dist/src/circuit/transport/index.js.map +1 -0
  55. package/dist/src/circuit/transport/listener.d.ts +9 -0
  56. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  57. package/dist/src/circuit/transport/listener.js +76 -0
  58. package/dist/src/circuit/transport/listener.js.map +1 -0
  59. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  60. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  61. package/dist/src/circuit/transport/reservation-store.js +165 -0
  62. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  63. package/dist/src/circuit/utils.d.ts +7 -0
  64. package/dist/src/circuit/utils.d.ts.map +1 -1
  65. package/dist/src/circuit/utils.js +87 -0
  66. package/dist/src/circuit/utils.js.map +1 -1
  67. package/dist/src/components.d.ts +2 -1
  68. package/dist/src/components.d.ts.map +1 -1
  69. package/dist/src/components.js +13 -13
  70. package/dist/src/components.js.map +1 -1
  71. package/dist/src/config.d.ts.map +1 -1
  72. package/dist/src/config.js +21 -25
  73. package/dist/src/config.js.map +1 -1
  74. package/dist/src/connection/index.d.ts +2 -2
  75. package/dist/src/connection/index.d.ts.map +1 -1
  76. package/dist/src/connection/index.js +4 -4
  77. package/dist/src/connection/index.js.map +1 -1
  78. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  79. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  80. package/dist/src/connection-manager/auto-dialler.js +18 -18
  81. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  82. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
  83. package/dist/src/connection-manager/dialer/dial-request.js +13 -6
  84. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  85. package/dist/src/connection-manager/dialer/index.d.ts +10 -1
  86. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  87. package/dist/src/connection-manager/dialer/index.js +24 -9
  88. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  89. package/dist/src/connection-manager/index.d.ts +1 -4
  90. package/dist/src/connection-manager/index.d.ts.map +1 -1
  91. package/dist/src/connection-manager/index.js +8 -5
  92. package/dist/src/connection-manager/index.js.map +1 -1
  93. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  94. package/dist/src/connection-manager/latency-monitor.js +1 -1
  95. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  96. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  97. package/dist/src/content-routing/index.d.ts +6 -4
  98. package/dist/src/content-routing/index.d.ts.map +1 -1
  99. package/dist/src/content-routing/index.js +9 -9
  100. package/dist/src/content-routing/index.js.map +1 -1
  101. package/dist/src/content-routing/utils.d.ts +3 -3
  102. package/dist/src/content-routing/utils.d.ts.map +1 -1
  103. package/dist/src/content-routing/utils.js +2 -2
  104. package/dist/src/content-routing/utils.js.map +1 -1
  105. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  106. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  107. package/dist/src/dht/dht-content-routing.js +2 -2
  108. package/dist/src/dht/dht-content-routing.js.map +1 -1
  109. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  110. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  111. package/dist/src/dht/dht-peer-routing.js +2 -2
  112. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  113. package/dist/src/dht/dummy-dht.d.ts +1 -1
  114. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  115. package/dist/src/dht/dummy-dht.js +12 -12
  116. package/dist/src/dht/dummy-dht.js.map +1 -1
  117. package/dist/src/errors.d.ts +2 -1
  118. package/dist/src/errors.d.ts.map +1 -1
  119. package/dist/src/errors.js +1 -0
  120. package/dist/src/errors.js.map +1 -1
  121. package/dist/src/fetch/index.d.ts.map +1 -1
  122. package/dist/src/fetch/index.js +6 -6
  123. package/dist/src/fetch/index.js.map +1 -1
  124. package/dist/src/fetch/pb/proto.d.ts +3 -3
  125. package/dist/src/fetch/pb/proto.d.ts.map +1 -1
  126. package/dist/src/fetch/pb/proto.js +4 -3
  127. package/dist/src/fetch/pb/proto.js.map +1 -1
  128. package/dist/src/get-peer.js +2 -2
  129. package/dist/src/get-peer.js.map +1 -1
  130. package/dist/src/identify/index.d.ts +3 -1
  131. package/dist/src/identify/index.d.ts.map +1 -1
  132. package/dist/src/identify/index.js +19 -14
  133. package/dist/src/identify/index.js.map +1 -1
  134. package/dist/src/identify/pb/message.d.ts +2 -2
  135. package/dist/src/identify/pb/message.d.ts.map +1 -1
  136. package/dist/src/identify/pb/message.js +1 -0
  137. package/dist/src/identify/pb/message.js.map +1 -1
  138. package/dist/src/index.d.ts +14 -8
  139. package/dist/src/index.d.ts.map +1 -1
  140. package/dist/src/index.js.map +1 -1
  141. package/dist/src/insecure/index.d.ts.map +1 -1
  142. package/dist/src/insecure/index.js.map +1 -1
  143. package/dist/src/insecure/pb/proto.d.ts +3 -3
  144. package/dist/src/insecure/pb/proto.d.ts.map +1 -1
  145. package/dist/src/insecure/pb/proto.js +4 -5
  146. package/dist/src/insecure/pb/proto.js.map +1 -1
  147. package/dist/src/libp2p.d.ts +7 -3
  148. package/dist/src/libp2p.d.ts.map +1 -1
  149. package/dist/src/libp2p.js +35 -35
  150. package/dist/src/libp2p.js.map +1 -1
  151. package/dist/src/nat-manager.d.ts.map +1 -1
  152. package/dist/src/nat-manager.js +5 -3
  153. package/dist/src/nat-manager.js.map +1 -1
  154. package/dist/src/peer-record-updater.d.ts.map +1 -1
  155. package/dist/src/peer-routing.d.ts.map +1 -1
  156. package/dist/src/peer-routing.js +5 -5
  157. package/dist/src/peer-routing.js.map +1 -1
  158. package/dist/src/ping/index.d.ts.map +1 -1
  159. package/dist/src/ping/index.js +2 -2
  160. package/dist/src/ping/index.js.map +1 -1
  161. package/dist/src/pnet/crypto.d.ts +1 -1
  162. package/dist/src/pnet/crypto.d.ts.map +1 -1
  163. package/dist/src/pnet/crypto.js +1 -1
  164. package/dist/src/pnet/crypto.js.map +1 -1
  165. package/dist/src/pnet/index.js +3 -3
  166. package/dist/src/pnet/index.js.map +1 -1
  167. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  168. package/dist/src/pubsub/dummy-pubsub.js +9 -9
  169. package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
  170. package/dist/src/registrar.d.ts.map +1 -1
  171. package/dist/src/registrar.js +4 -4
  172. package/dist/src/registrar.js.map +1 -1
  173. package/dist/src/transport-manager.d.ts.map +1 -1
  174. package/dist/src/transport-manager.js +8 -9
  175. package/dist/src/transport-manager.js.map +1 -1
  176. package/dist/src/upgrader.d.ts +2 -1
  177. package/dist/src/upgrader.d.ts.map +1 -1
  178. package/dist/src/upgrader.js +38 -33
  179. package/dist/src/upgrader.js.map +1 -1
  180. package/dist/typedoc-urls.json +19 -6
  181. package/package.json +36 -33
  182. package/src/address-manager/index.ts +62 -35
  183. package/src/autonat/constants.ts +4 -0
  184. package/src/autonat/index.ts +567 -0
  185. package/src/autonat/pb/index.proto +35 -0
  186. package/src/autonat/pb/index.ts +320 -0
  187. package/src/circuit/constants.ts +48 -7
  188. package/src/circuit/index.ts +17 -129
  189. package/src/circuit/pb/index.proto +57 -32
  190. package/src/circuit/pb/index.ts +448 -138
  191. package/src/circuit/server/advert-service.ts +108 -0
  192. package/src/circuit/server/index.ts +421 -0
  193. package/src/circuit/server/reservation-store.ts +111 -0
  194. package/src/circuit/server/reservation-voucher.ts +51 -0
  195. package/src/circuit/transport/discovery.ts +127 -0
  196. package/src/circuit/transport/index.ts +325 -0
  197. package/src/circuit/transport/listener.ts +99 -0
  198. package/src/circuit/transport/reservation-store.ts +249 -0
  199. package/src/circuit/utils.ts +108 -0
  200. package/src/components.ts +22 -21
  201. package/src/config.ts +21 -25
  202. package/src/connection/index.ts +10 -10
  203. package/src/connection-manager/auto-dialler.ts +36 -40
  204. package/src/connection-manager/dialer/dial-request.ts +13 -6
  205. package/src/connection-manager/dialer/index.ts +34 -15
  206. package/src/connection-manager/index.ts +22 -23
  207. package/src/connection-manager/latency-monitor.ts +9 -9
  208. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  209. package/src/content-routing/index.ts +18 -16
  210. package/src/content-routing/utils.ts +5 -5
  211. package/src/dht/dht-content-routing.ts +5 -4
  212. package/src/dht/dht-peer-routing.ts +5 -4
  213. package/src/dht/dummy-dht.ts +13 -13
  214. package/src/errors.ts +2 -1
  215. package/src/fetch/index.ts +13 -13
  216. package/src/fetch/pb/proto.ts +8 -7
  217. package/src/get-peer.ts +3 -3
  218. package/src/identify/index.ts +29 -24
  219. package/src/identify/pb/message.ts +3 -2
  220. package/src/index.ts +15 -8
  221. package/src/insecure/index.ts +2 -1
  222. package/src/insecure/pb/proto.ts +8 -9
  223. package/src/libp2p.ts +52 -46
  224. package/src/nat-manager.ts +11 -9
  225. package/src/peer-record-updater.ts +4 -4
  226. package/src/peer-routing.ts +9 -9
  227. package/src/ping/index.ts +6 -6
  228. package/src/pnet/crypto.ts +3 -3
  229. package/src/pnet/index.ts +3 -3
  230. package/src/pnet/key-generator.ts +1 -1
  231. package/src/pubsub/dummy-pubsub.ts +9 -9
  232. package/src/registrar.ts +12 -12
  233. package/src/transport-manager.ts +17 -18
  234. package/src/upgrader.ts +43 -42
  235. package/src/version.ts +1 -1
  236. package/dist/src/circuit/auto-relay.d.ts +0 -46
  237. package/dist/src/circuit/auto-relay.d.ts.map +0 -1
  238. package/dist/src/circuit/auto-relay.js +0 -220
  239. package/dist/src/circuit/auto-relay.js.map +0 -1
  240. package/dist/src/circuit/circuit/hop.d.ts +0 -42
  241. package/dist/src/circuit/circuit/hop.d.ts.map +0 -1
  242. package/dist/src/circuit/circuit/hop.js +0 -142
  243. package/dist/src/circuit/circuit/hop.js.map +0 -1
  244. package/dist/src/circuit/circuit/stop.d.ts +0 -24
  245. package/dist/src/circuit/circuit/stop.d.ts.map +0 -1
  246. package/dist/src/circuit/circuit/stop.js +0 -51
  247. package/dist/src/circuit/circuit/stop.js.map +0 -1
  248. package/dist/src/circuit/circuit/stream-handler.d.ts +0 -40
  249. package/dist/src/circuit/circuit/stream-handler.d.ts.map +0 -1
  250. package/dist/src/circuit/circuit/stream-handler.js +0 -59
  251. package/dist/src/circuit/circuit/stream-handler.js.map +0 -1
  252. package/dist/src/circuit/circuit/utils.d.ts +0 -7
  253. package/dist/src/circuit/circuit/utils.d.ts.map +0 -1
  254. package/dist/src/circuit/circuit/utils.js +0 -43
  255. package/dist/src/circuit/circuit/utils.js.map +0 -1
  256. package/dist/src/circuit/listener.d.ts +0 -9
  257. package/dist/src/circuit/listener.d.ts.map +0 -1
  258. package/dist/src/circuit/listener.js +0 -62
  259. package/dist/src/circuit/listener.js.map +0 -1
  260. package/dist/src/circuit/multicodec.d.ts +0 -2
  261. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  262. package/dist/src/circuit/multicodec.js +0 -2
  263. package/dist/src/circuit/multicodec.js.map +0 -1
  264. package/dist/src/circuit/transport.d.ts +0 -51
  265. package/dist/src/circuit/transport.d.ts.map +0 -1
  266. package/dist/src/circuit/transport.js +0 -223
  267. package/dist/src/circuit/transport.js.map +0 -1
  268. package/dist/src/keychain/cms.d.ts +0 -33
  269. package/dist/src/keychain/cms.d.ts.map +0 -1
  270. package/dist/src/keychain/cms.js +0 -129
  271. package/dist/src/keychain/cms.js.map +0 -1
  272. package/dist/src/keychain/index.d.ts +0 -151
  273. package/dist/src/keychain/index.d.ts.map +0 -1
  274. package/dist/src/keychain/index.js +0 -519
  275. package/dist/src/keychain/index.js.map +0 -1
  276. package/dist/src/keychain/util.d.ts +0 -21
  277. package/dist/src/keychain/util.d.ts.map +0 -1
  278. package/dist/src/keychain/util.js +0 -79
  279. package/dist/src/keychain/util.js.map +0 -1
  280. package/src/circuit/IMPLEMENTATION_NOTES.md +0 -128
  281. package/src/circuit/README.md +0 -111
  282. package/src/circuit/auto-relay.ts +0 -292
  283. package/src/circuit/circuit/hop.ts +0 -220
  284. package/src/circuit/circuit/stop.ts +0 -83
  285. package/src/circuit/circuit/stream-handler.ts +0 -87
  286. package/src/circuit/circuit/utils.ts +0 -44
  287. package/src/circuit/listener.ts +0 -83
  288. package/src/circuit/multicodec.ts +0 -2
  289. package/src/circuit/transport.ts +0 -278
  290. package/src/keychain/README.md +0 -55
  291. package/src/keychain/cms.ts +0 -150
  292. package/src/keychain/doc/private-key.png +0 -0
  293. package/src/keychain/doc/private-key.xml +0 -1
  294. package/src/keychain/index.ts +0 -629
  295. package/src/keychain/util.ts +0 -82
@@ -0,0 +1,45 @@
1
+ import type { PeerId } from '@libp2p/interface-peer-id';
2
+ import type { PeerStore } from '@libp2p/interface-peer-store';
3
+ import { EventEmitter } from '@libp2p/interfaces/events';
4
+ import type { Startable } from '@libp2p/interfaces/startable';
5
+ import type { ConnectionManager } from '@libp2p/interface-connection-manager';
6
+ import type { TransportManager } from '@libp2p/interface-transport';
7
+ import type { ContentRouting } from '@libp2p/interface-content-routing';
8
+ import type { Registrar } from '@libp2p/interface-registrar';
9
+ export interface RelayDiscoveryEvents {
10
+ 'relay:discover': CustomEvent<PeerId>;
11
+ }
12
+ export interface RelayDiscoveryComponents {
13
+ peerId: PeerId;
14
+ peerStore: PeerStore;
15
+ connectionManager: ConnectionManager;
16
+ transportManager: TransportManager;
17
+ contentRouting: ContentRouting;
18
+ registrar: Registrar;
19
+ }
20
+ /**
21
+ * ReservationManager automatically makes a circuit v2 reservation on any connected
22
+ * peers that support the circuit v2 HOP protocol.
23
+ */
24
+ export declare class RelayDiscovery extends EventEmitter<RelayDiscoveryEvents> implements Startable {
25
+ private readonly peerId;
26
+ private readonly peerStore;
27
+ private readonly contentRouting;
28
+ private readonly registrar;
29
+ private started;
30
+ private topologyId?;
31
+ constructor(components: RelayDiscoveryComponents);
32
+ isStarted(): boolean;
33
+ start(): Promise<void>;
34
+ stop(): void;
35
+ /**
36
+ * Try to listen on available hop relay connections.
37
+ * The following order will happen while we do not have enough relays:
38
+ *
39
+ * 1. Check the metadata store for known relays, try to listen on the ones we are already connected
40
+ * 2. Dial and try to listen on the peers we know that support hop but are not connected
41
+ * 3. Search the network
42
+ */
43
+ discover(): Promise<void>;
44
+ }
45
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/circuit/transport/discovery.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAK5D,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAE,YAAW,SAAS;IACzF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAAQ;gBAEd,UAAU,EAAE,wBAAwB;IASjD,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAiB7B,IAAI,IAAK,IAAI;IAQb;;;;;;;OAOG;IACG,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;CAqCjC"}
@@ -0,0 +1,82 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { namespaceToCid } from '../utils.js';
3
+ import { RELAY_RENDEZVOUS_NS, RELAY_V2_HOP_CODEC } from '../constants.js';
4
+ import { EventEmitter } from '@libp2p/interfaces/events';
5
+ import { createTopology } from '@libp2p/topology';
6
+ const log = logger('libp2p:circuit-relay:discover-relays');
7
+ /**
8
+ * ReservationManager automatically makes a circuit v2 reservation on any connected
9
+ * peers that support the circuit v2 HOP protocol.
10
+ */
11
+ export class RelayDiscovery extends EventEmitter {
12
+ constructor(components) {
13
+ super();
14
+ this.started = false;
15
+ this.peerId = components.peerId;
16
+ this.peerStore = components.peerStore;
17
+ this.contentRouting = components.contentRouting;
18
+ this.registrar = components.registrar;
19
+ }
20
+ isStarted() {
21
+ return this.started;
22
+ }
23
+ async start() {
24
+ // register a topology listener for when new peers are encountered
25
+ // that support the hop protocol
26
+ this.topologyId = await this.registrar.register(RELAY_V2_HOP_CODEC, createTopology({
27
+ onConnect: (peerId) => {
28
+ this.safeDispatchEvent('relay:discover', { detail: peerId });
29
+ }
30
+ }));
31
+ void this.discover()
32
+ .catch(err => {
33
+ log.error('error listening on relays', err);
34
+ });
35
+ this.started = true;
36
+ }
37
+ stop() {
38
+ if (this.topologyId != null) {
39
+ this.registrar.unregister(this.topologyId);
40
+ }
41
+ this.started = false;
42
+ }
43
+ /**
44
+ * Try to listen on available hop relay connections.
45
+ * The following order will happen while we do not have enough relays:
46
+ *
47
+ * 1. Check the metadata store for known relays, try to listen on the ones we are already connected
48
+ * 2. Dial and try to listen on the peers we know that support hop but are not connected
49
+ * 3. Search the network
50
+ */
51
+ async discover() {
52
+ log('searching peer store for relays');
53
+ const peers = (await this.peerStore.all())
54
+ // filter by a list of peers supporting RELAY_V2_HOP and ones we are not listening on
55
+ .filter(({ id, protocols }) => protocols.includes(RELAY_V2_HOP_CODEC))
56
+ .sort(() => Math.random() - 0.5);
57
+ for (const peer of peers) {
58
+ log('found relay peer %p in content peer store', peer.id);
59
+ this.safeDispatchEvent('relay:discover', { detail: peer.id });
60
+ }
61
+ log('found %d relay peers in peer store', peers.length);
62
+ try {
63
+ log('searching content routing for relays');
64
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS);
65
+ let found = 0;
66
+ for await (const provider of this.contentRouting.findProviders(cid)) {
67
+ if (provider.multiaddrs.length > 0 && !provider.id.equals(this.peerId)) {
68
+ const peerId = provider.id;
69
+ found++;
70
+ log('found relay peer %p in content routing', peerId);
71
+ await this.peerStore.addressBook.add(peerId, provider.multiaddrs);
72
+ this.safeDispatchEvent('relay:discover', { detail: peerId });
73
+ }
74
+ }
75
+ log('found %d relay peers in content routing', found);
76
+ }
77
+ catch (err) {
78
+ log.error('failed when finding relays on the network', err);
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/circuit/transport/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Upgrader } from '@libp2p/interface-transport';
2
+ import type { Registrar } from '@libp2p/interface-registrar';
3
+ import type { Transport } from '@libp2p/interface-transport';
4
+ import type { ConnectionGater } from '@libp2p/interface-connection-gater';
5
+ import type { PeerId } from '@libp2p/interface-peer-id';
6
+ import type { PeerStore } from '@libp2p/interface-peer-store';
7
+ import type { ConnectionManager } from '@libp2p/interface-connection-manager';
8
+ import type { AddressManager } from '@libp2p/interface-address-manager';
9
+ import type { ContentRouting } from '@libp2p/interface-content-routing';
10
+ import { RelayStoreInit } from './reservation-store.js';
11
+ import { RelayDiscoveryComponents } from './discovery.js';
12
+ export interface CircuitRelayTransportComponents extends RelayDiscoveryComponents {
13
+ peerId: PeerId;
14
+ peerStore: PeerStore;
15
+ registrar: Registrar;
16
+ connectionManager: ConnectionManager;
17
+ upgrader: Upgrader;
18
+ addressManager: AddressManager;
19
+ contentRouting: ContentRouting;
20
+ connectionGater: ConnectionGater;
21
+ }
22
+ /**
23
+ * RelayConfig configures the circuit v2 relay transport.
24
+ */
25
+ export interface CircuitRelayTransportInit extends RelayStoreInit {
26
+ /**
27
+ * The number of peers running diable relays to search for and
28
+ * connect to. (default: 0)
29
+ */
30
+ discoverRelays?: number;
31
+ }
32
+ export declare function circuitRelayTransport(init?: CircuitRelayTransportInit): (components: CircuitRelayTransportComponents) => Transport;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/circuit/transport/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAU,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAG9D,OAAO,KAAK,EAAsB,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,KAAK,EAAY,SAAS,EAAyB,MAAM,6BAA6B,CAAA;AAE7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAEvE,OAAO,EAAE,cAAc,EAAoB,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAkB,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAmBzE,MAAM,WAAW,+BAAgC,SAAQ,wBAAwB;IAC/E,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,QAAQ,EAAE,QAAQ,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,cAAc,CAAA;IAC9B,eAAe,EAAE,eAAe,CAAA;CACjC;AAYD;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAwPD,wBAAgB,qBAAqB,CAAE,IAAI,GAAE,yBAA8B,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAIvI"}
@@ -0,0 +1,225 @@
1
+ import { StopMessage, HopMessage, Status } from '../pb/index.js';
2
+ import { logger } from '@libp2p/logger';
3
+ import * as mafmt from '@multiformats/mafmt';
4
+ import { multiaddr } from '@multiformats/multiaddr';
5
+ import { codes } from '../../errors.js';
6
+ import { streamToMaConnection } from '@libp2p/utils/stream-to-ma-conn';
7
+ import { createListener } from './listener.js';
8
+ import { symbol } from '@libp2p/interface-transport';
9
+ import { peerIdFromBytes, peerIdFromString } from '@libp2p/peer-id';
10
+ import { pbStream } from 'it-pb-stream';
11
+ import { CIRCUIT_PROTO_CODE, RELAY_V2_HOP_CODEC, RELAY_V2_STOP_CODEC } from '../constants.js';
12
+ import { ReservationStore } from './reservation-store.js';
13
+ import { RelayDiscovery } from './discovery.js';
14
+ import { CodeError } from '@libp2p/interfaces/errors';
15
+ const log = logger('libp2p:circuit-relay:transport');
16
+ const isValidStop = (request) => {
17
+ if (request.peer == null) {
18
+ return false;
19
+ }
20
+ try {
21
+ request.peer.addrs.forEach(multiaddr);
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ return true;
27
+ };
28
+ class CircuitRelayTransport {
29
+ constructor(components, init) {
30
+ this.registrar = components.registrar;
31
+ this.peerStore = components.peerStore;
32
+ this.connectionManager = components.connectionManager;
33
+ this.peerId = components.peerId;
34
+ this.upgrader = components.upgrader;
35
+ this.addressManager = components.addressManager;
36
+ this.connectionGater = components.connectionGater;
37
+ if (init.discoverRelays != null && init.discoverRelays > 0) {
38
+ this.discovery = new RelayDiscovery(components);
39
+ this.discovery.addEventListener('relay:discover', (evt) => {
40
+ this.reservationStore.addRelay(evt.detail, 'discovered')
41
+ .catch(err => {
42
+ log.error('could not add discovered relay %p', evt.detail, err);
43
+ });
44
+ });
45
+ }
46
+ this.reservationStore = new ReservationStore(components, init);
47
+ this.reservationStore.addEventListener('relay:not-enough-relays', () => {
48
+ this.discovery?.discover()
49
+ .catch(err => {
50
+ log.error('could not discover relays', err);
51
+ });
52
+ });
53
+ this.started = false;
54
+ }
55
+ isStarted() {
56
+ return this.started;
57
+ }
58
+ async start() {
59
+ await this.reservationStore.start();
60
+ await this.discovery?.start();
61
+ await this.registrar.handle(RELAY_V2_STOP_CODEC, (data) => {
62
+ void this.onStop(data).catch(err => {
63
+ log.error(err);
64
+ });
65
+ });
66
+ this.started = true;
67
+ }
68
+ async stop() {
69
+ this.discovery?.stop();
70
+ await this.reservationStore.stop();
71
+ await this.registrar.unhandle(RELAY_V2_STOP_CODEC);
72
+ this.started = false;
73
+ }
74
+ get [symbol]() {
75
+ return true;
76
+ }
77
+ get [Symbol.toStringTag]() {
78
+ return 'libp2p/circuit-relay-v2';
79
+ }
80
+ /**
81
+ * Dial a peer over a relay
82
+ */
83
+ async dial(ma, options = {}) {
84
+ if (ma.protoCodes().filter(code => code === CIRCUIT_PROTO_CODE).length !== 1) {
85
+ const errMsg = 'Invalid circuit relay address';
86
+ log.error(errMsg, ma);
87
+ throw new CodeError(errMsg, codes.ERR_RELAYED_DIAL);
88
+ }
89
+ // Check the multiaddr to see if it contains a relay and a destination peer
90
+ const addrs = ma.toString().split('/p2p-circuit');
91
+ const relayAddr = multiaddr(addrs[0]);
92
+ const destinationAddr = multiaddr(addrs[addrs.length - 1]);
93
+ const relayId = relayAddr.getPeerId();
94
+ const destinationId = destinationAddr.getPeerId();
95
+ if (relayId == null || destinationId == null) {
96
+ const errMsg = 'Circuit relay dial failed as addresses did not have peer id';
97
+ log.error(errMsg);
98
+ throw new CodeError(errMsg, codes.ERR_RELAYED_DIAL);
99
+ }
100
+ const relayPeer = peerIdFromString(relayId);
101
+ const destinationPeer = peerIdFromString(destinationId);
102
+ let disconnectOnFailure = false;
103
+ const relayConnections = this.connectionManager.getConnections(relayPeer);
104
+ let relayConnection = relayConnections[0];
105
+ if (relayConnection == null) {
106
+ await this.peerStore.addressBook.add(relayPeer, [relayAddr]);
107
+ relayConnection = await this.connectionManager.openConnection(relayPeer, options);
108
+ disconnectOnFailure = true;
109
+ }
110
+ try {
111
+ const stream = await relayConnection.newStream([RELAY_V2_HOP_CODEC]);
112
+ return await this.connectV2({
113
+ stream,
114
+ connection: relayConnection,
115
+ destinationPeer,
116
+ destinationAddr,
117
+ relayAddr,
118
+ ma,
119
+ disconnectOnFailure
120
+ });
121
+ }
122
+ catch (err) {
123
+ log.error('Circuit relay dial failed', err);
124
+ disconnectOnFailure && await relayConnection.close();
125
+ throw err;
126
+ }
127
+ }
128
+ async connectV2({ stream, connection, destinationPeer, destinationAddr, relayAddr, ma, disconnectOnFailure }) {
129
+ try {
130
+ const pbstr = pbStream(stream);
131
+ const hopstr = pbstr.pb(HopMessage);
132
+ hopstr.write({
133
+ type: HopMessage.Type.CONNECT,
134
+ peer: {
135
+ id: destinationPeer.toBytes(),
136
+ addrs: [multiaddr(destinationAddr).bytes]
137
+ }
138
+ });
139
+ const status = await hopstr.read();
140
+ if (status.status !== Status.OK) {
141
+ throw new CodeError(`failed to connect via relay with status ${status?.status?.toString() ?? 'undefined'}`, codes.ERR_HOP_REQUEST_FAILED);
142
+ }
143
+ // TODO: do something with limit and transient connection
144
+ const maConn = streamToMaConnection({
145
+ stream: pbstr.unwrap(),
146
+ remoteAddr: ma,
147
+ localAddr: relayAddr.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)
148
+ });
149
+ log('new outbound connection %s', maConn.remoteAddr);
150
+ return await this.upgrader.upgradeOutbound(maConn);
151
+ }
152
+ catch (err) {
153
+ log.error('Circuit relay dial failed', err);
154
+ disconnectOnFailure && await connection.close();
155
+ throw err;
156
+ }
157
+ }
158
+ /**
159
+ * Create a listener
160
+ */
161
+ createListener(options) {
162
+ return createListener({
163
+ connectionManager: this.connectionManager,
164
+ relayStore: this.reservationStore
165
+ });
166
+ }
167
+ /**
168
+ * Filter check for all Multiaddrs that this transport can dial on
169
+ *
170
+ * @param {Multiaddr[]} multiaddrs
171
+ * @returns {Multiaddr[]}
172
+ */
173
+ filter(multiaddrs) {
174
+ multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs];
175
+ return multiaddrs.filter((ma) => {
176
+ return mafmt.Circuit.matches(ma);
177
+ });
178
+ }
179
+ /**
180
+ * An incoming STOP request means a remote peer wants to dial us via a relay
181
+ */
182
+ async onStop({ connection, stream }) {
183
+ const pbstr = pbStream(stream);
184
+ const request = await pbstr.readPB(StopMessage);
185
+ log('received circuit v2 stop protocol request from %s', connection.remotePeer);
186
+ if (request?.type === undefined) {
187
+ return;
188
+ }
189
+ const stopstr = pbstr.pb(StopMessage);
190
+ log('new circuit relay v2 stop stream from %s', connection.remotePeer);
191
+ // Validate the STOP request has the required input
192
+ if (request.type !== StopMessage.Type.CONNECT) {
193
+ log.error('invalid stop connect request via peer %s', connection.remotePeer);
194
+ stopstr.write({ type: StopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE });
195
+ return;
196
+ }
197
+ if (!isValidStop(request)) {
198
+ log.error('invalid stop connect request via peer %s', connection.remotePeer);
199
+ stopstr.write({ type: StopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE });
200
+ return;
201
+ }
202
+ const remotePeerId = peerIdFromBytes(request.peer.id);
203
+ if ((await this.connectionGater.denyInboundRelayedConnection?.(connection.remotePeer, remotePeerId)) === true) {
204
+ stopstr.write({ type: StopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
205
+ return;
206
+ }
207
+ stopstr.write({ type: StopMessage.Type.STATUS, status: Status.OK });
208
+ const remoteAddr = connection.remoteAddr.encapsulate(`/p2p-circuit/p2p/${remotePeerId.toString()}`);
209
+ const localAddr = this.addressManager.getAddresses()[0];
210
+ const maConn = streamToMaConnection({
211
+ stream: pbstr.unwrap(),
212
+ remoteAddr,
213
+ localAddr
214
+ });
215
+ log('new inbound connection %s', maConn.remoteAddr);
216
+ await this.upgrader.upgradeInbound(maConn);
217
+ log('%s connection %s upgraded', 'inbound', maConn.remoteAddr);
218
+ }
219
+ }
220
+ export function circuitRelayTransport(init = {}) {
221
+ return (components) => {
222
+ return new CircuitRelayTransport(components, init);
223
+ };
224
+ }
225
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/circuit/transport/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ConnectionManager } from '@libp2p/interface-connection-manager';
2
+ import type { Listener } from '@libp2p/interface-transport';
3
+ import type { ReservationStore } from './reservation-store';
4
+ export interface CircuitRelayTransportListenerComponents {
5
+ connectionManager: ConnectionManager;
6
+ relayStore: ReservationStore;
7
+ }
8
+ export declare function createListener(options: CircuitRelayTransportListenerComponents): Listener;
9
+ //# sourceMappingURL=listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../../src/circuit/transport/listener.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,6BAA6B,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAO3D,MAAM,WAAW,uCAAuC;IACtD,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AAiFD,wBAAgB,cAAc,CAAE,OAAO,EAAE,uCAAuC,GAAG,QAAQ,CAE1F"}
@@ -0,0 +1,76 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _CircuitRelayTransportListener_instances, _CircuitRelayTransportListener_removeRelayPeer;
7
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
8
+ import { multiaddr } from '@multiformats/multiaddr';
9
+ import { PeerMap } from '@libp2p/peer-collections';
10
+ import { logger } from '@libp2p/logger';
11
+ const log = logger('libp2p:circuit-relay:transport:listener');
12
+ class CircuitRelayTransportListener extends EventEmitter {
13
+ constructor(components) {
14
+ super();
15
+ _CircuitRelayTransportListener_instances.add(this);
16
+ this.connectionManager = components.connectionManager;
17
+ this.relayStore = components.relayStore;
18
+ this.listeningAddrs = new PeerMap();
19
+ // remove listening addrs when a relay is removed
20
+ this.relayStore.addEventListener('relay:removed', (evt) => {
21
+ __classPrivateFieldGet(this, _CircuitRelayTransportListener_instances, "m", _CircuitRelayTransportListener_removeRelayPeer).call(this, evt.detail);
22
+ });
23
+ // remove listening addrs when a peer disconnects
24
+ this.connectionManager.addEventListener('peer:disconnect', (evt) => {
25
+ __classPrivateFieldGet(this, _CircuitRelayTransportListener_instances, "m", _CircuitRelayTransportListener_removeRelayPeer).call(this, evt.detail.remotePeer);
26
+ });
27
+ }
28
+ async listen(addr) {
29
+ log('listen on %s', addr);
30
+ const addrString = addr.toString().split('/p2p-circuit').find(a => a !== '');
31
+ const ma = multiaddr(addrString);
32
+ const relayConn = await this.connectionManager.openConnection(ma);
33
+ if (!this.relayStore.hasReservation(relayConn.remotePeer)) {
34
+ // addRelay calls transportManager.listen which calls this listen method
35
+ await this.relayStore.addRelay(relayConn.remotePeer, 'configured');
36
+ return;
37
+ }
38
+ if (this.listeningAddrs.has(relayConn.remotePeer)) {
39
+ log('already listening on relay %p', relayConn.remotePeer);
40
+ return;
41
+ }
42
+ this.listeningAddrs.set(relayConn.remotePeer, addr);
43
+ this.dispatchEvent(new CustomEvent('listening'));
44
+ }
45
+ /**
46
+ * Get fixed up multiaddrs
47
+ *
48
+ * NOTE: This method will grab the peers multiaddrs and expand them such that:
49
+ *
50
+ * a) If it's an existing /p2p-circuit address for a specific relay i.e.
51
+ * `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit` this method will expand the
52
+ * address to `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit/ipfs/QmPeer` where
53
+ * `QmPeer` is this peers id
54
+ * b) If it's not a /p2p-circuit address, it will encapsulate the address as a /p2p-circuit
55
+ * addr, such when dialing over a relay with this address, it will create the circuit using
56
+ * the encapsulated transport address. This is useful when for example, a peer should only
57
+ * be dialed over TCP rather than any other transport
58
+ */
59
+ getAddrs() {
60
+ return [...this.listeningAddrs.values()];
61
+ }
62
+ async close() {
63
+ }
64
+ }
65
+ _CircuitRelayTransportListener_instances = new WeakSet(), _CircuitRelayTransportListener_removeRelayPeer = function _CircuitRelayTransportListener_removeRelayPeer(peerId) {
66
+ const had = this.listeningAddrs.has(peerId);
67
+ this.listeningAddrs.delete(peerId);
68
+ if (had) {
69
+ // Announce listen addresses change
70
+ this.dispatchEvent(new CustomEvent('close'));
71
+ }
72
+ };
73
+ export function createListener(options) {
74
+ return new CircuitRelayTransportListener(options);
75
+ }
76
+ //# sourceMappingURL=listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../../src/circuit/transport/listener.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { PeerId } from '@libp2p/interface-peer-id';
2
+ import type { ConnectionManager } from '@libp2p/interface-connection-manager';
3
+ import type { TransportManager } from '@libp2p/interface-transport';
4
+ import type { Startable } from '@libp2p/interfaces/dist/src/startable.js';
5
+ import { EventEmitter } from '@libp2p/interfaces/events';
6
+ import type { PeerStore } from '@libp2p/interface-peer-store';
7
+ export interface RelayStoreComponents {
8
+ peerId: PeerId;
9
+ connectionManager: ConnectionManager;
10
+ transportManager: TransportManager;
11
+ peerStore: PeerStore;
12
+ }
13
+ export interface RelayStoreInit {
14
+ /**
15
+ * Multiple relays may be discovered simultaneously - to prevent listening
16
+ * on too many relays, this value controls how many to attempt to reserve a
17
+ * slot on at once. If set to more than one, we may end up listening on
18
+ * more relays than the `maxReservations` value, but on networks with poor
19
+ * connectivity the user may wish to attempt to reserve on multiple relays
20
+ * simultaneously. (default: 1)
21
+ */
22
+ reservationConcurrency?: number;
23
+ /**
24
+ * How many discovered relays to allow in the reservation store
25
+ */
26
+ discoverRelays?: number;
27
+ }
28
+ export type RelayType = 'discovered' | 'configured';
29
+ export interface ReservationStoreEvents {
30
+ 'relay:not-enough-relays': CustomEvent;
31
+ 'relay:removed': CustomEvent<PeerId>;
32
+ }
33
+ export declare class ReservationStore extends EventEmitter<ReservationStoreEvents> implements Startable {
34
+ #private;
35
+ private readonly peerId;
36
+ private readonly connectionManager;
37
+ private readonly transportManager;
38
+ private readonly peerStore;
39
+ private readonly reserveQueue;
40
+ private readonly reservations;
41
+ private readonly maxDiscoveredRelays;
42
+ private started;
43
+ constructor(components: RelayStoreComponents, init?: RelayStoreInit);
44
+ isStarted(): boolean;
45
+ start(): Promise<void>;
46
+ stop(): Promise<void>;
47
+ /**
48
+ * If the number of current relays is beneath the configured `maxReservations`
49
+ * value, and the passed peer id is not our own, and we have a non-relayed connection
50
+ * to the remote, and the remote peer speaks the hop protocol, try to reserve a slot
51
+ * on the remote peer
52
+ */
53
+ addRelay(peerId: PeerId, type: RelayType): Promise<void>;
54
+ hasReservation(peerId: PeerId): boolean;
55
+ /**
56
+ * Remove listen relay
57
+ */
58
+ removeRelay(peerId: PeerId): void;
59
+ }
60
+ //# sourceMappingURL=reservation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservation-store.d.ts","sourceRoot":"","sources":["../../../../src/circuit/transport/reservation-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAMvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAA;AACzE,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAW7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,CAAA;AAQnD,MAAM,WAAW,sBAAsB;IACrC,yBAAyB,EAAE,WAAW,CAAA;IACtC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACrC;AAED,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAE,YAAW,SAAS;;IAC7F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,cAAc;IAwBpE,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAIvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;OAKG;IACG,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA4E/D,cAAc,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAgCxC;;OAEG;IACH,WAAW,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAkBnC"}