From 814238ea6cc22c3b8c4c8c8f8323977efd429c25 Mon Sep 17 00:00:00 2001
From: Koen J <koen@disper.io>
Date: Mon, 10 Feb 2025 16:49:30 +0100
Subject: [PATCH] Redirect URL n param decrypt.

---
 YoutubeScript.js | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/YoutubeScript.js b/YoutubeScript.js
index ae444e1..48fd2ed 100644
--- a/YoutubeScript.js
+++ b/YoutubeScript.js
@@ -1952,7 +1952,7 @@ class YTVideoSource extends VideoUrlRangeSource {
 }
 
 class YTABRVideoSource extends DashManifestRawSource {
-    constructor(itag, obj, url, sourceObj, ustreamerConfig, bgData, parentUrl, usedLogin) {
+    constructor(itag, obj, url, sourceObj, ustreamerConfig, bgData, parentUrl, usedLogin, jsUrl) {
 		super(obj);
 		this.itag = itag;
 		this.url = url;
@@ -1969,6 +1969,7 @@ class YTABRVideoSource extends DashManifestRawSource {
 		this.visitorDataType = bgData.visitorDataType;
 		this.parentUrl = parentUrl;
 		this.usedLogin = !!usedLogin;
+		this.jsUrl = jsUrl;
     }
 
 	generate() {
@@ -1995,7 +1996,7 @@ class YTABRVideoSource extends DashManifestRawSource {
 	}
 }
 class YTABRAudioSource extends DashManifestRawAudioSource {
-    constructor(itag, obj, url, sourceObj, ustreamerConfig, bgData, parentUrl, usedLogin) {
+    constructor(itag, obj, url, sourceObj, ustreamerConfig, bgData, parentUrl, usedLogin, jsUrl) {
 		super(obj);
 		this.itag = itag;
 		this.url = url;
@@ -2010,6 +2011,7 @@ class YTABRAudioSource extends DashManifestRawAudioSource {
 		this.visitorDataType = bgData.visitorDataType;
 		this.parentUrl = parentUrl;
 		this.usedLogin = !!usedLogin;
+		this.jsUrl = jsUrl;
     }
 
 	generate() {
@@ -2092,7 +2094,10 @@ function generateDash(parentSource, sourceObj, ustreamerConfig, abrUrl, itag) {
 		if(!umpResp.streams[0]?.data) {
 			if(umpResp.redirectUrl && i < maxRedirect - 1) {
 				bridge.toast("UMP Redirect..");
-				abrUrl = umpResp.redirectUrl;
+				console.log("UMP Redirect..", { redirectUrl: umpResp.redirectUrl });
+				abrUrl = decryptUrlN(umpResp.redirectUrl, parentSource.jsUrl);
+				console.log("UMP Redirect..n param decrypted", { redirectUrl: abrUrl });
+				
 				log("UMP Redirecting to:\n" + umpResp.redirectUrl);
 				initialResp = http.POST(abrUrl, postData, {
 					"Origin": "https://www.youtube.com",
@@ -4278,7 +4283,7 @@ function extractABR_VideoDescriptor(initialPlayerData, jsUrl, initialData, clien
 					codec: codecs,
 					bitrate: y.bitrate
 				}, abrStreamingUrl, y, initialPlayerData.playerConfig.mediaCommonConfig.mediaUstreamerRequestConfig.videoPlaybackUstreamerConfig,
-					getBGDataFromClientConfig(clientConfig, usedLogin), parentUrl, usedLogin);
+					getBGDataFromClientConfig(clientConfig, usedLogin), parentUrl, usedLogin, jsUrl);
 				result.priority = isAV1;
 				return result;
 			})).filter(x => x != null),
@@ -4308,7 +4313,7 @@ function extractABR_VideoDescriptor(initialPlayerData, jsUrl, initialData, clien
 					audioChannels: y.audioChannels,
 					language: ytLangIdToLanguage(y.audioTrack?.id)
 				}, abrStreamingUrl, y, initialPlayerData.playerConfig.mediaCommonConfig.mediaUstreamerRequestConfig.videoPlaybackUstreamerConfig,
-					getBGDataFromClientConfig(clientConfig, usedLogin), parentUrl, usedLogin);
+					getBGDataFromClientConfig(clientConfig, usedLogin), parentUrl, usedLogin, jsUrl);
 			})).filter(x => x != null)
 	);
 }
-- 
GitLab