From 9ec83d8b876f0686a4cf6cc38da7cf9429abfec9 Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:47:04 +0100 Subject: [PATCH 1/3] adding a Helper Function to create QueryStrings for URLs --- src/util.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/util.ts b/src/util.ts index fff08e5..74c0126 100644 --- a/src/util.ts +++ b/src/util.ts @@ -88,4 +88,11 @@ export function isEuropeanDST( date: Date ) { // Return true if within DST period return date >= start && date < end; +} + +export function createQS (params: Record): string { + const queryString = Object.entries(params) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join("&"); + return queryString; } \ No newline at end of file From a57e4efd4c60ed758634a1d691363a9b45106823 Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:48:09 +0100 Subject: [PATCH 2/3] adding a file "config.ts" for adjustable configurations like URLs for Apprise --- src/config.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/config.ts diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..ec28254 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,16 @@ +export const config = { + apprise: { + services: { + ntfy: { + url: `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + defaults: { + + } + } + }, + urls: [ + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + ] + } +} as const \ No newline at end of file From 4bbda5dcf85c2ae901577e44d03d3fb54f3533aa Mon Sep 17 00:00:00 2001 From: chiko Date: Wed, 29 Oct 2025 23:49:48 +0100 Subject: [PATCH 3/3] Adding a parameter for the URLs for the Notification URLs of Services. --- src/app.ts | 9 ++++++++- src/sendNotification.ts | 26 +++++++++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/app.ts b/src/app.ts index 4685a8d..84045c1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -90,7 +90,14 @@ async function events_check_for_notification() { for ( const ev of list_of_events ) { console.log("loop list_of_events - ev: " + [ ev.uid, ev.title, ev.date_at, "notification: " + ev.notification ].join( ", " ) ); console.log("loop list_of_events - ev 'title': " + ev.get_title() ); - await sendNotification( ev.get_title(), ev.get_body() ); + const notificationOptions = { + ntfy: null, + discord: { + avatar_url: ( process.env.dc_avatar_url as string), + botname: ( process.env.dc_botname as string) + } + }; + await sendNotification( ev.get_title(), ev.get_body(), notificationOptions ); if ( ev.notification == "removed" ) { ev.set_deleted( db ); } diff --git a/src/sendNotification.ts b/src/sendNotification.ts index a310afb..f553424 100644 --- a/src/sendNotification.ts +++ b/src/sendNotification.ts @@ -1,11 +1,27 @@ -export async function sendNotification(title: string, body: string, link?: string | null) { +import { createQS } from "./util"; + +type TSendNotificationOptions = { + ntfy: { + link?: string; + } | null, + discord: { + href?: string + avatar_url: string, + botname: string + } +} + +export async function sendNotification( title: string, body: string, options: TSendNotificationOptions ) { console.dir({ sendNotification: { title, - body, - link + body } }); + const QS = { + ntfy: options.ntfy ? createQS(options.ntfy) : null, + discord: createQS(options.discord) + } if ( ! ( process.env.notification_mock == "true" ) ) { const response = await fetch(`${ process.env.apprise_https == "true" ? "https" : "http"}://${process.env.apprise_host ? process.env.apprise_host : "apprise"}:${process.env.apprise_port ? String(process.env.apprise_port) : "80" }/notify`, { method: "POST", @@ -14,8 +30,8 @@ export async function sendNotification(title: string, body: string, link?: strin }, body: JSON.stringify({ urls: [ - `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ link ? `?click=${link}`: "?click=https://77th-jsoc.com/#/events" }`, - `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ QS.ntfy ? "?" + QS.ntfy : ""}`, + `discord://${process.env.dc_webhook}?${QS.discord}` ].join(","), title: title, body: body,