diff --git a/package-lock.json b/package-lock.json index 82f3d994..c30d3000 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ttv-lol-pro", - "version": "2.2.0", + "version": "2.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ttv-lol-pro", - "version": "2.2.0", + "version": "2.2.1", "license": "GPL-3.0", "dependencies": { "bowser": "^2.11.0", diff --git a/package.json b/package.json index db0806bb..44fda86e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ttv-lol-pro", - "version": "2.2.0", + "version": "2.2.1", "description": "TTV LOL PRO removes most livestream ads from Twitch.", "@parcel/bundler-default": { "minBundles": 10000000, diff --git a/src/manifest.chromium.json b/src/manifest.chromium.json index 7b0d9d7d..4be563b6 100644 --- a/src/manifest.chromium.json +++ b/src/manifest.chromium.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "TTV LOL PRO", "description": "TTV LOL PRO removes most livestream ads from Twitch.", - "version": "2.2.0", + "version": "2.2.1", "background": { "service_worker": "background/background.ts", "type": "module" diff --git a/src/manifest.firefox.json b/src/manifest.firefox.json index 5ecd3e30..f9833f65 100644 --- a/src/manifest.firefox.json +++ b/src/manifest.firefox.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "TTV LOL PRO", "description": "TTV LOL PRO removes most livestream ads from Twitch.", - "version": "2.2.0", + "version": "2.2.1", "background": { "scripts": ["background/background.ts"], "persistent": false diff --git a/src/options/page.html b/src/options/page.html index 02e6183a..a435ed4d 100644 --- a/src/options/page.html +++ b/src/options/page.html @@ -92,6 +92,7 @@

Passport

+ Recommended
Watch streams as if you were logged out. This option removes diff --git a/src/page/getFetch.ts b/src/page/getFetch.ts index f4e67a02..e41814de 100644 --- a/src/page/getFetch.ts +++ b/src/page/getFetch.ts @@ -28,7 +28,7 @@ export function getFetch(options: FetchOptions): typeof fetch { if (options.shouldWaitForStore) { setTimeout(() => { options.shouldWaitForStore = false; - }, 3000); + }, 5000); } return async function fetch( @@ -87,15 +87,35 @@ export function getFetch(options: FetchOptions): typeof fetch { console.debug( "[TTV LOL PRO] 🥅 Caught GraphQL PlaybackAccessToken_Template request. Flagging…" ); + while (options.shouldWaitForStore) await sleep(100); - if (options.state?.anonymousMode) { - console.log("[TTV LOL PRO] ❓ Acting as anonymous user"); - setHeaderToMap(headersMap, "Authorization", "undefined"); - removeHeaderFromMap(headersMap, "Client-Session-Id"); - removeHeaderFromMap(headersMap, "Client-Version"); - setHeaderToMap(headersMap, "Device-ID", generateRandomString(32)); - removeHeaderFromMap(headersMap, "Sec-GPC"); - removeHeaderFromMap(headersMap, "X-Device-Id"); + let graphQlBody = null; + try { + graphQlBody = JSON.parse(requestBody); + } catch {} + const channelName = graphQlBody?.variables?.login as string | undefined; + const whitelistedChannelsLower = options.state?.whitelistedChannels.map( + channel => channel.toLowerCase() + ); + const isWhitelisted = + channelName != null && + whitelistedChannelsLower != null && + whitelistedChannelsLower.includes(channelName.toLowerCase()); + + if (options.state?.anonymousMode === true) { + if (!isWhitelisted) { + console.log("[TTV LOL PRO] 🕵️ Anonymous mode is enabled."); + setHeaderToMap(headersMap, "Authorization", "undefined"); + removeHeaderFromMap(headersMap, "Client-Session-Id"); + removeHeaderFromMap(headersMap, "Client-Version"); + setHeaderToMap(headersMap, "Device-ID", generateRandomString(32)); + removeHeaderFromMap(headersMap, "Sec-GPC"); + removeHeaderFromMap(headersMap, "X-Device-Id"); + } else { + console.log( + "[TTV LOL PRO] 🕵️✋ Anonymous mode is enabled but channel is whitelisted." + ); + } } flagRequest(headersMap); } else if (