about summary refs log tree commit diff stats
path: root/src/assets/javascripts/remove-twitter-sw.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets/javascripts/remove-twitter-sw.js')
-rw-r--r--src/assets/javascripts/remove-twitter-sw.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/assets/javascripts/remove-twitter-sw.js b/src/assets/javascripts/remove-twitter-sw.js
new file mode 100644
index 00000000..c39b4c9e
--- /dev/null
+++ b/src/assets/javascripts/remove-twitter-sw.js
@@ -0,0 +1,89 @@
+"use strict";
+
+let disableNitter;
+let nitterInstance;
+let redirectBypassFlag;
+let exceptions;
+
+window.browser = window.browser || window.chrome;
+
+Promise.all([
+  import(browser.extension.getURL("src/assets/javascripts/helpers/common.js")),
+  import(browser.extension.getURL("src/assets/javascripts/helpers/twitter.js")),
+]).then(
+  (helpers) => {
+    let commonHelper;
+    let twitterHelper;
+    [commonHelper, twitterHelper] = helpers;
+
+    function isNotException(url) {
+      return !exceptions.some((regex) => regex.test(url.href));
+    }
+
+    function shouldRedirect(url) {
+      return (
+        !redirectBypassFlag &&
+        isNotException(url) &&
+        !disableNitter &&
+        url.host !== nitterInstance &&
+        !url.pathname.includes("/home")
+      );
+    }
+
+    function redirectTwitter(url) {
+      if (url.host.split(".")[0] === "pbs") {
+        return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
+      } else if (url.host.split(".")[0] === "video") {
+        return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
+      } else {
+        return `${nitterInstance}${url.pathname}${url.search}`;
+      }
+    }
+
+    browser.storage.sync.get(
+      [
+        "nitterInstance",
+        "disableNitter",
+        "removeTwitterSW",
+        "redirectBypassFlag",
+        "exceptions",
+      ],
+      (result) => {
+        redirectBypassFlag = result.redirectBypassFlag;
+        browser.storage.sync.set({
+          redirectBypassFlag: false,
+        });
+        if (!result.removeTwitterSW) {
+          disableNitter = result.disableNitter;
+          nitterInstance =
+            result.nitterInstance ||
+            commonHelper.default.getRandomInstance(
+              twitterHelper.default.redirects
+            );
+          exceptions = result.exceptions
+            ? result.exceptions.map((e) => {
+                return new RegExp(e);
+              })
+            : [];
+          navigator.serviceWorker.getRegistrations().then((registrations) => {
+            for (let registration of registrations) {
+              if (registration.scope === "https://twitter.com/") {
+                registration.unregister();
+                console.log("Unregistered Twitter SW", registration);
+              }
+            }
+          });
+          const url = new URL(window.location);
+          if (shouldRedirect(url)) {
+            const redirect = redirectTwitter(url);
+            console.info("Redirecting", `"${url.href}"`, "=>", `"${redirect}"`);
+            window.location = redirect;
+          }
+        }
+      }
+    );
+  },
+  (error) => {
+    console.error(error);
+  }
+);