diff --git a/src/dns-resolvers.ts b/src/dns-resolvers.ts index 5d646c9..9000e2e 100644 --- a/src/dns-resolvers.ts +++ b/src/dns-resolvers.ts @@ -53,17 +53,17 @@ export async function dnsRecordsGoogle(name: string, type: string = 'A'): Promis const records: DnsRecord[] = (json.Answer || []).map((record: any) => { const type = dnsTypeNumbers[record.type] || String(record.type) let data = record.data + let name = record.name if (['CNAME', 'NS'].includes(type) && data.endsWith('.')) { data = data.slice(0, -1) } - return { - name: record.name, - type, - ttl: record.TTL, - data, + if (name.endsWith('.')) { + name = name.slice(0, -1) } + + return { name, type, ttl: record.TTL, data } }) return records diff --git a/src/subdomains.ts b/src/subdomains.ts index a057d5a..dfcaf70 100644 --- a/src/subdomains.ts +++ b/src/subdomains.ts @@ -1,5 +1,5 @@ -// A, AAAA, CNAME records +// Common A, AAAA, CNAME records export const subdomainsRecords: String[] = [ 'admin', 'analytics', @@ -37,7 +37,7 @@ export const subdomainsRecords: String[] = [ 'webmail', ]; -// common found TXT records +// Common TXT records export const txtRecords: String[] = [ '_amazonses', '_dmarc', diff --git a/test/dns-resolvers.ts b/test/dns-resolvers.ts new file mode 100644 index 0000000..971ddc4 --- /dev/null +++ b/test/dns-resolvers.ts @@ -0,0 +1,51 @@ +import { strict as assert } from 'node:assert' +import test from 'node:test' +import { isIPv4 } from 'node:net' + +import { dnsRecordsCloudflare, dnsRecordsGoogle } from '../src/dns-resolvers.ts' + +test('Cloudflare DNS resolver - A', async () => { + const aRecords = await dnsRecordsCloudflare('cloudflare.com', 'A') + + assert.notEqual(aRecords.length, 0) + + assert.equal(aRecords[0].name, 'cloudflare.com') + assert.equal(aRecords[0].type, 'A') + assert.ok(Number.isSafeInteger(aRecords[0].ttl)) + assert.ok(isIPv4(aRecords[0].data)) +}) + +test('Cloudflare DNS resolver - TXT', async () => { + const txtRecords = await dnsRecordsCloudflare('cloudflare.com', 'txt') + + assert.notEqual(txtRecords.length, 0) + + assert.equal(txtRecords[0].name, 'cloudflare.com') + assert.equal(txtRecords[0].type, 'TXT') + assert.ok(Number.isSafeInteger(txtRecords[0].ttl)) + assert.ok(txtRecords[0].data) +}) + +test('Google DNS resolver - A', async () => { + const aRecords = await dnsRecordsGoogle('google.com', 'A') + + console.log(aRecords) + + assert.notEqual(aRecords.length, 0) + + assert.equal(aRecords[0].name, 'google.com') + assert.equal(aRecords[0].type, 'A') + assert.ok(Number.isSafeInteger(aRecords[0].ttl)) + assert.ok(isIPv4(aRecords[0].data)) +}) + +test('Google DNS resolver - TXT', async () => { + const txtRecords = await dnsRecordsGoogle('google.com', 'txt') + + assert.notEqual(txtRecords.length, 0) + + assert.equal(txtRecords[0].name, 'google.com') + assert.equal(txtRecords[0].type, 'TXT') + assert.ok(Number.isSafeInteger(txtRecords[0].ttl)) + assert.ok(txtRecords[0].data) +})