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