diff --git a/invidious-companion b/invidious-companion index 1867045..f1606a0 160000 --- a/invidious-companion +++ b/invidious-companion @@ -1 +1 @@ -Subproject commit 1867045ba9a23250317fcb139bed0364e6d7cd89 +Subproject commit f1606a0aa1a8d37df690bf4757a5a6ae4a955a0b diff --git a/patches/0006-ci-update-deno-to-2.2.4.patch b/patches/0001-ci-update-deno-to-2.2.5.patch similarity index 63% rename from patches/0006-ci-update-deno-to-2.2.4.patch rename to patches/0001-ci-update-deno-to-2.2.5.patch index a47f2ed..12af996 100644 --- a/patches/0006-ci-update-deno-to-2.2.4.patch +++ b/patches/0001-ci-update-deno-to-2.2.5.patch @@ -1,19 +1,19 @@ -From 91a9fb17566462144f6f54d4a6054077024cc719 Mon Sep 17 00:00:00 2001 +From c0209c66dd9381b9a8cee2c832155cf28364faf3 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 19:37:34 -0300 -Subject: [PATCH 06/14] ci: update deno to 2.2.4 +Subject: [PATCH 01/12] ci: update deno to 2.2.5 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile -index 04b74c0..a6dc150 100644 +index 04b74c0..0f9f933 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM denoland/deno:debian-2.1.4 AS builder -+FROM denoland/deno:debian-2.2.4 AS builder ++FROM denoland/deno:debian-2.2.5 AS builder ARG TINI_VERSION=0.19.0 diff --git a/patches/0001-feat-add-support-for-an-external-videoplayback-proxy.patch b/patches/0002-feat-add-support-for-an-external-videoplayback-proxy.patch similarity index 52% rename from patches/0001-feat-add-support-for-an-external-videoplayback-proxy.patch rename to patches/0002-feat-add-support-for-an-external-videoplayback-proxy.patch index 1f226e7..759dc52 100644 --- a/patches/0001-feat-add-support-for-an-external-videoplayback-proxy.patch +++ b/patches/0002-feat-add-support-for-an-external-videoplayback-proxy.patch @@ -1,20 +1,20 @@ -From aa4a7282934a6f23dbcb055435f0fac114c3abba Mon Sep 17 00:00:00 2001 +From 291d80dcf32824db5175b031b389d9e1552465e4 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 18:44:10 -0300 -Subject: [PATCH 01/14] feat: add support for an external videoplayback proxy +Subject: [PATCH 02/12] feat: add support for an external videoplayback proxy --- config/config.example.toml | 1 + src/lib/helpers/config.ts | 3 +++ - src/routes/invidious_routes/dashManifest.ts | 5 +++-- + src/routes/invidious_routes/dashManifest.ts | 6 ++++-- src/routes/invidious_routes/latestVersion.ts | 3 ++- - 4 files changed, 9 insertions(+), 3 deletions(-) + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/config/config.example.toml b/config/config.example.toml -index c56b95b..e173e06 100644 +index 5989656..0b4d7b8 100644 --- a/config/config.example.toml +++ b/config/config.example.toml -@@ -26,6 +26,7 @@ +@@ -27,6 +27,7 @@ # #proxy = "" # env variable: PROXY # # Enable YouTube new video format UMP # ump = false @@ -23,10 +23,10 @@ index c56b95b..e173e06 100644 ### # Network call timeouts when talking to YouTube. diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index edba9da..5ff4a2d 100644 +index 426426f..273fe95 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -26,6 +26,9 @@ const ConfigSchema = z.object({ +@@ -29,6 +29,9 @@ const ConfigSchema = z.object({ debounce_multiplier: z.number().optional(), }).strict().optional(), }).strict().optional(), @@ -37,33 +37,34 @@ index edba9da..5ff4a2d 100644 jobs: z.object({ youtube_session: z.object({ diff --git a/src/routes/invidious_routes/dashManifest.ts b/src/routes/invidious_routes/dashManifest.ts -index 2b796ba..46756cd 100644 +index e816470..930eef1 100644 --- a/src/routes/invidious_routes/dashManifest.ts +++ b/src/routes/invidious_routes/dashManifest.ts -@@ -85,8 +85,9 @@ dashManifest.get("/:videoId", async (c) => { - let dashUrl = url; - if (local) { - // Can't create URL type without host part -- dashUrl = (dashUrl.pathname + dashUrl.search + "&host=" + -- dashUrl.host) as unknown as URL; -+ dashUrl = config.networking.external_videoplayback_proxy + -+ (dashUrl.pathname + dashUrl.search + "&host=" + -+ dashUrl.host) as unknown as URL; - if (config.networking.ump) { - dashUrl = dashUrl + "&ump=1" as unknown as URL; +@@ -109,8 +109,10 @@ dashManifest.get("/:videoId", async (c) => { + queryParams.set("enc", "true"); + queryParams.set("data", encryptedParams); } +- dashUrl = (dashUrl.pathname + "?" + +- queryParams.toString()) as unknown as URL; ++ dashUrl = ++ (config.networking.external_videoplayback_proxy + ++ dashUrl.pathname + "?" + ++ queryParams.toString()) as unknown as URL; + return dashUrl; + } else { + return dashUrl; diff --git a/src/routes/invidious_routes/latestVersion.ts b/src/routes/invidious_routes/latestVersion.ts -index 191c0a4..a8ead67 100644 +index 6421904..07b070a 100644 --- a/src/routes/invidious_routes/latestVersion.ts +++ b/src/routes/invidious_routes/latestVersion.ts -@@ -64,7 +64,8 @@ latestVersion.get("/", async (c) => { - const itagUrlParsed = new URL(itagUrl); - let urlToRedirect = itagUrlParsed.toString(); - if (local) { -- urlToRedirect = itagUrlParsed.pathname + itagUrlParsed.search + +@@ -83,7 +83,8 @@ latestVersion.get("/", async (c) => { + queryParams.set("enc", "true"); + queryParams.set("data", encryptedParams); + } +- urlToRedirect = itagUrlParsed.pathname + "?" + + urlToRedirect = config.networking.external_videoplayback_proxy + -+ itagUrlParsed.pathname + itagUrlParsed.search + - "&host=" + itagUrlParsed.host; ++ itagUrlParsed.pathname + "?" + + queryParams.toString(); } -- diff --git a/patches/0002-feat-report-the-external-videoplayback-proxy-via-inf.patch b/patches/0003-feat-report-the-external-videoplayback-proxy-via-inf.patch similarity index 92% rename from patches/0002-feat-report-the-external-videoplayback-proxy-via-inf.patch rename to patches/0003-feat-report-the-external-videoplayback-proxy-via-inf.patch index 69ba045..aab0d0a 100644 --- a/patches/0002-feat-report-the-external-videoplayback-proxy-via-inf.patch +++ b/patches/0003-feat-report-the-external-videoplayback-proxy-via-inf.patch @@ -1,7 +1,7 @@ -From f239b39e13926733663ae7a213a59e0d68563609 Mon Sep 17 00:00:00 2001 +From 3ac18ddfa246eb421483cfc55120709e203e5e1a Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 18:52:53 -0300 -Subject: [PATCH 02/14] feat: report the external videoplayback proxy via /info +Subject: [PATCH 03/12] feat: report the external videoplayback proxy via /info endpoint --- diff --git a/patches/0003-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch b/patches/0004-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch similarity index 76% rename from patches/0003-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch rename to patches/0004-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch index 041df96..edd8f28 100644 --- a/patches/0003-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch +++ b/patches/0004-feat-add-resolution-limit-on-DASH-streams-to-save-ba.patch @@ -1,7 +1,7 @@ -From 4a27e15a8ba0d606ced9e14005c41064d3b446a6 Mon Sep 17 00:00:00 2001 +From e89236d910bb112204448765055a985dc2a589d5 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 19:02:01 -0300 -Subject: [PATCH 03/14] feat: add resolution limit on DASH streams to save +Subject: [PATCH 04/12] feat: add resolution limit on DASH streams to save bandwidth --- @@ -11,25 +11,25 @@ Subject: [PATCH 03/14] feat: add resolution limit on DASH streams to save 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/config/config.example.toml b/config/config.example.toml -index e173e06..a3c73be 100644 +index 0b4d7b8..6d342bb 100644 --- a/config/config.example.toml +++ b/config/config.example.toml -@@ -15,6 +15,7 @@ - # # secret key needs to be 16 characters long or more +@@ -16,6 +16,7 @@ # secret_key = "CHANGE_ME" # env variable: SERVER_SECRET_KEY # verify_requests = false + # encrypt_query_params = false # env variable: SERVER_ENCRYPT_QUERY_PARAMS +# max_dash_resolution = 1080 # [cache] # enabled = true diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index 5ff4a2d..1ad0125 100644 +index 273fe95..d1968fe 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -9,6 +9,9 @@ const ConfigSchema = z.object({ - Deno.env.get("SERVER_SECRET_KEY") || "", +@@ -12,6 +12,9 @@ const ConfigSchema = z.object({ + encrypt_query_params: z.boolean().default( + Deno.env.get("SERVER_ENCRYPT_QUERY_PARAMS") === "true" || false, ), - verify_requests: z.boolean().default(false), + max_dash_resolution: z.number().default( + Number(Deno.env.get("SERVER_MAX_DASH_RESOLUTION")), + ), @@ -37,10 +37,10 @@ index 5ff4a2d..1ad0125 100644 cache: z.object({ enabled: z.boolean().default(true), diff --git a/src/routes/invidious_routes/dashManifest.ts b/src/routes/invidious_routes/dashManifest.ts -index 46756cd..68ae21d 100644 +index 930eef1..96e8e2f 100644 --- a/src/routes/invidious_routes/dashManifest.ts +++ b/src/routes/invidious_routes/dashManifest.ts -@@ -61,7 +61,12 @@ dashManifest.get("/:videoId", async (c) => { +@@ -62,7 +62,12 @@ dashManifest.get("/:videoId", async (c) => { ).includes("av01") ) { if (i.mime_type.includes("av01")) { diff --git a/patches/0004-feat-add-env-variable-to-set-verify_requests.patch b/patches/0005-feat-add-env-variable-to-set-verify_requests.patch similarity index 64% rename from patches/0004-feat-add-env-variable-to-set-verify_requests.patch rename to patches/0005-feat-add-env-variable-to-set-verify_requests.patch index e0b4c0e..92ed081 100644 --- a/patches/0004-feat-add-env-variable-to-set-verify_requests.patch +++ b/patches/0005-feat-add-env-variable-to-set-verify_requests.patch @@ -1,26 +1,26 @@ -From 9a8c0cf66ec6b2ad546c9448a907d8123ff1d65b Mon Sep 17 00:00:00 2001 +From dc49b7941dc22c3c701250d90769df655257e300 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 19:06:04 -0300 -Subject: [PATCH 04/14] feat: add env variable to set verify_requests +Subject: [PATCH 05/12] feat: add env variable to set verify_requests --- src/lib/helpers/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index 1ad0125..05748f0 100644 +index d1968fe..a5221c9 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts @@ -8,7 +8,9 @@ const ConfigSchema = z.object({ - secret_key: z.string().min(16).default( + secret_key: z.string().length(16).default( Deno.env.get("SERVER_SECRET_KEY") || "", ), - verify_requests: z.boolean().default(false), + verify_requests: z.boolean().default( + Deno.env.get("VERIFY_REQUESTS") === "true" || false, + ), - max_dash_resolution: z.number().default( - Number(Deno.env.get("SERVER_MAX_DASH_RESOLUTION")), + encrypt_query_params: z.boolean().default( + Deno.env.get("SERVER_ENCRYPT_QUERY_PARAMS") === "true" || false, ), -- 2.49.0 diff --git a/patches/0005-feat-add-support-for-multiple-proxies.patch b/patches/0006-feat-add-support-for-multiple-proxies.patch similarity index 92% rename from patches/0005-feat-add-support-for-multiple-proxies.patch rename to patches/0006-feat-add-support-for-multiple-proxies.patch index c56cf48..1d7eefa 100644 --- a/patches/0005-feat-add-support-for-multiple-proxies.patch +++ b/patches/0006-feat-add-support-for-multiple-proxies.patch @@ -1,7 +1,7 @@ -From 2efe34cfc218e20aedce6b03453dbebf71e4f782 Mon Sep 17 00:00:00 2001 +From f940a206dedc8a70ceb507f4373c80a833ae709c Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 19:20:52 -0300 -Subject: [PATCH 05/14] feat: add support for multiple proxies +Subject: [PATCH 06/12] feat: add support for multiple proxies --- src/lib/helpers/getFetchClient.ts | 17 ++++++++++++++++- diff --git a/patches/0008-feat-add-option-to-disable-potoken-generation-check.patch b/patches/0007-feat-add-option-to-disable-potoken-generation-check.patch similarity index 88% rename from patches/0008-feat-add-option-to-disable-potoken-generation-check.patch rename to patches/0007-feat-add-option-to-disable-potoken-generation-check.patch index a4f6d74..8a3a0cb 100644 --- a/patches/0008-feat-add-option-to-disable-potoken-generation-check.patch +++ b/patches/0007-feat-add-option-to-disable-potoken-generation-check.patch @@ -1,7 +1,7 @@ -From ba7ed5b559806a1e3625a17b105c9429157f4e63 Mon Sep 17 00:00:00 2001 +From 36bd0fa14574b05f15aa462cc485eb6b488a2ffc Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 24 Mar 2025 20:34:33 -0300 -Subject: [PATCH 08/14] feat: add option to disable potoken generation check +Subject: [PATCH 07/12] feat: add option to disable potoken generation check --- config/config.example.toml | 1 + @@ -10,10 +10,10 @@ Subject: [PATCH 08/14] feat: add option to disable potoken generation check 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/config/config.example.toml b/config/config.example.toml -index a3c73be..4c04ee3 100644 +index 6d342bb..969c768 100644 --- a/config/config.example.toml +++ b/config/config.example.toml -@@ -51,6 +51,7 @@ +@@ -52,6 +52,7 @@ # [jobs.youtube_session] # po_token_enabled = true # whether to generate PO tokens # frequency = "*/5 * * * *" # frequency of PO token refresh in cron format @@ -22,10 +22,10 @@ index a3c73be..4c04ee3 100644 # [youtube_session] # oauth_enabled = false diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index 05748f0..a2f6be0 100644 +index a5221c9..e6b1070 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -39,6 +39,15 @@ const ConfigSchema = z.object({ +@@ -42,6 +42,15 @@ const ConfigSchema = z.object({ youtube_session: z.object({ po_token_enabled: z.boolean().default(true), frequency: z.string().default("*/5 * * * *"), diff --git a/patches/0007-fix-cut-off-secret_key-to-16-characters.patch b/patches/0007-fix-cut-off-secret_key-to-16-characters.patch deleted file mode 100644 index fb60e16..0000000 --- a/patches/0007-fix-cut-off-secret_key-to-16-characters.patch +++ /dev/null @@ -1,25 +0,0 @@ -From d805b8f591e9176f2b9990dd7c4184792d564efe Mon Sep 17 00:00:00 2001 -From: Fijxu -Date: Mon, 24 Mar 2025 20:22:19 -0300 -Subject: [PATCH 07/14] fix: cut off secret_key to 16 characters - ---- - src/lib/helpers/verifyRequest.ts | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lib/helpers/verifyRequest.ts b/src/lib/helpers/verifyRequest.ts -index 0891839..d92d6d4 100644 ---- a/src/lib/helpers/verifyRequest.ts -+++ b/src/lib/helpers/verifyRequest.ts -@@ -11,7 +11,7 @@ export const verifyRequest = ( - try { - const decipher = new Ecb( - Aes, -- new TextEncoder().encode(config.server.secret_key), -+ new TextEncoder().encode(config.server.secret_key.substring(0, 16)), - Padding.PKCS7, - ); - --- -2.49.0 - diff --git a/patches/0010-add-proxy-retries-on-innertube-error.patch b/patches/0008-add-proxy-retries-on-innertube-error.patch similarity index 91% rename from patches/0010-add-proxy-retries-on-innertube-error.patch rename to patches/0008-add-proxy-retries-on-innertube-error.patch index cac5456..2ede57c 100644 --- a/patches/0010-add-proxy-retries-on-innertube-error.patch +++ b/patches/0008-add-proxy-retries-on-innertube-error.patch @@ -1,7 +1,7 @@ -From 5f617136161bb6cf1571ee5aa361f6be5e69b33e Mon Sep 17 00:00:00 2001 +From f475167ed0f1d60e4f8e50c1936ced761d0f72db Mon Sep 17 00:00:00 2001 From: Fijxu Date: Tue, 25 Mar 2025 00:04:47 -0300 -Subject: [PATCH 10/14] add proxy retries on innertube error +Subject: [PATCH 08/12] add proxy retries on innertube error --- src/lib/helpers/config.ts | 1 + @@ -9,10 +9,10 @@ Subject: [PATCH 10/14] add proxy retries on innertube error 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index 83ce0fa..d539738 100644 +index e6b1070..acbede2 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -43,6 +43,7 @@ const ConfigSchema = z.object({ +@@ -37,6 +37,7 @@ const ConfigSchema = z.object({ external_videoplayback_proxy: z.string().default( Deno.env.get("EXTERNAL_VIDEOPLAYBACK_PROXY") || "", ), diff --git a/patches/0011-add-support-for-prometheus-metrics.patch b/patches/0009-add-support-for-prometheus-metrics.patch similarity index 99% rename from patches/0011-add-support-for-prometheus-metrics.patch rename to patches/0009-add-support-for-prometheus-metrics.patch index 958a741..f0c082f 100644 --- a/patches/0011-add-support-for-prometheus-metrics.patch +++ b/patches/0009-add-support-for-prometheus-metrics.patch @@ -1,7 +1,7 @@ -From 261eac162221700f4eb43f7633bdcfc0837a5ac8 Mon Sep 17 00:00:00 2001 +From ae88bbd1aa4a42bad78d0241da22cc376a207e67 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Tue, 18 Mar 2025 16:38:23 -0300 -Subject: [PATCH 11/14] add support for prometheus metrics +Subject: [PATCH 09/12] add support for prometheus metrics fix deno lint and typo @@ -37,12 +37,12 @@ fix: add missing metrics argument create mode 100644 src/routes/metrics.ts diff --git a/config/config.example.toml b/config/config.example.toml -index 4c04ee3..01c3f83 100644 +index 969c768..a5800fb 100644 --- a/config/config.example.toml +++ b/config/config.example.toml -@@ -16,6 +16,7 @@ - # secret_key = "CHANGE_ME" # env variable: SERVER_SECRET_KEY +@@ -17,6 +17,7 @@ # verify_requests = false + # encrypt_query_params = false # env variable: SERVER_ENCRYPT_QUERY_PARAMS # max_dash_resolution = 1080 +# enable_metrics = false # env variable: ENABLE_METRICS @@ -2153,13 +2153,13 @@ index 9a772c7..6a3432d 100644 } } diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index d539738..646132f 100644 +index acbede2..50f3f8b 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -23,6 +23,13 @@ const ConfigSchema = z.object({ - ? false - : true, - ), +@@ -17,6 +17,13 @@ const ConfigSchema = z.object({ + max_dash_resolution: z.number().default( + Number(Deno.env.get("SERVER_MAX_DASH_RESOLUTION")), + ), + enable_metrics: z.boolean().default( + Deno.env.get("ENABLE_METRICS") === "true" + ? true @@ -2170,7 +2170,7 @@ index d539738..646132f 100644 }).strict().default({}), cache: z.object({ enabled: z.boolean().default(true), -@@ -43,7 +50,9 @@ const ConfigSchema = z.object({ +@@ -37,7 +44,9 @@ const ConfigSchema = z.object({ external_videoplayback_proxy: z.string().default( Deno.env.get("EXTERNAL_VIDEOPLAYBACK_PROXY") || "", ), @@ -2494,7 +2494,7 @@ index 4f42d28..1e9b7a2 100644 + metrics: Metrics | undefined; }; diff --git a/src/main.ts b/src/main.ts -index a792fee..c2c265e 100644 +index 2968a3e..851cd71 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,7 @@ import type { HonoVariables } from "./lib/types/HonoVariables.ts"; @@ -2513,15 +2513,15 @@ index a792fee..c2c265e 100644 let tokenMinter: BG.WebPoMinter; let innertubeClient: Innertube; -@@ -72,6 +74,7 @@ if (!innertubeClientOauthEnabled) { +@@ -66,6 +68,7 @@ if (!innertubeClientOauthEnabled) { innertubeClient, config, - innertubeClientCache as UniversalCache, + innertubeClientCache, + metrics, ), { minTimeout: 1_000, maxTimeout: 60_000, multiplier: 5, jitter: 0 }, )); -@@ -82,11 +85,17 @@ if (!innertubeClientOauthEnabled) { +@@ -76,11 +79,17 @@ if (!innertubeClientOauthEnabled) { { backoffSchedule: [5_000, 15_000, 60_000, 180_000] }, async () => { if (innertubeClientJobPoTokenEnabled) { @@ -2544,7 +2544,7 @@ index a792fee..c2c265e 100644 } else { innertubeClient = await Innertube.create({ enable_session_cache: false, -@@ -124,6 +133,7 @@ app.use("*", async (c, next) => { +@@ -118,6 +127,7 @@ app.use("*", async (c, next) => { c.set("innertubeClient", innertubeClient); c.set("tokenMinter", tokenMinter); c.set("config", config); @@ -2593,7 +2593,7 @@ index 1eaeb14..f900298 100644 const videoInfo = youtubeVideoInfo( diff --git a/src/routes/invidious_routes/dashManifest.ts b/src/routes/invidious_routes/dashManifest.ts -index a4c0950..414b4cf 100644 +index 96e8e2f..34e0b6e 100644 --- a/src/routes/invidious_routes/dashManifest.ts +++ b/src/routes/invidious_routes/dashManifest.ts @@ -17,6 +17,7 @@ dashManifest.get("/:videoId", async (c) => { @@ -2613,7 +2613,7 @@ index a4c0950..414b4cf 100644 const videoInfo = youtubeVideoInfo( innertubeClient, diff --git a/src/routes/invidious_routes/latestVersion.ts b/src/routes/invidious_routes/latestVersion.ts -index f1a7605..dbf57c2 100644 +index 07b070a..74dd090 100644 --- a/src/routes/invidious_routes/latestVersion.ts +++ b/src/routes/invidious_routes/latestVersion.ts @@ -21,6 +21,7 @@ latestVersion.get("/", async (c) => { diff --git a/patches/0009-feat-add-support-for-encrypted-query-parameters.patch b/patches/0009-feat-add-support-for-encrypted-query-parameters.patch deleted file mode 100644 index 9609a4a..0000000 --- a/patches/0009-feat-add-support-for-encrypted-query-parameters.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 4e14b2c9914d9f10e70394d25c0bf225acebbabe Mon Sep 17 00:00:00 2001 -From: Fijxu -Date: Mon, 24 Mar 2025 21:38:33 -0300 -Subject: [PATCH 09/14] feat: add support for encrypted query parameters - ---- - src/lib/helpers/config.ts | 9 ++++ - src/lib/helpers/encrypter.ts | 56 ++++++++++++++++++++ - src/routes/invidious_routes/dashManifest.ts | 18 +++++-- - src/routes/invidious_routes/latestVersion.ts | 14 ++++- - 4 files changed, 91 insertions(+), 6 deletions(-) - create mode 100644 src/lib/helpers/encrypter.ts - -diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index a2f6be0..83ce0fa 100644 ---- a/src/lib/helpers/config.ts -+++ b/src/lib/helpers/config.ts -@@ -14,6 +14,15 @@ const ConfigSchema = z.object({ - max_dash_resolution: z.number().default( - Number(Deno.env.get("SERVER_MAX_DASH_RESOLUTION")), - ), -+ encrypt_query_params: z -+ .boolean() -+ .default( -+ Deno.env.get("ENCRYPT_QUERY_PARAMS") === "true" -+ ? true -+ : Deno.env.get("ENCRYPT_QUERY_PARAMS") === "false" -+ ? false -+ : true, -+ ), - }).strict().default({}), - cache: z.object({ - enabled: z.boolean().default(true), -diff --git a/src/lib/helpers/encrypter.ts b/src/lib/helpers/encrypter.ts -new file mode 100644 -index 0000000..4b45590 ---- /dev/null -+++ b/src/lib/helpers/encrypter.ts -@@ -0,0 +1,56 @@ -+import { decodeBase64, encodeBase64 } from "@std/encoding/base64"; -+import { Aes } from "crypto/aes.ts"; -+import { Ecb, Padding } from "crypto/block-modes.ts"; -+import { Config } from "./config.ts"; -+ -+export const encryptQuery = ( -+ queryParams: string, -+ config: Config, -+): string => { -+ try { -+ const cipher = new Ecb( -+ Aes, -+ new TextEncoder().encode(config.server.secret_key.substring(0, 16)), -+ Padding.PKCS7, -+ ); -+ -+ const encodedData = new TextEncoder().encode( -+ queryParams, -+ ); -+ -+ const encryptedData = cipher.encrypt(encodedData); -+ -+ return encodeBase64(encryptedData).replace(/\+/g, "-").replace( -+ /\//g, -+ "_", -+ ); -+ } catch (_) { -+ return ""; -+ } -+}; -+ -+export const decryptQuery = ( -+ queryParams: string, -+ config: Config, -+): string => { -+ try { -+ const decipher = new Ecb( -+ Aes, -+ new TextEncoder().encode(config.server.secret_key.substring(0, 16)), -+ Padding.PKCS7, -+ ); -+ -+ const decryptedData = new TextDecoder().decode( -+ decipher.decrypt( -+ decodeBase64( -+ queryParams.replace(/-/g, "+").replace(/_/g, "/"), -+ ), -+ ), -+ ); -+ -+ console.log(decryptedData); -+ return decryptedData; -+ } catch (_) { -+ return ""; -+ } -+}; -diff --git a/src/routes/invidious_routes/dashManifest.ts b/src/routes/invidious_routes/dashManifest.ts -index 68ae21d..a4c0950 100644 ---- a/src/routes/invidious_routes/dashManifest.ts -+++ b/src/routes/invidious_routes/dashManifest.ts -@@ -6,6 +6,7 @@ import { - } from "../../lib/helpers/youtubePlayerHandling.ts"; - import { verifyRequest } from "../../lib/helpers/verifyRequest.ts"; - import { HTTPException } from "hono/http-exception"; -+import { encryptQuery } from "../../lib/helpers/encrypter.ts"; - - const dashManifest = new Hono(); - -@@ -88,14 +89,23 @@ dashManifest.get("/:videoId", async (c) => { - videoInfo.page[0].video_details?.is_post_live_dvr, - (url: URL) => { - let dashUrl = url; -+ let queryParams = dashUrl.search.substring(1) + "&host=" + -+ dashUrl.host; -+ - if (local) { -- // Can't create URL type without host part -- dashUrl = config.networking.external_videoplayback_proxy + -- (dashUrl.pathname + dashUrl.search + "&host=" + -- dashUrl.host) as unknown as URL; - if (config.networking.ump) { - dashUrl = dashUrl + "&ump=1" as unknown as URL; - } -+ if (config.server.encrypt_query_params) { -+ queryParams = "enc=yes&data=" + encryptQuery( -+ queryParams, -+ config, -+ ); -+ } -+ // Can't create URL type without host part -+ dashUrl = config.networking.external_videoplayback_proxy + -+ (dashUrl.pathname + "?" + -+ queryParams) as unknown as URL; - return dashUrl; - } else { - return dashUrl; -diff --git a/src/routes/invidious_routes/latestVersion.ts b/src/routes/invidious_routes/latestVersion.ts -index a8ead67..f1a7605 100644 ---- a/src/routes/invidious_routes/latestVersion.ts -+++ b/src/routes/invidious_routes/latestVersion.ts -@@ -5,6 +5,7 @@ import { - youtubeVideoInfo, - } from "../../lib/helpers/youtubePlayerHandling.ts"; - import { verifyRequest } from "../../lib/helpers/verifyRequest.ts"; -+import { encryptQuery } from "../../lib/helpers/encrypter.ts"; - - const latestVersion = new Hono(); - -@@ -63,10 +64,19 @@ latestVersion.get("/", async (c) => { - const itagUrl = selectedItagFormat[0].url as string; - const itagUrlParsed = new URL(itagUrl); - let urlToRedirect = itagUrlParsed.toString(); -+ let queryParams = itagUrlParsed.search.substring(1) + "&host=" + -+ itagUrlParsed.host; -+ - if (local) { -+ if (config.server.encrypt_query_params) { -+ queryParams = "enc=yes&data=" + encryptQuery( -+ queryParams, -+ config, -+ ); -+ } -+ - urlToRedirect = config.networking.external_videoplayback_proxy + -- itagUrlParsed.pathname + itagUrlParsed.search + -- "&host=" + itagUrlParsed.host; -+ itagUrlParsed.pathname + "?" + queryParams; - } - - if (title) urlToRedirect += `&title=${encodeURIComponent(title)}`; --- -2.49.0 - diff --git a/patches/0012-add-metrics-for-proxy-retries.patch b/patches/0010-add-metrics-for-proxy-retries.patch similarity index 92% rename from patches/0012-add-metrics-for-proxy-retries.patch rename to patches/0010-add-metrics-for-proxy-retries.patch index b13d024..3e5cb8a 100644 --- a/patches/0012-add-metrics-for-proxy-retries.patch +++ b/patches/0010-add-metrics-for-proxy-retries.patch @@ -1,7 +1,7 @@ -From 75d88c65065d0d4e3af4651332c9d5fc4ad5c3cf Mon Sep 17 00:00:00 2001 +From 99a492d9bafd6f5bd1482df08441ebb703b45a59 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Tue, 25 Mar 2025 00:07:28 -0300 -Subject: [PATCH 12/14] add metrics for proxy retries +Subject: [PATCH 10/12] add metrics for proxy retries --- src/lib/helpers/metrics.ts | 5 +++++ diff --git a/patches/0013-fix-fix-tokio-overflow-on-compile.patch b/patches/0011-fix-fix-tokio-overflow-on-compile.patch similarity index 61% rename from patches/0013-fix-fix-tokio-overflow-on-compile.patch rename to patches/0011-fix-fix-tokio-overflow-on-compile.patch index b65f4b4..a8a1c08 100644 --- a/patches/0013-fix-fix-tokio-overflow-on-compile.patch +++ b/patches/0011-fix-fix-tokio-overflow-on-compile.patch @@ -1,18 +1,18 @@ -From 695e7338dd56fb7e28f32b4e5fd6f1b81701b992 Mon Sep 17 00:00:00 2001 +From d54369cd1b97d5beeaf0d867d2c24a36a2a0445c Mon Sep 17 00:00:00 2001 From: Fijxu Date: Tue, 25 Mar 2025 00:24:07 -0300 -Subject: [PATCH 13/14] fix: fix tokio overflow on compile +Subject: [PATCH 11/12] fix: fix tokio overflow on compile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile -index a6dc150..bdc43f5 100644 +index 0f9f933..99fce38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ - FROM denoland/deno:debian-2.2.4 AS builder + FROM denoland/deno:debian-2.2.5 AS builder +ENV RUST_MIN_STACK=9999999999 + diff --git a/patches/0014-Add-environment-variable-for-youtube_session.frequen.patch b/patches/0012-Add-environment-variable-for-youtube_session.frequen.patch similarity index 77% rename from patches/0014-Add-environment-variable-for-youtube_session.frequen.patch rename to patches/0012-Add-environment-variable-for-youtube_session.frequen.patch index 269b1bd..98274c4 100644 --- a/patches/0014-Add-environment-variable-for-youtube_session.frequen.patch +++ b/patches/0012-Add-environment-variable-for-youtube_session.frequen.patch @@ -1,17 +1,17 @@ -From 0855ac4ec1c614f25dccbdfb4fc97bc0789d5ad7 Mon Sep 17 00:00:00 2001 +From db6ff1b23bc50dba40611277e26e797da12b9685 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Wed, 26 Mar 2025 12:24:49 -0300 -Subject: [PATCH 14/14] Add environment variable for youtube_session.frequency +Subject: [PATCH 12/12] Add environment variable for youtube_session.frequency --- src/lib/helpers/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/helpers/config.ts b/src/lib/helpers/config.ts -index 646132f..16e4fbb 100644 +index 50f3f8b..8cf34fd 100644 --- a/src/lib/helpers/config.ts +++ b/src/lib/helpers/config.ts -@@ -57,7 +57,9 @@ const ConfigSchema = z.object({ +@@ -51,7 +51,9 @@ const ConfigSchema = z.object({ jobs: z.object({ youtube_session: z.object({ po_token_enabled: z.boolean().default(true),