Files
mb-grid-solutions.com/lib/services/notifications/gotify-notification-service.ts
2026-02-07 01:11:28 +01:00

53 lines
1.2 KiB
TypeScript

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<void> {
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<void> {
// Do nothing
}
}