The library validates domain names before making DNS queries.
import { getDnsRecords } from '@layered/dns-records'try { // Invalid domain format const records = await getDnsRecords('not a valid domain!', 'A')} catch (error) { console.error('Error:', error.message) // Error: "not a valid domain!" is not a valid domain name}
Domain validation rules
The library validates domains using these rules (from utils.ts:8-33):
Must have at least 2 labels (e.g., example.com)
Labels cannot start or end with hyphens
Labels must be 1-64 characters
TLD must be 2-64 characters
Only alphanumeric characters, hyphens, and underscores allowed
Troubleshoot common problems when working with DNS records.
Error: fetch is not defined
Problem: Using cloudflare-dns or google-dns in an environment without fetch.Solution: Use a Node.js-specific resolver or polyfill fetch:
// Use node-dns in Node.js environmentsimport { getDnsRecords } from '@layered/dns-records'const records = await getDnsRecords('example.com', 'A', 'node-dns')
Error: dig command not found
Problem: Using node-dig resolver without dig installed.Solution: Install dig or use a different resolver:
# Install dig on Ubuntu/Debiansudo apt-get install dnsutils# Install dig on macOSbrew install bind
Or use an alternative resolver:
import { getDnsRecords } from '@layered/dns-records'// Use node-dns insteadconst records = await getDnsRecords('example.com', 'A', 'node-dns')
Empty records array returned
Problem: No records found for the queried type.Solution: This is expected behavior. Check if the domain has that record type:
import { getDnsRecords } from '@layered/dns-records'const records = await getDnsRecords('example.com', 'AAAA')if (records.length === 0) { console.log('This domain does not have IPv6 (AAAA) records') // Try IPv4 instead const aRecords = await getDnsRecords('example.com', 'A') console.log('IPv4 records:', aRecords)}
Invalid DNS record error during streaming
Problem: Parsing error when using streaming API.Solution: Ensure you decode the Uint8Array before parsing:
import { getAllDnsRecordsStream, parseDnsRecord } from '@layered/dns-records'const stream = getAllDnsRecordsStream('example.com')const decoder = new TextDecoder()for await (const record of stream) { try { // Always decode before parsing const recordLine = decoder.decode(record) const dnsRecord = parseDnsRecord(recordLine) console.log(dnsRecord) } catch (error) { console.error('Failed to parse record:', error.message) // Skip invalid records }}