UNPKG

robust-email-validator

Version:

A comprehensive email validation library with format, DNS, and deliverability checking

47 lines 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DNSValidator = void 0; const dns_1 = require("dns"); class DNSValidator { static async validate(domain, timeout = 5000) { try { // Create a timeout promise const timeoutPromise = new Promise((_, reject) => { setTimeout(() => reject(new Error("DNS lookup timeout")), timeout); }); // Check A records const aRecordPromise = dns_1.promises.resolve4(domain).catch(() => []); // Check MX records const mxRecordPromise = dns_1.promises.resolveMx(domain).catch(() => []); // Race against timeout const [aRecords, mxRecords] = (await Promise.race([ Promise.all([aRecordPromise, mxRecordPromise]), timeoutPromise, ])); const hasARecord = aRecords.length > 0; const hasMXRecord = mxRecords.length > 0; const mxExchanges = mxRecords.map((record) => record.exchange); return { isValid: hasARecord || hasMXRecord, hasARecord, hasMXRecord, mxRecords: mxExchanges, }; } catch (error) { return { isValid: false, error: error instanceof Error ? error.message : "DNS validation failed", }; } } static async validateBatch(domains, timeout = 5000) { const promises = domains.map(async (domain) => ({ domain, ...(await DNSValidator.validate(domain, timeout)), })); return Promise.all(promises); } } exports.DNSValidator = DNSValidator; //# sourceMappingURL=dns-validator.js.map