import { NotificationOptions, NotificationService, } from "./notification-service"; export interface GotifyConfig { url: string; token: string; enabled: boolean; } export class GotifyNotificationService implements NotificationService { constructor(private config: GotifyConfig) {} async notify(options: NotificationOptions): Promise { if (!this.config.enabled) return; try { const { title, message, priority = 4 } = options; const url = new URL("message", this.config.url); url.searchParams.set("token", this.config.token); const response = await fetch(url.toString(), { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ title, message, priority, }), }); if (!response.ok) { const errorText = await response.text(); console.error("Gotify notification failed:", { status: response.status, error: errorText, }); } } catch (error) { console.error("Gotify notification error:", error); } } } export class NoopNotificationService implements NotificationService { async notify(): Promise { // Do nothing } }