fix(#411): classifyAuthError — return null for normal 401/session-expired instead of 'backend'
Normal authentication failures (401 Unauthorized, 403 Forbidden, session expired) are not backend errors — they simply mean the user isn't logged in. Previously these fell through to the `instanceof Error` catch-all and returned "backend", causing a misleading "having trouble connecting" banner. Now classifyAuthError explicitly checks for invalid_credentials and session_expired codes from parseAuthError and returns null, so the UI shows the logged-out state cleanly without an error banner. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,9 @@ const AuthContext = createContext<AuthContextValue | undefined>(undefined);
|
||||
* Classify an error into an {@link AuthErrorType} using the centralised
|
||||
* {@link parseAuthError} utility.
|
||||
*
|
||||
* Normal authentication failures (401 Unauthorized, session expired) return
|
||||
* `null` so the UI simply shows the logged-out state without a banner.
|
||||
*
|
||||
* Defaults unrecognised `Error` instances to `"backend"` rather than `null`
|
||||
* so that unexpected failures surface a "having trouble connecting" banner
|
||||
* instead of silently logging the user out.
|
||||
@@ -49,7 +52,10 @@ function classifyAuthError(error: unknown): AuthErrorType {
|
||||
const parsed = parseAuthError(error);
|
||||
if (parsed.code === "network_error") return "network";
|
||||
if (parsed.code === "server_error") return "backend";
|
||||
// For unrecognised errors, default to "backend" rather than null
|
||||
// Normal auth failures (not logged in, session expired) are not errors —
|
||||
// return null so the UI shows logged-out state without a banner
|
||||
if (parsed.code === "invalid_credentials" || parsed.code === "session_expired") return null;
|
||||
// For truly unrecognised errors, default to "backend" rather than null
|
||||
// (safer to show "having trouble connecting" than silently log out)
|
||||
if (error instanceof Error) return "backend";
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user