From 8a9def00ded6382aa268b51252344a174255db09 Mon Sep 17 00:00:00 2001 From: Megh Rathod Date: Thu, 11 Apr 2024 23:34:40 +0530 Subject: [PATCH 1/5] fix: tmdb fetch failure due ISP blocks in India Signed-off-by: Megh Rathod --- src/backend/metadata/tmdb.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/metadata/tmdb.ts b/src/backend/metadata/tmdb.ts index 67c7d56f..2e11bf73 100644 --- a/src/backend/metadata/tmdb.ts +++ b/src/backend/metadata/tmdb.ts @@ -143,7 +143,7 @@ export function decodeTMDBId( }; } -const baseURL = "https://api.themoviedb.org/3"; +const baseURL = "https://api.tmdb.org/3"; const apiKey = conf().TMDB_READ_API_KEY; From 1ec51699d1bfcda0d284f97d7d90c4aa9b614d47 Mon Sep 17 00:00:00 2001 From: Megh Rathod Date: Fri, 12 Apr 2024 11:33:18 +0530 Subject: [PATCH 2/5] fix: add alternate tmdb endpoint to fix errors when main url is blocked Signed-off-by: Megh Rathod --- src/backend/metadata/tmdb.ts | 44 +++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/backend/metadata/tmdb.ts b/src/backend/metadata/tmdb.ts index 2e11bf73..0f01d684 100644 --- a/src/backend/metadata/tmdb.ts +++ b/src/backend/metadata/tmdb.ts @@ -143,7 +143,8 @@ export function decodeTMDBId( }; } -const baseURL = "https://api.tmdb.org/3"; +const otherUrl = "https://api.tmdb.org/3"; +let baseURL = "https://api.themoviedb.org/3"; const apiKey = conf().TMDB_READ_API_KEY; @@ -155,13 +156,40 @@ const headers = { async function get(url: string, params?: object): Promise { if (!apiKey) throw new Error("TMDB API key not set"); - const res = await mwFetch(encodeURI(url), { - headers, - baseURL, - params: { - ...params, - }, - }); + const controller = new AbortController(); + const { signal } = controller; + + const timeoutId = + baseURL === otherUrl + ? setTimeout(() => controller.abort(), 15000) + : setTimeout(() => controller.abort(), 3000); + let res: Promise; + + try { + res = await mwFetch(encodeURI(url), { + headers, + baseURL, + params: { + ...params, + }, + signal, + }); + clearTimeout(timeoutId); + } catch (err) { + if (baseURL !== otherUrl) { + baseURL = otherUrl; + res = await mwFetch(encodeURI(url), { + headers, + baseURL, + params: { + ...params, + }, + }); + } else { + res = Promise.reject(); + } + } + return res; } From 76d906c95a6de6cc0043d8c4c5c3fcddba7f895e Mon Sep 17 00:00:00 2001 From: Megh Rathod Date: Fri, 12 Apr 2024 23:29:42 +0530 Subject: [PATCH 3/5] fix: use AbortSignal.timeout instead of setTimeout Signed-off-by: Megh Rathod --- src/backend/metadata/tmdb.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/backend/metadata/tmdb.ts b/src/backend/metadata/tmdb.ts index 0f01d684..f9d21c6c 100644 --- a/src/backend/metadata/tmdb.ts +++ b/src/backend/metadata/tmdb.ts @@ -156,13 +156,6 @@ const headers = { async function get(url: string, params?: object): Promise { if (!apiKey) throw new Error("TMDB API key not set"); - const controller = new AbortController(); - const { signal } = controller; - - const timeoutId = - baseURL === otherUrl - ? setTimeout(() => controller.abort(), 15000) - : setTimeout(() => controller.abort(), 3000); let res: Promise; try { @@ -172,9 +165,8 @@ async function get(url: string, params?: object): Promise { params: { ...params, }, - signal, + signal: AbortSignal.timeout(baseURL !== otherUrl ? 5000 : 30000), }); - clearTimeout(timeoutId); } catch (err) { if (baseURL !== otherUrl) { baseURL = otherUrl; From 0e3f82df302693d70e622666022877793a6ef1a9 Mon Sep 17 00:00:00 2001 From: Megh Rathod Date: Sun, 14 Apr 2024 15:14:14 +0530 Subject: [PATCH 4/5] Return values instead of promise Co-authored-by: William Oldham --- src/backend/metadata/tmdb.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/metadata/tmdb.ts b/src/backend/metadata/tmdb.ts index f9d21c6c..2e675f10 100644 --- a/src/backend/metadata/tmdb.ts +++ b/src/backend/metadata/tmdb.ts @@ -156,10 +156,10 @@ const headers = { async function get(url: string, params?: object): Promise { if (!apiKey) throw new Error("TMDB API key not set"); - let res: Promise; + let res: T; try { - res = await mwFetch(encodeURI(url), { + res = await mwFetch(encodeURI(url), { headers, baseURL, params: { @@ -170,7 +170,7 @@ async function get(url: string, params?: object): Promise { } catch (err) { if (baseURL !== otherUrl) { baseURL = otherUrl; - res = await mwFetch(encodeURI(url), { + res = await mwFetch(encodeURI(url), { headers, baseURL, params: { From 995c855ac2b77001b2541b3010bb944076ec6bf8 Mon Sep 17 00:00:00 2001 From: Megh Rathod Date: Sun, 14 Apr 2024 16:19:51 +0530 Subject: [PATCH 5/5] added useFallback to decide which TMDB url to use Signed-off-by: Megh Rathod --- src/backend/metadata/tmdb.ts | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/backend/metadata/tmdb.ts b/src/backend/metadata/tmdb.ts index 2e675f10..67a79490 100644 --- a/src/backend/metadata/tmdb.ts +++ b/src/backend/metadata/tmdb.ts @@ -143,8 +143,9 @@ export function decodeTMDBId( }; } +const baseURL = "https://api.themoviedb.org/3"; const otherUrl = "https://api.tmdb.org/3"; -let baseURL = "https://api.themoviedb.org/3"; +let useFallback = false; const apiKey = conf().TMDB_READ_API_KEY; @@ -155,33 +156,26 @@ const headers = { async function get(url: string, params?: object): Promise { if (!apiKey) throw new Error("TMDB API key not set"); - let res: T; - try { res = await mwFetch(encodeURI(url), { headers, - baseURL, + baseURL: !useFallback ? baseURL : otherUrl, params: { ...params, }, - signal: AbortSignal.timeout(baseURL !== otherUrl ? 5000 : 30000), + signal: AbortSignal.timeout(!useFallback ? 5000 : 30000), }); } catch (err) { - if (baseURL !== otherUrl) { - baseURL = otherUrl; - res = await mwFetch(encodeURI(url), { - headers, - baseURL, - params: { - ...params, - }, - }); - } else { - res = Promise.reject(); - } + useFallback = true; + res = await mwFetch(encodeURI(url), { + headers, + baseURL: otherUrl, + params: { + ...params, + }, + }); } - return res; }