@sequencemedia/ip
Version:
Resolve the internal or external IPv4 or IPv6 host address
80 lines (67 loc) • 1.47 kB
JavaScript
import {
networkInterfaces
} from 'node:os'
function isIPv4 ({ family }) {
return (
family === 'IPv4'
)
}
function isIPv6 ({ family }) {
return (
family === 'IPv6'
)
}
function isInternal ({ internal }) {
return (
internal === true
)
}
function isExternal ({ internal }) {
return (
internal === false
)
}
function reduceInternalIPv4 (accumulator, networkInterface) {
return (
accumulator ?? networkInterface.filter(isInternal).find(isIPv4)
)
}
function reduceExternalIPv4 (accumulator, networkInterface) {
return (
accumulator ?? networkInterface.filter(isExternal).find(isIPv4)
)
}
function reduceInternalIPv6 (accumulator, networkInterface) {
return (
accumulator ?? networkInterface.filter(isInternal).find(isIPv6)
)
}
function reduceExternalIPv6 (accumulator, networkInterface) {
return (
accumulator ?? networkInterface.filter(isExternal).find(isIPv6)
)
}
export function getInternalIPv4 () {
return (
Object.values(networkInterfaces())
.reduce(reduceInternalIPv4, null)
)
}
export function getExternalIPv4 () {
return (
Object.values(networkInterfaces())
.reduce(reduceExternalIPv4, null)
)
}
export function getInternalIPv6 () {
return (
Object.values(networkInterfaces())
.reduce(reduceInternalIPv6, null)
)
}
export function getExternalIPv6 () {
return (
Object.values(networkInterfaces())
.reduce(reduceExternalIPv6, null)
)
}