diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 6801d54..e47b629 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -431,6 +431,30 @@ function rewrite(url, frontend, randomInstance) { case "skyview": if (url.pathname == '/') return randomInstance return `${randomInstance}?url=${encodeURIComponent(url.href)}` + case "nitter": { + let search = new URLSearchParams(url.search) + + search.delete("ref_src") + search.delete("ref_url") + search.delete("s") // type of device that shared the link + search.delete("t") // some sort of tracking ID + + search = search.toString() + if (search !== "") search = `?${search}` + + if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") { + try { + const [, id, format, extra] = search.match(/(.*)\?format=(.*)&(.*)/) + const query = encodeURIComponent(`${id}.${format}?${extra}`) + return `${randomInstance}/pic${url.pathname}${query}` + } catch { + return `${randomInstance}/pic${url.pathname}${search}` + } + } + if (url.pathname.split("/").includes("tweets")) return `${randomInstance}${url.pathname.replace("/tweets", "")}${search}` + if (url.host == "t.co") return `${randomInstance}/t.co${url.pathname}` + return `${randomInstance}${url.pathname}${search}#m` + } case "priviblur": { if (url.hostname == "www.tumblr.com") return `${randomInstance}${url.pathname}${url.search}` if (url.hostname.startsWith("assets")) return `${randomInstance}/tblr/assets${url.pathname}${url.search}` @@ -689,6 +713,7 @@ const defaultInstances = { 'tekstoLibre': ['https://davilarek.github.io/TekstoLibre'], 'skyview': ['https://skyview.social'], 'priviblur': ['https://pb.bloat.cat'], + 'nitter': ['https://nitter.privacydev.net'], } function initDefaults() { diff --git a/src/config.json b/src/config.json index 21e468d..941d891 100644 --- a/src/config.json +++ b/src/config.json @@ -167,6 +167,36 @@ "imageType": "png", "url": "https://music.youtube.com" }, + "twitter": { + "frontends": { + "nitter": { + "name": "Nitter", + "embeddable": true, + "instanceList": true, + "url": "https://github.com/zedeus/nitter", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|mobile\\.)?twitter\\.com\\/", + "^https?:\\/{2}(www\\.|mobile\\.)?x\\.com\\/", + "^https?:\\/{2}(pbs\\.|video\\.)twimg\\.com\\/", + "^https?:\\/{2}platform\\.x\\.com/embed\\/", + "^https?:\\/{2}platform\\.twitter\\.com/embed\\/", + "^https?:\\/{2}t\\.co\\/" + ], + "name": "Twitter", + "options": { + "enabled": false, + "redirectType": "main_frame", + "unsupportedUrls": "bypass", + "frontend": "nitter", + "instance": "public" + }, + "imageType": "png", + "embeddable": true, + "url": "https://twitter.com" + }, "bluesky": { "frontends": { "skyview": { @@ -1073,4 +1103,4 @@ "url": "https://paste.libredirect.invalid" } } -} +} \ No newline at end of file