aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--package.json120
-rw-r--r--src/jobs/index.ts1
-rw-r--r--src/jobs/notifications.ts27
-rw-r--r--src/routes/api/trigger/+server.ts8
-rw-r--r--src/trigger.ts8
-rw-r--r--src/trigger/notifications.ts38
-rw-r--r--trigger.config.ts16
8 files changed, 116 insertions, 104 deletions
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,
+ },
+ },
+};