import { Address6, Address4 } from "ip-address"; import dns from "node:dns"; export async function isURLLocal(URL: URL): Promise { const isLocal = new Promise((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; }