@libp2p/upnp-nat 3.0.4 → 3.0.5-66c3ec5e1

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.
@@ -1,3 +1,7 @@
1
+ export declare const DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL = 5000;
2
+ export declare const DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT = 5000;
3
+ export declare const DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL = 1000;
1
4
  export declare const DEFAULT_GATEWAY_SEARCH_TIMEOUT = 60000;
2
5
  export declare const DEFAULT_GATEWAY_SEARCH_INTERVAL = 300000;
6
+ export declare const DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL = 10000;
3
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,QAAS,CAAA;AACpD,eAAO,MAAM,+BAA+B,SAAU,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uCAAuC,OAAQ,CAAA;AAC5D,eAAO,MAAM,sCAAsC,OAAQ,CAAA;AAC3D,eAAO,MAAM,+CAA+C,OAAQ,CAAA;AAEpE,eAAO,MAAM,8BAA8B,QAAS,CAAA;AACpD,eAAO,MAAM,+BAA+B,SAAU,CAAA;AACtD,eAAO,MAAM,uCAAuC,QAAS,CAAA"}
@@ -1,3 +1,7 @@
1
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL = 5_000;
2
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT = 5_000;
3
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL = 1_000;
1
4
  export const DEFAULT_GATEWAY_SEARCH_TIMEOUT = 60_000;
2
5
  export const DEFAULT_GATEWAY_SEARCH_INTERVAL = 300_000;
6
+ export const DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL = 10_000;
3
7
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAA;AACpD,MAAM,CAAC,MAAM,+BAA+B,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uCAAuC,GAAG,KAAK,CAAA;AAC5D,MAAM,CAAC,MAAM,sCAAsC,GAAG,KAAK,CAAA;AAC3D,MAAM,CAAC,MAAM,+CAA+C,GAAG,KAAK,CAAA;AAEpE,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAA;AACpD,MAAM,CAAC,MAAM,+BAA+B,GAAG,OAAO,CAAA;AACtD,MAAM,CAAC,MAAM,uCAAuC,GAAG,MAAM,CAAA"}
@@ -6,6 +6,12 @@ export interface GatewayFinderComponents {
6
6
  }
7
7
  export interface GatewayFinderInit {
8
8
  portMappingClient: UPnPNAT;
9
+ initialSearchInterval?: number;
10
+ initialSearchTimeout?: number;
11
+ initialSearchMessageInterval?: number;
12
+ searchInterval?: number;
13
+ searchTimeout?: number;
14
+ searchMessageInterval?: number;
9
15
  }
10
16
  export interface GatewayFinderEvents {
11
17
  'gateway': CustomEvent<Gateway>;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-finder.d.ts","sourceRoot":"","sources":["../../src/gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAA;AAGlE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAGhE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAChC;AAED,qBAAa,aAAc,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB;IAgCnE,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAS7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAI7B"}
1
+ {"version":3,"file":"gateway-finder.d.ts","sourceRoot":"","sources":["../../src/gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAA;AAGlE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAGhE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAChC;AAED,qBAAa,aAAc,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB;IAmDnE,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAS7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -1,6 +1,6 @@
1
1
  import { TypedEventEmitter, start, stop } from '@libp2p/interface';
2
2
  import { repeatingTask } from '@libp2p/utils/repeating-task';
3
- import { DEFAULT_GATEWAY_SEARCH_INTERVAL, DEFAULT_GATEWAY_SEARCH_TIMEOUT } from './constants.js';
3
+ import { DEFAULT_GATEWAY_SEARCH_INTERVAL, DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL, DEFAULT_GATEWAY_SEARCH_TIMEOUT, DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL, DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL, DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT } from './constants.js';
4
4
  export class GatewayFinder extends TypedEventEmitter {
5
5
  log;
6
6
  gateways;
@@ -15,24 +15,40 @@ export class GatewayFinder extends TypedEventEmitter {
15
15
  this.gateways = [];
16
16
  // every five minutes, search for network gateways for one minute
17
17
  this.findGateways = repeatingTask(async (options) => {
18
- for await (const gateway of this.portMappingClient.findGateways({
19
- ...options,
20
- searchInterval: 10000
21
- })) {
22
- if (this.gateways.some(g => {
23
- return g.id === gateway.id && g.family === gateway.family;
18
+ try {
19
+ const searchMessageInterval = this.gateways.length > 0
20
+ ? init.searchMessageInterval ?? DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL
21
+ : init.initialSearchMessageInterval ?? DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL;
22
+ this.log('begin gateway search, sending M-SEARCH every %dms', searchMessageInterval);
23
+ for await (const gateway of this.portMappingClient.findGateways({
24
+ ...options,
25
+ searchInterval: searchMessageInterval
24
26
  })) {
25
- // already seen this gateway
26
- continue;
27
+ if (this.gateways.some(g => {
28
+ return g.id === gateway.id && g.family === gateway.family;
29
+ })) {
30
+ // already seen this gateway
31
+ continue;
32
+ }
33
+ this.gateways.push(gateway);
34
+ this.safeDispatchEvent('gateway', {
35
+ detail: gateway
36
+ });
37
+ // we've found a gateway, wait for longer before searching again
38
+ const searchInterval = init.searchTimeout ?? DEFAULT_GATEWAY_SEARCH_INTERVAL;
39
+ const searchTimeout = init.searchTimeout ?? DEFAULT_GATEWAY_SEARCH_TIMEOUT;
40
+ this.log('switching gateway search to every %dms, timing out after %dms', searchInterval, searchTimeout);
41
+ this.findGateways.setInterval(searchInterval);
42
+ this.findGateways.setTimeout(searchTimeout);
27
43
  }
28
- this.gateways.push(gateway);
29
- this.safeDispatchEvent('gateway', {
30
- detail: gateway
31
- });
44
+ this.log('gateway search finished, found %d gateways', this.gateways.length);
32
45
  }
33
- }, DEFAULT_GATEWAY_SEARCH_INTERVAL, {
46
+ catch (err) {
47
+ this.log.error('gateway search errored - %e', err);
48
+ }
49
+ }, init.initialSearchInterval ?? DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL, {
34
50
  runImmediately: true,
35
- timeout: DEFAULT_GATEWAY_SEARCH_TIMEOUT
51
+ timeout: init.initialSearchTimeout ?? DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT
36
52
  });
37
53
  }
38
54
  async start() {
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-finder.js","sourceRoot":"","sources":["../../src/gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AAiBhG,MAAM,OAAO,aAAc,SAAQ,iBAAsC;IACtD,GAAG,CAAQ;IACX,QAAQ,CAAW;IACnB,YAAY,CAAe;IAC3B,iBAAiB,CAAS;IACnC,OAAO,CAAS;IAExB,YAAa,UAAmC,EAAE,IAAuB;QACvE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;QAC/C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAElB,iEAAiE;QACjE,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClD,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;gBAC9D,GAAG,OAAO;gBACV,cAAc,EAAE,KAAK;aACtB,CAAC,EAAE,CAAC;gBACH,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBACzB,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAA;gBAC3D,CAAC,CAAC,EAAE,CAAC;oBACH,4BAA4B;oBAC5B,SAAQ;gBACV,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;oBAChC,MAAM,EAAE,OAAO;iBAChB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,EAAE,+BAA+B,EAAE;YAClC,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"gateway-finder.js","sourceRoot":"","sources":["../../src/gateway-finder.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,68 @@ export interface UPnPNATInit {
97
97
  * @default false
98
98
  */
99
99
  autoConfirmAddress?: boolean;
100
+ /**
101
+ * How often to search for network gateways in ms.
102
+ *
103
+ * This interval is used before a gateway has been found on the network, after
104
+ * that it switches to `gatewaySearchInterval` which lowers the frequency of
105
+ * the search.
106
+ *
107
+ * @default 5_000
108
+ */
109
+ initialGatewaySearchInterval?: number;
110
+ /**
111
+ * How often to send the `M-SEARCH` SSDP message during a gateway search in
112
+ * ms.
113
+ *
114
+ * Some routers are flaky and may not respond to every query so decreasing
115
+ * this will increase the number of search messages sent before the timeout.
116
+ *
117
+ * This interval is used before a gateway has been found on the network, after
118
+ * that it switches to `gatewaySearchMessageInterval` which lowers the
119
+ * frequency of search messages sent.
120
+ *
121
+ * @default 1_000
122
+ */
123
+ initialGatewaySearchMessageInterval?: number;
124
+ /**
125
+ * How long to search for gateways for before giving up in ms.
126
+ *
127
+ * This timeout is used before a gateway has been found on the network, after
128
+ * that it switches to `gatewaySearchTimeout` which increases the timeout to
129
+ * give gateways more time to respond.
130
+ *
131
+ * @default 5_000
132
+ */
133
+ initialGatewaySearchTimeout?: number;
134
+ /**
135
+ * How often to search for network gateways in ms.
136
+ *
137
+ * This interval is used after a gateway has been found on the network.
138
+ *
139
+ * @default 300_000
140
+ */
141
+ gatewaySearchInterval?: number;
142
+ /**
143
+ * How often to send the `M-SEARCH` SSDP message during a gateway search in
144
+ * ms.
145
+ *
146
+ * Some routers are flaky and may not respond to every query so decreasing
147
+ * this will increase the number of search messages sent before the timeout.
148
+ *
149
+ * This interval is used after a gateway has been found on the network.
150
+ *
151
+ * @default 10_000
152
+ */
153
+ gatewaySearchMessageInterval?: number;
154
+ /**
155
+ * How long to search for gateways for before giving up in ms.
156
+ *
157
+ * This timeout is used after a gateway has been found on the network.
158
+ *
159
+ * @default 60_000
160
+ */
161
+ gatewaySearchTimeout?: number;
100
162
  }
101
163
  export interface UPnPNATComponents {
102
164
  peerId: PeerId;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA;AAE7C,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IAErC;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAA;IAEpC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAA;IAEpC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,aAAa,CAAA;IAEjC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,eAAe,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,OAAO;IACtB,iBAAiB,EAAE,aAAa,CAAA;CACjC;AAED,wBAAgB,OAAO,CAAE,IAAI,GAAE,WAAgB,GAAG,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAI3F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA;AAE7C,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IAErC;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAA;IAEpC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAA;IAEpC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,aAAa,CAAA;IAEjC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;;;;;;OAQG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IAErC;;;;;;;;;;;;OAYG;IACH,mCAAmC,CAAC,EAAE,MAAM,CAAA;IAE5C;;;;;;;;OAQG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAA;IAEpC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IAErC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,eAAe,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,OAAO;IACtB,iBAAiB,EAAE,aAAa,CAAA;CACjC;AAED,wBAAgB,OAAO,CAAE,IAAI,GAAE,WAAgB,GAAG,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAI3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AAwFvD,MAAM,UAAU,OAAO,CAAE,OAAoB,EAAE;IAC7C,OAAO,CAAC,UAA6B,EAAE,EAAE;QACvC,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AA4JvD,MAAM,UAAU,OAAO,CAAE,OAAoB,EAAE;IAC7C,OAAO,CAAC,UAA6B,EAAE,EAAE;QACvC,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"upnp-nat.d.ts","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAgC,MAAM,mBAAmB,CAAA;AAI1G,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7F,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG1D,qBAAa,OAAQ,YAAW,SAAS,EAAE,gBAAgB;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,OAAO,CAAS;IACjB,iBAAiB,EAAE,aAAa,CAAA;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAmB;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAE/B,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW;IAgC7D,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAqB;IAElD,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAEvC;IAED,IAAI,CAAC,mBAAmB,CAAC,IAAK,MAAM,EAAE,CAQrC;IAED,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAQ5B,mBAAmB,CAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAejD,cAAc,IAAK,OAAO,CAAC,IAAI,CAAC;CAWvC"}
1
+ {"version":3,"file":"upnp-nat.d.ts","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAgC,MAAM,mBAAmB,CAAA;AAI1G,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7F,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG1D,qBAAa,OAAQ,YAAW,SAAS,EAAE,gBAAgB;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,OAAO,CAAS;IACjB,iBAAiB,EAAE,aAAa,CAAA;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAmB;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAE/B,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW;IAsC7D,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAqB;IAElD,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAEvC;IAED,IAAI,CAAC,mBAAmB,CAAC,IAAK,MAAM,EAAE,CAQrC;IAED,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAQ5B,mBAAmB,CAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAejD,cAAc,IAAK,OAAO,CAAC,IAAI,CAAC;CAWvC"}
@@ -38,7 +38,13 @@ export class UPnPNAT {
38
38
  }, 5_000);
39
39
  // trigger update when we discovery gateways on the network
40
40
  this.gatewayFinder = new GatewayFinder(components, {
41
- portMappingClient: this.portMappingClient
41
+ portMappingClient: this.portMappingClient,
42
+ initialSearchInterval: init.initialGatewaySearchInterval,
43
+ initialSearchTimeout: init.initialGatewaySearchTimeout,
44
+ initialSearchMessageInterval: init.initialGatewaySearchMessageInterval,
45
+ searchInterval: init.gatewaySearchInterval,
46
+ searchTimeout: init.gatewaySearchTimeout,
47
+ searchMessageInterval: init.gatewaySearchMessageInterval
42
48
  });
43
49
  this.onGatewayDiscovered = this.onGatewayDiscovered.bind(this);
44
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"upnp-nat.js","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upnp-nat.js","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/upnp-nat",
3
- "version": "3.0.4",
3
+ "version": "3.0.5-66c3ec5e1",
4
4
  "description": "UPnP NAT hole punching",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/upnp-nat#readme",
@@ -52,18 +52,18 @@
52
52
  "dependencies": {
53
53
  "@achingbrain/nat-port-mapper": "^4.0.0",
54
54
  "@chainsafe/is-ip": "^2.0.2",
55
- "@libp2p/interface": "^2.4.0",
56
- "@libp2p/interface-internal": "^2.2.2",
57
- "@libp2p/utils": "^6.3.1",
55
+ "@libp2p/interface": "2.4.1-66c3ec5e1",
56
+ "@libp2p/interface-internal": "2.2.3-66c3ec5e1",
57
+ "@libp2p/utils": "6.4.0-66c3ec5e1",
58
58
  "@multiformats/multiaddr": "^12.3.3",
59
59
  "@multiformats/multiaddr-matcher": "^1.6.0",
60
60
  "p-defer": "^4.0.1",
61
61
  "race-signal": "^1.1.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@libp2p/crypto": "^5.0.9",
65
- "@libp2p/logger": "^5.1.6",
66
- "@libp2p/peer-id": "^5.0.10",
64
+ "@libp2p/crypto": "5.0.10-66c3ec5e1",
65
+ "@libp2p/logger": "5.1.7-66c3ec5e1",
66
+ "@libp2p/peer-id": "5.0.11-66c3ec5e1",
67
67
  "aegir": "^45.0.5",
68
68
  "sinon-ts": "^2.0.0"
69
69
  },
package/src/constants.ts CHANGED
@@ -1,2 +1,7 @@
1
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL = 5_000
2
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT = 5_000
3
+ export const DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL = 1_000
4
+
1
5
  export const DEFAULT_GATEWAY_SEARCH_TIMEOUT = 60_000
2
6
  export const DEFAULT_GATEWAY_SEARCH_INTERVAL = 300_000
7
+ export const DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL = 10_000
@@ -1,6 +1,6 @@
1
1
  import { TypedEventEmitter, start, stop } from '@libp2p/interface'
2
2
  import { repeatingTask } from '@libp2p/utils/repeating-task'
3
- import { DEFAULT_GATEWAY_SEARCH_INTERVAL, DEFAULT_GATEWAY_SEARCH_TIMEOUT } from './constants.js'
3
+ import { DEFAULT_GATEWAY_SEARCH_INTERVAL, DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL, DEFAULT_GATEWAY_SEARCH_TIMEOUT, DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL, DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL, DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT } from './constants.js'
4
4
  import type { Gateway, UPnPNAT } from '@achingbrain/nat-port-mapper'
5
5
  import type { ComponentLogger, Logger } from '@libp2p/interface'
6
6
  import type { RepeatingTask } from '@libp2p/utils/repeating-task'
@@ -11,6 +11,12 @@ export interface GatewayFinderComponents {
11
11
 
12
12
  export interface GatewayFinderInit {
13
13
  portMappingClient: UPnPNAT
14
+ initialSearchInterval?: number
15
+ initialSearchTimeout?: number
16
+ initialSearchMessageInterval?: number
17
+ searchInterval?: number
18
+ searchTimeout?: number
19
+ searchMessageInterval?: number
14
20
  }
15
21
 
16
22
  export interface GatewayFinderEvents {
@@ -34,25 +40,44 @@ export class GatewayFinder extends TypedEventEmitter<GatewayFinderEvents> {
34
40
 
35
41
  // every five minutes, search for network gateways for one minute
36
42
  this.findGateways = repeatingTask(async (options) => {
37
- for await (const gateway of this.portMappingClient.findGateways({
38
- ...options,
39
- searchInterval: 10000
40
- })) {
41
- if (this.gateways.some(g => {
42
- return g.id === gateway.id && g.family === gateway.family
43
+ try {
44
+ const searchMessageInterval = this.gateways.length > 0
45
+ ? init.searchMessageInterval ?? DEFAULT_GATEWAY_SEARCH_MESSAGE_INTERVAL
46
+ : init.initialSearchMessageInterval ?? DEFAULT_INITIAL_GATEWAY_SEARCH_MESSAGE_INTERVAL
47
+
48
+ this.log('begin gateway search, sending M-SEARCH every %dms', searchMessageInterval)
49
+
50
+ for await (const gateway of this.portMappingClient.findGateways({
51
+ ...options,
52
+ searchInterval: searchMessageInterval
43
53
  })) {
44
- // already seen this gateway
45
- continue
54
+ if (this.gateways.some(g => {
55
+ return g.id === gateway.id && g.family === gateway.family
56
+ })) {
57
+ // already seen this gateway
58
+ continue
59
+ }
60
+
61
+ this.gateways.push(gateway)
62
+ this.safeDispatchEvent('gateway', {
63
+ detail: gateway
64
+ })
65
+
66
+ // we've found a gateway, wait for longer before searching again
67
+ const searchInterval = init.searchTimeout ?? DEFAULT_GATEWAY_SEARCH_INTERVAL
68
+ const searchTimeout = init.searchTimeout ?? DEFAULT_GATEWAY_SEARCH_TIMEOUT
69
+ this.log('switching gateway search to every %dms, timing out after %dms', searchInterval, searchTimeout)
70
+ this.findGateways.setInterval(searchInterval)
71
+ this.findGateways.setTimeout(searchTimeout)
46
72
  }
47
73
 
48
- this.gateways.push(gateway)
49
- this.safeDispatchEvent('gateway', {
50
- detail: gateway
51
- })
74
+ this.log('gateway search finished, found %d gateways', this.gateways.length)
75
+ } catch (err) {
76
+ this.log.error('gateway search errored - %e', err)
52
77
  }
53
- }, DEFAULT_GATEWAY_SEARCH_INTERVAL, {
78
+ }, init.initialSearchInterval ?? DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL, {
54
79
  runImmediately: true,
55
- timeout: DEFAULT_GATEWAY_SEARCH_TIMEOUT
80
+ timeout: init.initialSearchTimeout ?? DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT
56
81
  })
57
82
  }
58
83
 
package/src/index.ts CHANGED
@@ -109,6 +109,74 @@ export interface UPnPNATInit {
109
109
  * @default false
110
110
  */
111
111
  autoConfirmAddress?: boolean
112
+
113
+ /**
114
+ * How often to search for network gateways in ms.
115
+ *
116
+ * This interval is used before a gateway has been found on the network, after
117
+ * that it switches to `gatewaySearchInterval` which lowers the frequency of
118
+ * the search.
119
+ *
120
+ * @default 5_000
121
+ */
122
+ initialGatewaySearchInterval?: number
123
+
124
+ /**
125
+ * How often to send the `M-SEARCH` SSDP message during a gateway search in
126
+ * ms.
127
+ *
128
+ * Some routers are flaky and may not respond to every query so decreasing
129
+ * this will increase the number of search messages sent before the timeout.
130
+ *
131
+ * This interval is used before a gateway has been found on the network, after
132
+ * that it switches to `gatewaySearchMessageInterval` which lowers the
133
+ * frequency of search messages sent.
134
+ *
135
+ * @default 1_000
136
+ */
137
+ initialGatewaySearchMessageInterval?: number
138
+
139
+ /**
140
+ * How long to search for gateways for before giving up in ms.
141
+ *
142
+ * This timeout is used before a gateway has been found on the network, after
143
+ * that it switches to `gatewaySearchTimeout` which increases the timeout to
144
+ * give gateways more time to respond.
145
+ *
146
+ * @default 5_000
147
+ */
148
+ initialGatewaySearchTimeout?: number
149
+
150
+ /**
151
+ * How often to search for network gateways in ms.
152
+ *
153
+ * This interval is used after a gateway has been found on the network.
154
+ *
155
+ * @default 300_000
156
+ */
157
+ gatewaySearchInterval?: number
158
+
159
+ /**
160
+ * How often to send the `M-SEARCH` SSDP message during a gateway search in
161
+ * ms.
162
+ *
163
+ * Some routers are flaky and may not respond to every query so decreasing
164
+ * this will increase the number of search messages sent before the timeout.
165
+ *
166
+ * This interval is used after a gateway has been found on the network.
167
+ *
168
+ * @default 10_000
169
+ */
170
+ gatewaySearchMessageInterval?: number
171
+
172
+ /**
173
+ * How long to search for gateways for before giving up in ms.
174
+ *
175
+ * This timeout is used after a gateway has been found on the network.
176
+ *
177
+ * @default 60_000
178
+ */
179
+ gatewaySearchTimeout?: number
112
180
  }
113
181
 
114
182
  export interface UPnPNATComponents {
package/src/upnp-nat.ts CHANGED
@@ -46,7 +46,13 @@ export class UPnPNAT implements Startable, UPnPNATInterface {
46
46
 
47
47
  // trigger update when we discovery gateways on the network
48
48
  this.gatewayFinder = new GatewayFinder(components, {
49
- portMappingClient: this.portMappingClient
49
+ portMappingClient: this.portMappingClient,
50
+ initialSearchInterval: init.initialGatewaySearchInterval,
51
+ initialSearchTimeout: init.initialGatewaySearchTimeout,
52
+ initialSearchMessageInterval: init.initialGatewaySearchMessageInterval,
53
+ searchInterval: init.gatewaySearchInterval,
54
+ searchTimeout: init.gatewaySearchTimeout,
55
+ searchMessageInterval: init.gatewaySearchMessageInterval
50
56
  })
51
57
 
52
58
  this.onGatewayDiscovered = this.onGatewayDiscovered.bind(this)
@@ -1,12 +0,0 @@
1
- {
2
- "PMPOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.PMPOptions.html",
3
- ".:PMPOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.PMPOptions.html",
4
- "UPnPNAT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNAT.html",
5
- ".:UPnPNAT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNAT.html",
6
- "UPnPNATComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNATComponents.html",
7
- ".:UPnPNATComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNATComponents.html",
8
- "UPnPNATInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNATInit.html",
9
- ".:UPnPNATInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_upnp_nat.UPnPNATInit.html",
10
- "uPnPNAT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_upnp_nat.uPnPNAT-1.html",
11
- ".:uPnPNAT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_upnp_nat.uPnPNAT-1.html"
12
- }