Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112/* eslint-disable no-console *//* eslint-disable no-undef */
const scriptUrls = ["web.", "sentry."];let blockedScripts = new Set();
chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { const url = new URL(details.url); if ( !url.searchParams.has("inj") && (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) ) { console.log("Enabling block ruleset"); await chrome.declarativeNetRequest.updateEnabledRulesets({ enableRulesetIds: ["modifyResponseHeaders", "blockLoading"] }); }});
chrome.webRequest.onBeforeRequest.addListener( async (details) => { if (details.tabId === -1) return;
const url = new URL(details.url); const hasUrl = scriptUrls.some((scriptUrl) => { return ( details.url.includes(scriptUrl) && !url.searchParams.has("inj") && (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) ); });
if (hasUrl) blockedScripts.add(details.url);
if (blockedScripts.size === scriptUrls.length) { const blockedScriptsCopy = Array.from(blockedScripts); blockedScripts.clear();
console.log("Running moonlight script"); try { await chrome.scripting.executeScript({ target: { tabId: details.tabId }, world: "MAIN", files: ["index.js"] }); } catch (e) { console.error(e); }
console.log("Initializing moonlight"); try { await chrome.scripting.executeScript({ target: { tabId: details.tabId }, world: "MAIN", func: async () => { try { await window._moonlightBrowserInit(); } catch (e) { console.error(e); } } }); } catch (e) { console.log(e); }
console.log("Disabling block ruleset"); try { await chrome.declarativeNetRequest.updateEnabledRulesets({ disableRulesetIds: ["blockLoading"], enableRulesetIds: ["modifyResponseHeaders"] }); } catch (e) { console.error(e); }
console.log("Readding scripts"); try { await chrome.scripting.executeScript({ target: { tabId: details.tabId }, world: "MAIN", args: [blockedScriptsCopy], func: async (blockedScripts) => { const scripts = [...document.querySelectorAll("script")].filter( (script) => script.src && blockedScripts.some((url) => url.includes(script.src)) );
blockedScripts.reverse(); for (const url of blockedScripts) { if (url.includes("/sentry.")) continue;
const script = scripts.find((script) => url.includes(script.src)); const newScript = document.createElement("script"); for (const attr of script.attributes) { if (attr.name === "src") attr.value += "?inj"; newScript.setAttribute(attr.name, attr.value); } script.remove(); document.documentElement.appendChild(newScript); } } }); } catch (e) { console.error(e); } } }, { urls: ["*://*.discord.com/assets/*.js", "*://*.discordapp.com/assets/*.js"] });