From fd8728fc728bdca7f745f562ebe4532b06f7d7b9 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 24 Jul 2024 21:49:26 -0700 Subject: refactor(trigger): v2 -> v3 --- .gitignore | 2 + package.json | 120 +++++++++++++++++++------------------- src/jobs/index.ts | 1 - src/jobs/notifications.ts | 27 --------- src/routes/api/trigger/+server.ts | 8 --- src/trigger.ts | 8 --- src/trigger/notifications.ts | 38 ++++++++++++ trigger.config.ts | 16 +++++ 8 files changed, 116 insertions(+), 104 deletions(-) delete mode 100644 src/jobs/index.ts delete mode 100644 src/jobs/notifications.ts delete mode 100644 src/routes/api/trigger/+server.ts delete mode 100644 src/trigger.ts create mode 100644 src/trigger/notifications.ts create mode 100644 trigger.config.ts diff --git a/.gitignore b/.gitignore index 1f02c6f2..52f6e866 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ package-lock.json # Vite vite.config.*.timestamp-* + +.trigger \ No newline at end of file diff --git a/package.json b/package.json index 98361f79..c669ef3f 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,61 @@ { - "name": "due.moe", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." - }, - "trigger.dev": { - "endpointId": "proj_xyvcdvpvtwrkhoocrvml" - }, - "devDependencies": { - "@iconify/svelte": "^3.1.6", - "@sveltejs/adapter-vercel": "next", - "@sveltejs/kit": "^1.20.4", - "@types/fast-levenshtein": "^0.0.4", - "@types/jsdom": "^21.1.6", - "@types/string-similarity": "^4.0.2", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "autoprefixer": "^10.4.16", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.30.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.10.1", - "sass": "^1.69.7", - "svelte": "^4.0.5", - "svelte-check": "^3.4.3", - "svelte-preprocess": "^5.1.3", - "sveltekit-rate-limiter": "^0.4.2", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.4.2" - }, - "type": "module", - "dependencies": { - "@supabase/supabase-js": "^2.39.3", - "@trigger.dev/sdk": "^2.3.19", - "@trigger.dev/sveltekit": "^2.3.19", - "@vercel/speed-insights": "^1.0.9", - "dexie": "^4.0.1-alpha.25", - "jsdom": "^23.0.1", - "jszip": "^3.10.1", - "lz-string": "^1.5.0", - "modern-screenshot": "^4.4.33", - "rss-parser": "^3.13.0", - "sortablejs": "^1.15.2", - "string-similarity": "^4.0.4", - "svelte-i18n": "^4.0.0", - "svelte-markdown": "^0.4.1", - "svelte-notifications": "^0.9.98", - "wanakana": "^5.3.1", - "web-push": "^3.6.7" - } -} + "name": "due.moe", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check . && eslint .", + "format": "prettier --plugin-search-dir . --write ." + }, + "trigger.dev": { + "endpointId": "proj_xyvcdvpvtwrkhoocrvml" + }, + "devDependencies": { + "@iconify/svelte": "^3.1.6", + "@sveltejs/adapter-vercel": "next", + "@sveltejs/kit": "^1.20.4", + "@types/fast-levenshtein": "^0.0.4", + "@types/jsdom": "^21.1.6", + "@types/string-similarity": "^4.0.2", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "autoprefixer": "^10.4.16", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-svelte": "^2.30.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.10.1", + "sass": "^1.69.7", + "svelte": "^4.0.5", + "svelte-check": "^3.4.3", + "svelte-preprocess": "^5.1.3", + "sveltekit-rate-limiter": "^0.4.2", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.4.2" + }, + "type": "module", + "dependencies": { + "@supabase/supabase-js": "^2.39.3", + "@trigger.dev/sdk": "3.0.0-beta.51", + "@trigger.dev/sveltekit": "3.0.0-beta.51", + "@vercel/speed-insights": "^1.0.9", + "dexie": "^4.0.1-alpha.25", + "jsdom": "^23.0.1", + "jszip": "^3.10.1", + "lz-string": "^1.5.0", + "modern-screenshot": "^4.4.33", + "rss-parser": "^3.13.0", + "sortablejs": "^1.15.2", + "string-similarity": "^4.0.4", + "svelte-i18n": "^4.0.0", + "svelte-markdown": "^0.4.1", + "svelte-notifications": "^0.9.98", + "wanakana": "^5.3.1", + "web-push": "^3.6.7" + } +} \ No newline at end of file diff --git a/src/jobs/index.ts b/src/jobs/index.ts deleted file mode 100644 index 9ea5ce77..00000000 --- a/src/jobs/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './notifications'; diff --git a/src/jobs/notifications.ts b/src/jobs/notifications.ts deleted file mode 100644 index 2cf62e76..00000000 --- a/src/jobs/notifications.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { intervalTrigger } from '@trigger.dev/sdk'; -import { client } from '../trigger'; -import * as webpush from 'web-push'; -import { env as privateEnv } from '$env/dynamic/private'; -import { env } from '$env/dynamic/public'; -import { getUserSubscriptions } from '$lib/Database/userNotifications'; - -client.defineJob({ - id: 'notifications', - name: 'Notifications', - version: '0.0.1', - trigger: intervalTrigger({ - seconds: 20 - }), - run: async () => { - webpush.setVapidDetails( - privateEnv.VAPID_SUBJECT, - env.PUBLIC_VAPID_PUBLIC_KEY, - privateEnv.VAPID_PRIVATE_KEY - ); - - for (const subscription of await getUserSubscriptions()) - await webpush.sendNotification(subscription['subscription'], '.'); - - return {}; - } -}); diff --git a/src/routes/api/trigger/+server.ts b/src/routes/api/trigger/+server.ts deleted file mode 100644 index aff75d9c..00000000 --- a/src/routes/api/trigger/+server.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createSvelteRoute } from '@trigger.dev/sveltekit'; -import { client } from '../../../trigger'; - -import '../../../jobs'; - -const svelteRoute = createSvelteRoute(client); - -export const POST = svelteRoute.POST; diff --git a/src/trigger.ts b/src/trigger.ts deleted file mode 100644 index 92bda66b..00000000 --- a/src/trigger.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TriggerClient } from '@trigger.dev/sdk'; -import { TRIGGER_API_KEY, TRIGGER_API_URL, TRIGGER_ID } from '$env/static/private'; - -export const client = new TriggerClient({ - id: TRIGGER_ID, - apiKey: TRIGGER_API_KEY, - apiUrl: TRIGGER_API_URL -}); 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 {}; + } +}); diff --git a/trigger.config.ts b/trigger.config.ts new file mode 100644 index 00000000..27b1739e --- /dev/null +++ b/trigger.config.ts @@ -0,0 +1,16 @@ +import type { TriggerConfig } from "@trigger.dev/sdk/v3"; + +export const config: TriggerConfig = { + project: "proj_xyvcdvpvtwrkhoocrvml", + logLevel: "log", + retries: { + enabledInDev: true, + default: { + maxAttempts: 3, + minTimeoutInMs: 1000, + maxTimeoutInMs: 10000, + factor: 2, + randomize: true, + }, + }, +}; -- cgit v1.2.3