diff --git a/web/workspace/src/lib/workspace/api/workspace-catalog.ts b/web/workspace/src/lib/workspace/api/workspace-catalog.ts index 4287c9a31..90516e893 100644 --- a/web/workspace/src/lib/workspace/api/workspace-catalog.ts +++ b/web/workspace/src/lib/workspace/api/workspace-catalog.ts @@ -138,15 +138,18 @@ async function fetchJson( if (!response.ok) { let detail = `${response.status} ${response.statusText}`.trim(); try { - const body = await response.json(); - if (typeof body?.message === "string") detail = body.message; - else if (typeof body?.error === "string") detail = body.error; + const body: unknown = await response.json(); + if (typeof body === "object" && body !== null && !Array.isArray(body)) { + const record = body as Record; + if (typeof record.message === "string") detail = record.message.slice(0, 512); + else if (typeof record.error === "string") detail = record.error.slice(0, 512); + } } catch { // Preserve the bounded status text when the Backend did not return JSON. } throw new WorkspaceCatalogError(response.status, detail); } - return await response.json() as unknown; + return await response.json(); } function errorMessage(error: unknown): string { diff --git a/web/workspace/src/lib/workspace/sidebar/worker-actions.ts b/web/workspace/src/lib/workspace/sidebar/worker-actions.ts index 2ac7adc89..3f3dcccf2 100644 --- a/web/workspace/src/lib/workspace/sidebar/worker-actions.ts +++ b/web/workspace/src/lib/workspace/sidebar/worker-actions.ts @@ -24,11 +24,18 @@ function workerPath(workspaceId: string, worker: WorkerActionTarget): string { async function responseError(response: Response): Promise { const fallback = `${response.status} ${response.statusText}`.trim(); try { - const payload = await response.json() as { - message?: string; - error?: { message?: string }; - }; - return payload.error?.message ?? payload.message ?? fallback; + const payload: unknown = await response.json(); + if (typeof payload !== "object" || payload === null || Array.isArray(payload)) { + return fallback; + } + const record = payload as Record; + if (typeof record.message === "string") return record.message.slice(0, 512); + const nested = record.error; + if (typeof nested === "object" && nested !== null && !Array.isArray(nested)) { + const message = (nested as Record).message; + if (typeof message === "string") return message.slice(0, 512); + } + return fallback; } catch { return fallback; }