libredirect/src/assets/javascripts/helpers/tiktok.js

178 lines
5.6 KiB
JavaScript

window.browser = window.browser || window.chrome;
import commonHelper from './common.js'
const targets = [
/^https?:\/{2}(www\.|)tiktok\.com.*/
];
let redirects = {
"proxiTok": {
"normal": [],
"tor": []
}
}
const getRedirects = () => redirects;
const getCustomRedirects = function () {
return {
"proxiTok": {
"normal": [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]
},
};
};
function setRedirects(val) {
redirects.proxiTok = val;
browser.storage.local.set({ tiktokRedirects: redirects })
console.log("tiktokRedirects: ", val)
for (const item of proxiTokNormalRedirectsChecks)
if (!redirects.proxiTok.normal.includes(item)) {
var index = proxiTokNormalRedirectsChecks.indexOf(item);
if (index !== -1) proxiTokNormalRedirectsChecks.splice(index, 1);
}
setProxiTokNormalRedirectsChecks(proxiTokNormalRedirectsChecks);
for (const item of proxiTokTorRedirectsChecks)
if (!redirects.proxiTok.normal.includes(item)) {
var index = proxiTokTorRedirectsChecks.indexOf(item);
if (index !== -1) proxiTokTorRedirectsChecks.splice(index, 1);
}
setProxiTokTorRedirectsChecks(proxiTokTorRedirectsChecks);
}
let proxiTokNormalRedirectsChecks;
const getProxiTokNormalRedirectsChecks = () => proxiTokNormalRedirectsChecks;
function setProxiTokNormalRedirectsChecks(val) {
proxiTokNormalRedirectsChecks = val;
browser.storage.local.set({ proxiTokNormalRedirectsChecks })
console.log("proxiTokNormalRedirectsChecks: ", val)
}
let proxiTokTorRedirectsChecks;
const getProxiTokTorRedirectsChecks = () => proxiTokTorRedirectsChecks;
function setProxiTokTorRedirectsChecks(val) {
proxiTokTorRedirectsChecks = val;
browser.storage.local.set({ proxiTokTorRedirectsChecks })
console.log("proxiTokTorRedirectsChecks: ", val)
}
let proxiTokNormalCustomRedirects = [];
const getProxiTokNormalCustomRedirects = () => proxiTokNormalCustomRedirects;
function setProxiTokNormalCustomRedirects(val) {
proxiTokNormalCustomRedirects = val;
browser.storage.local.set({ proxiTokNormalCustomRedirects })
console.log("proxiTokNormalCustomRedirects: ", val)
}
let proxiTokTorCustomRedirects = [];
const getProxiTokTorCustomRedirects = () => proxiTokTorCustomRedirects;
function setProxiTokTorCustomRedirects(val) {
proxiTokTorCustomRedirects = val;
browser.storage.local.set({ proxiTokTorCustomRedirects })
console.log("proxiTokTorCustomRedirects: ", val)
}
let disable;
const getDisable = () => disable;
function setDisable(val) {
disable = val;
browser.storage.local.set({ disableTiktok: disable })
}
let protocol;
const getProtocol = () => protocol;
function setProtocol(val) {
protocol = val;
browser.storage.local.set({ tiktokProtocol: val })
console.log("tiktokProtocol: ", val)
}
function isTiktok(url, initiator) {
if (disable) return false;
if (initiator && ([...redirects.proxiTok.normal, ...proxiTokNormalCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))) return false;
return targets.some(rx => rx.test(url.href));
}
function redirect(url, type) {
// https://www.tiktok.com/@keysikaspol/video/7061265241887345946
// https://www.tiktok.com/@keysikaspol
if (type != "main_frame") return null;
let instancesList;
if (protocol == 'normal') instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects];
if (protocol == 'tor') instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList);
let pathName = url.pathname.replace(new RegExp(/@.*\/(?=video)/), "");
return `${randomInstance}${pathName}`;
}
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(
[
"disableTiktok",
"tiktokRedirects",
"proxiTokNormalRedirectsChecks",
"proxiTokNormalCustomRedirects",
"proxiTokTorRedirectsChecks",
"proxiTokTorCustomRedirects",
"tiktokProtocol"
],
r => {
redirects.proxiTok = dataJson.proxiTok;
disable = r.disableTiktok ?? false;
protocol = r.tiktokProtocol ?? "normal";
if (r.tiktokRedirects) redirects = r.tiktokRedirects;
proxiTokNormalRedirectsChecks = r.proxiTokNormalRedirectsChecks ?? [...redirects.proxiTok.normal];
proxiTokNormalCustomRedirects = r.proxiTokNormalCustomRedirects ?? [];
proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks ?? [...redirects.proxiTok.tor];
proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects ?? [];
resolve();
}
)
});
});
}
export default {
getRedirects,
getCustomRedirects,
setRedirects,
getDisable,
setDisable,
getProtocol,
setProtocol,
getProxiTokNormalRedirectsChecks,
setProxiTokNormalRedirectsChecks,
getProxiTokTorRedirectsChecks,
setProxiTokTorRedirectsChecks,
getProxiTokTorCustomRedirects,
setProxiTokTorCustomRedirects,
getProxiTokNormalCustomRedirects,
setProxiTokNormalCustomRedirects,
redirect,
isTiktok,
init,
};