about summary refs log tree commit diff stats
path: root/assets/javascript/remove-twitter-sw.js
blob: f74ff89f0be8b8e7102c435ac14b353a9827ef8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"use strict";

const nitterInstances = [
  "https://nitter.net",
  "https://nitter.snopyta.org",
  "https://nitter.42l.fr",
  "https://nitter.nixnet.services",
  "https://nitter.13ad.de",
  "https://nitter.pussthecat.org",
  "https://nitter.mastodont.cat",
  "https://nitter",
  "https://nitter.tedomum.net",
  "https://nitter.cattube.org",
  "https://nitter.fdn.fr",
  "https://nitter.1d4.us",
  "https://nitter.kavin.rocks",
  "https://nitter.unixfox.eu",
];

let disableNitter;
let nitterInstance;
let redirectBypassFlag;
let exceptions;

window.browser = window.browser || window.chrome;

function getRandomInstance() {
  return nitterInstances[~~(nitterInstances.length * Math.random())];
}

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 || getRandomInstance();
      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;
      }
    }
  }
);