Files
at-mintel/apps/sample-website/src/lib/observability.ts
Marc Mintel 61e78ea672
All checks were successful
Monorepo Pipeline / 🧪 Quality Assurance (push) Successful in 3m50s
Monorepo Pipeline / 🚀 Release (push) Successful in 3m38s
Monorepo Pipeline / 🐳 Build & Push Images (push) Successful in 7m6s
feat: integrate observability
2026-02-07 10:23:51 +01:00

55 lines
1.3 KiB
TypeScript

import {
UmamiAnalyticsService,
GotifyNotificationService,
NoopNotificationService,
} from "@mintel/observability";
import { validateMintelEnv } from "@mintel/next-utils";
let analyticsService: any = null;
let notificationService: any = null;
export function getAnalyticsConfig() {
const isClient = typeof window !== "undefined";
if (isClient) {
return {
enabled: true,
apiEndpoint: "/stats",
};
}
const env = validateMintelEnv();
return {
enabled: Boolean(env.UMAMI_WEBSITE_ID),
websiteId: env.UMAMI_WEBSITE_ID,
apiEndpoint: env.UMAMI_API_ENDPOINT,
};
}
export function getAnalyticsService() {
if (analyticsService) return analyticsService;
const config = getAnalyticsConfig();
analyticsService = new UmamiAnalyticsService(config);
return analyticsService;
}
export function getNotificationService() {
if (notificationService) return notificationService;
if (typeof window === "undefined") {
const env = validateMintelEnv();
notificationService = new GotifyNotificationService({
enabled: Boolean(env.GOTIFY_URL && env.GOTIFY_TOKEN),
url: env.GOTIFY_URL || "",
token: env.GOTIFY_TOKEN || "",
});
} else {
// Notifications are typically server-side only to protect tokens
notificationService = new NoopNotificationService();
}
return notificationService;
}