From bbe05bd9e4cf380a792d81dc719826ff70b2e045 Mon Sep 17 00:00:00 2001 From: vivekvar-dl Date: Mon, 12 Oct 2026 22:13:40 -0700 Subject: [PATCH] fix(raycast): surface API error details (#1709) --- apps/raycast-extension/src/api-error.ts | 19 +++++++++++++++++++ apps/raycast-extension/src/api.ts | 13 +++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 apps/raycast-extension/src/api-error.ts diff --git a/apps/raycast-extension/src/api-error.ts b/apps/raycast-extension/src/api-error.ts new file mode 100644 index 00000000..0f4b7dd1 --- /dev/null +++ b/apps/raycast-extension/src/api-error.ts @@ -0,0 +1,19 @@ +export function extractApiErrorMessage(raw: string): string | undefined { + const body = raw.trim() + if (!body) return undefined + + try { + const parsed: unknown = JSON.parse(body) + if (parsed && typeof parsed === "object") { + const error = Reflect.get(parsed, "error") + if (typeof error === "string" && error.trim()) return error + + const message = Reflect.get(parsed, "message") + if (typeof message === "string" && message.trim()) return message + } + } catch { + return body + } + + return undefined +} diff --git a/apps/raycast-extension/src/api.ts b/apps/raycast-extension/src/api.ts index 87899bc3..96ebdde9 100644 --- a/apps/raycast-extension/src/api.ts +++ b/apps/raycast-extension/src/api.ts @@ -1,4 +1,5 @@ import { getPreferenceValues, showToast, Toast } from "@raycast/api" +import { extractApiErrorMessage } from "./api-error" export interface Project { id: string @@ -101,14 +102,10 @@ async function makeAuthenticatedRequest( } let errorMessage = `API request failed: ${response.statusText}` - try { - const errorBody = (await response.json()) as { message?: string } - if (errorBody.message) { - errorMessage = errorBody.message - } - } catch { - // Ignore JSON parsing errors, use default message - } + const responseMessage = extractApiErrorMessage( + await response.text().catch(() => ""), + ) + if (responseMessage) errorMessage = responseMessage throw new SupermemoryAPIError(errorMessage, response.status) }