@achingbrain/nat-port-mapper
Version:
Port mapping with UPnP and NAT-PMP
96 lines • 2.7 kB
JavaScript
/**
* @packageDocumentation
*
* Enable NAT traversal by mapping public ports to ports on your computer using
* either [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) or
* [NAT-PMP](https://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol).
*
* @example UPnP NAT
*
* ```TypeScript
* import { upnpNat } from '@achingbrain/nat-port-mapper'
*
* const client = upnpNat()
*
* for await (const gateway of client.findGateways({ signal: AbortSignal.timeout(10000) })) {
* // Map public port 1000 to private port 1000 with TCP
* await gateway.map(1000, '192.168.1.123', {
* protocol: 'tcp'
* })
*
* // Map port 3000 to any available host name
* for await (const mapping of gateway.mapAll(3000, {
* protocol: 'udp'
* })) {
* console.info(`mapped ${mapping.internalHost}:${mapping.internalPort} to ${mapping.externalHost}:${mapping.externalPort}`)
* }
*
* // Unmap previously mapped private port 1000
* await gateway.unmap(1000)
*
* // Get external IP
* const externalIp = await gateway.externalIp()
*
* console.log('External IP:', externalIp)
*
* // Unmap all mapped ports and cancel any in-flight network operations
* await gateway.stop()
* }
* ```
*
* @example NAT-PMP
*
* ```TypeScript
* import { pmpNat } from '@achingbrain/nat-port-mapper'
* import { gateway4sync } from 'default-gateway'
*
* const gateway = pmpNat(gateway4sync().gateway)
*
* // Map public port 1000 to private port 1000 with TCP
* await gateway.map(1000, '192.168.1.123', {
* protocol: 'tcp'
* })
*
* // Map public port 2000 to private port 3000 with UDP
* await gateway.map(3000, '192.168.1.123', {
* externalPort: 2000,
* protocol: 'udp'
* })
*
* // Unmap previously mapped private port 1000
* await gateway.unmap(1000)
*
* // Get external IP
* const externalIp = await gateway.externalIp()
*
* console.log('External IP:', externalIp)
*
* // Unmap all mapped ports and cancel any in-flight network operations
* await gateway.stop()
* ```
*
* ## Credits
*
* Based on [alxhotel/nat-api](https://github.com/alxhotel/nat-api)
*
* ## Additional Information
*
* - <http://miniupnp.free.fr/nat-pmp.html>
* - <http://wikipedia.org/wiki/NAT_Port_Mapping_Protocol>
* - <http://tools.ietf.org/html/draft-cheshire-nat-pmp-03>
*/
import { PMPGateway } from './pmp/gateway.js';
import { UPnPClient } from './upnp/index.js';
/**
* Create a UPnP port mapper
*/
export function upnpNat(options = {}) {
return new UPnPClient(options);
}
/**
* Create a NAT-PMP port mapper
*/
export function pmpNat(ipAddress, options = {}) {
return new PMPGateway(ipAddress, options);
}
//# sourceMappingURL=index.js.map