- Messskript: data-variant="eigen" zeigt eine eigene Banner-Fassung (Sie-Form, WEBklar misst selbst, BANNER_VERSION_EIGEN 2026-10-17); Kunden-Websites bleiben bei der Fassung 2026-10-02. - config.analyse.eigeneWebsite: fester Schlüssel und Domains von webklar.com; ensureEigeneWebsite zieht den Eintrag im Messdienst täglich nach (aktiv: false schaltet ab). Kein Kunde, kein Abo, keine Tickets. - /api/admin/analyse-eigen (jeder Mitarbeiter): Kennzahlen 7/30/90 Tage und Heatmap-Link auf webklar.com. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
2.0 KiB
JavaScript
44 lines
2.0 KiB
JavaScript
// 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)}`
|
|
}
|