import { NextRequest, NextResponse } from "next/server"; import { promises as dns } from "dns"; import { isValidDomain, normalizeDomain } from "@/lib/validators"; export const runtime = "nodejs"; export async function POST(req: NextRequest){ try{ const {domain} = await req.json(); const d = normalizeDomain(String(domain||"")); if(!isValidDomain(d)) return NextResponse.json({ok:false,error:"Invalid domain."},{status:400}); let dmarc=null, spf=null, dkim:{selectors:string[];found:string[]}|null=null; try{ const t=await dns.resolveTxt(`_dmarc.${d}`); const flat=t.map(a=>a.join("")).find(s=>/v=DMARC1/i.test(s)); dmarc={present:!!flat, record: flat||undefined}; }catch{ dmarc={present:false}; } try{ const t=await dns.resolveTxt(d); const flat=t.map(a=>a.join("")).find(s=>/^v=spf1\s/i.test(s)); spf={present:!!flat, record: flat||undefined}; }catch{ spf={present:false}; } const SEL=["default","selector1","google","s1","s2","mail","mx"]; const found:string[]=[]; for(const s of SEL){ try{ const rr=await dns.resolveTxt(`${s}._domainkey.${d}`); if(rr.map(a=>a.join("")).find(x=>/v=DKIM1/i.test(x))) found.push(s);}catch{} } dkim={selectors:SEL,found}; return NextResponse.json({ok:true,domain:d,dmarc,spf,dkim}); }catch(e){ return NextResponse.json({ok:false,error:"Unexpected error."},{status:500}); } }