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