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
This commit is contained in:
absidue 2023-07-03 04:39:18 +02:00 committed by GitHub
parent 242c93e163
commit 6163ad7e6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 3 deletions

View File

@ -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 })
})