Zum Inhalt springen

Fehler

Als Markdown anzeigen
import { VimineError } from '@vimine/sdk'; // auch aus /server

Alles, was schiefgeht, kommt als VimineError an, eine Unterklasse von Error. code ist der stabile Bezeichner, nach dem Sie verzweigen: der code eines problem+json-Dokuments (RFC 9457), der error einer OAuth-Antwort oder einer der eigenen Codes des SDK.

Typ
code string der stabile Code
message string detail oder title des Problems oder error_description
status number | null der HTTP-Status, null bei lokalen Fehlern
requestId string | null die request_id der Antwort: Nennen Sie sie in Meldungen
detail string | null das detail des Problems
errors FieldError[] — { field?, code?, message? } die Einzelheiten zu validation_failed und zu identification_required; ein Eintrag codicefiscale_mismatch enthält außerdem mismatches, hints und confirmable (Anleitung)
cause unknown der zugrunde liegende Fehler (network, framed)
isAuthError boolean true für „Die Sitzung ist weg: Neu anmelden“ (401, invalid_token, token_expired, missing_token, invalid_grant, not_signed_in)
code Wann
invalid_options Konstruktor ohne clientId, redirectUri oder clientSecret
network die Anfrage hat die API nicht erreicht (cause enthält den ursprünglichen Fehler)
not_signed_in keine Sitzung oder kein Refresh-Token für einen authentifizierten Aufruf
no_flow eine Rückkehr ohne eine Anmeldung, die in diesem Browser gestartet wurde (Speicher leer oder abgelaufen)
state_mismatch die Rückkehr passt nicht zur gestarteten Anmeldung
framed signIn() aus einem Cross-Origin-Frame
http_<status> eine Fehlerantwort ohne erkennbaren JSON-Body

Die Codes der API (insufficient_scope, not_found, validation_failed, statuto_required, rate_limited, …) und die von OAuth (invalid_grant, access_denied, unauthorized_client, …) stehen in Berechtigungen, Fehler und Limits.

import { VimineError } from '@vimine/sdk';
try {
await vimine.membership.acceptStatuto({ version });
} catch (err) {
if (!(err instanceof VimineError)) throw err;
if (err.isAuthError) return vimine.signIn({ returnTo: location.pathname });
switch (err.code) {
case 'statuto_outdated': return alert(`Eine neuere Version ist in Kraft: ${err.detail}`);
case 'insufficient_scope': return vimine.signIn({ scopes: ['statuto:accept'], prompt: 'consent' });
case 'rate_limited': return setTimeout(retry, 5000);
default: console.error(err.code, err.requestId);
}
}