Client-Error-Endpoint POST /api/vitec/client-error (0072-FE / 0077-BE)

Neue PSR-15-Middleware ClientErrorMiddleware: nimmt Browser-Fehler des
React-Frontends als JSON {url, message, stack, release, userAgent}
entgegen und antwortet 204 ohne Body. Schutz: 30 Meldungen pro Minute
und IP (Sliding Window ueber TYPO3-RateLimiter, 429 + Retry-After),
8-KB-Body-Limit (413, Content-Length und tatsaechliche Bytes), kein
JSON-Objekt oder leere message = 400, GET = 405. Keine Session, keine
Cookies; der /_json-Praefix funktioniert ebenfalls.

Speicherung in der neuen Tabelle tx_vitec_clienterrorlog mit
anonymisierter IP (IPv4 letztes Oktett 0, IPv6 /48). Sichtbar als
Tabelle "Client errors (last 24 h)" im Modul VITEC SSR (mit Stack als
Aufklapper) und als Zeile "Client errors reported (24 h / 7 d)" in der
Dashboard-Kachel VITEC: SSR statistics.

CLI vitec:client-error-cleanup [--days=30] loescht Eintraege aelter als
30 Tage (taeglich per Cron).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
orascheandClaude Fable 5.1 committed 2026-11-10 17:25:23 +01:00
1 parent ff6f86b829
commit 5121eaa000
7 files changed
+360

No files matched your search

+19
View File
@@ -499,3 +499,22 @@ CREATE TABLE tx_vitec_ssrhealthlog (
PRIMARY KEY (uid),
KEY crdate (crdate)
);
#
# Client error reports from the React frontend
# (POST /api/vitec/client-error, ClientErrorMiddleware; 30-day retention
# via vitec:client-error-cleanup; shown in the VITEC SSR module)
#
CREATE TABLE tx_vitec_clienterrorlog (
uid int(11) NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
crdate int(11) DEFAULT '0' NOT NULL,
url varchar(1024) DEFAULT '' NOT NULL,
message text,
stack text,
release varchar(100) DEFAULT '' NOT NULL,
user_agent varchar(500) DEFAULT '' NOT NULL,
ip varchar(64) DEFAULT '' NOT NULL,
PRIMARY KEY (uid),
KEY crdate (crdate)
);