Dokumentation der API-Client-Dateien unter frontend/src/api/backend/.
Die aufrufspezifischen Dateien repräsentieren einzelne API-Operationen; base.ts, Modelle und Typmodule bündeln gemeinsame Logik. Die Hooks in frontend/src/hooks/ nutzen die Operationen für React-Query-Abfragen und -Mutationen.
- Die aufrufspezifischen Module exportieren Funktionen für HTTP-Aufrufe an die Backend-API
- Gruppiert nach CRUD-Operationen (create, get, getAll, update, delete, toggle)
- JSON-Anfragen werden rekursiv nach
snake_case, Antworten nachcamelCasekonvertiert. Die Frontend-Modelle und Formularwerte für KI, DDNS und ChatOps verwenden deshalb unter anderemapiKey,baseUrl,numCtx,ipVer,zoneIdundallowedIds. Integrationstests mit unveränderten Backend-JSON-Antworten sichern das Lesen und Zurückschreiben dieser Felder. - Header-Wörterbücher (
headers,headers_regexbeziehungsweiseheadersRegex) bewahren ihre enthaltenen Schlüssel in beiden Richtungen. So wird beispielsweise eine Anubis-Regel fürUser-Agentbeim Bearbeiten nicht versehentlich zu einer Regel füruser_agent; umgebende API-Felder werden weiterhin konvertiert. Ein API-Roundtrip-Test prüft auch mehrere verschachtelte Regeln. - POST-Aufrufe können
rawResponse: truesetzen, wenn Antwortschlüssel Nutzdaten darstellen. Der HTTP-Zertifikatstest erhält damit Domainnamen einschließlich Bindestrichen unverändert. Authentisierung, CSRF und Fehlerbehandlung bleiben weiterhin zentral;rawKeyssteuert separat die Schlüssel der Anfrage. - Verwendet einen zentralen API-Client (Basis-URL, Auth-Header, etc.)
api/queryClient.tserzeugt genau einen React-Query-Client. Sowohl der Provider inApp.tsxals auch die zentrale Antwortverarbeitung nutzen diese Instanz; ein 401 leert damit den tatsächlich sichtbaren Cache vor einer möglichen neuen Anmeldung. Normale Konfigurationsabfragen erben zentralstaleTime: 60_000undrefetchOnWindowFocus: false; Live-Abfragen wie Health setzen ihre kürzeren Polling-Regeln weiterhin explizit. Mutationen invalidieren die betroffenen Cache-Keys unverändert.- Die zentrale Antwortverarbeitung akzeptiert erfolgreiche HTTP-204-/205-Antworten ohne JSON-Body, insbesondere beim Abmelden. HTTP-Fehler ohne JSON oder ohne das erwartete Fehlerobjekt behalten ihren Status im Fehlermeldungstext. Ein 401 räumt Sitzung und Cache bereits vor dem Einlesen des Bodys auf; HTML-Fehlerseiten eines vorgeschalteten Proxys können diesen Schritt daher nicht verhindern.
silentAuthunterdrückt dabei nur das Ablaufereignis.base.test.tsprüft diese Fälle einschließlich JSON-nullund lokalisierter Backend-Fehlerschlüssel. - Jeder Transportweg hält vor dem Senden die aktuelle
AuthStore.sessionRevisionfest. Eine verspätete 401-Antwort darf nur die Sitzung dieser Revision abmelden; nach einem inzwischen erfolgreichen Login, Refresh oder Benutzerwechsel bleiben die neue Sitzung und ihr Cache erhalten. Auch CSRF-Token aus verspäteten Antworten werden verworfen, einschließlich eines Sitzungswechsels während des asynchronen JSON-Lesens. Der HTTP-Fehler wird weiterhin an den ursprünglichen Aufrufer zurückgegeben.base.session.test.tsprüft GET, POST, PUT, DELETE und beide Download-Helfer mit dem echten AuthStore. - Bei einem Wechsel der Cookie-Identität übernimmt der Client den vom Backend ausgestellten CSRF-Token auch aus dem Antwortheader
X-XSRF-TOKEN, bevor eine leere HTTP-204-/205-Antwort zurückgegeben wird. Dadurch verwendet die nächste geschützte Anfrage nach dem Abmelden sofort den anonymen Token, ohne auf eine weitere Health-Abfrage zu warten. Die Revisionsprüfung gilt auch für diesen Header; eine verspätete Logout-Antwort überschreibt keinen Token einer neueren Anmeldung.base.session.test.tsprüft den unmittelbar folgenden POST und die verspätete Antwort. - Eine verspätete Health-Antwort kann dennoch einen älteren CSRF-Cookie im Browser setzen. Nur wenn das Backend eine HTTP-403-Antwort ausdrücklich mit
error.reason: "EBADCSRFTOKEN"kennzeichnet, holt der Client einen neuen Token über eine direkte Health-Abfrage und wiederholt den abgewiesenen POST, PUT, DELETE oder POST-Download genau einmal. Der Marker entsteht ausschließlich in der CSRF-Middleware vor dem Routenhandler, sodass die erste Anfrage noch keine Fachaktion ausgeführt hat. Normale Berechtigungsfehler und ein zweiter CSRF-Fehler werden nicht wiederholt. Ein inzwischen erfolgter Sitzungswechsel oder Request-Abbruch verhindert die Wiederholung; JSON- und FormData-Bodys bleiben unverändert, einschließlich browserseitiger Multipart-Grenzen.base.csrf.test.tsprüft diese Übergänge, Uploads und Downloads; die echte App-/HTTP-Regression liegt inbackend/test/routes/csrf-session-transitions.spec.js. refreshToken.tsteilt einen laufenden Refresh-Aufruf zwischen gleichzeitig anfragenden Verbrauchern. Damit lösen unter anderem die wiederholten Mount-Effekte von React StrictMode keine parallele Rotation desselben Refresh-Cookies aus. Nach Erfolg oder Fehler darf der nächste Aufruf wieder eine neue Anfrage starten;refreshToken.test.tsprüft beide Übergänge.api/backend/base.tslädt GET- und POST-Downloads alsBlob, startet sie über einen temporären Link und gibt jeweils genau die erzeugte Blob-URL wieder frei, damit wiederholte Exporte keinen Browser-Speicher belegen.- Beide Download-Helfer prüfen HTTP-Fehler vor der Blob-Erzeugung über die zentrale Antwortverarbeitung. Dadurch wird bei einer abgelehnten oder abgelaufenen Sitzung kein Fehler-Response als Datei gespeichert; das 401-Verhalten einschließlich
silentAuthbleibt mit den übrigen API-Aufrufen konsistent. - Der Client-Zertifikatsdialog nutzt
downloadPostfür/nginx/certificates/internal/client; damit erhält auch dieser passwortgeschützte.p12-Download die zentrale Cookie-/CSRF-Übergabe und Fehlerbehandlung statt eines eigenenfetch-Aufrufs. getDbStats.tsdelegiert an den zentralen GET-Client statt einen eigenenfetch-Aufruf zu verwenden. Analytics-Datenbankstatistiken erhalten damit dieselbe Cookie-/CSRF-Übergabe, Schlüsselkonvertierung und 401-Behandlung wie andere API-Aufrufe.
createProxyHost.ts, getProxyHost.ts, getProxyHosts.ts, updateProxyHost.ts, deleteProxyHost.ts, toggleProxyHost.ts, diagnoseProxyHost.ts, previewProxyHost.ts, proxyHostMonitor.ts
createRedirectionHost.ts, getRedirectionHost.ts, getRedirectionHosts.ts, updateRedirectionHost.ts, deleteRedirectionHost.ts, toggleRedirectionHost.ts
createDeadHost.ts, getDeadHost.ts, getDeadHosts.ts, updateDeadHost.ts, deleteDeadHost.ts, toggleDeadHost.ts
createStream.ts, getStream.ts, getStreams.ts, updateStream.ts, deleteStream.ts, toggleStream.ts
createCertificate.ts, getCertificate.ts, getCertificates.ts, deleteCertificate.ts, renewCertificate.ts, uploadCertificate.ts, validateCertificate.ts, getCertificateDNSProviders.ts, downloadCertificate.ts, downloadRootCa.ts, testHttpCertificate.ts
createAccessList.ts, getAccessList.ts, getAccessLists.ts, updateAccessList.ts, deleteAccessList.ts
createUser.ts, getUser.ts, getUsers.ts, updateUser.ts, deleteUser.ts, toggleUser.ts, updateAuth.ts, uploadUserAvatar.ts, setPermissions.ts, loginAsUser.ts
createCloudflaredTunnel.ts, getCloudflaredTunnels.ts, updateCloudflaredTunnel.ts, deleteCloudflaredTunnel.ts
createTorOnion.ts, deleteTorOnion.ts, getTorOnions.ts, torOnionActions.ts, updateTorOnion.ts
createWireguardPeer.ts, deleteWireguardPeer.ts, getWireguardPeerConfig.ts, getWireguardPeerQRCode.ts, getWireguardPeers.ts, updateWireguardPeer.ts, wireguardPeerActions.ts, wireguardSettings.ts
createDdnsProvider.ts, getDdnsProviders.ts, updateDdnsProvider.ts, deleteDdnsProvider.ts, testDdnsProvider.ts
createDashboardNote.ts, getDashboardNotes.ts, updateDashboardNote.ts, deleteDashboardNote.ts
getToken.ts, loginAsUser.ts, refreshToken.ts, restoreSession.ts, claimOidcToken.ts, updateAuth.ts
get2fa.ts, setup2faTotp.ts, setup2faPasskey.ts, setup2faDuo.ts, setup2faYubikey.ts, verify2fa.ts, remove2fa.ts, backupCodes2fa.ts
getSetting.ts, getSettings.ts, updateSetting.ts, getHealth.ts, checkVersion.ts, getHostsReport.ts, getDbStats.ts
ai.ts
chatIntegrations.ts
gitops.ts, gitSync.ts
getAnalyticsSeries.ts, getAnalyticsSummary.ts, getAnalyticsStatus.ts, getAnalyticsTopHosts.ts
getAuditLog.ts, getAuditLogs.ts
setPermissions.ts (unter „Benutzer“ bereits aufgeführt)
- Zentraler API-Client aus
api/backend/Root - React Query Hooks in
hooks/
Siehe zentrale Sammelseite Offene Fragen.