From 4f7ec07c3f689219b07e8291877c23b6fbf45fb1 Mon Sep 17 00:00:00 2001 From: LuanRT Date: Sun, 30 Apr 2023 00:50:08 -0300 Subject: [PATCH] fix(web): slow downloads due to visitor data (#391) * fix(web): slow downloads due to visitor data It seems that YouTube will throttle clients if a shared visitor id is used. * dev: include `params` for `/player` reqs --- src/core/Session.ts | 8 ++++---- src/core/endpoints/PlayerEndpoint.ts | 9 ++------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/core/Session.ts b/src/core/Session.ts index e94359c61..4718279eb 100644 --- a/src/core/Session.ts +++ b/src/core/Session.ts @@ -7,8 +7,8 @@ import Proto from '../proto/index.js'; import type { ICache } from '../types/Cache.js'; import type { FetchFunction } from '../types/PlatformShim.js'; import HTTPClient from '../utils/HTTPClient.js'; -import type { DeviceCategory} from '../utils/Utils.js'; -import { getRandomUserAgent, InnertubeError, Platform, SessionError } from '../utils/Utils.js'; +import type { DeviceCategory } from '../utils/Utils.js'; +import { generateRandomString, getRandomUserAgent, InnertubeError, Platform, SessionError } from '../utils/Utils.js'; import type { Credentials, OAuthAuthErrorEventHandler, OAuthAuthEventHandler, OAuthAuthPendingEventHandler } from './OAuth.js'; import OAuth from './OAuth.js'; @@ -236,7 +236,7 @@ export default class Session extends EventEmitterLike { }, fetch: FetchFunction = Platform.shim.fetch): Promise { const url = new URL('/sw.js_data', Constants.URLS.YT_BASE); - let visitor_id = Constants.CLIENTS.WEB.STATIC_VISITOR_ID; + let visitor_id = generateRandomString(11); if (options.visitor_data) { const decoded_visitor_data = Proto.decodeVisitorData(options.visitor_data); @@ -308,7 +308,7 @@ export default class Session extends EventEmitterLike { enable_safety_mode: boolean; visitor_data: string; }): SessionData { - let visitor_id = Constants.CLIENTS.WEB.STATIC_VISITOR_ID; + let visitor_id = generateRandomString(11); if (options.visitor_data) { const decoded_visitor_data = Proto.decodeVisitorData(options.visitor_data); diff --git a/src/core/endpoints/PlayerEndpoint.ts b/src/core/endpoints/PlayerEndpoint.ts index 7bab7a49a..41560c848 100644 --- a/src/core/endpoints/PlayerEndpoint.ts +++ b/src/core/endpoints/PlayerEndpoint.ts @@ -8,11 +8,6 @@ export const PATH = '/player'; * @returns The payload. */ export function build(opts: PlayerEndpointOptions): IPlayerRequest { - const is_android = - opts.client === 'ANDROID' || - opts.client === 'YTMUSIC_ANDROID' || - opts.client === 'YTSTUDIO_ANDROID'; - return { playbackContext: { contentPlaybackContext: { @@ -39,8 +34,8 @@ export function build(opts: PlayerEndpointOptions): IPlayerRequest { ...{ client: opts.client, playlistId: opts.playlist_id, - // Workaround streaming URLs returning 403 when using Android clients. - params: is_android ? '8AEB' : opts.params + // Workaround streaming URLs returning 403 when using Android clients and throttling in web clients. + params: '8AEB' } }; } \ No newline at end of file