Authentifizierungs- und Sitzungs-API
Die Anmeldung verwendet eine kurzlebige Herausforderung, eine Telegram-Bestätigung und den Nachweis der Kontrolle über den ursprünglichen Browser. Eine vom Client gelieferte Telegram-ID ist kein Identitätsnachweis.
Auf dieser Seite
Anmeldung starten#
POST /api/auth/telegram/start akzeptiert ein leeres JSON-Objekt {}. Es erfordert die exakte Anwendungs-Origin und einen verfügbaren Bot. Der Server erstellt eine Herausforderung, die 300 Sekunden dauert, sowie ein geschütztes Browser-Nachweis-Cookie.
Die 201-Antwort enthält challengeId, code, expiresAt und telegramUrl. Das Nachweis-Cookie ist vom Deep Link ausgeschlossen und für JavaScript unzugänglich. Das Limit beträgt sechs Starts pro Minute pro gehashter Adresse.
const response = await fetch('/api/auth/telegram/start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: '{}'
});
const challenge = await response.json();
// Show code and telegramUrl to the user.Auf Bestätigung warten#
POST /api/auth/telegram/complete akzeptiert {challengeId}. Es erfordert Origin und das ursprüngliche Browser-Nachweis-Cookie. Bis zur Bestätigung lautet die Antwort 202 {status: "pending"}.
Nach der Bestätigung gibt 200 status=authenticated, user, csrfToken und expiresAt zurück. Eine Sitzung wird genau einmal ausgestellt. Abgelaufene Herausforderungen geben 410 zurück; verwendete oder abgebrochene Herausforderungen geben 409 zurück.
const response = await fetch('/api/auth/telegram/complete', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ challengeId: challenge.challengeId })
});
if (response.status === 202) {
// Poll again after a delay; do not create a new challenge.
}Sitzung lesen#
GET /api/auth/me gibt 200 {authenticated:false} zurück, wenn keine gültige Sitzung existiert. Eine angemeldete Antwort enthält den Benutzer, das CSRF-Token und das Ablaufdatum.
Das __Host-kevmi-session-Cookie hält bis zu 24 Stunden mit Secure, HttpOnly, SameSite=Lax und Path=/. Die Datenbank speichert einen SHA-256-Hash seines Tokens. Ein Profilformular kann das Cookie weder lesen noch ersetzen.
Kontoänderungen#
Mutationen erfordern die Sitzung, die exakte Origin und das aktuelle X-CSRF-Token. Sec-Fetch-Site: cross-site wird abgelehnt. Der Server bietet keinen beliebigen CORS-Zugriff an.
Die Konto-ID stammt aus der Sitzung, nicht aus der Anforderungseingabe. Fehlende und Datensätze eines anderen Benutzers geben keine unterscheidbaren Eigentumsdetails preis.
Abmelden#
POST /api/auth/logout beendet die aktuelle Sitzung und löscht das Cookie. Origin und CSRF sind erforderlich; der Body wird nicht gelesen. Telegram /logout beendet ebenfalls alle Kontositzungen.
Cookies wechseln nicht automatisch zu einer anderen Domain. Beim Ändern der Dienst-Domain APP_ORIGIN und den Bot-Webhook aktualisieren und sich dann erneut anmelden.
Assistent, Support und Projektverwaltung#
Aktivieren Sie „Zugriff auf meine Daten im Chat erlauben“, wenn Sie Hilfe bei privaten Vorgängen benötigen. Eine Webanfrage mit includeAccount=true erfordert eine gültige Sitzung, Origin und X-CSRF-Token; X-Kevmi-Store wählt einen eigenen Store oder alle eigenen Stores aus. Ohne Berechtigung verwendet der Assistent öffentliche Dokumentation. In Telegram aktiviert eine separate Schaltfläche den Zugriff, nachdem der Absender identifiziert wurde.
Das Tool read_account liest eigene Stores, Rechnungen mit bestätigtem Zahlungsstatus, Ereignisse, Anträge und Supportanfragen mit Fachantworten. Es gibt 30 Datensätze und nextPage zurück; ältere Datensätze sind über Paginierung verfügbar. Lesevorgänge pro Antwort sind begrenzt, daher muss eine unvollständige Stichprobe offengelegt werden. API-Schlüssel, Webhook-Geheimnisse, Kartendaten und Sitzungen werden dem Tool nicht bereitgestellt. Es kann keine Zahlungen belasten, auszahlen, erstatten oder Einstellungen ändern.
Das Erstellen einer Supportanfrage im Arbeitsbereich oder in Telegram platziert eine separate Administratorwarnung in einer dauerhaften Warteschlange. Sie verlinkt auf /admin/tickets?ticket=<id>; vorübergehende Telegram-Fehler werden erneut versucht. Die Wiederherstellung nimmt auch ältere offene Anfragen ohne Warnung auf. Administratoren antworten auf der Anfrageseite; die Antwort wird im Benutzerarbeitsbereich gespeichert und über Telegram gesendet, wenn Support-Benachrichtigungen aktiviert sind.
Der Bot verwendet Inline-Schaltflächen für das Hauptmenü, Stores, Benachrichtigungen, Support, Sicherheit und Sprache. Die Navigation bearbeitet die aktuelle Nachricht; ein nicht verfügbares altes Menü wird ersetzt. Zahlungs- und Sicherheitsbenachrichtigungen werden nicht als Wegwerf-Navigation behandelt. Das Abmelden über das Menü erfordert eine Bestätigung. Der explizite Befehl /logout beendet weiterhin jede Kontositzung.
Das Panel /admin/project ist auf Telegram-IDs in der serverseitigen Allowlist MODERATOR_TELEGRAM_IDS beschränkt. Es umfasst Benutzer, Stores, Vorgänge, Schlüsselwiderruf, Deaktivierung von Webhooks, Pausieren von Rechnungen, Annahmesteuerungen und ein Prüfprotokoll. Mutationen erfordern CSRF und einen Grund. Das Panel kann einen Administrator nicht einschränken oder eine Zahlung manuell als erfolgreich erklären. Die Einschränkung eines Eigentümers beendet Sitzungen und blockiert API-Schlüsselzugriff; die Einschränkung eines Stores stoppt neue Vorgänge. Der Verlauf bleibt erhalten.
Das öffentliche Angebot ist unter /public-offer und die Datenschutzrichtlinie unter /privacy-policy in jeder aktivierten Sprache verfügbar. Suchen Sie Münzen nach Name oder Tickersymbol. Ein Netzwerkauswahlfeld erscheint nur, wenn mehrere Live-Netzwerke verfügbar sind. Ein einzelnes Netzwerk wird automatisch ausgewählt und bleibt in der Bestätigung benannt. Die Live-Verfügbarkeit des Gateways bestimmt die wählbaren Paare; der Referenzkatalog aktiviert keinen Dienst.
Verwenden Sie update.sh für routinemäßige Web-App-Veröffentlichungen: Kandidaten bauen, Migrationsverlauf prüfen, SQLite online sichern, einen zweiten Container starten, ihn verifizieren und Caddy elegant umschalten. Gateway, PostgreSQL und Mail werden nicht neu gestartet. Frühere statische Assets bleiben für geöffnete Tabs verfügbar. Eine neue Migration erfordert explizite überprüfte Genehmigung; eine inkompatible Schemaänderung ist keine nahtlose Bereitstellung.