From ac6d68ec45853ed1f4e6e5d6f748dfcf3e01b4c8 Mon Sep 17 00:00:00 2001 From: wukko Date: Tue, 6 Aug 2024 20:50:20 +0600 Subject: [PATCH] web/api: remove deprecated statuses, update error type, time out request also updated some error codes --- .../components/save/buttons/DownloadButton.svelte | 10 +++++----- web/src/lib/api.ts | 12 +++++++++++- web/src/lib/types/api.ts | 11 ++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/web/src/components/save/buttons/DownloadButton.svelte b/web/src/components/save/buttons/DownloadButton.svelte index c2a26a49..3f026dac 100644 --- a/web/src/components/save/buttons/DownloadButton.svelte +++ b/web/src/components/save/buttons/DownloadButton.svelte @@ -68,16 +68,16 @@ return createDialog({ ...defaultErrorPopup, - bodyText: "couldn't access the api", + bodyText: $t("error.api.unreachable"), }); } - if (response.status === "error" || response.status === "rate-limit") { + if (response.status === "error") { changeDownloadButton("error"); return createDialog({ ...defaultErrorPopup, - bodyText: response.text, + bodyText: $t(response.error.code), }); } @@ -101,7 +101,7 @@ return createDialog({ ...defaultErrorPopup, - bodyText: "couldn't probe the stream", + bodyText: $t("error.stream.failed_probe"), }); } } @@ -139,7 +139,7 @@ return createDialog({ ...defaultErrorPopup, - bodyText: "unknown/unsupported status", + bodyText: $t("error.api.unknown_response"), }); }; diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index dfa3bb90..a631bf1c 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -91,12 +91,22 @@ const request = async (url: string) => { const response: Optional = await fetch(api, { method: "POST", redirect: "manual", + signal: AbortSignal.timeout(10000), body: JSON.stringify(request), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } - }).then(r => r.json()).catch(() => {}); + }).then(r => r.json()).catch((e) => { + if (e?.message?.includes("timed out")) { + return { + status: "error", + error: { + code: "error.api.timed_out" + } + } + } + }); return response; } diff --git a/web/src/lib/types/api.ts b/web/src/lib/types/api.ts index f3b81851..8df6d570 100644 --- a/web/src/lib/types/api.ts +++ b/web/src/lib/types/api.ts @@ -1,14 +1,19 @@ enum CobaltResponseType { Error = 'error', - RateLimit = 'rate-limit', Picker = 'picker', Redirect = 'redirect', Stream = 'stream', } type CobaltErrorResponse = { - status: CobaltResponseType.Error | CobaltResponseType.RateLimit, - text: string, + status: CobaltResponseType.Error, + error: { + code: string, + context?: { + service?: string, + limit?: number, + } + } }; type CobaltPartialURLResponse = {