11import webpush , { WebPushError } from 'web-push'
2- import { messaging } from '@/server/firebase'
2+ import { getFirebaseMessaging } from '@/server/firebase'
33//import { Subscription } from '@prisma/client'
44//import { JsonValue } from '@prisma/client/runtime/library'
55import prisma from '@/server/db'
66import { logger } from '@/server/logger'
77import { Prisma , Subscription } from '../generated/prisma/client'
88
9- // Initialize VAPID keys for web push notifications
10- webpush . setVapidDetails (
11- 'mailto:your-email@example.com' ,
12- process . env . NEXT_PUBLIC_VAPID_PUBLIC_KEY ! ,
13- process . env . VAPID_PRIVATE_KEY !
14- )
9+ function configureWebPush ( ) {
10+ const publicKey = process . env . NEXT_PUBLIC_VAPID_PUBLIC_KEY
11+ const privateKey = process . env . VAPID_PRIVATE_KEY
12+
13+ if ( ! publicKey || ! privateKey ) {
14+ throw new Error (
15+ 'Web push is not configured. Set NEXT_PUBLIC_VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY.'
16+ )
17+ }
18+
19+ webpush . setVapidDetails ( 'mailto:your-email@example.com' , publicKey , privateKey )
20+ }
1521
1622/**
1723 * The payload for the notification, including title, body, url, icon, and badge.
@@ -33,6 +39,8 @@ export async function sendNotification(
3339 try {
3440 logger . info ( 'Sending notification to subscription:' , subscription )
3541 if ( subscription . type === 'web' ) {
42+ configureWebPush ( )
43+
3644 if ( ! isWebKeys ( subscription . keys ) ) {
3745 throw new Error ( `Invalid keys for web subscription: ${ JSON . stringify ( subscription . keys ) } ` )
3846 }
@@ -56,6 +64,7 @@ export async function sendNotification(
5664 if ( ! isFcmKeys ( subscription . keys ) ) {
5765 throw new Error ( `Invalid keys for FCM subscription: ${ JSON . stringify ( subscription . keys ) } ` )
5866 }
67+ const messaging = getFirebaseMessaging ( )
5968 const fcmMessage = {
6069 notification : {
6170 title : notificationPayload . title ,
0 commit comments