aboutsummaryrefslogtreecommitdiff
path: root/src/trigger
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-07-24 21:49:26 -0700
committerFuwn <[email protected]>2024-07-24 23:24:13 -0700
commitfd8728fc728bdca7f745f562ebe4532b06f7d7b9 (patch)
treef3a58c93578829cf9a237f37ec348dfcfa4bf59b /src/trigger
parentfix(notifications): move details setter to run (diff)
downloaddue.moe-fd8728fc728bdca7f745f562ebe4532b06f7d7b9.tar.xz
due.moe-fd8728fc728bdca7f745f562ebe4532b06f7d7b9.zip
refactor(trigger): v2 -> v3
Diffstat (limited to 'src/trigger')
-rw-r--r--src/trigger/notifications.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/trigger/notifications.ts b/src/trigger/notifications.ts
new file mode 100644
index 00000000..a78f1f9b
--- /dev/null
+++ b/src/trigger/notifications.ts
@@ -0,0 +1,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: any, { 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())
+ await webpush.sendNotification(subscription['subscription'], '.');
+
+ return {};
+ }
+});