it/web/app/api/free/email-auth/route.ts
2025-10-25 20:37:00 +02:00

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}); }
}