import { corsHeaders } from "./cors.ts"; const respond = (body: unknown, status = 200) => new Response(JSON.stringify(body), { status, headers: { ...corsHeaders, "Content-Type": "application/json" }, }); const escapeHtml = (value: string) => value.replace(/[&<>"']/g, (character) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'", }[character] || character)); Deno.serve(async (req) => { if (req.method === "OPTIONS") { return new Response("ok", { headers: corsHeaders }); } if (req.method !== "POST") { return respond({ success: false, error: "Método no permitido." }, 405); } try { const payload = await req.json(); const record = payload?.record || payload; if (!record || typeof record !== "object") { return respond({ success: false, error: "Datos de contacto no válidos." }, 400); } const fields = ["name", "email", "phone", "subject", "message"]; if (fields.some((field) => record[field] != null && typeof record[field] !== "string")) { return respond({ success: false, error: "Datos de contacto no válidos." }, 400); } const name = (record.name || "").trim(); const email = (record.email || "").trim(); const phone = (record.phone || "").trim(); const subject = (record.subject || "").trim(); const message = (record.message || "").trim(); if (!name || name.length > 200 || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) || email.length > 320 || phone.length > 100 || subject.length > 300 || message.length < 10 || message.length > 10000) { return respond({ success: false, error: "Revisa los datos de contacto." }, 400); } // Configura estos secretos solo en Supabase, nunca en Coolify ni en VITE_*. const apiKey = Deno.env.get("RESEND_API_KEY"); const sender = Deno.env.get("RESEND_FROM_EMAIL"); if (!apiKey || !sender) { // Estado explícito, no una simulación de entrega: el formulario ya está guardado. return respond({ success: false, status: "not_configured", message: "La notificación por correo no está configurada." }); } const response = await fetch("https://api.resend.com/emails", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` }, body: JSON.stringify({ from: sender, to: ["info@infinitustx.com"], subject: `Nuevo mensaje de contacto: ${name.replace(/[\r\n]/g, " ")}`, html: `
Nombre: ${escapeHtml(name)}
Correo: ${escapeHtml(email)}
Teléfono: ${escapeHtml(phone)}
Asunto: ${escapeHtml(subject)}
${escapeHtml(message).replace(/\n/g, "
")}