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);