import dns from "dns"; // Force public DNS to bypass OS negative cache (mDNSResponder holds NXDOMAIN) const resolver = new dns.promises.Resolver(); resolver.setServers(["1.1.1.1", "1.0.0.1", "8.8.8.8"]); // Try custom public DNS first, fall back to OS resolver // (Cloudflare DNS may not resolve all hostnames, e.g. *.ts.net) export async function resolveDns(hostname, timeoutMs) { const tryResolver = (fn) => Promise.race([ fn(), new Promise((_, rej) => setTimeout(() => rej(new Error("dns timeout")), timeoutMs)), ]).then(() => true).catch(() => false); if (await tryResolver(() => resolver.resolve4(hostname))) return true; return tryResolver(() => dns.promises.resolve4(hostname)); }