38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import webpush from 'web-push';
|
|
|
|
if (!process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY || !process.env.VAPID_PRIVATE_KEY) {
|
|
console.warn("VAPID keys are missing. Push notifications will not work.");
|
|
} else {
|
|
webpush.setVapidDetails(
|
|
process.env.VAPID_SUBJECT || 'mailto:admin@localhost',
|
|
process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY,
|
|
process.env.VAPID_PRIVATE_KEY
|
|
);
|
|
}
|
|
|
|
interface PushSubscriptionData {
|
|
endpoint: string;
|
|
p256dh: string;
|
|
auth: string;
|
|
}
|
|
|
|
export async function sendPushNotification(subscription: PushSubscriptionData, payload: any) {
|
|
try {
|
|
await webpush.sendNotification({
|
|
endpoint: subscription.endpoint,
|
|
keys: {
|
|
p256dh: subscription.p256dh,
|
|
auth: subscription.auth,
|
|
}
|
|
}, JSON.stringify(payload));
|
|
return { success: true, statusCode: 201 };
|
|
} catch (error: any) {
|
|
if (error.statusCode === 410 || error.statusCode === 404) {
|
|
// Subscription is gone
|
|
return { success: false, statusCode: error.statusCode };
|
|
}
|
|
console.error("Error sending push:", error);
|
|
return { success: false, statusCode: error.statusCode || 500 };
|
|
}
|
|
}
|