// Website-Analyse fuer WEBklars eigene Website (webklar.com): ohne Kunde, Abo, Funktionsdokument und Tickets. // Der Messdienst kennt die Website ueber den festen Eintrag config.analyse.eigeneWebsite; das WOMS liest die // Auswertung ueber /api/admin/analyse-eigen. Rechtlich ist WEBklar hier selbst Verantwortlicher (keine AVV). import { config } from '../config.js' import { analyticsClient } from './analyticsClient.js' // Tests ersetzen den Client export const eigenDeps = { client: analyticsClient } const website = () => config.analyse.eigeneWebsite /** Gleiche Pruefung wie beim Heatmap-Link der Kunden (routes/funktionen.js): Pfad ohne Abfrage, Anker und Steuerzeichen. */ export function gueltigerPfad(path) { return typeof path === 'string' && path.startsWith('/') && path.length <= 300 && !/[?#\\\s\u0000-\u001f\u007f]/.test(path) } /** * Eintrag im Messdienst anlegen bzw. nachziehen (idempotent), bei aktiv: false abschalten. * Laeuft taeglich und beim Start; ein Fehler wird geworfen und vom Aufrufer geloggt. */ export async function ensureEigeneWebsite() { const w = website() if (!w.aktiv) { await eigenDeps.client.stopSite(w.siteKey) return { aktiv: false } } await eigenDeps.client.putSite(w.siteKey, { projectId: w.projectId, domains: w.domains, active: true }) return { aktiv: true } } /** Kennzahlen fuer 7, 30 oder 90 Tage (Form wie analytics/src/stats.js), dazu Adresse und Zustand fuer die Anzeige. */ export async function eigeneAuswertung(range) { const w = website() const stats = await eigenDeps.client.getStats(w.siteKey, range) return { website: { host: w.host, aktiv: w.aktiv }, stats } } /** Heatmap-Link fuer eine Seite von webklar.com (neuer Tab; webklar.com laesst sich nicht in fremde Seiten einbetten). */ export function eigenerHeatmapLink({ path, vp }) { const w = website() const token = eigenDeps.client.heatToken({ siteKey: w.siteKey, path, vp }) return `https://${w.host}${path}?__wk_heat=${encodeURIComponent(token)}` }