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 {};
}
});
|