diff --git a/src/api/API.browser.ts b/src/api/API.browser.ts index 9b915be..d14a46c 100644 --- a/src/api/API.browser.ts +++ b/src/api/API.browser.ts @@ -37,11 +37,18 @@ export default abstract class API extends Base { .then(async (r) => { clearTimeout(timeoutId); - if (!r.ok) throw new Error("Network response was not OK"); - - const response = await r.text(); - - if (r.headers.get("Content-Type") === "application/json") return JSON.parse(response, reviver); + let response: any = await r.text(); + + if (r.headers.get("Content-Type")?.startsWith("application/json")) response = JSON.parse(response, reviver); + + if (!r.ok) { + throw new Error(response?.error ?? "Something went wrong", { + cause: { + data : response, + status: r.status, + }, + }); + } return response; }) diff --git a/src/api/API.node.ts b/src/api/API.node.ts index b76b5be..b2f1c17 100644 --- a/src/api/API.node.ts +++ b/src/api/API.node.ts @@ -63,21 +63,28 @@ export default abstract class API extends Base { (res) => { res.setEncoding("utf8"); - // eslint-disable-next-line @typescript-eslint/no-magic-numbers - if (!res.statusCode || res.statusCode < 200 || res.statusCode > 299) { - reject(new Error("Network response was not OK")); - - return; - } - - let rawData = ""; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let rawData: any = ""; res .once("error", error => reject(error)) .once("end", () => { try { - if (res.headers["Content-Type"] === "application/json") resolve(JSON.parse(rawData, reviver)); - else resolve(rawData as never); + if (res.headers["content-type"]?.startsWith("application/json")) rawData = JSON.parse(rawData, reviver); + + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + if (!res.statusCode || res.statusCode < 200 || res.statusCode > 299) { + reject(new Error(rawData?.error ?? "Something went wrong", { + cause: { + data : rawData, + status: res.statusCode, + }, + })); + + return; + } + + resolve(rawData); } catch (error) { reject(error); }