From 4226827b5dcef6613f5fb20ec0f3bd1982e81fc8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Mar 2026 18:38:06 +0200 Subject: [PATCH] chore(standalone/setup): improve error reporting --- .../src/lightweight/request_provider.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/apps/client-standalone/src/lightweight/request_provider.ts b/apps/client-standalone/src/lightweight/request_provider.ts index 7d0a0e471d..4bbe8dc2f6 100644 --- a/apps/client-standalone/src/lightweight/request_provider.ts +++ b/apps/client-standalone/src/lightweight/request_provider.ts @@ -51,21 +51,28 @@ export default class FetchRequestProvider implements RequestProvider { if ([200, 201, 204].includes(response.status)) { const text = await response.text(); return text.trim() ? JSON.parse(text) : null; - } else { - const text = await response.text(); - let errorMessage: string; - try { - const json = JSON.parse(text); - errorMessage = json?.message || ""; - } catch { - errorMessage = text.substring(0, 100); - } - throw new Error(`Request to ${opts.method} ${opts.url} failed, error: ${response.status} ${response.statusText} ${errorMessage}`); } + const text = await response.text(); + let errorMessage: string; + try { + const json = JSON.parse(text); + errorMessage = json?.message || ""; + } catch { + errorMessage = text.substring(0, 100); + } + throw new Error(`Request to ${opts.method} ${opts.url} failed, error: ${response.status} ${response.statusText} ${errorMessage}`); + } catch (e: any) { if (e.name === "AbortError") { throw new Error(`Request to ${opts.method} ${opts.url} failed, error: timeout after ${opts.timeout}ms`); } + if (e instanceof TypeError && e.message === "Failed to fetch") { + const isCrossOrigin = !opts.url.startsWith(location.origin); + if (isCrossOrigin) { + throw new Error(`Request to ${opts.url} was blocked. The server may not allow requests from this origin (CORS), or it may be unreachable.`); + } + throw new Error(`Request to ${opts.url} failed. The server may be unreachable.`); + } throw e; } finally { if (timeoutId) {