import { escapeHtml, getDb, htmlResponse } from './lib/lead-capture/http.js'; import { verifyToken } from './lib/lead-capture/tokens.js'; function page(title, message) { return ` ${escapeHtml(title)}

${escapeHtml(title)}

${escapeHtml(message)}

`; } export async function onRequestGet({ request, env }) { const token = new URL(request.url).searchParams.get('token') || ''; const secret = env.CONFIRM_SECRET || env.ADMIN_TOKEN || env.RESEND_API_KEY || ''; const email = await verifyToken(token, secret); if (!email) { return htmlResponse(page('Invalid link', 'This unsubscribe link is invalid or expired.'), 400); } const db = getDb(env); if (!db) return htmlResponse(page('Unavailable', 'The contact database is unavailable.'), 500); try { const now = new Date().toISOString(); await db .prepare("UPDATE contacts SET consent_status = 'unsubscribed', unsubscribed_at = ?, updated_at = ? WHERE email = ?") .bind(now, now, email.toLowerCase()) .run(); return htmlResponse(page('Unsubscribed', `${email} has been removed from the list.`)); } catch { return htmlResponse(page('Unsubscribe failed', 'Please try the link again in a moment.'), 500); } }