import { createClient } from "@supabase/supabase-js"; import { envvars, schedules } from "@trigger.dev/sdk"; import * as webpush from "web-push"; export const notificationsTask = schedules.task({ id: "notifications", run: async (_payload, { ctx }) => { const environment = ctx.environment.slug; const triggerProjectReference = ctx.project.ref; const getUserSubscriptions = async () => { const { data, error } = await createClient( ( await envvars.retrieve( triggerProjectReference, environment, "SUPABASE_URL", ) ).value, ( await envvars.retrieve( triggerProjectReference, environment, "SUPABASE_SERVICE_ROLE_KEY", ) ).value, ) .from("user_notifications") .select("*"); if (error) return []; return data; }; webpush.setVapidDetails( ( await envvars.retrieve( triggerProjectReference, environment, "VAPID_SUBJECT", ) ).value, ( await envvars.retrieve( triggerProjectReference, environment, "VAPID_PUBLIC_KEY", ) ).value, ( await envvars.retrieve( triggerProjectReference, environment, "VAPID_PRIVATE_KEY", ) ).value, ); for (const subscription of await getUserSubscriptions()) try { await webpush.sendNotification(subscription.subscription, "."); } catch (error) { console.error(error); } return {}; }, });