@layered/dns-records
Version:
Discover publicly available DNS Records for a domain
59 lines (58 loc) • 2 kB
JavaScript
import { dnsRecordsCloudflare, dnsRecordsGoogle, dnsRecordsNodeDig, dnsRecordsNodeDns } from './dns-resolvers.js';
import {} from './index.js';
import { validatedDomain } from './utils.js';
function bestDnsResolverForThisRuntime() {
if (globalThis.process?.release?.name === 'node') {
return 'node-dns';
}
else if (globalThis.navigator?.userAgent === 'Cloudflare-Workers') {
return 'cloudflare-dns';
}
else {
return 'google-dns';
}
}
/**
* Get DNS records of a given type for a FQDN.
*
* @param name Fully qualified domain name, like example.com or mail.google.com (no protocol or path)
* @param type DNS record type: A, AAAA, TXT, CNAME, MX, etc.
* @param resolver Which DNS resolver to use. If not specified, the best DNS resolver for this runtime will be used.
* @returns Array of discovered `DnsRecord` objects.
*
* @example Get TXT records for example.com
* ```js
* import { getDnsRecords } from '@layered/dns-records'
*
* const txtRecords = await getDnsRecords('example.com', 'TXT')
* ```
*
* @example Get MX records for android.com from Google DNS resolver
* ```js
* import { getDnsRecords } from '@layered/dns-records'
*
* const mxRecords = await getDnsRecords('android.com', 'MX', 'google-dns')
* ```
*/
export async function getDnsRecords(name, type = 'A', resolver) {
name = validatedDomain(name);
if (!resolver) {
resolver = bestDnsResolverForThisRuntime();
}
if (resolver === 'cloudflare-dns') {
return dnsRecordsCloudflare(name, type);
}
else if (resolver === 'google-dns') {
return dnsRecordsGoogle(name, type);
}
else if (resolver === 'node-dig') {
return dnsRecordsNodeDig(name, type);
}
else if (resolver === 'node-dns') {
return dnsRecordsNodeDns(name, type);
}
else if (resolver === 'deno-dns') {
throw new Error('Deno DNS not yet implemented');
}
throw new Error(`Invalid DNS resolver: ${resolver}`);
}