invidious-companion-patches/patches/0008-add-proxy-retries-on-innertube-error.patch
Fijxu b5ccecf5c6
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 11s
update patches and invidious-companion
2025-04-05 03:33:59 -03:00

64 lines
2.5 KiB
Diff

From 980102372e0368917533c1bd8c4b8380b05ee775 Mon Sep 17 00:00:00 2001
From: Fijxu <fijxu@nadeko.net>
Date: Tue, 25 Mar 2025 00:04:47 -0300
Subject: [PATCH 08/11] add proxy retries on innertube error
---
src/lib/helpers/config.ts | 1 +
src/lib/helpers/youtubePlayerHandling.ts | 23 ++++++++++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts
index 6004753..c840ce4 100644
--- a/src/lib/helpers/config.ts
+++ b/src/lib/helpers/config.ts
@@ -40,6 +40,7 @@ export const ConfigSchema = z.object({
external_videoplayback_proxy: z.string().default(
Deno.env.get("EXTERNAL_VIDEOPLAYBACK_PROXY") || "",
),
+ max_proxy_retries: z.number().default(Number(Deno.env.get("MAX_PROXY_RETIRES") || 5)),
}).strict().default({}),
jobs: z.object({
youtube_session: z.object({
diff --git a/src/lib/helpers/youtubePlayerHandling.ts b/src/lib/helpers/youtubePlayerHandling.ts
index 4c9ab51..792ba54 100644
--- a/src/lib/helpers/youtubePlayerHandling.ts
+++ b/src/lib/helpers/youtubePlayerHandling.ts
@@ -43,12 +43,33 @@ export const youtubePlayerParsing = async ({
if (videoCached != null && cacheEnabled) {
return JSON.parse(new TextDecoder().decode(decompress(videoCached)));
} else {
- const youtubePlayerResponse = await youtubePlayerReq(
+ let youtubePlayerResponse = await youtubePlayerReq(
innertubeClient,
videoId,
config,
tokenMinter,
);
+
+ const maxRetries = config.networking.max_proxy_retries;
+ for (let retries = 1; retries <= (maxRetries as number); retries++) {
+ if (
+ !youtubePlayerResponse.data.playabilityStatus?.errorScreen
+ ?.playerErrorMessageRenderer?.subreason?.runs?.[0]?.text
+ ?.includes("This helps protect our community")
+ ) {
+ break;
+ }
+ console.log(
+ `[DEBUG] Got 'This helps protect our community', retrying request for ${videoId}. Retry ${retries} of ${maxRetries}`,
+ );
+ youtubePlayerResponse = await youtubePlayerReq(
+ innertubeClient,
+ videoId,
+ config,
+ tokenMinter,
+ );
+ }
+
const videoData = youtubePlayerResponse.data;
const video = new YT.VideoInfo(
--
2.49.0