about summary refs log tree commit diff stats
path: root/src/assets/javascripts/youtube
diff options
context:
space:
mode:
authorHygna <hygna@proton.me>2022-09-29 18:32:03 +0100
committerHygna <hygna@proton.me>2022-09-29 18:32:03 +0100
commitf1b8b64c48fede90ee9c828c1b82e641c0fe653d (patch)
tree44b55dfde203a223d57e6dcfd717dad7614e3b54 /src/assets/javascripts/youtube
parentUnify cookies (diff)
downloadlibredirect-f1b8b64c48fede90ee9c828c1b82e641c0fe653d.zip
Changes:
Improved instance fetcher

Added instance updating

Fix a few bugs
Diffstat (limited to 'src/assets/javascripts/youtube')
-rw-r--r--src/assets/javascripts/youtube/get_pipedMaterial_preferences.js5
-rw-r--r--src/assets/javascripts/youtube/get_piped_preferences.js22
-rw-r--r--src/assets/javascripts/youtube/set_pipedMaterial_preferences.js7
-rw-r--r--src/assets/javascripts/youtube/set_piped_preferences.js45
-rw-r--r--src/assets/javascripts/youtube/youtube.js792
5 files changed, 0 insertions, 871 deletions
diff --git a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js
deleted file mode 100644
index df79e13c..00000000
--- a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js
+++ /dev/null
@@ -1,5 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.set({
-	pipedMaterial_PREFERENCES: localStorage.getItem("PREFERENCES"),
-})
diff --git a/src/assets/javascripts/youtube/get_piped_preferences.js b/src/assets/javascripts/youtube/get_piped_preferences.js
deleted file mode 100644
index 388ecd19..00000000
--- a/src/assets/javascripts/youtube/get_piped_preferences.js
+++ /dev/null
@@ -1,22 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.set({
-	piped_bufferGoal: localStorage.getItem("bufferGoal"),
-	piped_comments: localStorage.getItem("comments"),
-	piped_disableLBRY: localStorage.getItem("disableLBRY"),
-	piped_enabledCodecs: localStorage.getItem("enabledCodecs"),
-	piped_hl: localStorage.getItem("hl"),
-	piped_homepage: localStorage.getItem("homepage"),
-	piped_instance: localStorage.getItem("instance"),
-	piped_listen: localStorage.getItem("listen"),
-	piped_minimizeDescription: localStorage.getItem("minimizeDescription"),
-	piped_playerAutoPlay: localStorage.getItem("playerAutoPlay"),
-	piped_proxyLBRY: localStorage.getItem("proxyLBRY"),
-	piped_quality: localStorage.getItem("quality"),
-	piped_region: localStorage.getItem("region"),
-	piped_selectedSkip: localStorage.getItem("selectedSkip"),
-	piped_sponsorblock: localStorage.getItem("sponsorblock"),
-	piped_theme: localStorage.getItem("theme"),
-	piped_volume: localStorage.getItem("volume"),
-	piped_watchHistory: localStorage.getItem("watchHistory"),
-})
diff --git a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js
deleted file mode 100644
index 59d6dcc4..00000000
--- a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js
+++ /dev/null
@@ -1,7 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.get("pipedMaterial_PREFERENCES", r => {
-	if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES)
-
-	window.close()
-})
diff --git a/src/assets/javascripts/youtube/set_piped_preferences.js b/src/assets/javascripts/youtube/set_piped_preferences.js
deleted file mode 100644
index 374f2d61..00000000
--- a/src/assets/javascripts/youtube/set_piped_preferences.js
+++ /dev/null
@@ -1,45 +0,0 @@
-window.browser = window.browser || window.chrome
-
-browser.storage.local.get(
-	[
-		"piped_bufferGoal",
-		"piped_comments",
-		"piped_disableLBRY",
-		"piped_enabledCodecs",
-		"piped_homepage",
-		"piped_instance",
-		"piped_listen",
-		"piped_minimizeDescription",
-		"piped_playerAutoPlay",
-		"piped_proxyLBRY",
-		"piped_quality",
-		"piped_region",
-		"piped_selectedSkip",
-		"piped_sponsorblock",
-		"piped_theme",
-		"piped_volume",
-		"piped_watchHistory",
-	],
-	r => {
-		if (r.piped_bufferGoal !== undefined) localStorage.setItem("bufferGoal", r.piped_bufferGoal)
-		if (r.piped_comments !== undefined) localStorage.setItem("comments", r.piped_comments)
-		if (r.piped_disableLBRY !== undefined) localStorage.setItem("disableLBRY", r.piped_disableLBRY)
-		if (r.piped_hl !== undefined) localStorage.setItem("hl", r.piped_hl)
-		if (r.piped_enabledCodecs !== undefined) localStorage.setItem("enabledCodecs", r.piped_enabledCodecs)
-		if (r.piped_homepage !== undefined) localStorage.setItem("homepage", r.piped_homepage)
-		if (r.piped_instance !== undefined) localStorage.setItem("instance", r.piped_instance)
-		if (r.piped_listen !== undefined) localStorage.setItem("listen", r.piped_listen)
-		if (r.piped_minimizeDescription !== undefined) localStorage.setItem("minimizeDescription", r.piped_minimizeDescription)
-		if (r.piped_playerAutoPlay !== undefined) localStorage.setItem("playerAutoPlay", r.piped_playerAutoPlay)
-		if (r.piped_proxyLBRY !== undefined) localStorage.setItem("proxyLBRY", r.piped_proxyLBRY)
-		if (r.piped_quality !== undefined) localStorage.setItem("quality", r.piped_quality)
-		if (r.piped_region !== undefined) localStorage.setItem("region", r.piped_region)
-		if (r.piped_selectedSkip !== undefined) localStorage.setItem("selectedSkip", r.piped_selectedSkip)
-		if (r.piped_sponsorblock !== undefined) localStorage.setItem("sponsorblock", r.piped_sponsorblock)
-		if (r.piped_theme !== undefined) localStorage.setItem("theme", r.piped_theme)
-		if (r.piped_volume !== undefined) localStorage.setItem("volume", r.piped_volume)
-		if (r.piped_watchHistory !== undefined) localStorage.setItem("watchHistory", r.piped_watchHistory)
-
-		window.close()
-	}
-)
diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js
deleted file mode 100644
index 32f06b9c..00000000
--- a/src/assets/javascripts/youtube/youtube.js
+++ /dev/null
@@ -1,792 +0,0 @@
-"use strict"
-
-window.browser = window.browser || window.chrome
-
-import utils from "../utils.js"
-
-const targets = [
-	/^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/,
-
-	/^https?:\/{2}img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api
-	/^https?:\/{2}(i|s)\.ytimg\.com\/vi\/.*\/..*/,
-
-	/^https?:\/{2}(www\.|music\.|)youtube\.com\/watch\?v\=..*/,
-
-	/^https?:\/{2}youtu\.be\/..*/,
-
-	/^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/,
-]
-
-const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube")
-const protocols = new Array("normal", "tor", "i2p", "loki")
-
-let redirects = {}
-
-for (let i = 0; i < frontends.length; i++) {
-	redirects[frontends[i]] = {}
-	for (let x = 0; x < protocols.length; x++) {
-		redirects[frontends[i]][protocols[x]] = []
-	}
-}
-
-function setRedirects(val) {
-	browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {
-		redirects = val
-		invidiousNormalRedirectsChecks = [...redirects.invidious.normal]
-		pipedNormalRedirectsChecks = [...redirects.piped.normal]
-		pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]
-		cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal]
-		for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
-			const a = invidiousNormalRedirectsChecks.indexOf(instance)
-			if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1)
-
-			const b = pipedNormalRedirectsChecks.indexOf(instance)
-			if (b > -1) pipedNormalRedirectsChecks.splice(b, 1)
-
-			const c = pipedMaterialNormalRedirectsChecks.indexOf(instance)
-			if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1)
-
-			const d = cloudtubeNormalRedirectsChecks.indexOf(instance)
-			if (c > -1) cloudtubeNormalRedirectsChecks.splice(d, 1)
-		}
-		browser.storage.local.set({
-			youtubeRedirects: redirects,
-			invidiousNormalRedirectsChecks,
-			invidiousTorRedirectsChecks: [...redirects.invidious.tor],
-			invidiousI2pRedirectsChecks: [...redirects.invidious.i2p],
-			invidiousLokiRedirectsChecks: [...redirects.invidious.loki],
-			pipedNormalRedirectsChecks,
-			pipedTorRedirectsChecks: [...redirects.piped.tor],
-			pipedI2pRedirectsChecks: [...redirects.piped.i2p],
-			pipedLokiRedirectsChecks: [...redirects.piped.loki],
-			pipedMaterialNormalRedirectsChecks,
-			pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
-			pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p],
-			pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki],
-			cloudtubeNormalRedirectsChecks,
-			cloudtubeTorRedirectsChecks: [...redirects.cloudtube.tor],
-			cloudtubeI2pRedirectsChecks: [...redirects.cloudtube.i2p],
-			cloudtubeLokiRedirectsChecks: [...redirects.cloudtube.loki],
-		})
-	})
-}
-
-let disableYoutube,
-	onlyEmbeddedVideo,
-	youtubeFrontend,
-	protocol,
-	protocolFallback,
-	youtubeEmbedFrontend,
-	youtubeRedirects,
-	invidiousNormalRedirectsChecks,
-	invidiousNormalCustomRedirects,
-	invidiousTorRedirectsChecks,
-	invidiousTorCustomRedirects,
-	invidiousI2pRedirectsChecks,
-	invidiousI2pCustomRedirects,
-	invidiousLokiRedirectsChecks,
-	invidiousLokiCustomRedirects,
-	pipedNormalRedirectsChecks,
-	pipedNormalCustomRedirects,
-	pipedTorRedirectsChecks,
-	pipedTorCustomRedirects,
-	pipedI2pRedirectsChecks,
-	pipedI2pCustomRedirects,
-	pipedLokiRedirectsChecks,
-	pipedLokiCustomRedirects,
-	pipedMaterialNormalRedirectsChecks,
-	pipedMaterialNormalCustomRedirects,
-	pipedMaterialTorRedirectsChecks,
-	pipedMaterialTorCustomRedirects,
-	pipedMaterialI2pRedirectsChecks,
-	pipedMaterialI2pCustomRedirects,
-	pipedMaterialLokiRedirectsChecks,
-	pipedMaterialLokiCustomRedirects,
-	cloudtubeNormalRedirectsChecks,
-	cloudtubeNormalCustomRedirects,
-	cloudtubeTorRedirectsChecks,
-	cloudtubeTorCustomRedirects,
-	cloudtubeI2pRedirectsChecks,
-	cloudtubeI2pCustomRedirects,
-	cloudtubeLokiRedirectsChecks,
-	cloudtubeLokiCustomRedirects
-
-function init() {
-	return new Promise(resolve => {
-		browser.storage.local.get(
-			[
-				"disableYoutube",
-				"onlyEmbeddedVideo",
-				"youtubeFrontend",
-				"protocol",
-				"protocolFallback",
-				"youtubeEmbedFrontend",
-				"youtubeRedirects",
-				"invidiousNormalRedirectsChecks",
-				"invidiousNormalCustomRedirects",
-				"invidiousTorRedirectsChecks",
-				"invidiousTorCustomRedirects",
-				"invidiousI2pRedirectsChecks",
-				"invidiousI2pCustomRedirects",
-				"invidiousLokiRedirectsChecks",
-				"invidiousLokiCustomRedirects",
-				"pipedNormalRedirectsChecks",
-				"pipedNormalCustomRedirects",
-				"pipedTorRedirectsChecks",
-				"pipedTorCustomRedirects",
-				"pipedI2pRedirectsChecks",
-				"pipedI2pCustomRedirects",
-				"pipedLokiRedirectsChecks",
-				"pipedLokiCustomRedirects",
-				"pipedMaterialNormalRedirectsChecks",
-				"pipedMaterialNormalCustomRedirects",
-				"pipedMaterialTorRedirectsChecks",
-				"pipedMaterialTorCustomRedirects",
-				"pipedMaterialI2pRedirectsChecks",
-				"pipedMaterialI2pCustomRedirects",
-				"pipedMaterialLokiRedirectsChecks",
-				"pipedMaterialLokiCustomRedirects",
-				"cloudtubeNormalRedirectsChecks",
-				"cloudtubeNormalCustomRedirects",
-				"cloudtubeTorRedirectsChecks",
-				"cloudtubeTorCustomRedirects",
-				"cloudtubeI2pRedirectsChecks",
-				"cloudtubeI2pCustomRedirects",
-				"cloudtubeLokiRedirectsChecks",
-				"cloudtubeLokiCustomRedirects",
-			],
-			r => {
-				disableYoutube = r.disableYoutube
-				onlyEmbeddedVideo = r.onlyEmbeddedVideo
-				youtubeFrontend = r.youtubeFrontend
-				protocol = r.protocol
-				protocolFallback = r.protocolFallback
-				youtubeEmbedFrontend = r.youtubeEmbedFrontend
-				youtubeRedirects = r.youtubeRedirects
-				invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks
-				invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects
-				invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks
-				invidiousTorCustomRedirects = r.invidiousTorCustomRedirects
-				invidiousI2pRedirectsChecks = r.invidiousI2pRedirectsChecks
-				invidiousI2pCustomRedirects = r.invidiousI2pCustomRedirects
-				invidiousLokiRedirectsChecks = r.invidiousLokiRedirectsChecks
-				invidiousLokiCustomRedirects = r.invidiousLokiCustomRedirects
-				pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks
-				pipedNormalCustomRedirects = r.pipedNormalCustomRedirects
-				pipedTorRedirectsChecks = r.pipedTorRedirectsChecks
-				pipedTorCustomRedirects = r.pipedTorCustomRedirects
-				pipedI2pRedirectsChecks = r.pipedI2pRedirectsChecks
-				pipedI2pCustomRedirects = r.pipedI2pCustomRedirects
-				pipedLokiRedirectsChecks = r.pipedLokiRedirectsChecks
-				pipedLokiCustomRedirects = r.pipedLokiCustomRedirects
-				pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks
-				pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects
-				pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks
-				pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects
-				pipedMaterialI2pRedirectsChecks = r.pipedMaterialI2pRedirectsChecks
-				pipedMaterialI2pCustomRedirects = r.pipedMaterialI2pCustomRedirects
-				pipedMaterialLokiRedirectsChecks = r.pipedMaterialLokiRedirectsChecks
-				pipedMaterialLokiCustomRedirects = r.pipedMaterialLokiCustomRedirects
-				cloudtubeNormalRedirectsChecks = r.cloudtubeNormalRedirectsChecks
-				cloudtubeNormalCustomRedirects = r.cloudtubeNormalCustomRedirects
-				cloudtubeTorRedirectsChecks = r.cloudtubeTorRedirectsChecks
-				cloudtubeTorCustomRedirects = r.cloudtubeTorCustomRedirects
-				cloudtubeI2pRedirectsChecks = r.cloudtubeI2pRedirectsChecks
-				cloudtubeI2pCustomRedirects = r.cloudtubeI2pCustomRedirects
-				cloudtubeLokiRedirectsChecks = r.cloudtubeLokiRedirectsChecks
-				cloudtubeLokiCustomRedirects = r.cloudtubeLokiCustomRedirects
-				resolve()
-			}
-		)
-	})
-}
-
-init()
-browser.storage.onChanged.addListener(init)
-
-function all() {
-	return [
-		...youtubeRedirects.invidious.normal,
-		...youtubeRedirects.invidious.tor,
-		...youtubeRedirects.invidious.i2p,
-		...youtubeRedirects.invidious.loki,
-
-		...youtubeRedirects.piped.normal,
-		...youtubeRedirects.piped.tor,
-		...youtubeRedirects.piped.i2p,
-		...youtubeRedirects.piped.loki,
-
-		...youtubeRedirects.pipedMaterial.normal,
-		...youtubeRedirects.pipedMaterial.tor,
-		...youtubeRedirects.pipedMaterial.i2p,
-		...youtubeRedirects.pipedMaterial.loki,
-
-		...youtubeRedirects.cloudtube.normal,
-		...youtubeRedirects.cloudtube.tor,
-		...youtubeRedirects.cloudtube.i2p,
-		...youtubeRedirects.cloudtube.loki,
-
-		...invidiousNormalCustomRedirects,
-		...invidiousTorCustomRedirects,
-		...invidiousI2pCustomRedirects,
-		...invidiousLokiCustomRedirects,
-
-		...pipedNormalCustomRedirects,
-		...pipedTorCustomRedirects,
-		...pipedI2pCustomRedirects,
-		...pipedLokiCustomRedirects,
-
-		...pipedMaterialNormalCustomRedirects,
-		...pipedMaterialTorCustomRedirects,
-		...pipedMaterialI2pCustomRedirects,
-		...pipedMaterialLokiCustomRedirects,
-
-		...cloudtubeNormalCustomRedirects,
-		...cloudtubeTorCustomRedirects,
-		...cloudtubeI2pCustomRedirects,
-		...cloudtubeLokiCustomRedirects,
-	]
-}
-
-function calculateFrontend(type) {
-	switch (type) {
-		case "main_frame":
-			return youtubeFrontend
-		case "sub_frame":
-			return youtubeEmbedFrontend
-	}
-}
-
-function getInstanceList(type) {
-	let instancesList = []
-	switch (calculateFrontend(type)) {
-		case "invidious":
-			switch (protocol) {
-				case "loki":
-					instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
-					break
-				case "i2p":
-					instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
-					break
-				case "tor":
-					instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
-			}
-			if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-				instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
-			}
-			break
-		case "piped":
-			switch (protocol) {
-				case "loki":
-					instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
-					break
-				case "i2p":
-					instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
-					break
-				case "tor":
-					instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
-			}
-			if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-				instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
-			}
-			break
-		case "pipedMaterial":
-			switch (protocol) {
-				case "loki":
-					instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
-					break
-				case "i2p":
-					instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
-					break
-				case "tor":
-					instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
-			}
-			if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-				instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
-			}
-		case "cloudtube":
-			switch (protocol) {
-				case "loki":
-					instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
-					break
-				case "i2p":
-					instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
-					break
-				case "tor":
-					instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
-			}
-			if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-				instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
-			}
-	}
-	return instancesList
-}
-
-function redirect(url, type, initiator, disableOverride) {
-	if (disableYoutube && !disableOverride) return
-	if (!targets.some(rx => rx.test(url.href))) return
-	if (initiator && all().includes(initiator.origin)) return "BYPASSTAB"
-
-	if (type != ("main_frame" || "sub_frame")) return
-	if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return // Don't redirect YouTube Player API.
-	if (onlyEmbeddedVideo == "onlyEmbedded" && type == "main_frame") return
-	if (onlyEmbeddedVideo == "onlyNotEmbedded" && type == "sub_frame") return
-
-	if (type == "main_frame") {
-		switch (youtubeFrontend) {
-			case "yatte":
-				return url.href.replace(/^https?:\/{2}/, "yattee://")
-			case "freetube":
-				return `freetube://https://youtube.com${url.pathname}${url.search}`
-		}
-	}
-
-	const instanceList = getInstanceList(type)
-	try {
-		if (instanceList.length >= 1) {
-			const randomInstance = utils.getRandomInstance(instanceList)
-			return `${randomInstance}${url.pathname}${url.search}`
-		}
-	} catch {
-		return
-	}
-}
-
-function reverse(url) {
-	return new Promise(async resolve => {
-		await init()
-		const protocolHost = utils.protocolHost(url)
-		if (!all().includes(protocolHost)) {
-			resolve()
-			return
-		}
-		resolve(`https://youtube.com${url.pathname}${url.search}`)
-	})
-}
-
-function switchInstance(url, disableOverride) {
-	return new Promise(async resolve => {
-		await init()
-		if (disableYoutube && !disableOverride) {
-			resolve()
-			return
-		}
-		const protocolHost = utils.protocolHost(url)
-		if (!all().includes(protocolHost)) {
-			resolve()
-			return
-		}
-
-		let instancesList = []
-		switch (protocol) {
-			case "loki":
-				switch (youtubeFrontend) {
-					case "invidious":
-						instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
-						break
-					case "piped":
-						instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
-						break
-					case "pipedMaterial":
-						instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
-						break
-					case "cloudtube":
-						instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
-				}
-				break
-			case "i2p":
-				switch (youtubeFrontend) {
-					case "invidious":
-						instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
-						break
-					case "piped":
-						instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
-						break
-					case "pipedMaterial":
-						instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
-						break
-					case "cloudtube":
-						instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
-				}
-				break
-			case "tor":
-				switch (youtubeFrontend) {
-					case "invidious":
-						instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
-						break
-					case "piped":
-						instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
-						break
-					case "pipedMaterial":
-						instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
-						break
-					case "cloudtube":
-						instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
-				}
-		}
-		if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-			switch (youtubeFrontend) {
-				case "invidious":
-					instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
-					break
-				case "piped":
-					instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
-					break
-				case "pipedMaterial":
-					instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
-					break
-				case "cloudtube":
-					instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
-			}
-		}
-
-		const i = instancesList.indexOf(protocolHost)
-		if (i > -1) instancesList.splice(i, 1)
-		if (instancesList.length == 0) {
-			resolve()
-			return
-		}
-
-		const randomInstance = utils.getRandomInstance(instancesList)
-		resolve(`${randomInstance}${url.pathname}${url.search}`)
-	})
-}
-
-function initDefaults() {
-	return new Promise(async resolve => {
-		fetch("/instances/data.json")
-			.then(response => response.text())
-			.then(async data => {
-				let dataJson = JSON.parse(data)
-				for (let i = 0; i < frontends.length; i++) {
-					redirects[frontends[i]] = dataJson[frontends[i]]
-				}
-				browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], async r => {
-					invidiousNormalRedirectsChecks = [...redirects.invidious.normal]
-					pipedNormalRedirectsChecks = [...redirects.piped.normal]
-					pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]
-					cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal]
-					for (const instance of [...r.cloudflareBlackList, ...r.offlineBlackList]) {
-						const a = invidiousNormalRedirectsChecks.indexOf(instance)
-						if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1)
-
-						const b = pipedNormalRedirectsChecks.indexOf(instance)
-						if (b > -1) pipedNormalRedirectsChecks.splice(b, 1)
-
-						const c = pipedMaterialNormalRedirectsChecks.indexOf(instance)
-						if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1)
-
-						const d = cloudtubeNormalRedirectsChecks.indexOf(instance)
-						if (c > -1) cloudtubeNormalRedirectsChecks.splice(d, 1)
-					}
-					browser.storage.local.set(
-						{
-							disableYoutube: false,
-							enableYoutubeCustomSettings: false,
-							onlyEmbeddedVideo: "both",
-							youtubeRedirects: redirects,
-							youtubeFrontend: "invidious",
-
-							invidiousNormalRedirectsChecks,
-							invidiousNormalCustomRedirects: [],
-
-							invidiousTorRedirectsChecks: [...redirects.invidious.tor],
-							invidiousTorCustomRedirects: [],
-
-							invidiousI2pRedirectsChecks: [...redirects.invidious.i2p],
-							invidiousI2pCustomRedirects: [],
-
-							invidiousLokiRedirectsChecks: [...redirects.invidious.loki],
-							invidiousLokiCustomRedirects: [],
-
-							pipedNormalRedirectsChecks,
-							pipedNormalCustomRedirects: [],
-
-							pipedTorRedirectsChecks: [...redirects.piped.tor],
-							pipedTorCustomRedirects: [],
-
-							pipedI2pRedirectsChecks: [...redirects.piped.i2p],
-							pipedI2pCustomRedirects: [],
-
-							pipedLokiRedirectsChecks: [...redirects.piped.loki],
-							pipedLokiCustomRedirects: [],
-
-							pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks,
-							pipedMaterialNormalCustomRedirects: [],
-
-							pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor],
-							pipedMaterialTorCustomRedirects: [],
-
-							pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p],
-							pipedMaterialI2pCustomRedirects: [],
-
-							pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki],
-							pipedMaterialLokiCustomRedirects: [],
-
-							cloudtubeNormalRedirectsChecks: cloudtubeNormalRedirectsChecks,
-							cloudtubeNormalCustomRedirects: [],
-
-							cloudtubeTorRedirectsChecks: [...redirects.cloudtube.tor],
-							cloudtubeTorCustomRedirects: [],
-
-							cloudtubeI2pRedirectsChecks: [...redirects.cloudtube.i2p],
-							cloudtubeI2pCustomRedirects: [],
-
-							cloudtubeLokiRedirectsChecks: [...redirects.cloudtube.loki],
-							cloudtubeLokiCustomRedirects: [],
-
-							youtubeEmbedFrontend: "invidious",
-						},
-						() => resolve()
-					)
-				})
-			})
-	})
-}
-
-function copyPasteInvidiousCookies(test, from) {
-	return new Promise(async resolve => {
-		await init()
-		if (disableYoutube || youtubeFrontend != "invidious") {
-			resolve()
-			return
-		}
-		const protocolHost = utils.protocolHost(from)
-		if (
-			![
-				...invidiousNormalRedirectsChecks,
-				...invidiousTorRedirectsChecks,
-				...invidiousNormalCustomRedirects,
-				...invidiousTorCustomRedirects,
-				...invidiousI2pCustomRedirects,
-				...invidiousLokiCustomRedirects,
-			].includes(protocolHost)
-		) {
-			resolve()
-			return
-		}
-		if (!test) {
-			let checkedInstances = []
-
-			if (protocol == "loki") checkedInstances = [...invidiousLokiCustomRedirects]
-			else if (protocol == "i2p") checkedInstances = [...invidiousI2pCustomRedirects]
-			else if (protocol == "tor") checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
-			if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
-				checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
-			}
-			const i = checkedInstances.indexOf(protocolHost)
-			if (i !== -1) checkedInstances.splice(i, 1)
-			await utils.copyCookie("invidious", from, checkedInstances, "PREFS")
-		}
-		resolve(true)
-	})
-}
-
-function copyPastePipedLocalStorage(test, url, tabId) {
-	return new Promise(async resolve => {
-		await init()
-		if (disableYoutube || youtubeFrontend != "piped") {
-			resolve()
-			return
-		}
-		const protocolHost = utils.protocolHost(url)
-		if (
-			![...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks, ...pipedTorRedirectsChecks, ...pipedTorCustomRedirects, ...pipedI2pCustomRedirects, ...pipedLokiCustomRedirects].includes(
-				protocolHost
-			)
-		) {
-			resolve()
-			return
-		}
-
-		if (!test) {
-			browser.tabs.executeScript(tabId, {
-				file: "/assets/javascripts/youtube/get_piped_preferences.js",
-				runAt: "document_start",
-			})
-
-			let checkedInstances = []
-			if (protocol == "loki") checkedInstances = [...pipedLokiCustomRedirects]
-			else if (protocol == "i2p") checkedInstances = [...pipedI2pCustomRedirects]
-			else if (protocol == "tor") checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
-			if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") {
-				checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks]
-			}
-			const i = checkedInstances.indexOf(protocolHost)
-			if (i !== -1) checkedInstances.splice(i, 1)
-			for (const to of checkedInstances) {
-				browser.tabs.create({ url: to }, tab =>
-					browser.tabs.executeScript(tab.id, {
-						file: "/assets/javascripts/youtube/set_piped_preferences.js",
-						runAt: "document_start",
-					})
-				)
-			}
-		}
-		resolve(true)
-	})
-}
-
-function copyPastePipedMaterialLocalStorage(test, url, tabId) {
-	return new Promise(async resolve => {
-		await init()
-		if (disableYoutube || youtubeFrontend != "pipedMaterial") {
-			resolve()
-			return
-		}
-		const protocolHost = utils.protocolHost(url)
-		if (
-			![
-				...pipedMaterialNormalRedirectsChecks,
-				...pipedMaterialNormalCustomRedirects,
-				//...pipedMaterialTorRedirectsChecks,
-				...pipedMaterialTorCustomRedirects,
-				...pipedMaterialI2pCustomRedirects,
-				...pipedMaterialLokiCustomRedirects,
-			].includes(protocolHost)
-		) {
-			resolve()
-			return
-		}
-
-		if (!test) {
-			browser.tabs.executeScript(tabId, {
-				file: "/assets/javascripts/youtube/get_pipedMaterial_preferences.js",
-				runAt: "document_start",
-			})
-
-			let checkedInstances = []
-			if (protocol == "loki") checkedInstances = [...pipedMaterialLokiCustomRedirects]
-			else if (protocol == "i2p") checkedInstances = [...pipedMaterialI2pCustomRedirects]
-			else if (protocol == "tor") checkedInstances = [...pipedMaterialTorCustomRedirects] //...pipedMaterialTorRedirectsChecks,
-			if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-				checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
-			}
-			const i = checkedInstances.indexOf(protocolHost)
-			if (i !== -1) checkedInstances.splice(i, 1)
-			for (const to of checkedInstances)
-				browser.tabs.create({ url: to }, tab =>
-					browser.tabs.executeScript(tab.id, {
-						file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js",
-						runAt: "document_start",
-					})
-				)
-		}
-		resolve(true)
-	})
-}
-
-function removeXFrameOptions(e) {
-	let isChanged = false
-
-	if (e.type == "main_frame") {
-		for (const i in e.responseHeaders) {
-			if (e.responseHeaders[i].name == "content-security-policy") {
-				let instancesList = []
-				switch (protocol) {
-					case "loki":
-						switch (youtubeFrontend) {
-							case "invidious":
-								instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects]
-								break
-							case "piped":
-								instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects]
-								break
-							case "pipedMaterial":
-								instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects]
-								break
-							case "cloudtube":
-								instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects]
-						}
-						break
-					case "i2p":
-						switch (youtubeFrontend) {
-							case "invidious":
-								instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects]
-								break
-							case "piped":
-								instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects]
-								break
-							case "pipedMaterial":
-								instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects]
-								break
-							case "cloudtube":
-								instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects]
-						}
-						break
-					case "tor":
-						switch (youtubeFrontend) {
-							case "invidious":
-								instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
-								break
-							case "piped":
-								instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
-								break
-							case "pipedMaterial":
-								instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects]
-								break
-							case "cloudtube":
-								instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects]
-						}
-				}
-				if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") {
-					switch (youtubeFrontend) {
-						case "invidious":
-							instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]
-							break
-						case "piped":
-							instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]
-							break
-						case "pipedMaterial":
-							instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]
-							break
-						case "cloudtube":
-							instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects]
-					}
-				}
-				let securityPolicyList = e.responseHeaders[i].value.split(";")
-				for (const i in securityPolicyList) securityPolicyList[i] = securityPolicyList[i].trim()
-
-				let newSecurity = ""
-				for (const item of securityPolicyList) {
-					if (item.trim() == "") continue
-					let regex = item.match(/([a-z-]{0,}) (.*)/)
-					if (regex == null) continue
-					let [, key, vals] = regex
-					if (key == "frame-src") vals = vals + " " + instancesList.join(" ")
-					newSecurity += key + " " + vals + "; "
-				}
-
-				e.responseHeaders[i].value = newSecurity
-				isChanged = true
-			}
-		}
-	} else if (e.type == "sub_frame") {
-		const url = new URL(e.url)
-		const protocolHost = utils.protocolHost(url)
-		if (all().includes(protocolHost)) {
-			for (const i in e.responseHeaders) {
-				if (e.responseHeaders[i].name == "x-frame-options") {
-					e.responseHeaders.splice(i, 1)
-					isChanged = true
-				} else if (e.responseHeaders[i].name == "content-security-policy") {
-					e.responseHeaders.splice(i, 1)
-					isChanged = true
-				}
-			}
-		}
-	}
-	if (isChanged) return { responseHeaders: e.responseHeaders }
-}
-
-export default {
-	setRedirects,
-	copyPastePipedLocalStorage,
-	copyPastePipedMaterialLocalStorage,
-	copyPasteInvidiousCookies,
-	redirect,
-	reverse,
-	switchInstance,
-	initDefaults,
-	removeXFrameOptions,
-}