this repo has no description
1/* eslint-disable no-console */ 2/* eslint-disable no-undef */ 3 4const scriptUrls = ["web.", "sentry."]; 5let blockedScripts = new Set(); 6 7chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { 8 const url = new URL(details.url); 9 if ( 10 !url.searchParams.has("inj") && 11 (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) 12 ) { 13 console.log("Enabling block ruleset"); 14 await chrome.declarativeNetRequest.updateEnabledRulesets({ 15 enableRulesetIds: ["modifyResponseHeaders", "blockLoading"] 16 }); 17 } 18}); 19 20chrome.webRequest.onBeforeRequest.addListener( 21 async (details) => { 22 if (details.tabId === -1) return; 23 24 const url = new URL(details.url); 25 const hasUrl = scriptUrls.some((scriptUrl) => { 26 return ( 27 details.url.includes(scriptUrl) && 28 !url.searchParams.has("inj") && 29 (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) 30 ); 31 }); 32 33 if (hasUrl) blockedScripts.add(details.url); 34 35 if (blockedScripts.size === scriptUrls.length) { 36 const blockedScriptsCopy = Array.from(blockedScripts); 37 blockedScripts.clear(); 38 39 console.log("Running moonlight script"); 40 try { 41 await chrome.scripting.executeScript({ 42 target: { tabId: details.tabId }, 43 world: "MAIN", 44 files: ["index.js"] 45 }); 46 } catch (e) { 47 console.error(e); 48 } 49 50 console.log("Initializing moonlight"); 51 try { 52 await chrome.scripting.executeScript({ 53 target: { tabId: details.tabId }, 54 world: "MAIN", 55 func: async () => { 56 try { 57 await window._moonlightBrowserInit(); 58 } catch (e) { 59 console.error(e); 60 } 61 } 62 }); 63 } catch (e) { 64 console.log(e); 65 } 66 67 console.log("Disabling block ruleset"); 68 try { 69 await chrome.declarativeNetRequest.updateEnabledRulesets({ 70 disableRulesetIds: ["blockLoading"], 71 enableRulesetIds: ["modifyResponseHeaders"] 72 }); 73 } catch (e) { 74 console.error(e); 75 } 76 77 console.log("Readding scripts"); 78 try { 79 await chrome.scripting.executeScript({ 80 target: { tabId: details.tabId }, 81 world: "MAIN", 82 args: [blockedScriptsCopy], 83 func: async (blockedScripts) => { 84 const scripts = [...document.querySelectorAll("script")].filter( 85 (script) => script.src && blockedScripts.some((url) => url.includes(script.src)) 86 ); 87 88 blockedScripts.reverse(); 89 for (const url of blockedScripts) { 90 if (url.includes("/sentry.")) continue; 91 92 const script = scripts.find((script) => url.includes(script.src)); 93 const newScript = document.createElement("script"); 94 for (const attr of script.attributes) { 95 if (attr.name === "src") attr.value += "?inj"; 96 newScript.setAttribute(attr.name, attr.value); 97 } 98 script.remove(); 99 document.documentElement.appendChild(newScript); 100 } 101 } 102 }); 103 } catch (e) { 104 console.error(e); 105 } 106 } 107 }, 108 { 109 urls: ["*://*.discord.com/assets/*.js", "*://*.discordapp.com/assets/*.js"] 110 } 111);