19 lines
1.3 KiB
TypeScript
19 lines
1.3 KiB
TypeScript
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}); }
|
|
}
|