Fix: Ensure VAPID keys are initialized inside the request handler for reliability

This commit is contained in:
Avery Felts 2026-01-31 17:49:34 -07:00
parent 95f0d94411
commit 0eab4b36e7

View File

@ -2,13 +2,17 @@ import { NextRequest, NextResponse } from 'next/server';
import webPush from 'web-push'; import webPush from 'web-push';
import { getUsersForRemindersD1, updateLastNotifiedD1 } from '@/lib/d1'; import { getUsersForRemindersD1, updateLastNotifiedD1 } from '@/lib/d1';
// Configure web-push // Configure web-push - Helper called inside handler to ensure env is ready
if (process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY && process.env.VAPID_PRIVATE_KEY) { function ensureVapidConfig() {
if (process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY && process.env.VAPID_PRIVATE_KEY) {
webPush.setVapidDetails( webPush.setVapidDetails(
process.env.VAPID_SUBJECT || 'mailto:example@yourdomain.org', process.env.VAPID_SUBJECT || 'mailto:example@yourdomain.org',
process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY, process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY,
process.env.VAPID_PRIVATE_KEY process.env.VAPID_PRIVATE_KEY
); );
return true;
}
return false;
} }
const MESSAGES = { const MESSAGES = {
@ -76,6 +80,16 @@ function getNotificationData(timeStr: string) {
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {
try { try {
const isVapidReady = ensureVapidConfig();
if (!isVapidReady) {
console.error('VAPID Configuration missing! Keys:', {
public: !!process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY,
private: !!process.env.VAPID_PRIVATE_KEY
});
// We don't return early here so we can see which users fail below,
// but generateRequestDetails will likely throw.
}
// Protect with a secret if configured // Protect with a secret if configured
const authHeader = request.headers.get('authorization'); const authHeader = request.headers.get('authorization');
if (process.env.CRON_SECRET && authHeader !== `Bearer ${process.env.CRON_SECRET}`) { if (process.env.CRON_SECRET && authHeader !== `Bearer ${process.env.CRON_SECRET}`) {