diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index ff1c5b02..64559e2c 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -47,13 +47,17 @@ export async function apiFetchWithStatus( }, }); let body: unknown = null; - // 204 No Content имеет пустое тело; для всех остальных пытаемся JSON + // 204 No Content имеет пустое тело; для всех остальных читаем как text один раз + // (fetch body stream consumable только один раз — нельзя сначала .json() потом .text()). if (response.status !== 204) { - try { - body = await response.json(); - } catch { - // fallback на text() — может прилететь HTML error page от Caddy - body = { detail: await response.text() }; + const rawText = await response.text(); + if (rawText) { + try { + body = JSON.parse(rawText); + } catch { + // Не JSON (HTML error page от Caddy / 502 / etc) — оборачиваем в detail + body = { detail: rawText }; + } } } if (!response.ok) {