import { schedules, envvars } from '@trigger.dev/sdk/v3'; import * as webpush from 'web-push'; import { createClient } from '@supabase/supabase-js'; 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_ANON_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 {}; } });