diff --git a/server.js b/server.js index f855cdb..49556ed 100644 --- a/server.js +++ b/server.js @@ -38,6 +38,31 @@ const MAX_UPLOAD = 5 * 1024 * 1024; /* 5 MB pro eingereichtem Spiel */ const UPLOAD_DEADLINE = new Date("2026-05-27T22:00:00+02:00"); const APP_REVISION = process.env.APP_REVISION || "local"; +/* Central lead-inbox (infra ADR 012). Sites forward leads here; local files + stay as a fallback. Unset env => old local-only behavior. */ +const LEAD_INBOX_URL = process.env.LEAD_INBOX_URL || ""; +const LEAD_INBOX_KEY = process.env.LEAD_INBOX_KEY || ""; + +async function forwardLeadToInbox(lead) { + if (!LEAD_INBOX_URL || !LEAD_INBOX_KEY) return false; + try { + const res = await fetch(LEAD_INBOX_URL.replace(/\/+$/, "") + "/v1/leads", { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + LEAD_INBOX_KEY + }, + /* inbox accepts DE aliases: firma, telefon, nachricht, quelle */ + body: JSON.stringify(lead), + signal: AbortSignal.timeout(5000) + }); + return res.ok; + } catch (e) { + console.error("[lead] inbox forward failed:", e.message); + return false; + } +} + function envFlag(name, defaultValue) { const raw = process.env[name]; if (raw == null || raw === "") return defaultValue; @@ -227,20 +252,27 @@ function handleLead(req, res) { quelle: String(data.quelle || "Landing Page").slice(0, 120) }; - try { - saveLead(lead); - } catch (e) { - console.error("[lead] Speichern fehlgeschlagen:", e.message); - return sendJSON(res, 500, { - error: "Speichern fehlgeschlagen. Bitte später erneut versuchen." - }); - } + /* Central inbox is source of truth; local files are the fallback so a + lead is never lost if the inbox is unreachable (infra ADR 012). */ + forwardLeadToInbox(lead).then((forwarded) => { + if (!forwarded) { + try { + saveLead(lead); + } catch (e) { + console.error("[lead] Speichern fehlgeschlagen:", e.message); + return sendJSON(res, 500, { + error: "Speichern fehlgeschlagen. Bitte später erneut versuchen." + }); + } + } - console.log( - "[lead] " + lead.zeitpunkt + " — " + lead.name + - (lead.firma ? " (" + lead.firma + ")" : "") + " <" + lead.email + ">" - ); - sendJSON(res, 200, { ok: true }); + console.log( + "[lead] " + (forwarded ? "→inbox " : "→local ") + + lead.zeitpunkt + " — " + lead.name + + (lead.firma ? " (" + lead.firma + ")" : "") + " <" + lead.email + ">" + ); + sendJSON(res, 200, { ok: true }); + }); }); }