node-email-mx-checker
Version:
A Node.js library to check MX records for domains
1 lines • 2.94 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import dns, { resolveMx } from \"dns\";\r\nimport { promisify } from \"util\";\r\n\r\n// Export this for testing purposes\r\nexport const dnsResolveMx = promisify(dns.resolveMx);\r\n\r\n/**\r\n * MX check result\r\n */\r\nexport interface MxCheckResult {\r\n domain: string;\r\n hasMx: boolean;\r\n mxRecords?: dns.MxRecord[];\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Options for MX checking\r\n */\r\nexport interface MxCheckOptions {\r\n /**\r\n * Timeout in milliseconds for DNS lookups\r\n * @default 5000\r\n */\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * Helper function to get MX records with a timeout\r\n * @param domain Domain to check\r\n * @param timeout Timeout in milliseconds for DNS lookups\r\n * @returns Promise resolving to MX records or rejecting with an error\r\n */\r\nfunction getMXRecordsPromise(domain: string, timeout = 5000) {\r\n return new Promise((resolve, reject) => {\r\n const timeoutId = setTimeout(() => {\r\n reject(new Error(\"Timeout reached while fetching MX records\"));\r\n }, timeout);\r\n\r\n dns.resolveMx(domain, (err, addresses) => {\r\n clearTimeout(timeoutId);\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(addresses);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Checks if a domain has MX records and returns the list of MX records\r\n * @param domain Domain to check\r\n * @param options Check options\r\n * @returns Promise resolving to MX check result\r\n */\r\nexport async function checkMx(\r\n domain: string,\r\n options: MxCheckOptions = {}\r\n): Promise<MxCheckResult> {\r\n const { timeout = 5000 } = options;\r\n\r\n try {\r\n // Race the DNS lookup against the timeout\r\n const mxRecords = (await getMXRecordsPromise(\r\n domain,\r\n timeout\r\n )) as dns.MxRecord[];\r\n\r\n return {\r\n domain,\r\n hasMx: mxRecords.length > 0,\r\n mxRecords: mxRecords,\r\n };\r\n } catch (error) {\r\n return {\r\n domain,\r\n hasMx: false,\r\n mxRecords: [],\r\n error: error instanceof Error ? error.message : String(error),\r\n };\r\n }\r\n}"],"names":["promisify"],"mappings":";;;;AAIa,MAAA,eAAeA,KAAAA,UAAU,IAAI,SAAS;AA6BnD,SAAS,oBAAoB,QAAgB,UAAU,KAAM;AAC3D,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,UAAA,YAAY,WAAW,MAAM;AAC1B,aAAA,IAAI,MAAM,2CAA2C,CAAC;AAAA,OAC5D,OAAO;AAEV,QAAI,UAAU,QAAQ,CAAC,KAAK,cAAc;AACxC,mBAAa,SAAS;AACtB,UAAI,KAAK;AACP,eAAO,GAAG;AAAA,MAAA,OACL;AACL,gBAAQ,SAAS;AAAA,MAAA;AAAA,IACnB,CACD;AAAA,EAAA,CACF;AACH;AAQA,eAAsB,QACpB,QACA,UAA0B,IACF;AAClB,QAAA,EAAE,UAAU,IAAA,IAAS;AAEvB,MAAA;AAEF,UAAM,YAAa,MAAM;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AAEO,WAAA;AAAA,MACL;AAAA,MACA,OAAO,UAAU,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,WACO,OAAO;AACP,WAAA;AAAA,MACL;AAAA,MACA,OAAO;AAAA,MACP,WAAW,CAAC;AAAA,MACZ,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EAAA;AAEJ;;;"}