aboutsummaryrefslogtreecommitdiff
path: root/src/trigger/notifications.ts
blob: 77b8713f44efb071a7acb162481b57886036c9f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 {};
  }
});