@libp2p/upnp-nat 3.0.5 → 3.1.0-21088c519
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.
- package/README.md +40 -0
- package/dist/src/check-external-address.d.ts.map +1 -1
- package/dist/src/check-external-address.js +0 -2
- package/dist/src/check-external-address.js.map +1 -1
- package/dist/src/constants.d.ts +4 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +4 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +125 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +40 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/search-gateway-finder.d.ts +27 -0
- package/dist/src/search-gateway-finder.d.ts.map +1 -0
- package/dist/src/search-gateway-finder.js +66 -0
- package/dist/src/search-gateway-finder.js.map +1 -0
- package/dist/src/static-gateway-finder.d.ts +23 -0
- package/dist/src/static-gateway-finder.d.ts.map +1 -0
- package/dist/src/static-gateway-finder.js +42 -0
- package/dist/src/static-gateway-finder.js.map +1 -0
- package/dist/src/upnp-nat.d.ts +6 -1
- package/dist/src/upnp-nat.d.ts.map +1 -1
- package/dist/src/upnp-nat.js +20 -5
- package/dist/src/upnp-nat.js.map +1 -1
- package/dist/src/upnp-port-mapper.d.ts +1 -0
- package/dist/src/upnp-port-mapper.d.ts.map +1 -1
- package/dist/src/upnp-port-mapper.js +15 -10
- package/dist/src/upnp-port-mapper.js.map +1 -1
- package/package.json +7 -7
- package/src/check-external-address.ts +0 -2
- package/src/constants.ts +5 -0
- package/src/index.ts +133 -0
- package/src/search-gateway-finder.ts +94 -0
- package/src/static-gateway-finder.ts +60 -0
- package/src/upnp-nat.ts +28 -6
- package/src/upnp-port-mapper.ts +16 -10
- package/dist/src/gateway-finder.d.ts +0 -26
- package/dist/src/gateway-finder.d.ts.map +0 -1
- package/dist/src/gateway-finder.js +0 -53
- package/dist/src/gateway-finder.js.map +0 -1
- package/dist/typedoc-urls.json +0 -12
- package/src/gateway-finder.ts +0 -75
package/README.md
CHANGED
|
@@ -57,6 +57,46 @@ const node = await createLibp2p({
|
|
|
57
57
|
})
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
## Example - Manually specifying gateways and external ports
|
|
61
|
+
|
|
62
|
+
Some ISP-provided routers are underpowered and may require rebooting before
|
|
63
|
+
they will respond to SSDP M-SEARCH messages.
|
|
64
|
+
|
|
65
|
+
You can manually specify your external address and/or gateways, though note
|
|
66
|
+
that those gateways will still need to have UPnP enabled in order for libp2p
|
|
67
|
+
to configure mapping of external ports (for IPv4) and/or opening pinholes in
|
|
68
|
+
the firewall (for IPv6).
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { createLibp2p } from 'libp2p'
|
|
72
|
+
import { tcp } from '@libp2p/tcp'
|
|
73
|
+
import { uPnPNAT } from '@libp2p/upnp-nat'
|
|
74
|
+
|
|
75
|
+
const node = await createLibp2p({
|
|
76
|
+
addresses: {
|
|
77
|
+
listen: [
|
|
78
|
+
'/ip4/0.0.0.0/tcp/0'
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
transports: [
|
|
82
|
+
tcp()
|
|
83
|
+
],
|
|
84
|
+
services: {
|
|
85
|
+
upnpNAT: uPnPNAT({
|
|
86
|
+
// manually specify external address - this will normally be an IPv4
|
|
87
|
+
// address that the router is performing NAT with
|
|
88
|
+
externalAddress: '92.137.164.96',
|
|
89
|
+
gateways: [
|
|
90
|
+
// an IPv4 gateway
|
|
91
|
+
'http://192.168.1.1:8080/path/to/descriptor.xml',
|
|
92
|
+
// an IPv6 gateway
|
|
93
|
+
'http://[xx:xx:xx:xx]:8080/path/to/descriptor.xml'
|
|
94
|
+
]
|
|
95
|
+
})
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
```
|
|
99
|
+
|
|
60
100
|
# Install
|
|
61
101
|
|
|
62
102
|
```console
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-external-address.d.ts","sourceRoot":"","sources":["../../src/check-external-address.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAA;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAIhE,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uBAAuB,CAAC,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;CAC/D;
|
|
1
|
+
{"version":3,"file":"check-external-address.d.ts","sourceRoot":"","sources":["../../src/check-external-address.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAqB,MAAM,mBAAmB,CAAA;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAIhE,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uBAAuB,CAAC,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;CAC/D;AAwFD,wBAAgB,sBAAsB,CAAE,UAAU,EAAE,gCAAgC,EAAE,IAAI,EAAE,0BAA0B,GAAG,eAAe,CAEvI;AAED,wBAAgB,qBAAqB,CAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAIvE"}
|
|
@@ -8,7 +8,6 @@ import { raceSignal } from 'race-signal';
|
|
|
8
8
|
class ExternalAddressChecker {
|
|
9
9
|
log;
|
|
10
10
|
gateway;
|
|
11
|
-
addressManager;
|
|
12
11
|
started;
|
|
13
12
|
lastPublicIp;
|
|
14
13
|
lastPublicIpPromise;
|
|
@@ -17,7 +16,6 @@ class ExternalAddressChecker {
|
|
|
17
16
|
constructor(components, init) {
|
|
18
17
|
this.log = components.logger.forComponent('libp2p:upnp-nat:external-address-check');
|
|
19
18
|
this.gateway = components.gateway;
|
|
20
|
-
this.addressManager = components.addressManager;
|
|
21
19
|
this.onExternalAddressChange = init.onExternalAddressChange;
|
|
22
20
|
this.started = false;
|
|
23
21
|
this.checkExternalAddress = this.checkExternalAddress.bind(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-external-address.js","sourceRoot":"","sources":["../../src/check-external-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAuBxC;;GAEG;AACH,MAAM,sBAAsB;IACT,GAAG,CAAQ;IACX,OAAO,CAAS;
|
|
1
|
+
{"version":3,"file":"check-external-address.js","sourceRoot":"","sources":["../../src/check-external-address.ts"],"names":[],"mappings":"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"}
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -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"}
|
package/dist/src/constants.js
CHANGED
|
@@ -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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -33,6 +33,46 @@
|
|
|
33
33
|
* }
|
|
34
34
|
* })
|
|
35
35
|
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example Manually specifying gateways and external ports
|
|
38
|
+
*
|
|
39
|
+
* Some ISP-provided routers are underpowered and may require rebooting before
|
|
40
|
+
* they will respond to SSDP M-SEARCH messages.
|
|
41
|
+
*
|
|
42
|
+
* You can manually specify your external address and/or gateways, though note
|
|
43
|
+
* that those gateways will still need to have UPnP enabled in order for libp2p
|
|
44
|
+
* to configure mapping of external ports (for IPv4) and/or opening pinholes in
|
|
45
|
+
* the firewall (for IPv6).
|
|
46
|
+
*
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { createLibp2p } from 'libp2p'
|
|
49
|
+
* import { tcp } from '@libp2p/tcp'
|
|
50
|
+
* import { uPnPNAT } from '@libp2p/upnp-nat'
|
|
51
|
+
*
|
|
52
|
+
* const node = await createLibp2p({
|
|
53
|
+
* addresses: {
|
|
54
|
+
* listen: [
|
|
55
|
+
* '/ip4/0.0.0.0/tcp/0'
|
|
56
|
+
* ]
|
|
57
|
+
* },
|
|
58
|
+
* transports: [
|
|
59
|
+
* tcp()
|
|
60
|
+
* ],
|
|
61
|
+
* services: {
|
|
62
|
+
* upnpNAT: uPnPNAT({
|
|
63
|
+
* // manually specify external address - this will normally be an IPv4
|
|
64
|
+
* // address that the router is performing NAT with
|
|
65
|
+
* externalAddress: '92.137.164.96',
|
|
66
|
+
* gateways: [
|
|
67
|
+
* // an IPv4 gateway
|
|
68
|
+
* 'http://192.168.1.1:8080/path/to/descriptor.xml',
|
|
69
|
+
* // an IPv6 gateway
|
|
70
|
+
* 'http://[xx:xx:xx:xx]:8080/path/to/descriptor.xml'
|
|
71
|
+
* ]
|
|
72
|
+
* })
|
|
73
|
+
* }
|
|
74
|
+
* })
|
|
75
|
+
* ```
|
|
36
76
|
*/
|
|
37
77
|
import type { UPnPNAT as UPnPNATClient, MapPortOptions } from '@achingbrain/nat-port-mapper';
|
|
38
78
|
import type { ComponentLogger, Libp2pEvents, NodeInfo, PeerId, TypedEventTarget } from '@libp2p/interface';
|
|
@@ -45,6 +85,13 @@ export interface PMPOptions {
|
|
|
45
85
|
enabled?: boolean;
|
|
46
86
|
}
|
|
47
87
|
export interface UPnPNATInit {
|
|
88
|
+
/**
|
|
89
|
+
* By default we query discovered/configured gateways for their external
|
|
90
|
+
* address. To specify it manually instead, pass a value here.
|
|
91
|
+
*
|
|
92
|
+
* Typically this would be an IPv4 address that the router performs NAT with.
|
|
93
|
+
*/
|
|
94
|
+
externalAddress?: string;
|
|
48
95
|
/**
|
|
49
96
|
* Check if the external address has changed this often in ms. Ignored if an
|
|
50
97
|
* external address is specified.
|
|
@@ -97,6 +144,84 @@ export interface UPnPNATInit {
|
|
|
97
144
|
* @default false
|
|
98
145
|
*/
|
|
99
146
|
autoConfirmAddress?: boolean;
|
|
147
|
+
/**
|
|
148
|
+
* By default we search for local gateways using SSDP M-SEARCH messages. To
|
|
149
|
+
* manually specify a gateway instead, pass values here.
|
|
150
|
+
*
|
|
151
|
+
* A lot of ISP-provided gateway/routers are underpowered so may need
|
|
152
|
+
* rebooting before they will respond to M-SEARCH messages.
|
|
153
|
+
*
|
|
154
|
+
* Each value is an IPv4 or IPv6 URL of the UPnP device descriptor document,
|
|
155
|
+
* e.g. `http://192.168.1.1:8080/description.xml`. Please see the
|
|
156
|
+
* documentation of your gateway to discover the URL.
|
|
157
|
+
*
|
|
158
|
+
* Note that some gateways will randomise the port/path the descriptor
|
|
159
|
+
* document is served from and even change it over time so you may be forced
|
|
160
|
+
* to use an SSDP search instead.
|
|
161
|
+
*/
|
|
162
|
+
gateways?: string[];
|
|
163
|
+
/**
|
|
164
|
+
* How often to search for network gateways in ms.
|
|
165
|
+
*
|
|
166
|
+
* This interval is used before a gateway has been found on the network, after
|
|
167
|
+
* that it switches to `gatewaySearchInterval` which lowers the frequency of
|
|
168
|
+
* the search.
|
|
169
|
+
*
|
|
170
|
+
* @default 5_000
|
|
171
|
+
*/
|
|
172
|
+
initialGatewaySearchInterval?: number;
|
|
173
|
+
/**
|
|
174
|
+
* How often to send the `M-SEARCH` SSDP message during a gateway search in
|
|
175
|
+
* ms.
|
|
176
|
+
*
|
|
177
|
+
* Some routers are flaky and may not respond to every query so decreasing
|
|
178
|
+
* this will increase the number of search messages sent before the timeout.
|
|
179
|
+
*
|
|
180
|
+
* This interval is used before a gateway has been found on the network, after
|
|
181
|
+
* that it switches to `gatewaySearchMessageInterval` which lowers the
|
|
182
|
+
* frequency of search messages sent.
|
|
183
|
+
*
|
|
184
|
+
* @default 1_000
|
|
185
|
+
*/
|
|
186
|
+
initialGatewaySearchMessageInterval?: number;
|
|
187
|
+
/**
|
|
188
|
+
* How long to search for gateways for before giving up in ms.
|
|
189
|
+
*
|
|
190
|
+
* This timeout is used before a gateway has been found on the network, after
|
|
191
|
+
* that it switches to `gatewaySearchTimeout` which increases the timeout to
|
|
192
|
+
* give gateways more time to respond.
|
|
193
|
+
*
|
|
194
|
+
* @default 5_000
|
|
195
|
+
*/
|
|
196
|
+
initialGatewaySearchTimeout?: number;
|
|
197
|
+
/**
|
|
198
|
+
* How often to search for network gateways in ms.
|
|
199
|
+
*
|
|
200
|
+
* This interval is used after a gateway has been found on the network.
|
|
201
|
+
*
|
|
202
|
+
* @default 300_000
|
|
203
|
+
*/
|
|
204
|
+
gatewaySearchInterval?: number;
|
|
205
|
+
/**
|
|
206
|
+
* How often to send the `M-SEARCH` SSDP message during a gateway search in
|
|
207
|
+
* ms.
|
|
208
|
+
*
|
|
209
|
+
* Some routers are flaky and may not respond to every query so decreasing
|
|
210
|
+
* this will increase the number of search messages sent before the timeout.
|
|
211
|
+
*
|
|
212
|
+
* This interval is used after a gateway has been found on the network.
|
|
213
|
+
*
|
|
214
|
+
* @default 10_000
|
|
215
|
+
*/
|
|
216
|
+
gatewaySearchMessageInterval?: number;
|
|
217
|
+
/**
|
|
218
|
+
* How long to search for gateways for before giving up in ms.
|
|
219
|
+
*
|
|
220
|
+
* This timeout is used after a gateway has been found on the network.
|
|
221
|
+
*
|
|
222
|
+
* @default 60_000
|
|
223
|
+
*/
|
|
224
|
+
gatewaySearchTimeout?: number;
|
|
100
225
|
}
|
|
101
226
|
export interface UPnPNATComponents {
|
|
102
227
|
peerId: PeerId;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;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,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;;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;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB;;;;;;;;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"}
|
package/dist/src/index.js
CHANGED
|
@@ -33,6 +33,46 @@
|
|
|
33
33
|
* }
|
|
34
34
|
* })
|
|
35
35
|
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example Manually specifying gateways and external ports
|
|
38
|
+
*
|
|
39
|
+
* Some ISP-provided routers are underpowered and may require rebooting before
|
|
40
|
+
* they will respond to SSDP M-SEARCH messages.
|
|
41
|
+
*
|
|
42
|
+
* You can manually specify your external address and/or gateways, though note
|
|
43
|
+
* that those gateways will still need to have UPnP enabled in order for libp2p
|
|
44
|
+
* to configure mapping of external ports (for IPv4) and/or opening pinholes in
|
|
45
|
+
* the firewall (for IPv6).
|
|
46
|
+
*
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { createLibp2p } from 'libp2p'
|
|
49
|
+
* import { tcp } from '@libp2p/tcp'
|
|
50
|
+
* import { uPnPNAT } from '@libp2p/upnp-nat'
|
|
51
|
+
*
|
|
52
|
+
* const node = await createLibp2p({
|
|
53
|
+
* addresses: {
|
|
54
|
+
* listen: [
|
|
55
|
+
* '/ip4/0.0.0.0/tcp/0'
|
|
56
|
+
* ]
|
|
57
|
+
* },
|
|
58
|
+
* transports: [
|
|
59
|
+
* tcp()
|
|
60
|
+
* ],
|
|
61
|
+
* services: {
|
|
62
|
+
* upnpNAT: uPnPNAT({
|
|
63
|
+
* // manually specify external address - this will normally be an IPv4
|
|
64
|
+
* // address that the router is performing NAT with
|
|
65
|
+
* externalAddress: '92.137.164.96',
|
|
66
|
+
* gateways: [
|
|
67
|
+
* // an IPv4 gateway
|
|
68
|
+
* 'http://192.168.1.1:8080/path/to/descriptor.xml',
|
|
69
|
+
* // an IPv6 gateway
|
|
70
|
+
* 'http://[xx:xx:xx:xx]:8080/path/to/descriptor.xml'
|
|
71
|
+
* ]
|
|
72
|
+
* })
|
|
73
|
+
* }
|
|
74
|
+
* })
|
|
75
|
+
* ```
|
|
36
76
|
*/
|
|
37
77
|
import { UPnPNAT as UPnPNATClass } from './upnp-nat.js';
|
|
38
78
|
export function uPnPNAT(init = {}) {
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,eAAe,CAAA;AAqLvD,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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TypedEventEmitter } from '@libp2p/interface';
|
|
2
|
+
import type { GatewayFinder, GatewayFinderEvents } from './upnp-nat.js';
|
|
3
|
+
import type { UPnPNAT } from '@achingbrain/nat-port-mapper';
|
|
4
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
5
|
+
export interface SearchGatewayFinderComponents {
|
|
6
|
+
logger: ComponentLogger;
|
|
7
|
+
}
|
|
8
|
+
export interface SearchGatewayFinderInit {
|
|
9
|
+
portMappingClient: UPnPNAT;
|
|
10
|
+
initialSearchInterval?: number;
|
|
11
|
+
initialSearchTimeout?: number;
|
|
12
|
+
initialSearchMessageInterval?: number;
|
|
13
|
+
searchInterval?: number;
|
|
14
|
+
searchTimeout?: number;
|
|
15
|
+
searchMessageInterval?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class SearchGatewayFinder extends TypedEventEmitter<GatewayFinderEvents> implements GatewayFinder {
|
|
18
|
+
private readonly log;
|
|
19
|
+
private readonly gateways;
|
|
20
|
+
private readonly findGateways;
|
|
21
|
+
private readonly portMappingClient;
|
|
22
|
+
private started;
|
|
23
|
+
constructor(components: SearchGatewayFinderComponents, init: SearchGatewayFinderInit);
|
|
24
|
+
start(): Promise<void>;
|
|
25
|
+
stop(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=search-gateway-finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-gateway-finder.d.ts","sourceRoot":"","sources":["../../src/search-gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAA;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAGhE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,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,qBAAa,mBAAoB,SAAQ,iBAAiB,CAAC,mBAAmB,CAAE,YAAW,aAAa;IACtG,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,6BAA6B,EAAE,IAAI,EAAE,uBAAuB;IAmD/E,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IASvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { TypedEventEmitter, start, stop } from '@libp2p/interface';
|
|
2
|
+
import { repeatingTask } from '@libp2p/utils/repeating-task';
|
|
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
|
+
export class SearchGatewayFinder extends TypedEventEmitter {
|
|
5
|
+
log;
|
|
6
|
+
gateways;
|
|
7
|
+
findGateways;
|
|
8
|
+
portMappingClient;
|
|
9
|
+
started;
|
|
10
|
+
constructor(components, init) {
|
|
11
|
+
super();
|
|
12
|
+
this.log = components.logger.forComponent('libp2p:upnp-nat');
|
|
13
|
+
this.portMappingClient = init.portMappingClient;
|
|
14
|
+
this.started = false;
|
|
15
|
+
this.gateways = [];
|
|
16
|
+
// every five minutes, search for network gateways for one minute
|
|
17
|
+
this.findGateways = repeatingTask(async (options) => {
|
|
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
|
|
26
|
+
})) {
|
|
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);
|
|
43
|
+
}
|
|
44
|
+
this.log('gateway search finished, found %d gateways', this.gateways.length);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
this.log.error('gateway search errored - %e', err);
|
|
48
|
+
}
|
|
49
|
+
}, init.initialSearchInterval ?? DEFAULT_INITIAL_GATEWAY_SEARCH_INTERVAL, {
|
|
50
|
+
runImmediately: true,
|
|
51
|
+
timeout: init.initialSearchTimeout ?? DEFAULT_INITIAL_GATEWAY_SEARCH_TIMEOUT
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async start() {
|
|
55
|
+
if (this.started) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.started = true;
|
|
59
|
+
await start(this.findGateways);
|
|
60
|
+
}
|
|
61
|
+
async stop() {
|
|
62
|
+
await stop(this.findGateways);
|
|
63
|
+
this.started = false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=search-gateway-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-gateway-finder.js","sourceRoot":"","sources":["../../src/search-gateway-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TypedEventEmitter } from '@libp2p/interface';
|
|
2
|
+
import type { GatewayFinder, GatewayFinderEvents } from './upnp-nat.js';
|
|
3
|
+
import type { UPnPNAT } from '@achingbrain/nat-port-mapper';
|
|
4
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
5
|
+
export interface StaticGatewayFinderComponents {
|
|
6
|
+
logger: ComponentLogger;
|
|
7
|
+
}
|
|
8
|
+
export interface StaticGatewayFinderInit {
|
|
9
|
+
portMappingClient: UPnPNAT;
|
|
10
|
+
gateways: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare class StaticGatewayFinder extends TypedEventEmitter<GatewayFinderEvents> implements GatewayFinder {
|
|
13
|
+
private readonly log;
|
|
14
|
+
private readonly gatewayUrls;
|
|
15
|
+
private readonly gateways;
|
|
16
|
+
private readonly portMappingClient;
|
|
17
|
+
private started;
|
|
18
|
+
constructor(components: StaticGatewayFinderComponents, init: StaticGatewayFinderInit);
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
afterStart(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=static-gateway-finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-gateway-finder.d.ts","sourceRoot":"","sources":["../../src/static-gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,KAAK,EAAW,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAEhE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB,CAAC,mBAAmB,CAAE,YAAW,aAAa;IACtG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,6BAA6B,EAAE,IAAI,EAAE,uBAAuB;IAU/E,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAIvB,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAqB5B,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TypedEventEmitter } from '@libp2p/interface';
|
|
2
|
+
export class StaticGatewayFinder extends TypedEventEmitter {
|
|
3
|
+
log;
|
|
4
|
+
gatewayUrls;
|
|
5
|
+
gateways;
|
|
6
|
+
portMappingClient;
|
|
7
|
+
started;
|
|
8
|
+
constructor(components, init) {
|
|
9
|
+
super();
|
|
10
|
+
this.log = components.logger.forComponent('libp2p:upnp-nat:static-gateway-finder');
|
|
11
|
+
this.portMappingClient = init.portMappingClient;
|
|
12
|
+
this.started = false;
|
|
13
|
+
this.gateways = [];
|
|
14
|
+
this.gatewayUrls = init.gateways.map(url => new URL(url));
|
|
15
|
+
}
|
|
16
|
+
async start() {
|
|
17
|
+
this.started = true;
|
|
18
|
+
}
|
|
19
|
+
async afterStart() {
|
|
20
|
+
for (const url of this.gatewayUrls) {
|
|
21
|
+
try {
|
|
22
|
+
this.log('fetching gateway descriptor from %s', url);
|
|
23
|
+
const gateway = await this.portMappingClient.getGateway(url);
|
|
24
|
+
if (!this.started) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.log('found static gateway at %s', url);
|
|
28
|
+
this.gateways.push(gateway);
|
|
29
|
+
this.safeDispatchEvent('gateway', {
|
|
30
|
+
detail: gateway
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
this.log.error('could not contact static gateway at %s - %e', url, err);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async stop() {
|
|
39
|
+
this.started = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=static-gateway-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-gateway-finder.js","sourceRoot":"","sources":["../../src/static-gateway-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAcrD,MAAM,OAAO,mBAAoB,SAAQ,iBAAsC;IAC5D,GAAG,CAAQ;IACX,WAAW,CAAO;IAClB,QAAQ,CAAW;IACnB,iBAAiB,CAAS;IACnC,OAAO,CAAS;IAExB,YAAa,UAAyC,EAAE,IAA6B;QACnF,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAA;QAClF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;QAC/C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAA;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBAE5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;gBAC3C,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;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;CACF"}
|
package/dist/src/upnp-nat.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { serviceCapabilities, serviceDependencies } from '@libp2p/interface';
|
|
2
2
|
import type { UPnPNATComponents, UPnPNATInit, UPnPNAT as UPnPNATInterface } from './index.js';
|
|
3
3
|
import type { Gateway, UPnPNAT as UPnPNATClient } from '@achingbrain/nat-port-mapper';
|
|
4
|
-
import type { Startable } from '@libp2p/interface';
|
|
4
|
+
import type { Startable, TypedEventTarget } from '@libp2p/interface';
|
|
5
|
+
export interface GatewayFinderEvents {
|
|
6
|
+
'gateway': CustomEvent<Gateway>;
|
|
7
|
+
}
|
|
8
|
+
export interface GatewayFinder extends TypedEventTarget<GatewayFinderEvents> {
|
|
9
|
+
}
|
|
5
10
|
export declare class UPnPNAT implements Startable, UPnPNATInterface {
|
|
6
11
|
private readonly log;
|
|
7
12
|
private readonly components;
|
|
@@ -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;
|
|
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;AAK1G,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,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG5E,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,aAAc,SAAQ,gBAAgB,CAAC,mBAAmB,CAAC;CAE3E;AAED,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;IA6C7D,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"}
|
package/dist/src/upnp-nat.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { upnpNat } from '@achingbrain/nat-port-mapper';
|
|
2
2
|
import { serviceCapabilities, serviceDependencies, setMaxListeners, start, stop } from '@libp2p/interface';
|
|
3
3
|
import { debounce } from '@libp2p/utils/debounce';
|
|
4
|
-
import {
|
|
4
|
+
import { SearchGatewayFinder } from './search-gateway-finder.js';
|
|
5
|
+
import { StaticGatewayFinder } from './static-gateway-finder.js';
|
|
5
6
|
import { UPnPPortMapper } from './upnp-port-mapper.js';
|
|
6
7
|
export class UPnPNAT {
|
|
7
8
|
log;
|
|
@@ -36,10 +37,24 @@ export class UPnPNAT {
|
|
|
36
37
|
this.log.error('error mapping IP addresses - %e', err);
|
|
37
38
|
}
|
|
38
39
|
}, 5_000);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
if (init.gateways != null) {
|
|
41
|
+
this.gatewayFinder = new StaticGatewayFinder(components, {
|
|
42
|
+
portMappingClient: this.portMappingClient,
|
|
43
|
+
gateways: init.gateways
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// trigger update when we discovery gateways on the network
|
|
48
|
+
this.gatewayFinder = new SearchGatewayFinder(components, {
|
|
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
|
|
56
|
+
});
|
|
57
|
+
}
|
|
43
58
|
this.onGatewayDiscovered = this.onGatewayDiscovered.bind(this);
|
|
44
59
|
}
|
|
45
60
|
[Symbol.toStringTag] = '@libp2p/upnp-nat';
|
package/dist/src/upnp-nat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upnp-nat.js","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"upnp-nat.js","sourceRoot":"","sources":["../../src/upnp-nat.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { ComponentLogger } from '@libp2p/interface';
|
|
|
3
3
|
import type { AddressManager } from '@libp2p/interface-internal';
|
|
4
4
|
export interface UPnPPortMapperInit {
|
|
5
5
|
gateway: Gateway;
|
|
6
|
+
externalAddress?: string;
|
|
6
7
|
externalAddressCheckInterval?: number;
|
|
7
8
|
externalAddressCheckTimeout?: number;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upnp-port-mapper.d.ts","sourceRoot":"","sources":["../../src/upnp-port-mapper.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,4BAA4B,CAAA;AAK7E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,2BAA2B,CAAC,EAAE,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;CAC/B;AAOD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"upnp-port-mapper.d.ts","sourceRoot":"","sources":["../../src/upnp-port-mapper.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,4BAA4B,CAAA;AAK7E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,2BAA2B,CAAC,EAAE,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;CAC/B;AAOD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,OAAO,CAAS;gBAEX,UAAU,EAAE,wBAAwB,EAAE,IAAI,EAAE,kBAAkB;IAuBrE,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IASvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAe5B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiDtB,cAAc,CAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA8D/D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,WAAW;CAOpB"}
|