import { Address6, Address4 } from "ip-address"; | |
import dns from "node:dns"; | |
export async function isURLLocal(URL: URL): Promise<boolean> { | |
const isLocal = new Promise<boolean>((resolve, reject) => { | |
dns.lookup(URL.hostname, (err, address, family) => { | |
if (err) { | |
reject(err); | |
} | |
if (family === 4) { | |
const addr = new Address4(address); | |
resolve(addr.isInSubnet(new Address4("127.0.0.0/8"))); | |
} else if (family === 6) { | |
const addr = new Address6(address); | |
resolve( | |
addr.isLoopback() || addr.isInSubnet(new Address6("::1/128")) || addr.isLinkLocal() | |
); | |
} else { | |
reject(new Error("Unknown IP family")); | |
} | |
}); | |
}); | |
return isLocal; | |
} | |