about summary refs log tree commit diff stats
path: root/src/assets/javascripts/helpers
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-05-03 16:45:14 +0300
committerManeraKai <manerakai@protonmail.com>2022-05-03 16:45:29 +0300
commita78d6cdd04d491fcc773a4530d7887eee2ba4a59 (patch)
tree4784be6bdd47a0da9af535961a90e26e02393ae3 /src/assets/javascripts/helpers
parentUpdate README.md (diff)
downloadlibredirect-a78d6cdd04d491fcc773a4530d7887eee2ba4a59.zip
Restructuring and simplifying code #229
Diffstat (limited to 'src/assets/javascripts/helpers')
-rw-r--r--src/assets/javascripts/helpers/common.js115
-rw-r--r--src/assets/javascripts/helpers/imgur.js208
-rw-r--r--src/assets/javascripts/helpers/instagram.js170
-rw-r--r--src/assets/javascripts/helpers/reddit.js1
-rw-r--r--src/assets/javascripts/helpers/youtube/invidious.js133
-rw-r--r--src/assets/javascripts/helpers/youtube/options.js223
-rw-r--r--src/assets/javascripts/helpers/youtube/piped-preferences.js52
-rw-r--r--src/assets/javascripts/helpers/youtube/piped.js37
-rw-r--r--src/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js35
-rw-r--r--src/assets/javascripts/helpers/youtube/pipedMaterial.js31
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js520
11 files changed, 555 insertions, 970 deletions
diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js
index 93707dcc..b2a91b20 100644
--- a/src/assets/javascripts/helpers/common.js
+++ b/src/assets/javascripts/helpers/common.js
@@ -50,7 +50,19 @@ async function updateInstances() {
 
     const instances = JSON.parse(request.responseText);
 
-    youtubeHelper.setInvidiousRedirects(instances.invidious);
+    brwoser.storage.local.get(
+      [
+        'youtubeRedirects'
+      ],
+      r =>
+        brwoser.storage.local.set({
+          youtubeRedirects: {
+            'invidious': instances.invidious,
+            'piped': r.youtubeRedirects.piped,
+            'pipedMaterial': r.youtubeRedirects.pipedMaterial
+          },
+        })
+    )
 
     twitterHelper.setRedirects(instances.nitter);
 
@@ -80,10 +92,6 @@ async function updateInstances() {
   return false;
 }
 
-function isFirefox() {
-  return typeof InstallTrigger !== "undefined";
-}
-
 function protocolHost(url) {
   if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}`;
   return `${url.protocol}//${url.host}`;
@@ -94,18 +102,17 @@ async function processDefaultCustomInstances(
   protocol,
   nameHelper,
   document,
-  getNameRedirectsChecks,
-  setNameRedirectsChecks,
-  getNameCustomRedirects,
-  setNameCustomRedirects,
-  instancesLatency,
 ) {
-  instancesLatency = instancesLatency ?? [];
+  function camelCase(str) {
+    return str.charAt(0).toUpperCase() + str.slice(1);
+  }
+  let latencyKey = `${name}Latency`;
+  let instancesLatency;
+  await browser.storage.local.get(latencyKey, r => instancesLatency = r[latencyKey] ?? []);
   let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0];
 
   let nameCustomInstances = [];
   let nameCheckListElement = nameProtocolElement.getElementsByClassName('checklist')[0];
-  let nameDefaultRedirects;
 
   await initCloudflareList();
 
@@ -122,59 +129,103 @@ async function processDefaultCustomInstances(
     nameProtocolElement.getElementsByClassName('toogle-all')[0].checked = isTrue;
   }
 
-  nameDefaultRedirects = getNameRedirectsChecks();
+  let nameDefaultRedirects;
+
+  let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`;
+  let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`;
+
+  async function setRedirectsChecks(val) {
+    await browser.storage.local.set({ [redirectsChecks]: val });
+  }
+
+  async function setCustom(val) {
+    await browser.storage.local.set({ [customRedirects]: val });
+  }
+
+  async function getFromStorage() {
+    return new Promise(async resolve => {
+      nameHelper.init().then(() =>
+        browser.storage.local.get(
+          [
+            redirectsChecks,
+            customRedirects,
+          ],
+          r => {
+            nameDefaultRedirects = r[redirectsChecks];
+            nameCustomInstances = r[customRedirects];
+            resolve();
+          }
+        )
+      )
+    })
+  }
+  await getFromStorage();
+
   nameCheckListElement.innerHTML =
     [
-      `<div><x data-localise="__MSG_toggleAll__">Toggle All</x><input type="checkbox" class="toogle-all" /></div>`,
-      ...nameHelper.getRedirects()[name][protocol].map(x => `<div><x>${x}${cloudflareList.includes(x) ? ' <span style="color:red;">cloudflare</span>' : ''} ${x in instancesLatency ? '<span style="color:' + (instancesLatency[x] <= 1000 ? "green" : instancesLatency[x] <= 2000 ? "orange" : "red") + ';">' + (instancesLatency[x] == 5000 ? '5000ms+' : instancesLatency[x] + 'ms') + '</span>' : ''}</x > <input type="checkbox" class="${x}" /></div > `),
+      `<div>
+        <x data-localise="__MSG_toggleAll__">Toggle All</x>
+        <input type="checkbox" class="toogle-all"/>
+      </div>`,
+      ...nameHelper.getRedirects()[name][protocol].map(
+        x => {
+          let cloudflare = cloudflareList.includes(x) ? ' <span style="color:red;">cloudflare</span>' : '';
+
+          let latencyColor = (instancesLatency[x] <= 1000 ? "green" : instancesLatency[x] <= 2000 ? "orange" : "red");
+          let latencyLimit = (instancesLatency[x] == 5000 ? '5000ms+' : instancesLatency[x] + 'ms')
+          let latency = x in instancesLatency ? '<span style="color:' + latencyColor + ';">' + latencyLimit + '</span>' : '';
+
+          return `<div><x>${x}${cloudflare} ${latency}</x><input type="checkbox" class="${x}"/></div>`;
+        }
+      ),
     ].join('\n<hr>\n');
 
   localise.localisePage();
 
   calcNameCheckBoxes();
-  nameProtocolElement.getElementsByClassName('toogle-all')[0].addEventListener("change", event => {
+  nameProtocolElement.getElementsByClassName('toogle-all')[0].addEventListener("change", async event => {
     if (event.target.checked)
       nameDefaultRedirects = [...nameHelper.getRedirects()[name][protocol]];
     else
       nameDefaultRedirects = [];
-    setNameRedirectsChecks(nameDefaultRedirects);
+
+    await setRedirectsChecks(nameDefaultRedirects);
     calcNameCheckBoxes();
   });
 
   for (let element of nameCheckListElement.getElementsByTagName('input')) {
     if (element.className != 'toogle-all')
-      nameProtocolElement.getElementsByClassName(element.className)[0].addEventListener("change", event => {
+      nameProtocolElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => {
         if (event.target.checked)
           nameDefaultRedirects.push(element.className)
         else {
           let index = nameDefaultRedirects.indexOf(element.className);
           if (index > -1) nameDefaultRedirects.splice(index, 1);
         }
-        setNameRedirectsChecks(nameDefaultRedirects);
+        await setRedirectsChecks(nameDefaultRedirects);
         calcNameCheckBoxes();
       });
   }
 
-  nameCustomInstances = getNameCustomRedirects();
   function calcNameCustomInstances() {
     nameProtocolElement.getElementsByClassName('custom-checklist')[0].innerHTML =
       nameCustomInstances.map(
-        x => `<div> ${x} <button class="add clear-${x}">
-  <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
-    fill="currentColor">
-    <path d="M0 0h24v24H0V0z" fill="none" />
-    <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
-  </svg>
-</button>
-                      </div >
-  <hr>`
+        x => `<div>
+                ${x}
+                <button class="add clear-${x}">
+                  <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                    <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
+                  </svg>
+                </button>
+              </div>
+              <hr>`
       ).join('\n');
 
     for (const item of nameCustomInstances) {
       nameProtocolElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", () => {
         let index = nameCustomInstances.indexOf(item);
         if (index > -1) nameCustomInstances.splice(index, 1);
-        setNameCustomRedirects(nameCustomInstances);
+        setCustom(nameCustomInstances);
         calcNameCustomInstances();
       });
     }
@@ -188,13 +239,14 @@ async function processDefaultCustomInstances(
     if (nameCustomInstanceInput.validity.valid && !nameHelper.getRedirects()[name][protocol].includes(protocolHostVar)) {
       if (!nameCustomInstances.includes(protocolHostVar)) {
         nameCustomInstances.push(protocolHostVar)
-        setNameCustomRedirects(nameCustomInstances);
+        setCustom(nameCustomInstances);
         nameCustomInstanceInput.value = '';
       }
       calcNameCustomInstances();
     }
   })
 }
+
 function isRtl() {
   return ["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage())
 }
@@ -243,7 +295,6 @@ export default {
   getRandomInstance,
   updateInstances,
   protocolHost,
-  isFirefox,
   processDefaultCustomInstances,
   isRtl,
   testLatency,
diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js
index a376e404..7a2daa43 100644
--- a/src/assets/javascripts/helpers/imgur.js
+++ b/src/assets/javascripts/helpers/imgur.js
@@ -12,16 +12,6 @@ let redirects = {
     }
 }
 const getRedirects = () => redirects;
-const getCustomRedirects = function () {
-    return {
-        "rimgo": {
-            "normal": [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects],
-            "tor": [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects],
-            "i2p": [...rimgoI2pRedirectsChecks, ...rimgoI2pCustomRedirects]
-        },
-    };
-};
-
 function setRedirects(val) {
     redirects.rimgo = val;
     browser.storage.local.set({ imgurRedirects: redirects })
@@ -31,103 +21,50 @@ function setRedirects(val) {
             var index = rimgoNormalRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoNormalRedirectsChecks.splice(index, 1);
         }
-    setRimgoNormalRedirectsChecks(rimgoNormalRedirectsChecks);
+    browser.storage.local.set({rimgoNormalRedirectsChecks});
 
     for (const item of rimgoTorRedirectsChecks)
         if (!redirects.rimgo.tor.includes(item)) {
             var index = rimgoTorRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoTorRedirectsChecks.splice(index, 1);
         }
-    setRimgoTorRedirectsChecks(rimgoTorRedirectsChecks);
+    browser.storage.local.set({rimgoTorRedirectsChecks});
 
     for (const item of rimgoI2pRedirectsChecks)
         if (!redirects.rimgo.i2p.includes(item)) {
             var index = rimgoI2pRedirectsChecks.indexOf(item);
             if (index !== -1) rimgoI2pRedirectsChecks.splice(index, 1);
         }
-    setRimgoI2pRedirectsChecks(rimgoI2pRedirectsChecks);
-}
+    browser.storage.local.set({rimgoI2pRedirectsChecks});
 
-let disable;
-const getDisable = () => disable;
-function setDisable(val) {
-    disable = val;
-    browser.storage.local.set({ disableImgur: disable })
 }
 
+let disable;
 let protocol;
-const getProtocol = () => protocol;
-function setProtocol(val) {
-    protocol = val;
-    browser.storage.local.set({ imgurProtocol: val })
-    console.log("imgurProtocol: ", val)
-}
 
 let rimgoNormalRedirectsChecks;
-const getRimgoNormalRedirectsChecks = () => rimgoNormalRedirectsChecks;
-function setRimgoNormalRedirectsChecks(val) {
-    rimgoNormalRedirectsChecks = val;
-    browser.storage.local.set({ rimgoNormalRedirectsChecks })
-    console.log("rimgoNormalRedirectsChecks: ", val)
-}
-
 let rimgoTorRedirectsChecks;
-const getRimgoTorRedirectsChecks = () => rimgoTorRedirectsChecks;
-function setRimgoTorRedirectsChecks(val) {
-    rimgoTorRedirectsChecks = val;
-    browser.storage.local.set({ rimgoTorRedirectsChecks })
-    console.log("rimgoTorRedirectsChecks: ", val)
-}
-
 let rimgoI2pRedirectsChecks;
-const getRimgoI2pRedirectsChecks = () => rimgoI2pRedirectsChecks;
-function setRimgoI2pRedirectsChecks(val) {
-    rimgoI2pRedirectsChecks = val;
-    browser.storage.local.set({ rimgoI2pRedirectsChecks })
-    console.log("rimgoI2pRedirectsChecks: ", val)
-}
-
 let rimgoNormalCustomRedirects = [];
-const getRimgoNormalCustomRedirects = () => rimgoNormalCustomRedirects;
-function setRimgoNormalCustomRedirects(val) {
-    rimgoNormalCustomRedirects = val;
-    browser.storage.local.set({ rimgoNormalCustomRedirects })
-    console.log("rimgoNormalCustomRedirects: ", val)
-}
-
 let rimgoTorCustomRedirects = [];
-const getRimgoTorCustomRedirects = () => rimgoTorCustomRedirects;
-function setRimgoTorCustomRedirects(val) {
-    rimgoTorCustomRedirects = val;
-    browser.storage.local.set({ rimgoTorCustomRedirects })
-    console.log("rimgoTorCustomRedirects: ", val)
-}
-
 let rimgoI2pCustomRedirects = [];
-const getRimgoI2pCustomRedirects = () => rimgoI2pCustomRedirects;
-function setRimgoI2pCustomRedirects(val) {
-    rimgoI2pCustomRedirects = val;
-    browser.storage.local.set({ rimgoI2pCustomRedirects })
-    console.log("rimgoI2pCustomRedirects: ", val)
-}
 
-function isImgur(url, initiator) {
-    if (disable) return false;
-    if (url.pathname == "/") return false;
-    if (
-        initiator &&
-        ([...redirects.rimgo.normal, ...rimgoNormalCustomRedirects].includes(initiator.origin) || targets.test(initiator.host))
-    ) return false;
-    return targets.test(url.href);
-}
-
-function redirect(url, type) {
+function redirect(url, type, initiator) {
     // https://imgur.com/gallery/s4WXQmn
     // https://imgur.com/a/H8M4rcp
     // https://imgur.com/gallery/gYiQLWy
     // https://imgur.com/gallery/cTRwaJU
     // https://i.imgur.com/CFSQArP.jpeg
 
+    if (disable) return;
+    if (url.pathname == "/") false;
+    if (
+        initiator &&
+        ([...redirects.rimgo.normal, ...rimgoNormalCustomRedirects].includes(initiator.origin) || targets.test(initiator.host))
+    ) return;
+    if (!targets.test(url.href)) return;
+
+
     if (![
         "main_frame",
         "sub_frame",
@@ -191,79 +128,72 @@ function switchInstance(url) {
     return `${randomInstance}${url.pathname}${url.search}`;
 }
 
+async function initDefaults() {
+    return new Promise(async resolve => {
+        fetch('/instances/data.json').then(response => response.text()).then(async data => {
+            let dataJson = JSON.parse(data);
+            redirects.rimgo = dataJson.rimgo
+            await browser.storage.local.set({
+                disableImgur: false,
+                imgurProtocol: 'normal',
+                imgurRedirects: {
+                    'rimgo': redirects.rimgo,
+                },
+
+                rimgoNormalRedirectsChecks: [...redirects.rimgo.normal],
+                rimgoNormalCustomRedirects: [],
+
+                rimgoTorRedirectsChecks: [...redirects.rimgo.tor],
+                rimgoTorCustomRedirects: [],
+
+                rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p],
+                rimgoI2pCustomRedirects: [],
+            });
+            resolve();
+        });
+    })
+}
+
 async function init() {
     return new Promise(resolve => {
-        fetch('/instances/data.json')
-            .then(response => response.text())
-            .then(text => {
-                let data = JSON.parse(text);
-                browser.storage.local.get(
-                    [
-                        "disableImgur",
-                        "imgurRedirects",
-
-                        "rimgoNormalRedirectsChecks",
-                        "rimgoNormalCustomRedirects",
-                        "rimgoTorRedirectsChecks",
-                        "rimgoTorCustomRedirects",
-                        "rimgoI2pRedirectsChecks",
-                        "rimgoI2pCustomRedirects",
-
-                        "imgurProtocol",
-                    ],
-                    r => {
-                        disable = r.disableImgur ?? false;
-
-                        protocol = r.imgurProtocol ?? "normal";
-
-                        redirects.rimgo = data.rimgo;
-                        if (r.imgurRedirects) redirects = r.imgurRedirects;
-
-                        rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks ?? [...redirects.rimgo.normal];
-                        rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects ?? [];
-
-                        rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks ?? [...redirects.rimgo.tor];
-                        rimgoTorCustomRedirects = r.rimgoTorCustomRedirects ?? [];
-
-                        rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks ?? [...redirects.rimgo.i2p];
-                        rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects ?? [];
-
-                        resolve();
-                    }
-                )
-            });
+        browser.storage.local.get(
+            [
+                "disableImgur",
+                "imgurRedirects",
+                "imgurProtocol",
+
+                "rimgoNormalRedirectsChecks",
+                "rimgoNormalCustomRedirects",
+                "rimgoTorRedirectsChecks",
+                "rimgoTorCustomRedirects",
+                "rimgoI2pRedirectsChecks",
+                "rimgoI2pCustomRedirects",
+            ],
+            r => {
+                disable = r.disableImgur;
+                protocol = r.imgurProtocol;
+                redirects = r.imgurRedirects;
+
+                rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks;
+                rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects;
+                rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks;
+                rimgoTorCustomRedirects = r.rimgoTorCustomRedirects;
+                rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks;
+                rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects;
+
+                resolve();
+            }
+        )
     });
 }
 
 export default {
     getRedirects,
-    getCustomRedirects,
     setRedirects,
 
-    getDisable,
-    setDisable,
-
-
-    getProtocol,
-    setProtocol,
-
-    getRimgoNormalRedirectsChecks,
-    setRimgoNormalRedirectsChecks,
-    getRimgoTorRedirectsChecks,
-    setRimgoTorRedirectsChecks,
-    getRimgoI2pRedirectsChecks,
-    setRimgoI2pRedirectsChecks,
-
-    getRimgoNormalCustomRedirects,
-    setRimgoNormalCustomRedirects,
-    getRimgoTorCustomRedirects,
-    setRimgoTorCustomRedirects,
-    getRimgoI2pCustomRedirects,
-    setRimgoI2pCustomRedirects,
-
     redirect,
     reverse,
-    isImgur,
     init,
+    initDefaults,
     switchInstance,
 };
diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js
index f007fac3..26414070 100644
--- a/src/assets/javascripts/helpers/instagram.js
+++ b/src/assets/javascripts/helpers/instagram.js
@@ -12,13 +12,6 @@ let redirects = {
   }
 };
 const getRedirects = () => redirects;
-const getCustomRedirects = function () {
-  return {
-    "bibliogram": {
-      "normal": [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]
-    },
-  };
-};
 function setRedirects(val) {
   redirects.bibliogram = val;
   browser.storage.local.set({ instagramRedirects: redirects })
@@ -28,40 +21,13 @@ function setRedirects(val) {
       var index = bibliogramNormalRedirectsChecks.indexOf(item);
       if (index !== -1) bibliogramNormalRedirectsChecks.splice(index, 1);
     }
-  setBibliogramNormalRedirectsChecks(bibliogramNormalRedirectsChecks);
+  browser.storage.local.set({ bibliogramNormalRedirectsChecks });
 }
 
 let bibliogramNormalRedirectsChecks;
-const getBibliogramNormalRedirectsChecks = () => bibliogramNormalRedirectsChecks;
-function setBibliogramNormalRedirectsChecks(val) {
-  bibliogramNormalRedirectsChecks = val;
-  browser.storage.local.set({ bibliogramNormalRedirectsChecks })
-  console.log("bibliogramNormalRedirectsChecks: ", val)
-}
-
 let bibliogramTorRedirectsChecks;
-const getBibliogramTorRedirectsChecks = () => bibliogramTorRedirectsChecks;
-function setBibliogramTorRedirectsChecks(val) {
-  bibliogramTorRedirectsChecks = val;
-  browser.storage.local.set({ bibliogramTorRedirectsChecks })
-  console.log("bibliogramTorRedirectsChecks: ", val)
-}
-
 let bibliogramNormalCustomRedirects = [];
-const getBibliogramNormalCustomRedirects = () => bibliogramNormalCustomRedirects;
-function setBibliogramNormalCustomRedirects(val) {
-  bibliogramNormalCustomRedirects = val;
-  browser.storage.local.set({ bibliogramNormalCustomRedirects })
-  console.log("bibliogramNormalCustomRedirects: ", val)
-}
-
 let bibliogramTorCustomRedirects = [];
-const getBibliogramTorCustomRedirects = () => bibliogramTorCustomRedirects;
-function setBibliogramTorCustomRedirects(val) {
-  bibliogramTorCustomRedirects = val;
-  browser.storage.local.set({ bibliogramTorCustomRedirects })
-  console.log("bibliogramTorCustomRedirects: ", val)
-}
 
 const reservedPaths = [
   "u",
@@ -81,20 +47,8 @@ const bypassPaths = [
   /\/(accounts\/|embeds?.js)/
 ];
 
-let disable;
-const getDisable = () => disable;
-function setDisable(val) {
-  disable = val;
-  browser.storage.local.set({ disableInstagram: disable })
-}
-
-let protocol;
-const getProtocol = () => protocol;
-function setProtocol(val) {
-  protocol = val;
-  browser.storage.local.set({ nitterProtocol: val })
-  console.log("nitterProtocol: ", val)
-}
+let disable; //disableInstagram
+let protocol; //instagramProtocol
 
 function redirect(url, type, initiator) {
   if (disable) return;
@@ -189,10 +143,7 @@ let applyThemeToSites;
 function initBibliogramCookies(url) {
   let protocolHost = commonHelper.protocolHost(url);
   browser.cookies.get(
-    {
-      url: protocolHost,
-      name: "settings"
-    },
+    { url: protocolHost, name: "settings" },
     cookie => {
       if (!cookie || !instancesCookies.includes(protocolHost)) {
         console.log(`initing cookie for ${protocolHost}`);
@@ -211,89 +162,94 @@ function initBibliogramCookies(url) {
             browser.storage.local.set({ instancesCookies })
           }
         }
-      } else {
-        console.log("cookie url", protocolHost);
-        console.log("instancesCookies", instancesCookies);
-      };
+      }
     })
 
 }
 
-async function init() {
-  return new Promise((resolve) => {
-    fetch('/instances/data.json').then(response => response.text()).then(data => {
-      let dataJson = JSON.parse(data);
-      browser.storage.local.get(
-        [
-          "disableInstagram",
-          "instagramRedirects",
 
-          "theme",
-          "applyThemeToSites",
+async function initDefaults() {
+  return new Promise(async resolve => {
+    fetch('/instances/data.json').then(response => response.text()).then(async data => {
+      let dataJson = JSON.parse(data);
+      redirects.bibliogram = dataJson.bibliogram;
+      await browser.storage.local.set({
+        disableInstagram: false,
+        instagramRedirects: {
+          'bibliogram': redirects.bibliogram
+        },
+
+        theme: 'DEFAULT',
+        applyThemeToSites: false,
+
+        instancesCookies: [],
+
+        bibliogramNormalRedirectsChecks: [...redirects.bibliogram.normal],
+        bibliogramTorRedirectsChecks: [],
+
+        bibliogramNormalCustomRedirects: [...redirects.bibliogram.tor],
+        bibliogramTorCustomRedirects: [],
+        instagramProtocol: "normal",
+      })
+      resolve();
+    }
+    )
+  })
+}
 
-          "instancesCookies",
+async function init() {
+  return new Promise(resolve => {
+    browser.storage.local.get(
+      [
+        "disableInstagram",
+        "instagramRedirects",
 
-          "bibliogramNormalRedirectsChecks",
-          "bibliogramTorRedirectsChecks",
+        "theme",
+        "applyThemeToSites",
 
-          "bibliogramNormalCustomRedirects",
-          "bibliogramTorCustomRedirects",
-          "instagramProtocol"
-        ],
-        r => {
-          disable = r.disableInstagram ?? false;
+        "instancesCookies",
 
-          redirects.bibliogram = dataJson.bibliogram;
+        "bibliogramNormalRedirectsChecks",
+        "bibliogramTorRedirectsChecks",
 
-          if (r.instagramRedirects) redirects = r.instagramRedirects
+        "bibliogramNormalCustomRedirects",
+        "bibliogramTorCustomRedirects",
+        "instagramProtocol"
+      ],
+      r => {
+        disable = r.disableInstagram;
+        if (r.instagramRedirects) redirects = r.instagramRedirects
 
-          theme = r.theme ?? 'DEFAULT';
-          applyThemeToSites = r.applyThemeToSites ?? false;
+        theme = r.theme;
+        applyThemeToSites = r.applyThemeToSites;
 
-          instancesCookies = r.instancesCookies ?? [];
+        instancesCookies = r.instancesCookies;
 
-          bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks ?? [...redirects.bibliogram.normal];
-          bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects ?? [];
+        bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks;
+        bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects;
 
-          bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks ?? [...redirects.bibliogram.tor];
-          bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects ?? [];
+        bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks;
+        bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects;
 
-          protocol = r.instagramProtocol ?? "normal";
+        protocol = r.instagramProtocol;
 
-          resolve();
-        }
-      )
-    })
+        resolve();
+      }
+    )
   })
 }
 
 export default {
   getRedirects,
-  getCustomRedirects,
   setRedirects,
 
-  getDisable,
-  setDisable,
-
   reverse,
 
-  getProtocol,
-  setProtocol,
-
   isBibliogram,
   initBibliogramCookies,
 
-  getBibliogramNormalRedirectsChecks,
-  setBibliogramNormalRedirectsChecks,
-  getBibliogramTorRedirectsChecks,
-  setBibliogramTorRedirectsChecks,
-
-  getBibliogramNormalCustomRedirects,
-  setBibliogramNormalCustomRedirects,
-  getBibliogramTorCustomRedirects,
-  setBibliogramTorCustomRedirects,
-
   redirect,
   init,
+  initDefaults,
   switchInstance,
 };
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index cae152e9..ebb13ffa 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -393,6 +393,7 @@ function switchInstance(url) {
 }
 
 async function initDefaults() {
+  console.log('init redditDefault')
   return new Promise(async resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
diff --git a/src/assets/javascripts/helpers/youtube/invidious.js b/src/assets/javascripts/helpers/youtube/invidious.js
new file mode 100644
index 00000000..a8e215a2
--- /dev/null
+++ b/src/assets/javascripts/helpers/youtube/invidious.js
@@ -0,0 +1,133 @@
+"use strict";
+
+window.browser = window.browser || window.chrome;
+
+async function initDefaults() {
+    await browser.storage.local.set({
+        youtubeListen: false,
+        youtubeVolume: 100,
+        youtubeAutoplay: false,
+        invidiousAlwaysProxy: false,
+        invidiousQuality: 'hd720',
+        invidiousPlayerStyle: 'invidious',
+        invidiousVideoLoop: false,
+        invidiousContinueAutoplay: true,
+        invidiousContinue: false,
+        invidiousSpeed: '1.0',
+        invidiousQualityDash: 'auto',
+        invidiousComments: ['youtube', ''],
+        invidiousCaptions: ['', '', ''],
+        invidiousRelatedVideos: true,
+        invidiousAnnotations: false,
+        invidiousExtendDesc: false,
+        invidiousVrMode: true,
+        invidiousSavePlayerPos: false,
+        invidiousRegion: 'US',
+        invidiousDarkMode: '',
+        invidiousThinMode: false,
+        invidiousDefaultHome: 'Popular',
+        invidiousFeedMenuList: ['Popular', 'Trending']
+    })
+}
+
+async function initInvidiousCookies() {
+    console.log('initInvidiousCookies() starting')
+    await browser.storage.local.get(
+        [
+            "disableYoutube",
+            "youtubeFrontend",
+            "youtubeProtocol",
+
+            "enableYoutubeCustomSettings",
+
+            "invidiousNormalRedirectsChecks",
+            "invidiousNormalCustomRedirects",
+            "invidiousTorRedirectsChecks",
+            "invidiousTorCustomRedirects",
+
+            "youtubeListen",
+            "youtubeVolume",
+            "youtubeAutoplay",
+            "invidiousQuality",
+            "invidiousAlwaysProxy",
+            "invidiousQuality",
+            "invidiousPlayerStyle",
+            "invidiousVideoLoop",
+            "invidiousContinueAutoplay",
+            "invidiousContinue",
+            "invidiousSpeed",
+            "invidiousQualityDash",
+            "invidiousComments",
+            "invidiousCaptions",
+            "invidiousRelatedVideos",
+            "invidiousAnnotations",
+            "invidiousExtendDesc",
+            "invidiousVrMode",
+            "invidiousSavePlayerPos",
+            "invidiousRegion",
+            "invidiousDarkMode",
+            "invidiousThinMode",
+            "invidiousDefaultHome",
+            "invidiousFeedMenuList",
+        ],
+        r => {
+            if (!r.disableYoutube && r.youtubeFrontend == 'invidious' && r.enableYoutubeCustomSettings) {
+                let checkedInstances;
+                if (r.youtubeProtocol == 'normal')
+                    checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]
+                else if (r.youtubeProtocol == 'tor')
+                    checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]
+
+                for (const instanceUrl of checkedInstances)
+                    browser.cookies.get(
+                        { url: instanceUrl, name: "PREFS" },
+                        cookie => {
+                            let prefs = {};
+                            if (cookie) {
+                                prefs = JSON.parse(decodeURIComponent(cookie.value));
+                                browser.cookies.remove({ url: instanceUrl, name: "PREFS" });
+                            }
+
+                            prefs.local = r.invidiousAlwaysProxy;
+                            prefs.video_loop = r.invidiousVideoLoop;
+                            prefs.continue_autoplay = r.invidiousContinueAutoplay;
+                            prefs.continue = r.invidiousContinue;
+                            prefs.listen = r.youtubeListen;
+                            prefs.speed = parseFloat(r.invidiousSpeed);
+                            prefs.quality = r.invidiousQuality;
+                            prefs.quality_dash = r.invidiousQualityDash;
+
+                            prefs.comments = r.invidiousComments;
+                            prefs.captions = r.invidiousCaptions;
+
+                            prefs.related_videos = r.invidiousRelatedVideos;
+                            prefs.annotations = r.invidiousAnnotations
+                            prefs.extend_desc = r.invidiousExtendDesc;
+                            prefs.vr_mode = r.invidiousVrMode;
+                            prefs.save_player_pos = r.invidiousSavePlayerPos;
+
+                            prefs.volume = parseInt(r.youtubeVolume);
+                            prefs.player_style = r.invidiousPlayerStyle;
+                            prefs.autoplay = r.youtubeAutoplay;
+
+                            prefs.region = r.invidiousRegion;
+                            prefs.dark_mode = r.invidiousDarkMode;
+                            prefs.thin_mode = r.invidiousThinMode;
+                            prefs.default_home = r.invidiousDefaultHome;
+                            prefs.feed_menu = r.invidiousFeedMenuList;
+
+                            browser.cookies.set({
+                                url: instanceUrl, name: "PREFS",
+                                value: encodeURIComponent(JSON.stringify(prefs))
+                            })
+                        }
+                    )
+            }
+        }
+    )
+}
+
+export default {
+    initDefaults,
+    initInvidiousCookies,
+}
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/options.js b/src/assets/javascripts/helpers/youtube/options.js
deleted file mode 100644
index a5aa413d..00000000
--- a/src/assets/javascripts/helpers/youtube/options.js
+++ /dev/null
@@ -1,223 +0,0 @@
-"use strict";
-
-window.browser = window.browser || window.chrome;
-
-export let youtubeListen;
-export const getYoutubeListen = () => youtubeListen;
-
-export let volume;
-export const getVolume = () => volume;
-export function setVolume(val) {
-    volume = val;
-    browser.storage.local.set({ youtubeVolume: volume })
-    console.log("youtubeVolume: ", volume)
-}
-
-export let youtubeAutoplay;
-export const getAutoplay = () => youtubeAutoplay;
-export function setAutoplay(val) {
-    youtubeAutoplay = val;
-    browser.storage.local.set({ youtubeAutoplay })
-    console.log("youtubeAutoplay: ", youtubeAutoplay)
-}
-
-export let invidiousQuality;
-export const getInvidiousQuality = () => invidiousQuality;
-
-export let invidiousAlwaysProxy;
-export const getInvidiousAlwaysProxy = () => invidiousAlwaysProxy;
-
-export let invidiousPlayerStyle;
-export const getInvidiousPlayerStyle = () => invidiousPlayerStyle;
-
-export let invidiousVideoLoop;
-export const getInvidiousVideoLoop = () => invidiousVideoLoop;
-
-export let invidiousContinueAutoplay;
-export const getInvidiousContinueAutoplay = () => invidiousContinueAutoplay;
-
-export let invidiousContinue;
-export const getInvidiousContinue = () => invidiousContinue;
-
-export let invidiousSpeed;
-export const getInvidiousSpeed = () => invidiousSpeed;
-
-export let invidiousQualityDash;
-export const getInvidiousQualityDash = () => invidiousQualityDash;
-
-export let invidiousComments;
-export const getInvidiousComments = () => invidiousComments;
-
-export let invidiousCaptions;
-export const getInvidiousCaptions = () => invidiousCaptions;
-
-export let invidiousRelatedVideos;
-export const getInvidiousRelatedVideos = () => invidiousRelatedVideos;
-
-export let invidiousAnnotations;
-export const getInvidiousAnnotations = () => invidiousAnnotations;
-
-export let invidiousExtendDesc;
-export const getInvidiousExtendDesc = () => invidiousExtendDesc;
-
-export let invidiousVrMode;
-export const getInvidiousVrMode = () => invidiousVrMode;
-
-export let invidiousSavePlayerPos;
-export const getInvidiousSavePlayerPos = () => invidiousSavePlayerPos;
-
-export let invidiousRegion;
-export const getInvidiousRegion = () => invidiousRegion;
-
-export let invidiousDarkMode;
-export const getInvidiousDarkMode = () => invidiousDarkMode;
-
-export let invidiousThinMode;
-export const getInvidiousThinMode = () => invidiousThinMode;
-
-export let invidiousDefaultHome;
-export const getInvidiousDefaultHome = () => invidiousDefaultHome;
-
-export let invidiousFeedMenuList;
-export const getInvidiousFeedMenuList = () => invidiousFeedMenuList;
-
-export let pipedBufferGoal;
-export const getPipedBufferGoal = () => pipedBufferGoal;
-
-export let pipedComments;
-export const getPipedComments = () => pipedComments;
-
-export let pipedDisableLBRY;
-export const getPipedDisableLBRY = () => pipedDisableLBRY;
-
-export let pipedEnabledCodecs;
-export const getPipedEnabledCodecs = () => pipedEnabledCodecs;
-
-export let pipedHomepage;
-export const getPipedHomepage = () => pipedHomepage;
-
-export let pipedMinimizeDescription;
-export const getPipedMinimizeDescription = () => pipedMinimizeDescription;
-
-export let pipedProxyLBRY;
-export const getPipedProxyLBRY = () => pipedProxyLBRY;
-
-export let pipedQuality;
-export const getPipedQuality = () => pipedQuality;
-
-export let pipedRegion;
-export const getPipedRegion = () => pipedRegion;
-
-export let pipedSelectedSkip;
-export const getPipedSelectedSkip = () => pipedSelectedSkip;
-
-export let pipedSponsorblock;
-export const getPipedSponsorblock = () => pipedSponsorblock;
-
-export let pipedDdlTheme;
-export const getPipedDdlTheme = () => pipedDdlTheme;
-
-export let pipedWatchHistory;
-export const getPipedWatchHistory = () => pipedWatchHistory;
-
-export let pipedMaterialSkipToLastPoint;
-export const getPipedMaterialSkipToLastPoint = () => pipedMaterialSkipToLastPoint;
-
-export async function initOptions() {
-    return new Promise(
-        resolve => {
-            browser.storage.local.get(
-                [
-                    "youtubeListen",
-                    "youtubeVolume",
-                    "youtubeAutoplay",
-
-                    "invidiousQuality",
-                    "invidiousAlwaysProxy",
-                    "invidiousQuality",
-                    "invidiousPlayerStyle",
-                    "invidiousVideoLoop",
-                    "invidiousContinueAutoplay",
-                    "invidiousContinue",
-                    "invidiousSpeed",
-                    "invidiousQualityDash",
-                    "invidiousComments",
-                    "invidiousCaptions",
-                    "invidiousRelatedVideos",
-                    "invidiousAnnotations",
-                    "invidiousExtendDesc",
-                    "invidiousVrMode",
-                    "invidiousSavePlayerPos",
-                    "invidiousRegion",
-                    "invidiousDarkMode",
-                    "invidiousThinMode",
-                    "invidiousDefaultHome",
-                    "invidiousFeedMenuList",
-
-                    "pipedBufferGoal",
-                    "pipedComments",
-                    "pipedDisableLBRY",
-                    "pipedEnabledCodecs",
-                    "pipedHomepage",
-                    "pipedMinimizeDescription",
-                    "pipedProxyLBRY",
-                    "pipedQuality",
-                    "pipedRegion",
-                    "pipedSelectedSkip",
-                    "pipedSponsorblock",
-                    "pipedDdlTheme",
-                    "pipedWatchHistory",
-
-                    "pipedMaterialSkipToLastPoint",
-                ],
-                r => {
-
-                    youtubeListen = r.youtubeListen ?? false;
-                    volume = r.youtubeVolume ?? 100;
-                    youtubeAutoplay = r.youtubeAutoplay ?? false;
-
-                    invidiousVideoLoop = r.invidiousVideoLoop ?? false;
-                    invidiousAlwaysProxy = r.invidiousAlwaysProxy ?? false;
-                    invidiousPlayerStyle = r.invidiousPlayerStyle ?? 'invidious';
-                    invidiousQuality = r.invidiousQuality ?? 'hd720';
-                    invidiousContinueAutoplay = r.invidiousContinueAutoplay ?? true;
-                    invidiousContinue = r.invidiousContinue ?? false;
-                    invidiousSpeed = r.invidiousSpeed ?? '1.0';
-                    invidiousQualityDash = r.invidiousQualityDash ?? 'auto';
-                    invidiousComments = r.invidiousComments ?? ['youtube', ''];
-                    invidiousCaptions = r.invidiousCaptions ?? ['', '', ''];
-                    invidiousRelatedVideos = r.invidiousRelatedVideos ?? true;
-                    invidiousAnnotations = r.invidiousAnnotations ?? false;
-                    invidiousExtendDesc = r.invidiousExtendDesc ?? false;
-                    invidiousVrMode = r.invidiousVrMode ?? true;
-                    invidiousSavePlayerPos = r.invidiousSavePlayerPos ?? false;
-
-                    invidiousRegion = r.invidiousRegion ?? 'US';
-                    invidiousDarkMode = r.invidiousDarkMode ?? '';
-                    invidiousThinMode = r.invidiousThinMode ?? false;
-                    invidiousDefaultHome = r.invidiousDefaultHome ?? 'Popular';
-                    invidiousFeedMenuList = r.invidiousFeedMenuList ?? ['Popular', 'Trending'];
-
-                    pipedBufferGoal = r.pipedBufferGoal ?? 300;
-                    pipedComments = r.pipedComments ?? true;
-                    pipedDisableLBRY = r.pipedDisableLBRY ?? false;
-                    pipedEnabledCodecs = r.pipedEnabledCodecs ?? ["av1", "vp9", "avc"];
-                    pipedHomepage = r.pipedHomepage ?? "trending";
-                    pipedMinimizeDescription = r.pipedMinimizeDescription ?? false;
-                    pipedProxyLBRY = r.pipedProxyLBRY ?? false;
-                    pipedQuality = r.pipedQuality ?? 0;
-                    pipedRegion = r.pipedRegion ?? "US";
-
-                    pipedSelectedSkip = r.pipedSelectedSkip ?? ["sponsor", "interaction", "selfpromo", "music_offtopic"];
-                    pipedSponsorblock = r.pipedSponsorblock ?? true;
-                    pipedDdlTheme = r.pipedDdlTheme ?? 'auto';
-                    pipedWatchHistory = r.pipedWatchHistory ?? false;
-
-                    pipedMaterialSkipToLastPoint = r.pipedMaterialSkipToLastPoint ?? true;
-
-                    resolve();
-                }
-            )
-        }
-    )
-}
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/piped-preferences.js b/src/assets/javascripts/helpers/youtube/piped-preferences.js
index 3f9572dc..c6a5707a 100644
--- a/src/assets/javascripts/helpers/youtube/piped-preferences.js
+++ b/src/assets/javascripts/helpers/youtube/piped-preferences.js
@@ -2,7 +2,6 @@ window.browser = window.browser || window.chrome;
 
 browser.storage.local.get(
     [
-        "theme",
         "youtubeVolume",
         "youtubeAutoplay",
         "youtubeListen",
@@ -22,40 +21,21 @@ browser.storage.local.get(
         "pipedWatchHistory",
     ],
     r => {
-        let theme = r.theme ?? "dark";
-        let youtubeAutoplay = r.youtubeAutoplay ?? false;
-        let youtubeVolume = r.youtubeVolume ?? 100;
-        let youtubeListen = r.youtubeListen ?? false;
-
-        let pipedBufferGoal = r.pipedBufferGoal ?? 300;
-        let pipedComments = r.pipedComments ?? true;
-        let pipedDisableLBRY = r.pipedDisableLBRY ?? false;
-        let pipedEnabledCodecs = r.pipedEnabledCodecs ?? ["av1", "vp9", "avc"];
-        let pipedHomepage = r.pipedHomepage ?? "trending";
-        let pipedMinimizeDescription = r.pipedMinimizeDescription ?? false;
-        let pipedProxyLBRY = r.pipedProxyLBRY ?? false;
-        let pipedQuality = r.pipedQuality ?? 0;
-        let pipedRegion = r.pipedRegion ?? "US";
-        let pipedSelectedSkip = r.pipedSelectedSkip ?? ["sponsor", "interaction", "selfpromo", "music_offtopic"];
-        let pipedSponsorblock = r.pipedSponsorblock ?? true;
-        let pipedDdlTheme = r.pipedDdlTheme ?? 'auto';
-        let pipedWatchHistory = r.pipedWatchHistory ?? false;
-
-        localStorage.setItem("bufferGoal", pipedBufferGoal.toString());
-        localStorage.setItem("comments", pipedComments);
-        localStorage.setItem("disableLBRY", pipedDisableLBRY);
-        localStorage.setItem("enabledCodecs", pipedEnabledCodecs);
-        localStorage.setItem("homepage", pipedHomepage);
-        localStorage.setItem("listen", youtubeListen);
-        localStorage.setItem("minimizeDescription", pipedMinimizeDescription);
-        localStorage.setItem("playerAutoPlay", youtubeAutoplay);
-        localStorage.setItem("proxyLBRY", pipedProxyLBRY);
-        localStorage.setItem("quality", pipedQuality);
-        localStorage.setItem("region", pipedRegion);
-        localStorage.setItem("selectedSkip", pipedSelectedSkip);
-        localStorage.setItem("sponsorblock", pipedSponsorblock);
-        localStorage.setItem("theme", pipedDdlTheme);
-        localStorage.setItem("volume", youtubeVolume / 100);
-        localStorage.setItem("watchHistory", pipedWatchHistory);
+        localStorage.setItem("bufferGoal", r.pipedBufferGoal.toString());
+        localStorage.setItem("comments", r.pipedComments);
+        localStorage.setItem("disableLBRY", r.pipedDisableLBRY);
+        localStorage.setItem("enabledCodecs", r.pipedEnabledCodecs);
+        localStorage.setItem("homepage", r.pipedHomepage);
+        localStorage.setItem("listen", r.youtubeListen);
+        localStorage.setItem("minimizeDescription", r.pipedMinimizeDescription);
+        localStorage.setItem("playerAutoPlay", r.youtubeAutoplay);
+        localStorage.setItem("proxyLBRY", r.pipedProxyLBRY);
+        localStorage.setItem("quality", r.pipedQuality);
+        localStorage.setItem("region", r.pipedRegion);
+        localStorage.setItem("selectedSkip", r.pipedSelectedSkip);
+        localStorage.setItem("sponsorblock", r.pipedSponsorblock);
+        localStorage.setItem("theme", r.pipedDdlTheme);
+        localStorage.setItem("volume", r.youtubeVolume / 100);
+        localStorage.setItem("watchHistory", r.pipedWatchHistory);
     }
 )
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/piped.js b/src/assets/javascripts/helpers/youtube/piped.js
new file mode 100644
index 00000000..10bec749
--- /dev/null
+++ b/src/assets/javascripts/helpers/youtube/piped.js
@@ -0,0 +1,37 @@
+async function initDefaults() {
+    await browser.storage.local.set({
+        youtubeVolume: 100,
+        youtubeAutoplay: false,
+        youtubeListen: false,
+
+        pipedBufferGoal: 300,
+        pipedComments: true,
+        pipedDisableLBRY: false,
+        pipedEnabledCodecs: ["av1", "vp9", "avc"],
+        pipedHomepage: "trending",
+        pipedMinimizeDescription: false,
+        pipedProxyLBRY: false,
+        pipedQuality: 0,
+        pipedRegion: "US",
+        pipedSelectedSkip: ["sponsor", "interaction", "selfpromo", "music_offtopic"],
+        pipedSponsorblock: true,
+        pipedDdlTheme: 'auto',
+        pipedWatchHistory: false,
+    })
+}
+
+function initPipedLocalStorage(tabId) {
+    if (!disable && frontend == 'piped' && enableCustomSettings)
+      browser.tabs.executeScript(
+        tabId,
+        {
+          file: "/assets/javascripts/helpers/youtube/piped-preferences.js",
+          runAt: "document_start"
+        }
+      );
+  }
+
+export default {
+    initDefaults,
+    initPipedLocalStorage
+}
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js b/src/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js
index 312271fe..c669c47e 100644
--- a/src/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js
+++ b/src/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js
@@ -15,33 +15,22 @@ browser.storage.local.get(
         "pipedMaterialSkipToLastPoint",
     ],
     r => {
-        let theme = r.theme ?? "dark";
-        let youtubeAutoplay = r.youtubeAutoplay ?? false;
-        let youtubeVolume = r.youtubeVolume ?? 100;
-        let youtubeListen = r.youtubeListen ?? false;
-
-        let pipedDisableLBRY = r.pipedDisableLBRY ?? false;
-        let pipedProxyLBRY = r.pipedProxyLBRY ?? false;
-        let pipedSelectedSkip = r.pipedSelectedSkip ?? [];
-        let pipedSponsorblock = r.pipedSponsorblock ?? true;
-
-        let pipedMaterialSkipToLastPoint = r.pipedMaterialSkipToLastPoint ?? true;
-
         let prefs = {};
-        if (localStorage.getItem("PREFERENCES")) prefs = JSON.parse(localStorage.getItem("PREFERENCES"));
+        if (localStorage.getItem("PREFERENCES"))
+            prefs = JSON.parse(localStorage.getItem("PREFERENCES"));
 
-        if (theme == 'dark') prefs.darkMode = true;
-        if (theme == 'light') prefs.darkMode = false;
+        if (r.theme == 'dark') prefs.darkMode = true;
+        if (r.theme == 'light') prefs.darkMode = false;
 
-        prefs.volume = youtubeVolume / 100;
-        prefs.playerAutoplay = youtubeAutoplay;
+        prefs.volume = r.youtubeVolume / 100;
+        prefs.playerAutoplay = r.youtubeAutoplay;
 
-        prefs.listen = youtubeListen;
-        prefs.disableLBRY = pipedDisableLBRY;
-        prefs.proxyLBRY = pipedProxyLBRY;
-        prefs.sponsorblock = pipedSponsorblock;
-        prefs.skipToLastPoint = pipedMaterialSkipToLastPoint;
-        prefs.selectedSkip = pipedSelectedSkip;
+        prefs.listen = r.youtubeListen;
+        prefs.disableLBRY = r.pipedDisableLBRY;
+        prefs.proxyLBRY = r.pipedProxyLBRY;
+        prefs.sponsorblock = r.pipedSponsorblock;
+        prefs.skipToLastPoint = r.pipedMaterialSkipToLastPoint;
+        prefs.selectedSkip = r.pipedSelectedSkip;
 
         localStorage.setItem("PREFERENCES", JSON.stringify(prefs));
     }
diff --git a/src/assets/javascripts/helpers/youtube/pipedMaterial.js b/src/assets/javascripts/helpers/youtube/pipedMaterial.js
new file mode 100644
index 00000000..5e5a577d
--- /dev/null
+++ b/src/assets/javascripts/helpers/youtube/pipedMaterial.js
@@ -0,0 +1,31 @@
+async function initDefaults() {
+  await browser.storage.local.set({
+    theme: "dark",
+    youtubeAutoplay: false,
+    youtubeVolume: 100,
+    youtubeListen: false,
+
+    pipedDisableLBRY: false,
+    pipedProxyLBRY: false,
+    pipedSelectedSkip: [],
+    pipedSponsorblock: true,
+
+    pipedMaterialSkipToLastPoint: true,
+  })
+}
+
+function initPipedMaterialLocalStorage(tabId) {
+  if (!disable && frontend == 'pipedMaterial' && enableCustomSettings)
+    browser.tabs.executeScript(
+      tabId,
+      {
+        file: "/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js",
+        runAt: "document_start"
+      }
+    );
+}
+
+export default {
+  initDefaults,
+  initPipedMaterialLocalStorage,
+}
\ No newline at end of file
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index c318e97c..9cdc60ad 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -3,46 +3,9 @@
 window.browser = window.browser || window.chrome;
 
 import commonHelper from '../common.js'
-import {
-  youtubeListen, getYoutubeListen,
-  invidiousQuality, getInvidiousQuality,
-  invidiousAlwaysProxy, getInvidiousAlwaysProxy,
-  invidiousPlayerStyle, getInvidiousPlayerStyle,
-  invidiousVideoLoop, getInvidiousVideoLoop,
-  invidiousContinueAutoplay, getInvidiousContinueAutoplay,
-  invidiousContinue, getInvidiousContinue,
-  invidiousSpeed, getInvidiousSpeed,
-  invidiousQualityDash, getInvidiousQualityDash,
-  invidiousComments, getInvidiousComments,
-  invidiousCaptions, getInvidiousCaptions,
-  invidiousRelatedVideos, getInvidiousRelatedVideos,
-  invidiousAnnotations, getInvidiousAnnotations,
-  invidiousExtendDesc, getInvidiousExtendDesc,
-  invidiousVrMode, getInvidiousVrMode,
-  invidiousSavePlayerPos, getInvidiousSavePlayerPos,
-  invidiousRegion, getInvidiousRegion,
-  invidiousDarkMode, getInvidiousDarkMode,
-  invidiousThinMode, getInvidiousThinMode,
-  invidiousDefaultHome, getInvidiousDefaultHome,
-  invidiousFeedMenuList, getInvidiousFeedMenuList,
-  getPipedBufferGoal,
-  getPipedComments,
-  getPipedDisableLBRY,
-  getPipedEnabledCodecs,
-  getPipedHomepage,
-  getPipedMinimizeDescription,
-  getPipedProxyLBRY,
-  getPipedQuality,
-  getPipedRegion,
-  getPipedSelectedSkip,
-  getPipedSponsorblock,
-  getPipedDdlTheme,
-  getPipedWatchHistory,
-  volume, getVolume, setVolume,
-  youtubeAutoplay, getAutoplay, setAutoplay,
-  getPipedMaterialSkipToLastPoint,
-  initOptions
-} from './options.js';
+import invidious from './invidious.js'
+import piped from './piped.js';
+import pipedMaterial from './pipedMaterial.js';
 
 const targets = [
   /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/,
@@ -89,164 +52,29 @@ let redirects = {
 
 const getRedirects = () => redirects;
 
-function getCustomRedirects() {
-  return {
-    "invidious": {
-      "normal": [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects],
-      "tor": [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
-    },
-    "piped": {
-      "normal": [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects],
-      "tor": [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
-    }
-  };
-};
-
-async function setYoutubeSettings(val) {
-  return new Promise(
-    resolve => {
-      browser.storage.local.set(val).then(resolve);
-    }
-  )
-
-}
-
-function setInvidiousRedirects(val) {
-  redirects.invidious = val;
-  browser.storage.local.set({ youtubeRedirects: redirects })
-  console.log("invidiousRedirects: ", val)
-}
-
 let invidiousNormalRedirectsChecks;
-const getInvidiousNormalRedirectsChecks = () => invidiousNormalRedirectsChecks;
-function setInvidiousNormalRedirectsChecks(val) {
-  invidiousNormalRedirectsChecks = val;
-  browser.storage.local.set({ invidiousNormalRedirectsChecks })
-  console.log("invidiousNormalRedirectsChecks: ", val)
-}
-
 let invidiousNormalCustomRedirects = [];
-const getInvidiousNormalCustomRedirects = () => invidiousNormalCustomRedirects;
-function setInvidiousNormalCustomRedirects(val) {
-  invidiousNormalCustomRedirects = val;
-  browser.storage.local.set({ invidiousNormalCustomRedirects })
-  console.log("invidiousNormalCustomRedirects: ", val)
-}
-
 let invidiousTorRedirectsChecks;
-const getInvidiousTorRedirectsChecks = () => invidiousTorRedirectsChecks;
-function setInvidiousTorRedirectsChecks(val) {
-  invidiousTorRedirectsChecks = val;
-  browser.storage.local.set({ invidiousTorRedirectsChecks })
-  console.log("invidiousTorRedirectsChecks: ", val)
-}
-
 let invidiousTorCustomRedirects = [];
-const getInvidiousTorCustomRedirects = () => invidiousTorCustomRedirects;
-function setInvidiousTorCustomRedirects(val) {
-  invidiousTorCustomRedirects = val;
-  browser.storage.local.set({ invidiousTorCustomRedirects })
-  console.log("invidiousTorCustomRedirects: ", val)
-}
 
 let pipedNormalRedirectsChecks;
-const getPipedNormalRedirectsChecks = () => pipedNormalRedirectsChecks;
-function setPipedNormalRedirectsChecks(val) {
-  pipedNormalRedirectsChecks = val;
-  browser.storage.local.set({ pipedNormalRedirectsChecks })
-  console.log("pipedNormalRedirectsChecks: ", val)
-}
-
 let pipedNormalCustomRedirects = [];
-const getPipedNormalCustomRedirects = () => pipedNormalCustomRedirects;
-function setPipedNormalCustomRedirects(val) {
-  pipedNormalCustomRedirects = val;
-  browser.storage.local.set({ pipedNormalCustomRedirects })
-  console.log("pipedNormalCustomRedirects: ", val)
-}
-
 let pipedTorRedirectsChecks;
-const getPipedTorRedirectsChecks = () => pipedTorRedirectsChecks;
-function setPipedTorRedirectsChecks(val) {
-  pipedTorRedirectsChecks = val;
-  browser.storage.local.set({ pipedTorRedirectsChecks })
-  console.log("pipedTorRedirectsChecks: ", val)
-}
-
 let pipedTorCustomRedirects = [];
-const getPipedTorCustomRedirects = () => pipedTorCustomRedirects;
-function setPipedTorCustomRedirects(val) {
-  pipedTorCustomRedirects = val;
-  browser.storage.local.set({ pipedTorCustomRedirects })
-  console.log("pipedTorCustomRedirects: ", val)
-}
-
-function setPipedRedirects(val) {
-  redirects.piped = val;
-  browser.storage.local.set({ youtubeRedirects: redirects })
-  console.log("pipedRedirects: ", val)
-}
 
 let pipedMaterialNormalRedirectsChecks;
-const getPipedMaterialNormalRedirectsChecks = () => pipedMaterialNormalRedirectsChecks;
-function setPipedMaterialNormalRedirectsChecks(val) {
-  pipedMaterialNormalRedirectsChecks = val;
-  browser.storage.local.set({ pipedMaterialNormalRedirectsChecks })
-  console.log("pipedMaterialNormalRedirectsChecks: ", val)
-}
-
 let pipedMaterialNormalCustomRedirects = [];
-const getPipedMaterialNormalCustomRedirects = () => pipedMaterialNormalCustomRedirects;
-function setPipedMaterialNormalCustomRedirects(val) {
-  pipedMaterialNormalCustomRedirects = val;
-  browser.storage.local.set({ pipedMaterialNormalCustomRedirects })
-  console.log("pipedMaterialNormalCustomRedirects: ", val)
-}
-
 let pipedMaterialTorRedirectsChecks;
-const getPipedMaterialTorRedirectsChecks = () => pipedMaterialTorRedirectsChecks;
-function setPipedMaterialTorRedirectsChecks(val) {
-  pipedMaterialTorRedirectsChecks = val;
-  browser.storage.local.set({ pipedMaterialTorRedirectsChecks })
-  console.log("pipedMaterialTorRedirectsChecks: ", val)
-}
-
 let pipedMaterialTorCustomRedirects = [];
-const getPipedMaterialTorCustomRedirects = () => pipedMaterialTorCustomRedirects;
-function setPipedMaterialTorCustomRedirects(val) {
-  pipedMaterialTorCustomRedirects = val;
-  browser.storage.local.set({ pipedMaterialTorCustomRedirects })
-  console.log("pipedMaterialTorCustomRedirects: ", val)
-}
-
-function setPipedMaterialRedirects(val) {
-  redirects.pipedMaterial = val;
-  browser.storage.local.set({ youtubeRedirects: redirects })
-  console.log("pipedMaterialRedirects: ", val)
-}
 
 let disable;
-const getDisable = () => disable;
-function setDisable(val) {
-  disable = val;
-  browser.storage.local.set({ disableYoutube: disable })
-  console.log("disableYoutube: ", disable)
-}
-
-let enableCustomSettings;
-const getEnableCustomSettings = () => enableCustomSettings;
 let protocol;
-const getProtocol = () => protocol;
 let OnlyEmbeddedVideo;
-const getOnlyEmbeddedVideo = () => OnlyEmbeddedVideo;
 let frontend;
-const getFrontend = () => frontend;
 let youtubeEmbedFrontend;
-const getYoutubeEmbedFrontend = () => youtubeEmbedFrontend;
 let bypassWatchOnYoutube;
-const getBypassWatchOnYoutube = () => bypassWatchOnYoutube;
-
 let alwaysUsePreferred;
+
 function redirect(url, details, initiator) {
   if (disable) return null;
 
@@ -373,7 +201,6 @@ function redirect(url, details, initiator) {
 
 function reverse(url) {
   let protocolHost = commonHelper.protocolHost(url);
-
   if (![
     ...redirects.invidious.normal,
     ...redirects.invidious.tor,
@@ -428,13 +255,11 @@ function switchInstance(url) {
     if (protocol == 'normal') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects];
     else if (protocol == 'tor') instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects];
   }
-  else return null;
 
-  console.log("instancesList", instancesList);
   let index = instancesList.indexOf(protocolHost);
   if (index > -1) instancesList.splice(index, 1);
 
-  if (instancesList.length === 0) return null;
+  if (instancesList.length == 0) return null;
   let randomInstance = commonHelper.getRandomInstance(instancesList);
   return `${randomInstance}${url.pathname}${url.search}`;
 }
@@ -481,272 +306,147 @@ function isPipedorInvidious(url, type, frontend) {
   ].includes(protocolHost);
 }
 
-function initPipedLocalStorage(tabId) {
-  if (!disable && frontend == 'piped' && enableCustomSettings)
-    browser.tabs.executeScript(
-      tabId,
-      {
-        file: "/assets/javascripts/helpers/youtube/piped-preferences.js",
-        runAt: "document_start"
-      }
-    );
-}
+async function initDefaults() {
+  console.log('youtube initDefaults')
+  return new Promise(async resolve => {
+    fetch('/instances/data.json').then(response => response.text()).then(async data => {
+      let dataJson = JSON.parse(data);
+      redirects.invidious = dataJson.invidious;
+      await browser.storage.local.set({
+        disableYoutube: false,
+        enableYoutubeCustomSettings: false,
+        OnlyEmbeddedVideo: 'both',
+
+        youtubeRedirects: {
+          'invidious': dataJson.invidious,
+          'piped': redirects.piped,
+          'pipedMaterial': redirects.pipedMaterial
+        },
 
-function initPipedMaterialLocalStorage(tabId) {
-  if (!disable && frontend == 'pipedMaterial' && enableCustomSettings)
-    browser.tabs.executeScript(
-      tabId,
-      {
-        file: "/assets/javascripts/helpers/youtube/pipedMaterial-preferences.js",
-        runAt: "document_start"
-      }
-    );
-}
+        youtubeFrontend: 'invidious',
 
-function initInvidiousCookies() {
-  console.log('initInvidiousCookies()');
-  if (!disable && frontend == 'invidious' && enableCustomSettings) {
-    let checkedInstances;
-    if (protocol == 'normal') checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects];
-    else if (protocol == 'tor') checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects];
-
-    for (const instanceUrl of checkedInstances)
-      browser.cookies.get(
-        {
-          url: instanceUrl,
-          name: "PREFS",
-        },
-        cookie => {
-          let prefs = {};
-          if (cookie) {
-            prefs = JSON.parse(decodeURIComponent(cookie.value));
-            browser.cookies.remove({ url: instanceUrl, name: "PREFS" });
-          }
-
-          prefs.local = invidiousAlwaysProxy;
-          prefs.video_loop = invidiousVideoLoop;
-          prefs.continue_autoplay = invidiousContinueAutoplay;
-          prefs.continue = invidiousContinue;
-          prefs.listen = youtubeListen;
-          prefs.speed = parseFloat(invidiousSpeed);
-          prefs.quality = invidiousQuality;
-          prefs.quality_dash = invidiousQualityDash;
-
-          prefs.comments = invidiousComments;
-          prefs.captions = invidiousCaptions;
-
-          prefs.related_videos = invidiousRelatedVideos;
-          prefs.annotations = invidiousAnnotations
-          prefs.extend_desc = invidiousExtendDesc;
-          prefs.vr_mode = invidiousVrMode;
-          prefs.save_player_pos = invidiousSavePlayerPos;
-
-          prefs.volume = parseInt(volume);
-          prefs.player_style = invidiousPlayerStyle;
-          prefs.autoplay = youtubeAutoplay;
-
-          prefs.region = invidiousRegion;
-          prefs.dark_mode = invidiousDarkMode;
-          prefs.thin_mode = invidiousThinMode;
-          prefs.default_home = invidiousDefaultHome;
-          prefs.feed_menu = invidiousFeedMenuList;
-
-          browser.cookies.set({
-            url: instanceUrl,
-            name: "PREFS",
-            value: encodeURIComponent(JSON.stringify(prefs))
-          })
-        }
-      )
-  }
-}
+        invidiousNormalRedirectsChecks: [...redirects.invidious.normal],
+        invidiousNormalCustomRedirects: [],
 
-let theme;
-async function init() {
-  await initOptions();
-  return new Promise(
-    resolve => {
-      fetch('/instances/data.json').then(response => response.text()).then(data => {
-        let dataJson = JSON.parse(data);
-        browser.storage.local.get(
-          [
-            "theme",
-            "disableYoutube",
-            "enableYoutubeCustomSettings",
-            "OnlyEmbeddedVideo",
-            "youtubeRedirects",
-            "youtubeFrontend",
+        invidiousTorRedirectsChecks: [...redirects.invidious.tor],
+        invidiousTorCustomRedirects: [],
 
-            "invidiousNormalRedirectsChecks",
-            "invidiousNormalCustomRedirects",
+        pipedNormalRedirectsChecks: [...redirects.piped.normal],
+        pipedNormalCustomRedirects: [],
 
-            "invidiousTorRedirectsChecks",
-            "invidiousTorCustomRedirects",
+        pipedTorRedirectsChecks: [...redirects.piped.tor],
+        pipedTorCustomRedirects: [],
 
-            "pipedNormalRedirectsChecks",
-            "pipedNormalCustomRedirects",
+        pipedMaterialNormalRedirectsChecks: [...redirects.pipedMaterial.normal],
+        pipedMaterialNormalCustomRedirects: [],
 
-            "pipedMaterialNormalRedirectsChecks",
-            "pipedMaterialNormalCustomRedirects",
+        pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
+        pipedMaterialTorCustomRedirects: [],
 
-            "pipedMaterialTorRedirectsChecks",
-            "pipedMaterialTorCustomRedirects",
+        alwaysUsePreferred: false,
+        youtubeEmbedFrontend: 'invidious',
+        youtubeProtocol: 'normal',
+        bypassWatchOnYoutube: true,
+      })
+      
+      await invidious.initDefaults();
+      await piped.initDefaults();
+      await pipedMaterial.initDefaults();
+      resolve();
+    }
+    )
+  })
+}
+
+async function init() {
+  return new Promise(
+    resolve => {
+      browser.storage.local.get(
+        [
+          "disableYoutube",
+          "OnlyEmbeddedVideo",
+          "youtubeRedirects",
+          "youtubeFrontend",
 
-            "pipedTorRedirectsChecks",
-            "pipedTorCustomRedirects",
-            "alwaysUsePreferred",
-            "youtubeEmbedFrontend",
+          "invidiousNormalRedirectsChecks",
+          "invidiousNormalCustomRedirects",
 
-            "youtubeProtocol",
+          "invidiousTorRedirectsChecks",
+          "invidiousTorCustomRedirects",
 
-            "bypassWatchOnYoutube"
-          ],
-          r => {
-            redirects.invidious = dataJson.invidious;
-            if (r.youtubeRedirects) redirects = r.youtubeRedirects;
+          "pipedNormalRedirectsChecks",
+          "pipedNormalCustomRedirects",
 
-            disable = r.disableYoutube ?? false;
-            enableCustomSettings = r.enableYoutubeCustomSettings ?? false;
-            protocol = r.youtubeProtocol ?? 'normal';
-            frontend = r.youtubeFrontend ?? 'invidious';
-            youtubeEmbedFrontend = r.youtubeEmbedFrontend ?? 'invidious';
+          "pipedTorRedirectsChecks",
+          "pipedTorCustomRedirects",
 
-            theme = r.theme ?? 'dark';
+          "pipedMaterialNormalRedirectsChecks",
+          "pipedMaterialNormalCustomRedirects",
 
-            OnlyEmbeddedVideo = r.OnlyEmbeddedVideo ?? 'both';
+          "pipedMaterialTorRedirectsChecks",
+          "pipedMaterialTorCustomRedirects",
 
-            invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks ?? [...redirects.invidious.normal];
-            invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects ?? [];
+          "alwaysUsePreferred",
+          "youtubeEmbedFrontend",
+          "youtubeProtocol",
+          "bypassWatchOnYoutube",
+        ],
+        r => {
 
-            invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks ?? [...redirects.invidious.tor];
-            invidiousTorCustomRedirects = r.invidiousTorCustomRedirects ?? [];
+          console.log('inited r.youtubeRedirects', r.youtubeRedirects);
+          redirects = r.youtubeRedirects;
 
-            pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks ?? [...redirects.piped.normal];
-            pipedNormalCustomRedirects = r.pipedNormalCustomRedirects ?? [];
+          disable = r.disableYoutube;
+          protocol = r.youtubeProtocol;
+          frontend = r.youtubeFrontend;
 
-            pipedTorRedirectsChecks = r.pipedTorRedirectsChecks ?? [...redirects.piped.tor];
-            pipedTorCustomRedirects = r.pipedTorCustomRedirects ?? [];
+          invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks;
+          invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects;
 
-            pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks ?? [...redirects.pipedMaterial.normal];
-            pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects ?? [];
+          invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks;
+          invidiousTorCustomRedirects = r.invidiousTorCustomRedirects;
 
-            pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks ?? [...redirects.pipedMaterial.tor];
-            pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects ?? [];
+          pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks;
+          pipedNormalCustomRedirects = r.pipedNormalCustomRedirects;
 
-            alwaysUsePreferred = r.alwaysUsePreferred ?? false;
+          pipedTorRedirectsChecks = r.pipedTorRedirectsChecks;
+          pipedTorCustomRedirects = r.pipedTorCustomRedirects;
 
-            bypassWatchOnYoutube = r.bypassWatchOnYoutube ?? true;
+          pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks;
+          pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects;
 
-            initInvidiousCookies();
+          pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks;
+          pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects;
 
-            resolve();
+          youtubeEmbedFrontend = r.youtubeEmbedFrontend;
+          OnlyEmbeddedVideo = r.OnlyEmbeddedVideo;
+          alwaysUsePreferred = r.alwaysUsePreferred;
+          bypassWatchOnYoutube = r.bypassWatchOnYoutube;
 
-          });
-      });
+          resolve();
+        });
     })
 }
 
+let
+  initPipedLocalStorage = piped.initPipedLocalStorage,
+  initPipedMaterialLocalStorage = pipedMaterial.initPipedMaterialLocalStorage,
+  initInvidiousCookies = invidious.initInvidiousCookies;
+
 export default {
-  setYoutubeSettings,
-  getBypassWatchOnYoutube,
   initPipedLocalStorage,
   initPipedMaterialLocalStorage,
-  getFrontend,
-  getYoutubeEmbedFrontend,
+  initInvidiousCookies,
   getRedirects,
-  getCustomRedirects,
-  setInvidiousRedirects,
-  setPipedRedirects,
+
   redirect,
+  reverse,
+
   switchInstance,
-  isPipedorInvidious,
-  initInvidiousCookies,
-  getInvidiousAlwaysProxy,
-  getInvidiousQuality,
-  getInvidiousPlayerStyle,
-  getInvidiousVideoLoop,
-  getInvidiousRegion,
-  getInvidiousDarkMode,
-  getInvidiousThinMode,
-  getInvidiousDefaultHome,
-  getInvidiousFeedMenuList,
-
-  getDisable,
-  setDisable,
 
-  reverse,
+  isPipedorInvidious,
 
-  getEnableCustomSettings,
-  getProtocol,
-  getOnlyEmbeddedVideo,
-  setVolume,
-  getVolume,
-  setAutoplay,
-  getAutoplay,
-  getInvidiousContinueAutoplay,
-  getInvidiousContinue,
-  getYoutubeListen,
-  getInvidiousSpeed,
-  getInvidiousQualityDash,
-  getInvidiousComments,
-  getInvidiousCaptions,
-  getInvidiousRelatedVideos,
-  getInvidiousAnnotations,
-  getInvidiousExtendDesc,
-  getInvidiousVrMode,
-  getInvidiousSavePlayerPos,
-  getPipedBufferGoal,
-  getPipedComments,
-  getPipedDisableLBRY,
-  getPipedEnabledCodecs,
-  getPipedHomepage,
-  getPipedMinimizeDescription,
-  getPipedProxyLBRY,
-  getPipedQuality,
-  getPipedRegion,
-  getPipedSelectedSkip,
-  getPipedSponsorblock,
-  getPipedDdlTheme,
-  getPipedWatchHistory,
-  getPipedMaterialSkipToLastPoint,
-
-  getInvidiousNormalRedirectsChecks,
-  setInvidiousNormalRedirectsChecks,
-
-  getInvidiousNormalCustomRedirects,
-  setInvidiousNormalCustomRedirects,
-
-  getPipedNormalRedirectsChecks,
-  setPipedNormalRedirectsChecks,
-
-  getPipedNormalCustomRedirects,
-  setPipedNormalCustomRedirects,
-
-  getInvidiousTorRedirectsChecks,
-  setInvidiousTorRedirectsChecks,
-
-  getInvidiousTorCustomRedirects,
-  setInvidiousTorCustomRedirects,
-
-  getPipedTorRedirectsChecks,
-  setPipedTorRedirectsChecks,
-
-  getPipedTorCustomRedirects,
-  setPipedTorCustomRedirects,
-
-  getPipedMaterialNormalRedirectsChecks,
-  setPipedMaterialNormalRedirectsChecks,
-
-  getPipedMaterialNormalCustomRedirects,
-  setPipedMaterialNormalCustomRedirects,
-
-  getPipedMaterialTorRedirectsChecks,
-  setPipedMaterialTorRedirectsChecks,
-
-  getPipedMaterialTorCustomRedirects,
-  setPipedMaterialTorCustomRedirects,
-
-  setPipedMaterialRedirects,
+  initDefaults,
 
   init,
 };