libp2p 0.42.2-593deefe → 0.42.2-5e63ee2d

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 (228) hide show
  1. package/dist/index.min.js +30 -30
  2. package/dist/src/address-manager/index.d.ts +1 -10
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/address-manager/index.js +46 -29
  5. package/dist/src/address-manager/index.js.map +1 -1
  6. package/dist/src/autonat/constants.d.ts +4 -0
  7. package/dist/src/autonat/constants.d.ts.map +1 -0
  8. package/dist/src/autonat/constants.js +4 -0
  9. package/dist/src/autonat/constants.js.map +1 -0
  10. package/dist/src/autonat/index.d.ts +64 -0
  11. package/dist/src/autonat/index.d.ts.map +1 -0
  12. package/dist/src/autonat/index.js +417 -0
  13. package/dist/src/autonat/index.js.map +1 -0
  14. package/dist/src/autonat/pb/index.d.ts +57 -0
  15. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  16. package/dist/src/autonat/pb/index.js +250 -0
  17. package/dist/src/autonat/pb/index.js.map +1 -0
  18. package/dist/src/circuit/constants.d.ts +29 -3
  19. package/dist/src/circuit/constants.d.ts.map +1 -1
  20. package/dist/src/circuit/constants.js +32 -5
  21. package/dist/src/circuit/constants.js.map +1 -1
  22. package/dist/src/circuit/index.d.ts +16 -61
  23. package/dist/src/circuit/index.d.ts.map +1 -1
  24. package/dist/src/circuit/index.js +2 -1
  25. package/dist/src/circuit/index.js.map +1 -1
  26. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  27. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  28. package/dist/src/circuit/server/advert-service.js +69 -0
  29. package/dist/src/circuit/server/advert-service.js.map +1 -0
  30. package/dist/src/circuit/server/index.d.ts +60 -0
  31. package/dist/src/circuit/server/index.d.ts.map +1 -0
  32. package/dist/src/circuit/server/index.js +287 -0
  33. package/dist/src/circuit/server/index.js.map +1 -0
  34. package/dist/src/circuit/{reservation-store.d.ts → server/reservation-store.d.ts} +17 -10
  35. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  36. package/dist/src/circuit/server/reservation-store.js +57 -0
  37. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  38. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  39. package/dist/src/circuit/{reservation-voucher.js → server/reservation-voucher.js} +1 -1
  40. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  41. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  42. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  43. package/dist/src/circuit/transport/discovery.js +82 -0
  44. package/dist/src/circuit/transport/discovery.js.map +1 -0
  45. package/dist/src/circuit/transport/index.d.ts +33 -0
  46. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  47. package/dist/src/circuit/transport/index.js +225 -0
  48. package/dist/src/circuit/transport/index.js.map +1 -0
  49. package/dist/src/circuit/transport/listener.d.ts +9 -0
  50. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  51. package/dist/src/circuit/transport/listener.js +76 -0
  52. package/dist/src/circuit/transport/listener.js.map +1 -0
  53. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  54. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  55. package/dist/src/circuit/transport/reservation-store.js +165 -0
  56. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  57. package/dist/src/circuit/utils.d.ts +4 -2
  58. package/dist/src/circuit/utils.d.ts.map +1 -1
  59. package/dist/src/circuit/utils.js +75 -102
  60. package/dist/src/circuit/utils.js.map +1 -1
  61. package/dist/src/components.d.ts +2 -1
  62. package/dist/src/components.d.ts.map +1 -1
  63. package/dist/src/components.js.map +1 -1
  64. package/dist/src/config.d.ts.map +1 -1
  65. package/dist/src/config.js +17 -20
  66. package/dist/src/config.js.map +1 -1
  67. package/dist/src/connection/index.d.ts +2 -2
  68. package/dist/src/connection/index.d.ts.map +1 -1
  69. package/dist/src/connection/index.js +1 -1
  70. package/dist/src/connection/index.js.map +1 -1
  71. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  72. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  73. package/dist/src/connection-manager/auto-dialler.js +0 -9
  74. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  75. package/dist/src/connection-manager/dialer/dial-request.js +1 -1
  76. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  77. package/dist/src/connection-manager/dialer/index.d.ts +2 -1
  78. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  79. package/dist/src/connection-manager/dialer/index.js +3 -3
  80. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  81. package/dist/src/connection-manager/index.d.ts +0 -4
  82. package/dist/src/connection-manager/index.d.ts.map +1 -1
  83. package/dist/src/connection-manager/index.js +1 -1
  84. package/dist/src/connection-manager/index.js.map +1 -1
  85. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  86. package/dist/src/connection-manager/latency-monitor.js +1 -1
  87. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  88. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  89. package/dist/src/content-routing/index.d.ts +6 -4
  90. package/dist/src/content-routing/index.d.ts.map +1 -1
  91. package/dist/src/content-routing/index.js +1 -1
  92. package/dist/src/content-routing/index.js.map +1 -1
  93. package/dist/src/content-routing/utils.d.ts +3 -3
  94. package/dist/src/content-routing/utils.d.ts.map +1 -1
  95. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  96. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  97. package/dist/src/dht/dht-content-routing.js.map +1 -1
  98. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  99. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  100. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  101. package/dist/src/dht/dummy-dht.d.ts +1 -1
  102. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  103. package/dist/src/fetch/index.d.ts.map +1 -1
  104. package/dist/src/identify/index.d.ts +3 -1
  105. package/dist/src/identify/index.d.ts.map +1 -1
  106. package/dist/src/identify/index.js +12 -7
  107. package/dist/src/identify/index.js.map +1 -1
  108. package/dist/src/index.d.ts +13 -7
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/insecure/index.d.ts.map +1 -1
  112. package/dist/src/insecure/index.js.map +1 -1
  113. package/dist/src/libp2p.d.ts +6 -4
  114. package/dist/src/libp2p.d.ts.map +1 -1
  115. package/dist/src/libp2p.js +19 -28
  116. package/dist/src/libp2p.js.map +1 -1
  117. package/dist/src/nat-manager.d.ts.map +1 -1
  118. package/dist/src/nat-manager.js +3 -1
  119. package/dist/src/nat-manager.js.map +1 -1
  120. package/dist/src/peer-record-updater.d.ts.map +1 -1
  121. package/dist/src/peer-routing.d.ts.map +1 -1
  122. package/dist/src/ping/index.d.ts.map +1 -1
  123. package/dist/src/pnet/crypto.d.ts +1 -1
  124. package/dist/src/pnet/crypto.d.ts.map +1 -1
  125. package/dist/src/pnet/crypto.js +1 -1
  126. package/dist/src/pnet/crypto.js.map +1 -1
  127. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  128. package/dist/src/registrar.d.ts.map +1 -1
  129. package/dist/src/transport-manager.d.ts.map +1 -1
  130. package/dist/src/transport-manager.js +1 -1
  131. package/dist/src/transport-manager.js.map +1 -1
  132. package/dist/src/upgrader.d.ts +2 -1
  133. package/dist/src/upgrader.d.ts.map +1 -1
  134. package/dist/src/upgrader.js +19 -14
  135. package/dist/src/upgrader.js.map +1 -1
  136. package/package.json +23 -18
  137. package/src/address-manager/index.ts +62 -35
  138. package/src/autonat/constants.ts +4 -0
  139. package/src/autonat/index.ts +567 -0
  140. package/src/autonat/pb/index.proto +35 -0
  141. package/src/autonat/pb/index.ts +320 -0
  142. package/src/circuit/constants.ts +40 -5
  143. package/src/circuit/index.ts +17 -67
  144. package/src/circuit/server/advert-service.ts +108 -0
  145. package/src/circuit/server/index.ts +421 -0
  146. package/src/circuit/server/reservation-store.ts +111 -0
  147. package/src/circuit/{reservation-voucher.ts → server/reservation-voucher.ts} +3 -3
  148. package/src/circuit/transport/discovery.ts +127 -0
  149. package/src/circuit/transport/index.ts +325 -0
  150. package/src/circuit/transport/listener.ts +99 -0
  151. package/src/circuit/transport/reservation-store.ts +249 -0
  152. package/src/circuit/utils.ts +78 -115
  153. package/src/components.ts +9 -8
  154. package/src/config.ts +17 -20
  155. package/src/connection/index.ts +7 -7
  156. package/src/connection-manager/auto-dialler.ts +4 -20
  157. package/src/connection-manager/dialer/dial-request.ts +1 -1
  158. package/src/connection-manager/dialer/index.ts +10 -9
  159. package/src/connection-manager/index.ts +14 -19
  160. package/src/connection-manager/latency-monitor.ts +9 -9
  161. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  162. package/src/content-routing/index.ts +10 -8
  163. package/src/content-routing/utils.ts +3 -3
  164. package/src/dht/dht-content-routing.ts +3 -2
  165. package/src/dht/dht-peer-routing.ts +3 -2
  166. package/src/dht/dummy-dht.ts +1 -1
  167. package/src/fetch/index.ts +7 -7
  168. package/src/identify/index.ts +22 -17
  169. package/src/index.ts +14 -7
  170. package/src/insecure/index.ts +2 -1
  171. package/src/libp2p.ts +33 -41
  172. package/src/nat-manager.ts +9 -7
  173. package/src/peer-record-updater.ts +4 -4
  174. package/src/peer-routing.ts +4 -4
  175. package/src/ping/index.ts +4 -4
  176. package/src/pnet/crypto.ts +3 -3
  177. package/src/pnet/key-generator.ts +1 -1
  178. package/src/registrar.ts +8 -8
  179. package/src/transport-manager.ts +10 -10
  180. package/src/upgrader.ts +20 -19
  181. package/src/version.ts +1 -1
  182. package/dist/src/circuit/client.d.ts +0 -81
  183. package/dist/src/circuit/client.d.ts.map +0 -1
  184. package/dist/src/circuit/client.js +0 -285
  185. package/dist/src/circuit/client.js.map +0 -1
  186. package/dist/src/circuit/hop.d.ts +0 -23
  187. package/dist/src/circuit/hop.d.ts.map +0 -1
  188. package/dist/src/circuit/hop.js +0 -167
  189. package/dist/src/circuit/hop.js.map +0 -1
  190. package/dist/src/circuit/interfaces.d.ts +0 -27
  191. package/dist/src/circuit/interfaces.d.ts.map +0 -1
  192. package/dist/src/circuit/interfaces.js +0 -2
  193. package/dist/src/circuit/interfaces.js.map +0 -1
  194. package/dist/src/circuit/listener.d.ts +0 -9
  195. package/dist/src/circuit/listener.d.ts.map +0 -1
  196. package/dist/src/circuit/listener.js +0 -62
  197. package/dist/src/circuit/listener.js.map +0 -1
  198. package/dist/src/circuit/multicodec.d.ts +0 -3
  199. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  200. package/dist/src/circuit/multicodec.js +0 -3
  201. package/dist/src/circuit/multicodec.js.map +0 -1
  202. package/dist/src/circuit/relay.d.ts +0 -34
  203. package/dist/src/circuit/relay.d.ts.map +0 -1
  204. package/dist/src/circuit/relay.js +0 -61
  205. package/dist/src/circuit/relay.js.map +0 -1
  206. package/dist/src/circuit/reservation-store.d.ts.map +0 -1
  207. package/dist/src/circuit/reservation-store.js +0 -59
  208. package/dist/src/circuit/reservation-store.js.map +0 -1
  209. package/dist/src/circuit/reservation-voucher.d.ts.map +0 -1
  210. package/dist/src/circuit/reservation-voucher.js.map +0 -1
  211. package/dist/src/circuit/stop.d.ts +0 -19
  212. package/dist/src/circuit/stop.d.ts.map +0 -1
  213. package/dist/src/circuit/stop.js +0 -67
  214. package/dist/src/circuit/stop.js.map +0 -1
  215. package/dist/src/circuit/transport.d.ts +0 -66
  216. package/dist/src/circuit/transport.d.ts.map +0 -1
  217. package/dist/src/circuit/transport.js +0 -238
  218. package/dist/src/circuit/transport.js.map +0 -1
  219. package/src/circuit/client.ts +0 -381
  220. package/src/circuit/hop.ts +0 -210
  221. package/src/circuit/interfaces.ts +0 -28
  222. package/src/circuit/listener.ts +0 -83
  223. package/src/circuit/multicodec.ts +0 -3
  224. package/src/circuit/relay.ts +0 -87
  225. package/src/circuit/reservation-store.ts +0 -106
  226. package/src/circuit/stop.ts +0 -92
  227. package/src/circuit/transport.ts +0 -313
  228. /package/dist/src/circuit/{reservation-voucher.d.ts → server/reservation-voucher.d.ts} +0 -0
@@ -0,0 +1,69 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { codes } from '../../errors.js';
3
+ import { namespaceToCid } from '../utils.js';
4
+ import { DEFAULT_ADVERT_BOOT_DELAY, RELAY_RENDEZVOUS_NS } from '../constants.js';
5
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
6
+ import pRetry from 'p-retry';
7
+ const log = logger('libp2p:circuit-relay:advert-service');
8
+ export class AdvertService extends EventEmitter {
9
+ /**
10
+ * Creates an instance of Relay
11
+ */
12
+ constructor(components, init) {
13
+ super();
14
+ this.contentRouting = components.contentRouting;
15
+ this.bootDelay = init?.bootDelay ?? DEFAULT_ADVERT_BOOT_DELAY;
16
+ this.started = false;
17
+ }
18
+ isStarted() {
19
+ return this.started;
20
+ }
21
+ /**
22
+ * Start Relay service
23
+ */
24
+ start() {
25
+ if (this.started) {
26
+ return;
27
+ }
28
+ // Advertise service if HOP enabled and advertising enabled
29
+ this.timeout = setTimeout(() => {
30
+ this._advertiseService().catch(err => {
31
+ log.error('could not advertise service', err);
32
+ });
33
+ }, this.bootDelay);
34
+ this.started = true;
35
+ }
36
+ /**
37
+ * Stop Relay service
38
+ */
39
+ stop() {
40
+ try {
41
+ clearTimeout(this.timeout);
42
+ }
43
+ catch (err) { }
44
+ this.started = false;
45
+ }
46
+ /**
47
+ * Advertise hop relay service in the network.
48
+ */
49
+ async _advertiseService() {
50
+ await pRetry(async () => {
51
+ try {
52
+ const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS);
53
+ await this.contentRouting.provide(cid);
54
+ this.dispatchEvent(new CustomEvent('advert:success'));
55
+ }
56
+ catch (err) {
57
+ this.safeDispatchEvent('advert:error', { detail: err });
58
+ if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
59
+ log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err);
60
+ this.stop();
61
+ return;
62
+ }
63
+ log.error('could not advertise service', err);
64
+ throw err;
65
+ }
66
+ });
67
+ }
68
+ }
69
+ //# sourceMappingURL=advert-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advert-service.js","sourceRoot":"","sources":["../../../../src/circuit/server/advert-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,MAAM,GAAG,GAAG,MAAM,CAAC,qCAAqC,CAAC,CAAA;AAqBzD,MAAM,OAAO,aAAc,SAAQ,YAAiC;IAMlE;;OAEG;IACH,YAAa,UAAmC,EAAE,IAAwB;QACxE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAA;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,yBAAyB,CAAA;QAC7D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QAED,2DAA2D;QAC3D,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACnC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;QACJ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAElB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI;YACF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC3B;QAAC,OAAO,GAAG,EAAE,GAAG;QAEjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE;YACtB,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAA;gBACrD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAEtC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAA;aACtD;YAAC,OAAO,GAAQ,EAAE;gBACjB,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBAEvD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,wBAAwB,EAAE;oBAC/C,GAAG,CAAC,KAAK,CAAC,2FAA2F,EAAE,GAAG,CAAC,CAAA;oBAC3G,IAAI,CAAC,IAAI,EAAE,CAAA;oBACX,OAAM;iBACP;gBAED,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;gBAC7C,MAAM,GAAG,CAAA;aACV;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,60 @@
1
+ import type { PeerStore } from '@libp2p/interface-peer-store';
2
+ import { ReservationStoreInit } from './reservation-store.js';
3
+ import type { Registrar } from '@libp2p/interface-registrar';
4
+ import { AdvertServiceComponents, AdvertServiceInit } from './advert-service.js';
5
+ import { ProtobufStream } from 'it-pb-stream';
6
+ import { HopMessage, StopMessage } from '../pb/index.js';
7
+ import type { Connection, Stream } from '@libp2p/interface-connection';
8
+ import type { ConnectionGater } from '@libp2p/interface-connection-gater';
9
+ import type { PeerId } from '@libp2p/interface-peer-id';
10
+ import type { AddressManager } from '@libp2p/interface-address-manager';
11
+ import type { ConnectionManager } from '@libp2p/interface-connection-manager';
12
+ import type { CircuitRelayService, RelayReservation } from '../index.js';
13
+ export interface CircuitRelayServerInit {
14
+ /**
15
+ * Incoming hop requests must complete within this time in ms otherwise
16
+ * the stream will be reset (default: 30s)
17
+ */
18
+ hopTimeout?: number;
19
+ /**
20
+ * If true, advertise this service via libp2p content routing to allow
21
+ * peers to locate us on the network (default: false)
22
+ */
23
+ advertise?: boolean | AdvertServiceInit;
24
+ /**
25
+ * Configuration of reservations
26
+ */
27
+ reservations?: ReservationStoreInit;
28
+ /**
29
+ * The maximum number of simultaneous HOP inbound streams that can be open at once
30
+ */
31
+ maxInboundHopStreams?: number;
32
+ /**
33
+ * The maximum number of simultaneous HOP outbound streams that can be open at once
34
+ */
35
+ maxOutboundHopStreams?: number;
36
+ }
37
+ export interface HopProtocolOptions {
38
+ connection: Connection;
39
+ request: HopMessage;
40
+ stream: ProtobufStream<Stream>;
41
+ }
42
+ export interface StopOptions {
43
+ connection: Connection;
44
+ request: StopMessage;
45
+ }
46
+ export interface CircuitRelayServerComponents extends AdvertServiceComponents {
47
+ registrar: Registrar;
48
+ peerStore: PeerStore;
49
+ addressManager: AddressManager;
50
+ peerId: PeerId;
51
+ connectionManager: ConnectionManager;
52
+ connectionGater: ConnectionGater;
53
+ }
54
+ export interface RelayServerEvents {
55
+ 'relay:reservation': CustomEvent<RelayReservation>;
56
+ 'relay:advert:success': CustomEvent<unknown>;
57
+ 'relay:advert:error': CustomEvent<Error>;
58
+ }
59
+ export declare function circuitRelayServer(init?: CircuitRelayServerInit): (components: CircuitRelayServerComponents) => CircuitRelayService;
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/circuit/server/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAoB,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAsB,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAiB,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE/F,OAAO,EAAY,cAAc,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,UAAU,EAAuB,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAGvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AASxE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAA;IAEvC;;OAEG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAA;IAEnC;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,eAAe,EAAE,eAAe,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAA;IAClD,sBAAsB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC5C,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;CACzC;AAyUD,wBAAgB,kBAAkB,CAAE,IAAI,GAAE,sBAA2B,GAAG,CAAC,UAAU,EAAE,4BAA4B,KAAK,mBAAmB,CAIxI"}
@@ -0,0 +1,287 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { createLimitedRelay } from '../utils.js';
3
+ import { CIRCUIT_PROTO_CODE, DEFAULT_HOP_TIMEOUT, RELAY_SOURCE_TAG, RELAY_V2_HOP_CODEC, RELAY_V2_STOP_CODEC } from '../constants.js';
4
+ import { ReservationStore } from './reservation-store.js';
5
+ import { AdvertService } from './advert-service.js';
6
+ import pDefer from 'p-defer';
7
+ import { pbStream } from 'it-pb-stream';
8
+ import { HopMessage, Status, StopMessage } from '../pb/index.js';
9
+ import { multiaddr } from '@multiformats/multiaddr';
10
+ import { peerIdFromBytes } from '@libp2p/peer-id';
11
+ import { RecordEnvelope } from '@libp2p/peer-record';
12
+ import { ReservationVoucherRecord } from './reservation-voucher.js';
13
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
14
+ import { setMaxListeners } from 'events';
15
+ const log = logger('libp2p:circuit-relay:server');
16
+ const isRelayAddr = (ma) => ma.protoCodes().includes(CIRCUIT_PROTO_CODE);
17
+ class CircuitRelayServer extends EventEmitter {
18
+ /**
19
+ * Creates an instance of Relay
20
+ */
21
+ constructor(components, init = {}) {
22
+ super();
23
+ this.registrar = components.registrar;
24
+ this.peerStore = components.peerStore;
25
+ this.addressManager = components.addressManager;
26
+ this.peerId = components.peerId;
27
+ this.connectionManager = components.connectionManager;
28
+ this.connectionGater = components.connectionGater;
29
+ this.started = false;
30
+ this.hopTimeout = init?.hopTimeout ?? DEFAULT_HOP_TIMEOUT;
31
+ this.shutdownController = new AbortController();
32
+ this.maxInboundHopStreams = init.maxInboundHopStreams;
33
+ this.maxOutboundHopStreams = init.maxOutboundHopStreams;
34
+ try {
35
+ // fails on node < 15.4
36
+ setMaxListeners?.(Infinity, this.shutdownController.signal);
37
+ }
38
+ catch { }
39
+ if (init.advertise != null && init.advertise !== false) {
40
+ this.advertService = new AdvertService(components, init.advertise === true ? undefined : init.advertise);
41
+ this.advertService.addEventListener('advert:success', () => {
42
+ this.dispatchEvent(new CustomEvent('relay:advert:success'));
43
+ });
44
+ this.advertService.addEventListener('advert:error', (evt) => {
45
+ this.safeDispatchEvent('relay:advert:error', { detail: evt.detail });
46
+ });
47
+ }
48
+ this.reservationStore = new ReservationStore(init.reservations);
49
+ }
50
+ isStarted() {
51
+ return this.started;
52
+ }
53
+ /**
54
+ * Start Relay service
55
+ */
56
+ async start() {
57
+ if (this.started) {
58
+ return;
59
+ }
60
+ // Advertise service if HOP enabled and advertising enabled
61
+ this.advertService?.start();
62
+ await this.registrar.handle(RELAY_V2_HOP_CODEC, (data) => {
63
+ void this.onHop(data).catch(err => {
64
+ log.error(err);
65
+ });
66
+ }, {
67
+ maxInboundStreams: this.maxInboundHopStreams,
68
+ maxOutboundStreams: this.maxOutboundHopStreams
69
+ });
70
+ this.reservationStore.start();
71
+ this.started = true;
72
+ }
73
+ /**
74
+ * Stop Relay service
75
+ */
76
+ async stop() {
77
+ this.advertService?.stop();
78
+ this.reservationStore.stop();
79
+ this.shutdownController.abort();
80
+ await this.registrar.unhandle(RELAY_V2_HOP_CODEC);
81
+ this.started = false;
82
+ }
83
+ async onHop({ connection, stream }) {
84
+ log('received circuit v2 hop protocol stream from %s', connection.remotePeer);
85
+ const hopTimeoutPromise = pDefer();
86
+ const timeout = setTimeout(() => {
87
+ hopTimeoutPromise.reject('timed out');
88
+ }, this.hopTimeout);
89
+ const pbstr = pbStream(stream);
90
+ try {
91
+ const request = await Promise.race([
92
+ pbstr.pb(HopMessage).read(),
93
+ hopTimeoutPromise.promise
94
+ ]);
95
+ if (request?.type == null) {
96
+ throw new Error('request was invalid, could not read from stream');
97
+ }
98
+ log('received', request.type);
99
+ await Promise.race([
100
+ this.handleHopProtocol({
101
+ connection,
102
+ stream: pbstr,
103
+ request
104
+ }),
105
+ hopTimeoutPromise.promise
106
+ ]);
107
+ }
108
+ catch (err) {
109
+ log.error('error while handling hop', err);
110
+ pbstr.pb(HopMessage).write({
111
+ type: HopMessage.Type.STATUS,
112
+ status: Status.MALFORMED_MESSAGE
113
+ });
114
+ stream.abort(err);
115
+ }
116
+ finally {
117
+ clearTimeout(timeout);
118
+ }
119
+ }
120
+ async handleHopProtocol({ stream, request, connection }) {
121
+ log('received hop message');
122
+ switch (request.type) {
123
+ case HopMessage.Type.RESERVE:
124
+ await this.handleReserve({ stream, request, connection });
125
+ break;
126
+ case HopMessage.Type.CONNECT:
127
+ await this.handleConnect({ stream, request, connection });
128
+ break;
129
+ default: {
130
+ log.error('invalid hop request type %s via peer %s', request.type, connection.remotePeer);
131
+ stream.pb(HopMessage).write({ type: HopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE });
132
+ }
133
+ }
134
+ }
135
+ async handleReserve({ stream, request, connection }) {
136
+ const hopstr = stream.pb(HopMessage);
137
+ log('hop reserve request from %s', connection.remotePeer);
138
+ if (isRelayAddr(connection.remoteAddr)) {
139
+ log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer);
140
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
141
+ return;
142
+ }
143
+ if ((await this.connectionGater.denyInboundRelayReservation?.(connection.remotePeer)) === true) {
144
+ log.error('reservation for %p denied by connection gater', connection.remotePeer);
145
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
146
+ return;
147
+ }
148
+ const result = this.reservationStore.reserve(connection.remotePeer, connection.remoteAddr);
149
+ if (result.status !== Status.OK) {
150
+ hopstr.write({ type: HopMessage.Type.STATUS, status: result.status });
151
+ return;
152
+ }
153
+ try {
154
+ // tag relay target peer
155
+ // result.expire is non-null if `ReservationStore.reserve` returns with status == OK
156
+ if (result.expire != null) {
157
+ const ttl = new Date().getTime() - result.expire;
158
+ await this.peerStore.tagPeer(connection.remotePeer, RELAY_SOURCE_TAG, { value: 1, ttl });
159
+ }
160
+ hopstr.write({
161
+ type: HopMessage.Type.STATUS,
162
+ status: Status.OK,
163
+ reservation: await this.makeReservation(connection.remotePeer, BigInt(result.expire ?? 0)),
164
+ limit: this.reservationStore.get(connection.remotePeer)?.limit
165
+ });
166
+ log('sent confirmation response to %s', connection.remotePeer);
167
+ }
168
+ catch (err) {
169
+ log.error('failed to send confirmation response to %p', connection.remotePeer, err);
170
+ this.reservationStore.removeReservation(connection.remotePeer);
171
+ }
172
+ }
173
+ async makeReservation(remotePeer, expire) {
174
+ const addrs = [];
175
+ for (const relayAddr of this.addressManager.getAddresses()) {
176
+ addrs.push(relayAddr.bytes);
177
+ }
178
+ const voucher = await RecordEnvelope.seal(new ReservationVoucherRecord({
179
+ peer: remotePeer,
180
+ relay: this.peerId,
181
+ expiration: Number(expire)
182
+ }), this.peerId);
183
+ return {
184
+ addrs,
185
+ expire,
186
+ voucher: voucher.marshal()
187
+ };
188
+ }
189
+ async handleConnect({ stream, request, connection }) {
190
+ const hopstr = stream.pb(HopMessage);
191
+ if (isRelayAddr(connection.remoteAddr)) {
192
+ log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer);
193
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
194
+ return;
195
+ }
196
+ log('hop connect request from %s', connection.remotePeer);
197
+ let dstPeer;
198
+ try {
199
+ if (request.peer == null) {
200
+ log.error('no peer info in hop connect request');
201
+ throw new Error('no peer info in request');
202
+ }
203
+ request.peer.addrs.forEach(multiaddr);
204
+ dstPeer = peerIdFromBytes(request.peer.id);
205
+ }
206
+ catch (err) {
207
+ log.error('invalid hop connect request via peer %p %s', connection.remotePeer, err);
208
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE });
209
+ return;
210
+ }
211
+ if (!this.reservationStore.hasReservation(dstPeer)) {
212
+ log.error('hop connect denied for destination peer %p not having a reservation for %p with status %s', dstPeer, connection.remotePeer, Status.NO_RESERVATION);
213
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION });
214
+ return;
215
+ }
216
+ if ((await this.connectionGater.denyOutboundRelayedConnection?.(connection.remotePeer, dstPeer)) === true) {
217
+ log.error('hop connect for %p to %p denied by connection gater', connection.remotePeer, dstPeer);
218
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
219
+ return;
220
+ }
221
+ const connections = this.connectionManager.getConnections(dstPeer);
222
+ if (connections.length === 0) {
223
+ log('hop connect denied for destination peer %p not having a connection for %p as there is no destination connection', dstPeer, connection.remotePeer);
224
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION });
225
+ return;
226
+ }
227
+ const destinationConnection = connections[0];
228
+ const destinationStream = await this.stopHop({
229
+ connection: destinationConnection,
230
+ request: {
231
+ type: StopMessage.Type.CONNECT,
232
+ peer: {
233
+ id: connection.remotePeer.toBytes(),
234
+ addrs: []
235
+ }
236
+ }
237
+ });
238
+ if (destinationStream == null) {
239
+ log.error('failed to open stream to destination peer %s', destinationConnection?.remotePeer);
240
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.CONNECTION_FAILED });
241
+ return;
242
+ }
243
+ hopstr.write({ type: HopMessage.Type.STATUS, status: Status.OK });
244
+ const sourceStream = stream.unwrap();
245
+ log('connection from %p to %p established - merging streans', connection.remotePeer, dstPeer);
246
+ const limit = this.reservationStore.get(dstPeer)?.limit;
247
+ // Short circuit the two streams to create the relayed connection
248
+ createLimitedRelay(sourceStream, destinationStream, this.shutdownController.signal, limit);
249
+ }
250
+ /**
251
+ * Send a STOP request to the target peer that the dialing peer wants to contact
252
+ */
253
+ async stopHop({ connection, request }) {
254
+ log('starting circuit relay v2 stop request to %s', connection.remotePeer);
255
+ const stream = await connection.newStream([RELAY_V2_STOP_CODEC]);
256
+ const pbstr = pbStream(stream);
257
+ const stopstr = pbstr.pb(StopMessage);
258
+ stopstr.write(request);
259
+ let response;
260
+ try {
261
+ response = await stopstr.read();
262
+ }
263
+ catch (err) {
264
+ log.error('error parsing stop message response from %s', connection.remotePeer);
265
+ }
266
+ if (response == null) {
267
+ log.error('could not read response from %s', connection.remotePeer);
268
+ stream.close();
269
+ return;
270
+ }
271
+ if (response.status === Status.OK) {
272
+ log('stop request to %s was successful', connection.remotePeer);
273
+ return pbstr.unwrap();
274
+ }
275
+ log('stop request failed with code %d', response.status);
276
+ stream.close();
277
+ }
278
+ get reservations() {
279
+ return this.reservationStore.reservations;
280
+ }
281
+ }
282
+ export function circuitRelayServer(init = {}) {
283
+ return (components) => {
284
+ return new CircuitRelayServer(components, init);
285
+ };
286
+ }
287
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/circuit/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EACd,kBAAkB,EAAE,mBAAmB,EAC1C,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,gBAAgB,EAAwB,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,aAAa,EAA8C,MAAM,qBAAqB,CAAA;AAC/F,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAkB,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,UAAU,EAAe,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EAAa,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAInE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAGxC,MAAM,GAAG,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAA;AAEjD,MAAM,WAAW,GAAG,CAAC,EAAa,EAAW,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAyD5F,MAAM,kBAAmB,SAAQ,YAA+B;IAe9D;;OAEG;IACH,YAAa,UAAwC,EAAE,OAA+B,EAAE;QACtF,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAA;QAC/C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAA;QACrD,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAA;QACjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAA;QACzD,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAA;QAC/C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAA;QACrD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAA;QAEvD,IAAI;YACF,uBAAuB;YACvB,eAAe,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;SAC5D;QAAC,MAAM,GAAG;QAEX,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YACtD,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACxG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,EAAE;gBACzD,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAA;YAC7D,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1D,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YACtE,CAAC,CAAC,CAAA;SACH;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACjE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QAED,2DAA2D;QAC3D,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAA;QAE3B,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YACvD,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAChC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC,EAAE;YACD,iBAAiB,EAAE,IAAI,CAAC,oBAAoB;YAC5C,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;SAC/C,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA;QAE7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAA;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;QAEjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,EAAE,UAAU,EAAE,MAAM,EAAsB;QACrD,GAAG,CAAC,iDAAiD,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAE7E,MAAM,iBAAiB,GAAG,MAAM,EAAc,CAAA;QAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACvC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAE9B,IAAI;YACF,MAAM,OAAO,GAAe,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC7C,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;gBAC3B,iBAAiB,CAAC,OAAO;aAC1B,CAAC,CAAA;YAEF,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;aACnE;YAED,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YAE7B,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,iBAAiB,CAAC;oBACrB,UAAU;oBACV,MAAM,EAAE,KAAK;oBACb,OAAO;iBACR,CAAC;gBACF,iBAAiB,CAAC,OAAO;aAC1B,CAAC,CAAA;SACH;QAAC,OAAO,GAAQ,EAAE;YACjB,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;YAC1C,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;gBACzB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM;gBAC5B,MAAM,EAAE,MAAM,CAAC,iBAAiB;aACjC,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SAClB;gBAAS;YACR,YAAY,CAAC,OAAO,CAAC,CAAA;SACtB;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAsB;QAC1E,GAAG,CAAC,sBAAsB,CAAC,CAAA;QAC3B,QAAQ,OAAO,CAAC,IAAI,EAAE;YACpB,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAAC,MAAK;YAC9F,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAAC,MAAK;YAC9F,OAAO,CAAC,CAAC;gBACP,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;gBACzF,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAA;aACjG;SACF;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAsB;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QACpC,GAAG,CAAC,6BAA6B,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAEzD,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YACtC,GAAG,CAAC,KAAK,CAAC,+DAA+D,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACjG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE;YAC9F,GAAG,CAAC,KAAK,CAAC,+CAA+C,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACjF,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAE1F,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YACrE,OAAM;SACP;QAED,IAAI;YACF,wBAAwB;YACxB,oFAAoF;YACpF,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE;gBACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;gBAChD,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;aACzF;YAED,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM;gBAC5B,MAAM,EAAE,MAAM,CAAC,EAAE;gBACjB,WAAW,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;gBAC1F,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK;aAC/D,CAAC,CAAA;YACF,GAAG,CAAC,kCAAkC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;SAC/D;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,4CAA4C,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACnF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;SAC/D;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,MAAc;QAEd,MAAM,KAAK,GAAG,EAAE,CAAA;QAEhB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE;YAC1D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;SAC5B;QAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC;YACrE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;SAC3B,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEhB,OAAO;YACL,KAAK;YACL,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAsB;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QAEpC,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YACtC,GAAG,CAAC,KAAK,CAAC,+DAA+D,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACjG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,GAAG,CAAC,6BAA6B,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAEzD,IAAI,OAAe,CAAA;QAEnB,IAAI;YACF,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBACxB,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;gBAChD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;aAC3C;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACrC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SAC3C;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,4CAA4C,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACnF,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAClD,GAAG,CAAC,KAAK,CAAC,2FAA2F,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;YAC7J,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;YAC7E,OAAM;SACP;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE;YACzG,GAAG,CAAC,KAAK,CAAC,qDAAqD,EAAE,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YAChG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAElE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,GAAG,CAAC,iHAAiH,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACtJ,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;YAC7E,OAAM;SACP;QAED,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAE5C,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;YAC3C,UAAU,EAAE,qBAAqB;YACjC,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO;gBAC9B,IAAI,EAAE;oBACJ,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE;oBACnC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAC,CAAA;QAEF,IAAI,iBAAiB,IAAI,IAAI,EAAE;YAC7B,GAAG,CAAC,KAAK,CAAC,8CAA8C,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAA;YAC5F,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAChF,OAAM;SACP;QAED,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QACjE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QAEpC,GAAG,CAAC,wDAAwD,EAAE,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC7F,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAA;QACvD,iEAAiE;QACjE,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC5F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAE,EACb,UAAU,EACV,OAAO,EACK;QACZ,GAAG,CAAC,8CAA8C,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACtB,IAAI,QAAQ,CAAA;QAEZ,IAAI;YACF,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;SAChC;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;SAChF;QAED,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACnE,MAAM,CAAC,KAAK,EAAE,CAAA;YACd,OAAM;SACP;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE;YACjC,GAAG,CAAC,mCAAmC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YAC/D,OAAO,KAAK,CAAC,MAAM,EAAE,CAAA;SACtB;QAED,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAA;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAE,OAA+B,EAAE;IACnE,OAAO,CAAC,UAAU,EAAE,EAAE;QACpB,OAAO,IAAI,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACjD,CAAC,CAAA;AACH,CAAC"}
@@ -1,17 +1,19 @@
1
- import { Limit } from './pb/index.js';
2
- import type { ReservationStore as IReservationStore, ReservationStatus, Reservation } from './interfaces.js';
1
+ import { Limit, Status } from '../pb/index.js';
3
2
  import type { Multiaddr } from '@multiformats/multiaddr';
4
3
  import type { PeerId } from '@libp2p/interface-peer-id';
5
4
  import type { Startable } from '@libp2p/interfaces/startable';
5
+ import { PeerMap } from '@libp2p/peer-collections';
6
6
  import type { RecursivePartial } from '@libp2p/interfaces';
7
+ import type { RelayReservation } from '../index.js';
8
+ export type ReservationStatus = Status.OK | Status.PERMISSION_DENIED | Status.RESERVATION_REFUSED;
7
9
  export interface ReservationStoreInit {
8
- maxReservations: number;
9
- reservationClearInterval: number;
10
- applyDefaultLimit: boolean;
10
+ maxReservations?: number;
11
+ reservationClearInterval?: number;
12
+ applyDefaultLimit?: boolean;
11
13
  /**
12
14
  * reservation ttl, default: 2 hours
13
15
  */
14
- reservationTtl: number;
16
+ reservationTtl?: number;
15
17
  /**
16
18
  * The maximum time a relayed connection can be open for
17
19
  */
@@ -22,11 +24,16 @@ export interface ReservationStoreInit {
22
24
  defaultDataLimit?: bigint;
23
25
  }
24
26
  export type ReservationStoreOptions = RecursivePartial<ReservationStoreInit>;
25
- export declare class ReservationStore implements IReservationStore, Startable {
26
- private readonly reservations;
27
+ export declare class ReservationStore implements Startable {
28
+ readonly reservations: PeerMap<RelayReservation>;
27
29
  private _started;
28
30
  private interval;
29
- private readonly init;
31
+ private readonly maxReservations;
32
+ private readonly reservationClearInterval;
33
+ private readonly applyDefaultLimit;
34
+ private readonly reservationTtl;
35
+ private readonly defaultDurationLimit;
36
+ private readonly defaultDataLimit;
30
37
  constructor(options?: ReservationStoreOptions);
31
38
  isStarted(): boolean;
32
39
  start(): void;
@@ -37,6 +44,6 @@ export declare class ReservationStore implements IReservationStore, Startable {
37
44
  };
38
45
  removeReservation(peer: PeerId): void;
39
46
  hasReservation(dst: PeerId): boolean;
40
- get(peer: PeerId): Reservation | undefined;
47
+ get(peer: PeerId): RelayReservation | undefined;
41
48
  }
42
49
  //# sourceMappingURL=reservation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservation-store.d.ts","sourceRoot":"","sources":["../../../../src/circuit/server/reservation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAA;AAEjG,MAAM,WAAW,oBAAoB;IAInC,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAIjC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;AAE5E,qBAAa,gBAAiB,YAAW,SAAS;IAChD,SAAgB,YAAY,4BAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAE5B,OAAO,GAAE,uBAA4B;IASlD,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI;IAkBd,IAAI,IAAK,IAAI;IAIb,OAAO,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAatG,iBAAiB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;CAGjD"}
@@ -0,0 +1,57 @@
1
+ import { Status } from '../pb/index.js';
2
+ import { PeerMap } from '@libp2p/peer-collections';
3
+ import { DEFAULT_DATA_LIMIT, DEFAULT_DURATION_LIMIT, DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL, DEFAULT_MAX_RESERVATION_STORE_SIZE, DEFAULT_MAX_RESERVATION_TTL } from '../constants.js';
4
+ export class ReservationStore {
5
+ constructor(options = {}) {
6
+ this.reservations = new PeerMap();
7
+ this._started = false;
8
+ this.maxReservations = options.maxReservations ?? DEFAULT_MAX_RESERVATION_STORE_SIZE;
9
+ this.reservationClearInterval = options.reservationClearInterval ?? DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL;
10
+ this.applyDefaultLimit = options.applyDefaultLimit !== false;
11
+ this.reservationTtl = options.reservationTtl ?? DEFAULT_MAX_RESERVATION_TTL;
12
+ this.defaultDurationLimit = options.defaultDurationLimit ?? DEFAULT_DURATION_LIMIT;
13
+ this.defaultDataLimit = options.defaultDataLimit ?? DEFAULT_DATA_LIMIT;
14
+ }
15
+ isStarted() {
16
+ return this._started;
17
+ }
18
+ start() {
19
+ if (this._started) {
20
+ return;
21
+ }
22
+ this._started = true;
23
+ this.interval = setInterval(() => {
24
+ const now = (new Date()).getTime();
25
+ this.reservations.forEach((r, k) => {
26
+ if (r.expire.getTime() < now) {
27
+ this.reservations.delete(k);
28
+ }
29
+ });
30
+ }, this.reservationClearInterval);
31
+ }
32
+ stop() {
33
+ clearInterval(this.interval);
34
+ }
35
+ reserve(peer, addr, limit) {
36
+ if (this.reservations.size >= this.maxReservations && !this.reservations.has(peer)) {
37
+ return { status: Status.RESERVATION_REFUSED };
38
+ }
39
+ const expire = new Date(Date.now() + this.reservationTtl);
40
+ let checkedLimit;
41
+ if (this.applyDefaultLimit) {
42
+ checkedLimit = limit ?? { data: this.defaultDataLimit, duration: this.defaultDurationLimit };
43
+ }
44
+ this.reservations.set(peer, { addr, expire, limit: checkedLimit });
45
+ return { status: Status.OK, expire: expire.getTime() };
46
+ }
47
+ removeReservation(peer) {
48
+ this.reservations.delete(peer);
49
+ }
50
+ hasReservation(dst) {
51
+ return this.reservations.has(dst);
52
+ }
53
+ get(peer) {
54
+ return this.reservations.get(peer);
55
+ }
56
+ }
57
+ //# sourceMappingURL=reservation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservation-store.js","sourceRoot":"","sources":["../../../../src/circuit/server/reservation-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservation-voucher.d.ts","sourceRoot":"","sources":["../../../../src/circuit/server/reservation-voucher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAGtD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,wBAAyB,YAAW,MAAM;IACrD,SAAgB,MAAM,uBAAsB;IAC5C,SAAgB,KAAK,aAA+B;IAEpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEtB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,yBAAyB;IAMnE,OAAO,IAAK,UAAU;IAQtB,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAkBhC"}
@@ -1,4 +1,4 @@
1
- import { ReservationVoucher } from './pb/index.js';
1
+ import { ReservationVoucher } from '../pb/index.js';
2
2
  export class ReservationVoucherRecord {
3
3
  constructor({ relay, peer, expiration }) {
4
4
  this.domain = 'libp2p-relay-rsvp';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservation-voucher.js","sourceRoot":"","sources":["../../../../src/circuit/server/reservation-voucher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAQnD,MAAM,OAAO,wBAAwB;IAQnC,YAAa,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAA6B;QAPnD,WAAM,GAAG,mBAAmB,CAAA;QAC5B,UAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAOlD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,kBAAkB,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACpC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,KAAa;QACnB,IAAI,CAAC,CAAC,KAAK,YAAY,wBAAwB,CAAC,EAAE;YAChD,OAAO,KAAK,CAAA;SACb;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;YACxC,OAAO,KAAK,CAAA;SACb;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -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"}