Canvas-Themes
Ein Canvas-Theme kann Layout, Interaktion und Charts der öffentlichen Statusseite komplett neu schreiben. Das Einstiegs-HTML läuft in einer Iframe mit sandbox="allow-scripts" und ohne allow-same-origin, unter eigener CSP.
Unterschiede zu CSS-Themes
| Fähigkeit | CSS-Theme | Canvas-Theme |
|---|---|---|
| Layout | Host-DOM | komplett selbst gezeichnet |
| Daten | vorhandenes Host-DOM | nie-sla:status-Snapshot + eingeschränkte Historien-Anfragen |
| Ressourcen | von der Host-Seite geladen | im ZIP enthalten (Schriften, Bilder, Skripte, Styles) |
| Höhe | die Seite selbst | 400-12000, zur Laufzeit aktualisierbar |
Manifest
{
"schema": "nie-sla-theme-v1",
"id": "example-canvas",
"name": "Example Canvas",
"version": "1.0.0",
"type": "theme",
"mode": "canvas",
"entry": "index.html",
"permissions": ["status:read"],
"height": 1000,
"author": "Developer",
"description": "A full-layout NIE-SLA theme.",
"license": "MIT",
"files": ["manifest.json", "index.html", "theme.js", "assets/logo.webp"]
}permissions muss exakt ["status:read"] sein. height ist die Anfangshöhe und kann zur Laufzeit über das Nachrichtenprotokoll aktualisiert werden.
Berechtigungsgrenze
Ein Canvas-Theme kann nicht direkt fetch externer Netze, nicht das Host-DOM, Cookies oder Web Storage lesen, keine Formulare absenden, keine Top-Level-Navigation öffnen, keine Workers erzeugen und keine Frames verschachteln. Schriften, Bilder, Code und Styles reisen alle im ZIP. Es kann auch nicht die Admin-API, Agent-Tokens, Benachrichtigungskonfiguration oder Cloudflare-Bindings lesen. status:read bedeutet, öffentliche status, checks, metrics, pings und latency über den Host-Proxy zu lesen, keinen beliebigen URL-Zugriff.
Abnahmeszenarien
- Keine Ziele, ein Ziel, viele Ziele und sehr lange Namen.
- Cloudflare-Probes schlagen fehl, während der Agent online ist, und umgekehrt.
- Nicht leeres
warnings[], leere Historie, fehlende Temperaturfelder. - Kein horizontales Overflow in der Iframe bei 320/375/768/1440 Pixeln.
prefers-reduced-motion, Tastaturfokus, Kontrast und Screenreader-Zustände.- Anfrage-Timeouts, HTTP 429, Theme-Reload und doppelte Zustands-Snapshots.
- Alle Inhalte bleiben erreichbar, wenn die dynamische Höhe auf
400-12000begrenzt ist.
Das vollständige Nachrichtenformat im Nachrichtenprotokoll.