robust-email-validator
Version:
A comprehensive email validation library with format, DNS, and deliverability checking
47 lines • 1.78 kB
JavaScript
;
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