(url)
| 63 | }; |
| 64 | |
| 65 | const mailConfigHandler = async (url) => { |
| 66 | const { hostname: domain } = parseTarget(url); |
| 67 | try { |
| 68 | const [mxRecords, rootTxt, dmarcTxt, bimiTxt, dkimResults] = await Promise.all([ |
| 69 | dns.resolveMx(domain), |
| 70 | safeTxt(domain), |
| 71 | safeTxt(`_dmarc.${domain}`), |
| 72 | safeTxt(`default._bimi.${domain}`), |
| 73 | findDkim(domain), |
| 74 | ]); |
| 75 | |
| 76 | // Collect email-relevant TXT records |
| 77 | const emailTxt = rootTxt.filter((r) => { |
| 78 | const s = r.join('').toLowerCase(); |
| 79 | return s.startsWith('v=spf1'); |
| 80 | }); |
| 81 | dmarcTxt.forEach((r) => emailTxt.push(r)); |
| 82 | bimiTxt.forEach((r) => emailTxt.push(r)); |
| 83 | dkimResults.forEach(({ record }) => emailTxt.push(record)); |
| 84 | |
| 85 | return { |
| 86 | mxRecords, |
| 87 | txtRecords: emailTxt, |
| 88 | mailServices: detectProviders(mxRecords), |
| 89 | }; |
| 90 | } catch (error) { |
| 91 | if (error.code === 'ENOTFOUND' || error.code === 'ENODATA') { |
| 92 | return { skipped: 'No mail server in use on this domain' }; |
| 93 | } |
| 94 | return { error: `Mail config lookup failed: ${error.message}` }; |
| 95 | } |
| 96 | }; |
| 97 | |
| 98 | export const handler = middleware(mailConfigHandler); |
| 99 | export default handler; |
nothing calls this directly
no test coverage detected