feat: umami migration

This commit is contained in:
2026-02-07 01:11:28 +01:00
parent 29d474a102
commit 9f6168592c
27 changed files with 3310 additions and 193 deletions

View File

@@ -1,5 +1,5 @@
import type {
NotificationMessage,
import {
NotificationOptions,
NotificationService,
} from "./notification-service";
@@ -10,35 +10,43 @@ export interface GotifyConfig {
}
export class GotifyNotificationService implements NotificationService {
constructor(private readonly config: GotifyConfig) {}
constructor(private config: GotifyConfig) {}
async notify(message: NotificationMessage): Promise<void> {
async notify(options: NotificationOptions): Promise<void> {
if (!this.config.enabled) return;
try {
const response = await fetch(
`${this.config.url}/message?token=${this.config.token}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: message.title,
message: message.message,
priority: message.priority ?? 5,
}),
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) {
console.error(
"Failed to send Gotify notification",
await response.text(),
);
const errorText = await response.text();
console.error("Gotify notification failed:", {
status: response.status,
error: errorText,
});
}
} catch (error) {
console.error("Error sending Gotify notification", error);
console.error("Gotify notification error:", error);
}
}
}
export class NoopNotificationService implements NotificationService {
async notify(): Promise<void> {
// Do nothing
}
}

View File

@@ -1,5 +0,0 @@
import type { NotificationService } from "./notification-service";
export class NoopNotificationService implements NotificationService {
async notify() {}
}

View File

@@ -1,9 +1,9 @@
export interface NotificationMessage {
export interface NotificationOptions {
title: string;
message: string;
priority?: number; // 0-10, Gotify style
priority?: number;
}
export interface NotificationService {
notify(message: NotificationMessage): Promise<void>;
notify(options: NotificationOptions): Promise<void>;
}