From 6163ad7e6e3d2715df9477b2009235c9ec91b0a0 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Mon, 3 Jul 2023 04:39:18 +0200 Subject: [PATCH] Various changes to allow us to blend in more (#3718) * Let YouTube generate the Innertube session for the watch page * Fix the user agent * Set referer and origin for Innertube and googlevideo requests * Fix sec-fetch-site header for Innertube requests * Remove content-type header for googlevideo requests --- src/main/index.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 9d44efd68..b5f08d62f 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -11,6 +11,8 @@ import baseHandlers from '../datastores/handlers/base' import { extractExpiryTimestamp, ImageCache } from './ImageCache' import { existsSync } from 'fs' +import packageDetails from '../../package.json' + if (process.argv.includes('--version')) { app.exit() } else { @@ -263,6 +265,12 @@ function runApp() { }) } + const fixedUserAgent = session.defaultSession.getUserAgent() + .split(' ') + .filter(part => !part.includes('Electron') && !part.includes(packageDetails.productName)) + .join(' ') + session.defaultSession.setUserAgent(fixedUserAgent) + // Set CONSENT cookie on reasonable domains const consentCookieDomains = [ 'https://www.youtube.com', @@ -279,10 +287,19 @@ function runApp() { // make InnerTube requests work with the fetch function // InnerTube rejects requests if the referer isn't YouTube or empty - const innertubeRequestFilter = { urls: ['https://www.youtube.com/youtubei/*'] } + const innertubeAndMediaRequestFilter = { urls: ['https://www.youtube.com/youtubei/*', 'https://*.googlevideo.com/videoplayback?*'] } + + session.defaultSession.webRequest.onBeforeSendHeaders(innertubeAndMediaRequestFilter, ({ requestHeaders, url }, callback) => { + requestHeaders.Referer = 'https://www.youtube.com/' + requestHeaders.Origin = 'https://www.youtube.com' + + if (url.startsWith('https://www.youtube.com/youtubei/')) { + requestHeaders['Sec-Fetch-Site'] = 'same-origin' + } else { + // YouTube doesn't send the Content-Type header for the media requests, so we shouldn't either + delete requestHeaders['Content-Type'] + } - session.defaultSession.webRequest.onBeforeSendHeaders(innertubeRequestFilter, ({ requestHeaders }, callback) => { - requestHeaders.referer = 'https://www.youtube.com' // eslint-disable-next-line n/no-callback-literal callback({ requestHeaders }) })