From 7348b35475232da952c5f8f1f3eaf1036ba16cdb Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 27 Apr 2026 20:03:34 -0400 Subject: [PATCH] Improve API error messages: show HTTP status, catch network errors "Unknown error" was hiding the actual HTTP status (likely 502 from nginx). Now shows "HTTP 502 Bad Gateway" etc. Network TypeErrors (connection refused) also get a clear message. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/lib/api.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/web/src/lib/api.ts b/apps/web/src/lib/api.ts index d1c7bdb..f3911b5 100644 --- a/apps/web/src/lib/api.ts +++ b/apps/web/src/lib/api.ts @@ -86,8 +86,8 @@ async function request(path: string, options: RequestInit & { timeoutMs?: num }); if (!res.ok) { - const body = await res.json().catch(() => ({ error: 'Unknown error' })); - throw new Error(body.error || `HTTP ${res.status}`); + const body = await res.json().catch(() => null); + throw new Error(body?.error || `HTTP ${res.status} ${res.statusText}`); } return res.json(); @@ -95,6 +95,9 @@ async function request(path: string, options: RequestInit & { timeoutMs?: num if (e instanceof DOMException && e.name === 'AbortError') { throw new Error('Request timed out — server may be unreachable'); } + if (e instanceof TypeError) { + throw new Error('Network error — server may be unreachable'); + } throw e; } finally { clearTimeout(timeout); -- 2.39.5