Greasy Fork 还支持 简体中文。

Proxy Redirect

Redirect to privacy respecting proxy frontends

目前為 2023-05-10 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Proxy Redirect
  3. // @author Schimon Jehudah, Adv.
  4. // @homepageURL https://openuserjs.org/scripts/sjehuda/Proxy_Redirect
  5. // @supportURL https://openuserjs.org/scripts/sjehuda/Proxy_Redirect/issues
  6. // @copyright 2023, Schimon Jehudah (http://schimon.i2p)
  7. // @license AGPL-3.0-only; https://www.gnu.org/licenses/agpl-3.0.en.html
  8. // @namespace org.openuserjs.sjehuda.proxy-redirect
  9. // @description Redirect to privacy respecting proxy frontends
  10. // @run-at document-start
  11. // @version 23.04.25
  12. // @grant GM_xmlhttpRequest
  13. // @grant GM.xmlHttpRequest
  14. // @exclude *#noredirect
  15. // @match *://bandcamp.com/*
  16. // @match *://*.bandcamp.com/*
  17. // @match *://bilibili.com/*
  18. // @match *://*.bilibili.com/*
  19. // @match *://bing.com/maps*
  20. // @match *://www.bing.com/maps*
  21. // @match *://bing.com/search*
  22. // @match *://www.bing.com/search*
  23. // @match *://bt4g.org/magnet/*
  24. // @match *://*.bt4g.org/magnet/*
  25. // @match *://*.fandom.com/wiki/*
  26. // @match *://gist.github.com/*
  27. // @match *://github.com/*
  28. // @match *://*.github.com/*
  29. // @exclude *://github.com/*/*/*
  30. // @exclude *://github.com/events
  31. // @exclude *://github.com/events/*
  32. // @exclude *://github.com/login*
  33. // @exclude *://github.com/sessions*
  34. // @exclude *://github.com/signup*
  35. // @exclude *://github.com/topics
  36. // @exclude *://github.com/topics/*
  37. // @match *://gitlab.com/*
  38. // @match *://goodreads.com/*
  39. // @match *://*.goodreads.com/*
  40. // @match *://google.com/maps*
  41. // @match *://www.google.com/maps*
  42. // @match *://google.(au|co.il|co.uk|com|de|fr|it|jp|ly|mx|no|nz|pl|ps|ru|tr|ua)/search*
  43. // @match *://www.google.(au|co.il|co.uk|com|de|fr|it|jp|ly|mx|no|nz|pl|ps|ru|tr|ua)/search*
  44. // @match *://google.com/search*
  45. // @match *://www.google.com/search*
  46. // @match *://google.com/sorry*
  47. // @match *://consent.google.com/*
  48. // @match *://www.google.com/sorry*
  49. // @match *://translate.google.com/*
  50. // @match *://imdb.com/*
  51. // @match *://www.imdb.com/*
  52. // @exclude *://imdb.com/*/*/reviews/*
  53. // @exclude *://www.imdb.com/*/*/reviews/*
  54. // @match *://imgur.com/*
  55. // @match *://i.imgur.com/*
  56. // @match *://instagram.com/*
  57. // @match *://www.instagram.com/*
  58. // @match *://invidious-invidious.invidious.svc.cluster.local:3000/*
  59. // @match *://medium.com/*
  60. // @match *://*.medium.com/*
  61. // @exclude */v2/*
  62. // @exclude */c/*
  63. // @exclude */fit/*
  64. // @exclude */resize:fit:*
  65. // @exclude */format:*
  66. // @match *://moovitapp.com/*
  67. // @match *://*.moovitapp.com/*
  68. // @match *://odysee.com/*
  69. // @match *://*.odysee.com/*
  70. // @match *://quora.com/*
  71. // @match *://*.quora.com/*
  72. // @match *://reuters.com/*
  73. // @match *://*.reuters.com/*
  74. // @match *://tiktok.com/*
  75. // @match *://*.tiktok.com/*
  76. // @match *://reddit.com/*
  77. // @match *://*.reddit.com/*
  78. // @match *://stackoverflow.com/questions/*
  79. // @exclude *://stackoverflow.com/questions/tagged/*
  80. // @match *://www.torrentdownload.info/*
  81. // @exclude *://www.torrentdownload.info/feed_latest
  82. // @exclude *://www.torrentdownload.info/search?q=*
  83. // @match *://torrentz.eu/*
  84. // @exclude *://torrentz.eu/search?f=*
  85. // @match *://*.torrentz.eu/*
  86. // @exclude *://*.torrentz.eu/search?f=*
  87. // @match *://torrentz.me/*
  88. // @exclude *://torrentz.me/search?f=*
  89. // @match *://*.torrentz.me/*
  90. // @exclude *://*.torrentz.me/search?f=*
  91. // @match *://torrentz2.eu/*
  92. // @exclude *://torrentz2.eu/search?f=*
  93. // @match *://torrentz2.is/*
  94. // @exclude *://torrentz.is/search?f=*
  95. // @match *://*.torrentz2.is/*
  96. // @exclude *://*.torrentz.is/search?f=*
  97. // @match *://twitter.com/*
  98. // @exclude *://twitter.com/intent/*
  99. // @match *://*.twitter.com/*
  100. // @exclude *://*.twitter.com/intent/*
  101. // @match *://urbandictionary.com/*
  102. // @match *://*.urbandictionary.com/*
  103. // @match *://userscripts.org/*
  104. // @match *://*.userscripts.org/*
  105. // @match *://waze.com/live-map*
  106. // @match *://*.waze.com/live-map*
  107. // @match *://waze.com/ul*
  108. // @match *://*.waze.com/ul*
  109. // @match *://ul.waze.com/ul*
  110. // @match *://wikimap.toolforge.org/*
  111. // @match *://wikipedia.org/*
  112. // @match *://*.wikipedia.org/*
  113. // @match *://yahoo.com/search*
  114. // @match *://www.yahoo.com/search*
  115. // @match *://search.yahoo.co.jp/search?p=*
  116. // @match *://search.yahoo.com/?q=*
  117. // @match *://yandex.com/search*
  118. // @match *://www.yandex.com/search*
  119. // @match *://yandex.com/maps/*
  120. // @match *://www.yandex.com/maps/*
  121. // @match *://yandex.ru/search*
  122. // @match *://www.yandex.ru/search*
  123. // @match *://translate.yandex.com/*
  124. // @match *://youtu.be/*
  125. // @match *://youtube.com/*
  126. // @match *://*.youtube.com/*
  127. // @match *://youtube-nocookie.com/*
  128. // @match *://*.youtube-nocookie.com/*
  129. // @connect 076.ne.jp
  130. // @connect 1d4.us
  131. // @connect 2syis2nnyytz6jnusnjurva4swlaizlnleiks5mjp46phuwjbdjqwgqd.onion
  132. // @connect 40two.app
  133. // @connect 42l.fr
  134. // @connect 777.tf
  135. // @connect actionsack.com
  136. // @connect adminforge.de
  137. // @connect akisblack.dev
  138. // @connect albony.xyz
  139. // @connect alefvanoon.xyz
  140. // @connect artemislena.eu
  141. // @connect asynchronousexchange.com
  142. // @connect batsense.net
  143. // @connect bibliogram.art
  144. // @connect biblioreads.ga
  145. // @connect biblioreads.ml
  146. // @connect bloatcat.tk
  147. // @connect btdig.i2p
  148. // @connect btdig.com
  149. // @connect btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion
  150. // @connect bus-hit.me
  151. // @connect cadence.moe
  152. // @connect catfluori.de
  153. // @connect cblgh.org
  154. // @connect censors.us
  155. // @connect citizen4.eu
  156. // @connect cowfee.moe
  157. // @connect crewz.me
  158. // @connect cthd.icu
  159. // @connect datatunnel.xyz
  160. // @connect domain.glass
  161. // @connect duckdns.org
  162. // @connect dynabyte.ca
  163. // @connect ebnar.xyz
  164. // @connect esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion
  165. // @connect esmailelbob.xyz
  166. // @connect etsi.me
  167. // @connect farside.link
  168. // @connect fdn.fr
  169. // @connect flokinet.to
  170. // @connect flux.industries
  171. // @connect fmac.xyz
  172. // @connect foss.wtf
  173. // @connect froth.zone
  174. // @connect ggc-project.de
  175. // @connect gnu.style
  176. // @connect grimneko.de
  177. // @connect hostux.net
  178. // @connect hyperborea.cloud
  179. // @connect iket.me
  180. // @connect incogsnoo.com
  181. // @connect invak.id
  182. // @connect jamiethalacker.dev
  183. // @connect jeikobu.net
  184. // @connect josias.dev
  185. // @connect jpope.org
  186. // @connect k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq.b32.i2p
  187. // @connect kavin.rocks
  188. // @connect kylrth.com
  189. // @connect ledditqo2mxfvlgobxnlhrkq4dh34jss6evfkdkb2thlvy6dn4f4gpyd.onion
  190. // @connect libredd.it
  191. // @connect libreddit.de
  192. // @connect libreddit.eu.org
  193. // @connect libreddit.hu
  194. // @connect libreddit.nl
  195. // @connect lingva.ml
  196. // @connect lqs5fjmajyp7rvp4qvyubwofzi6d4imua7vs237rkc4m5qogitqwrgyd.onion
  197. // @connect lunar.icu
  198. // @connect melmac.space
  199. // @connect mint.lgbt
  200. // @connect moeyy.cn
  201. // @connect mutahar.rocks
  202. // @connect moomoo.me
  203. // @connect mywire.org
  204. // @connect namazso.eu
  205. // @connect mdosch.de
  206. // @connect monocles.de
  207. // @connect neet.works
  208. // @connect neuters.de
  209. // @connect netlify.app
  210. // @connect nitter.ca
  211. // @connect nitter.hu
  212. // @connect nitter.it
  213. // @connect nitter.net
  214. // @connect nixnet.services
  215. // @connect northboot.xyz
  216. // @connect nttr.stream
  217. // @connect odyssey346.dev
  218. // @connect ononoki.org
  219. // @connect ooguy.com
  220. // @connect openstreetmap.org
  221. // @connect osi.kr
  222. // @connect oversold.host
  223. // @connect owacon.moe
  224. // @connect pabloferreiro.es
  225. // @connect paulgo.io
  226. // @connect phreedom.club
  227. // @connect piped.video
  228. // @connect poketube.fun
  229. // @connect privacy.com.de
  230. // @connect projectsegfau.lt
  231. // @connect procurx.pt
  232. // @connect prvcy.eu
  233. // @connect puffyan.us
  234. // @connect pussthecat.org
  235. // @connect r.nf
  236. // @connect rabbit-company.com
  237. // @connect rasp.fr
  238. // @connect resrv.org
  239. // @connect riverside.rocks
  240. // @connect rtrace.io
  241. // @connect scribe.rip
  242. // @connect searx.be
  243. // @connect searx.ninja
  244. // @connect searx.ru
  245. // @connect sethforprivacy.com
  246. // @connect simplytranslate.org
  247. // @connect slipfox.xyz
  248. // @connect smnz.de
  249. // @connect snopyta.org
  250. // @connect sny.sh
  251. // @connect some-things.org
  252. // @connect sp-codes.de
  253. // @connect spike.codes
  254. // @connect spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion
  255. // @connect strongthany.cc
  256. // @connect stuehieyr.com
  257. // @connect sugoma.tk
  258. // @connect syncpundit.com
  259. // @connect teddit.i2p
  260. // @connect teddit.net
  261. // @connect tedditfyn6idalzso5wam5qd3kdtxoljjhbrbbx34q2xkcisvshuytad.onion
  262. // @connect theanonymouse.xyz
  263. // @connect tinfoil-hat.net
  264. // @connect tiekoetter.com
  265. // @connect tokhmi.xyz
  266. // @connect totaldarkness.net
  267. // @connect trom.tf
  268. // @connect tromdienste.de
  269. // @connect tux.land
  270. // @connect tuxcloud.net
  271. // @connect tyil.nl
  272. // @connect unixfox.eu
  273. // @connect unofficialbird.com
  274. // @connect userscripts-mirror.org
  275. // @connect vernapl3lpo3huqdx3pjzxqgdgavxjlmdskbvejh2gfqgmjuyvxq.b32.i2p
  276. // @connect vernaqj2qr2pijpgvf3od6ssc3ulz3nv52gwr3hba5l6humuzmgq.b32.i2p
  277. // @connect vernmzgraj6aaoafmehupvtkkynpaa67rxcdj2kinwiy6konn6rq.b32.i2p
  278. // @connect vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion
  279. // @connect vern.cc
  280. // @connect vern.i2p
  281. // @connect voidnet.tech
  282. // @connect vojkovic.xyz
  283. // @connect voring.me
  284. // @connect walkx.org
  285. // @connect webheberg.info
  286. // @connect weblibre.org
  287. // @connect whatever.social
  288. // @connect whatevertinfoil.de
  289. // @connect wikiless.org
  290. // @connect winscloud.net
  291. // @connect xn--17b.net
  292. // @connect yewtu.be
  293. // @connect yonalee.eu
  294. // @connect xanny.family
  295. // @connect yacy.iko.soy
  296. // @connect zackptg5.com
  297. // @connect zaggy.nl
  298. // @connect zhaocloud.net
  299. // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjRtbSIgaGVpZ2h0PSI2NG1tIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTkycHg7bGluZS1oZWlnaHQ6MDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwO3dyaXRpbmctbW9kZTpsci10YjtkaXJlY3Rpb246bHRyO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7ZG9taW5hbnQtYmFzZWxpbmU6YXV0bztiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDtzaGFwZS1wYWRkaW5nOjA7c2hhcGUtbWFyZ2luOjA7aW5saW5lLXNpemU6MDtvcGFjaXR5OjE7ZmlsbDojMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxLjI3OTgyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3N0b3AtY29sb3I6IzAwMDtzdG9wLW9wYWNpdHk6MSIgeD0iMTcuMDA1MjQ1IiB5PSIzMS42NTg0MDUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00LjQzNjg1NjQgNDAuODk0OTQpIHNjYWxlKC4yNjQ1OCkiPjx0c3BhbiB4PSIxNy4wMDUyNDUiIHk9IjMxLjY1ODQwNSIgc3R5bGU9ImZvbnQtc2l6ZToxOTJweCI+8J+luDwvdHNwYW4+PC90ZXh0Pjwvc3ZnPgo=
  300. // ==/UserScript==
  301.  
  302. //TODO
  303. //Rebrand: Open Redirect, Proxy Redirect
  304. //Rebrand: Freelink, LibreProxy, Libreproxy, Open Link, Proxy Direct, Proxy Link, Proxy Redirect
  305.  
  306. // Break down captcha and ?continue=
  307.  
  308. // ➿⏭️🔁➰
  309.  
  310. /*
  311.  
  312. ## 🔀 FREEdirector
  313. ### _Redirection userscript for privacy-oriented and open-source proxy frontends._
  314.  
  315. FREEdirector provides links that automatically redirect to working instances of privacy-oriented frontends, such as Scribe, Nitter, Libreddit, etc.
  316.  
  317. This allows more reliable access to available public instances per service, while also helping to distribute traffic more evenly across all instances and avoid performance bottlenecks and rate-limiting.
  318.  
  319. #### Upcoming changes:
  320. - Check instance http status using [GM.xmlHttpRequest](https://sourceforge.net/p/greasemonkey/wiki/GM_xmlhttpRequest/).
  321.  
  322. ### 🔀 Designed for use with [FREELink](https://openuserjs.org/scripts/sjehuda/FREELink)
  323.  
  324. ---
  325.  
  326. ### Please visit our counterparts
  327.  
  328. ### Userscript
  329.  
  330. #### [GreaseMonkey-Redirect](https://codeberg.org/zortazert/GreaseMonkey-Redirect)
  331. Collection of user created GreaseMonkey scripts that will convert privacy disrespecting websites to FOSS/Libre alternatives.
  332.  
  333. #### [Search Engine Jumper](https://openuserjs.org/scripts/sycom/Search_Engine_Jumper) (Search Engine Kangaroo)
  334. When using some search engines the script creates links to a long list of alternative search engines. Don't be a search engine prisoner
  335.  
  336. ### Web Extension
  337.  
  338. #### [Privacy-Redirect](https://github.com/SimonBrazell/privacy-redirect#get)
  339. Simple web extension that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly counterparts.
  340.  
  341. #### [LibRedirect](https://libredirect.github.io/)
  342. ##### Based on [Privacy-Redirect](#privacy-redirect)
  343. Web extension that redirects YouTube, Twitter, Instagram... requests to privacy friendly frontends and backends.
  344.  
  345. #### [Invidition](https://codeberg.org/Booteille/invidition#downloads)
  346. ##### Deprecated in favor of [Privacy-Redirect](#privacy-redirect)
  347. Invidition is an extension allowing you to redirect YouTube, Instagram and Twitter requests to their counterparts before loading them. Invidition has the purpose to not let any YouTube, Instagram or Twitter requests pass.
  348.  
  349. ### Mobile App
  350.  
  351. #### [UntrackMe](https://framagit.org/tom79/nitterizeme#download)
  352. A small application that allows to handle Twitter and Youtube to redirect them to their Nitter or Invidious URLs and open them with the appropriate app.
  353.  
  354. ### Server
  355.  
  356. #### [Farside](https://farside.link/)
  357. Redirecting service for FOSS frontends.
  358.  
  359. NOTE
  360. This program was inspired by Farside project from Ben Busby
  361. For more information: https://farside.link
  362.  
  363. TODO Brand
  364. FreeDirector, Free Direct, FreeDirect.js
  365. Open Redirector, Open Redirect, Open Direct, OpenDirect.js
  366. Redirect.js, Redirect.user.js, Redirector.js
  367. UserDirect, UserRedirect
  368.  
  369. FIXME
  370. // @match *://*.imgur.com/*
  371. // @exclude *://i.*.imgur.com/*
  372.  
  373. FIXME RegEx
  374. // @exclude /*.medium\.com\/*\/(c|fit|v2)\/.*$/
  375.  
  376. */
  377.  
  378. // https://github.com/makyen
  379. // https://github.com/greasemonkey/greasemonkey/issues/3160#issuecomment-1456758080
  380. const gmXmlhttpRequest = typeof GM_xmlhttpRequest === 'function' ? GM_xmlhttpRequest : GM.xmlHttpRequest;
  381.  
  382. var
  383. loop, attemptCounter = 0,
  384. hostname, pathname,
  385. inst, addr, brand, code, cord, hash, lang, name, para, paras,
  386. partedURL, path, proxyArray, urlArray, instance, modURL, newURL;
  387.  
  388. //const url = location.href;
  389.  
  390. const proxy = {
  391. 'anonymousoverflow' : [
  392. 'http://anonymousoverflow.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion/',
  393. 'http://ao.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion/',
  394. 'http://vernmzgraj6aaoafmehupvtkkynpaa67rxcdj2kinwiy6konn6rq.b32.i2p/',
  395. 'https://anonymousoverflow.esmailelbob.xyz',
  396. 'https://anonymousoverflow.vern.cc',
  397. 'https://ao.bloatcat.tk/',
  398. //'https://ao.foss.wtf',
  399. //'https://ao.vern.cc',
  400. 'https://code.whatever.social',
  401. 'https://stackoverflow.vern.cc',
  402. //'https://overflow.777.tf',
  403. 'https://overflow.adminforge.de',
  404. 'https://overflow.hostux.net',
  405. 'https://overflow.lunar.icu',
  406. 'https://overflow.smnz.de'
  407. ], // AnonymousOverflow
  408. 'bibliogram' : [
  409. 'http://qsuiaf4jio2yaxdbj6ljte3jmr6m7g333rujoilbtipjeawnou26frad.onion',
  410. 'https://bib.actionsack.com',
  411. 'https://bib.riverside.rocks',
  412. 'https://biblio.alefvanoon.xyz',
  413. 'https://bibliogram.1d4.us',
  414. 'https://bibliogram.art',
  415. 'https://bibliogram.domain.glass',
  416. 'https://bibliogram.esmailelbob.xyz',
  417. 'https://bibliogram.froth.zone',
  418. 'https://bibliogram.pussthecat.org',
  419. 'https://bibliogram.snopyta.org',
  420. 'https://farside.link/bibliogram',
  421. 'https://insta.trom.tf',
  422. 'https://insta.tromdienste.de'
  423. ], // Bibliogram
  424. 'biblioreads' : [
  425. 'http://biblioreads.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  426. 'http://bl.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  427. 'http://vernapl3lpo3huqdx3pjzxqgdgavxjlmdskbvejh2gfqgmjuyvxq.b32.i2p',
  428. 'https://biblioreads.ga',
  429. 'https://biblioreads.ml',
  430. 'https://biblioreads.esmailelbob.xyz',
  431. 'https://biblioreads.lunar.icu',
  432. 'https://biblioreads.netlify.app',
  433. 'https://bl.vern.cc'
  434. ], // BiblioReads
  435. 'btdigg' : [
  436. 'https://btdig.com',
  437. 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/',
  438. 'http://btdig.i2p'
  439. ], // BTDigg
  440. 'breezewiki' : [
  441. 'https://antifandom.com',
  442. //'https://breeze.777.tf',
  443. 'https://breeze.hostux.net',
  444. //'https://breezewiki.com',
  445. 'https://breezewiki.pussthecat.org',
  446. 'https://bw.artemislena.eu',
  447. 'https://bw.projectsegfau.lt'
  448. ], // BreezeWiki
  449. 'cloudtube' : [
  450. 'https://tube.cadence.moe'
  451. ], // CloudTube
  452. 'gothub' : [
  453. 'https://dev.gh.akisblack.dev',
  454. 'https://gh.akisblack.dev',
  455. 'https://gh.bloatcat.tk/',
  456. 'https://gh.odyssey346.dev',
  457. 'https://gh.phreedom.club',
  458. 'https://gh.riverside.rocks',
  459. //'https://gh.vern.cc',
  460. 'https://gothub.dev.projectsegfau.lt',
  461. 'https://gothub.esmailelbob.xyz',
  462. 'https://gothub.lunar.icu'
  463. ], // GotHub
  464. 'imgin' : [
  465. 'https://farside.link/imgin',
  466. 'https://imgin.voidnet.tech'
  467. ], // imgin
  468. 'invidious' : [
  469. 'http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion',
  470. 'http://euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd.onion',
  471. 'http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion',
  472. 'http://inv.vern.i2p',
  473. 'http://invidious.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  474. 'http://invidious.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion',
  475. 'http://iv.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd.onion',
  476. 'http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion',
  477. 'http://ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid.onion',
  478. 'http://osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion',
  479. 'http://pa7eextqat4wg35onzs4cnlhqa3gvzen243bcbrng67zyla4fqya.b32.i2p',
  480. 'http://qwikxxt6jvggxzxe2v2fuzro5j7ibgphxmblmri6wkj5vpicdbo2kwad.onion',
  481. 'http://u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad.onion',
  482. 'http://verni6dr4qxjgjumnvesxerh5rvhv6oy5ddeibaqy5d7tgbiiyfa.b32.i2p',
  483. 'http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion',
  484. 'https://farside.link/invidious',
  485. 'https://inv.bp.projectsegfau.lt',
  486. 'https://inv.odyssey346.dev',
  487. 'https://inv.riverside.rocks',
  488. 'https://inv.vern.cc',
  489. 'https://invidious.baczek.me',
  490. 'https://invidious.domain.glass',
  491. 'https://invidious.esmailelbob.xyz',
  492. 'https://invidious.flokinet.to',
  493. 'https://invidious.garudalinux.org',
  494. 'https://invidious.kavin.rocks',
  495. 'https://invidious.lunar.icu',
  496. 'https://invidious.mutahar.rocks',
  497. 'https://invidious.namazso.eu',
  498. 'https://invidious.nerdvpn.de',
  499. //'https://invidious.osi.kr',
  500. 'https://invidious.privacydev.net',
  501. 'https://invidious.projectsegfau.lt',
  502. 'https://invidious.sethforprivacy.com',
  503. 'https://invidious.slipfox.xyz',
  504. 'https://invidious.snopyta.org',
  505. 'https://invidious.qwik.space',
  506. 'https://invidious.tiekoetter.com',
  507. 'https://invidious.tinfoil-hat.net',
  508. //'https://invidious.weblibre.org',
  509. 'https://invidious-us.kavin.rocks',
  510. 'https://iv.ggtyler.dev',
  511. 'https://iv.melmac.space',
  512. //'https://tube.cthd.icu',
  513. 'https://y.com.sb',
  514. 'https://yewtu.be',
  515. 'https://yt.artemislena.eu',
  516. 'https://yt.funami.tech',
  517. 'https://yt.oelrichsgarcia.de',
  518. 'https://vid.puffyan.us',
  519. 'https://watch.thekitty.zone',
  520. //'https://youtube.076.ne.jp',
  521. 'https://youtube.owacon.moe',
  522. 'https://yt.artemislena.eu'
  523. ], // Invidious
  524. 'laboratory' : [
  525. 'https://lab.bloatcat.tk'
  526. ], // Laboratory
  527. 'libmedium' : [
  528. 'http://md.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  529. 'http://vernaqj2qr2pijpgvf3od6ssc3ulz3nv52gwr3hba5l6humuzmgq.b32.i2p',
  530. 'https://libmedium.batsense.net',
  531. 'https://md.vern.cc',
  532. 'https://medium.hostux.net'
  533. ], // LibMedium
  534. 'libreddit' : [
  535. 'http://ecue64ybzvn6vjzl37kcsnwt4ycmbsyf74nbttyg7rkc3t3qwnj7mcyd.onion',
  536. 'http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion',
  537. 'http://inytumdgnri7xsqtvpntjevaelxtgbjqkuqhtf6txxhwbll2fwqtakqd.onion',
  538. 'http://kphht2jcflojtqte4b4kyx7p2ahagv4debjj32nre67dxz7y57seqwyd.onion',
  539. 'http://kzhfp3nvb4qp575vy23ccbrgfocezjtl5dx66uthgrhu7nscu6rcwjyd.onion',
  540. 'http://lbrdtjaj7567ptdd4rv74lv27qhxfkraabnyphgcvptl64ijx2tijwid.onion',
  541. 'http://ledditqo2mxfvlgobxnlhrkq4dh34jss6evfkdkb2thlvy6dn4f4gpyd.onion',
  542. 'http://libreddit.2syis2nnyytz6jnusnjurva4swlaizlnleiks5mjp46phuwjbdjqwgqd.onion',
  543. 'http://libreddit.lqs5fjmajyp7rvp4qvyubwofzi6d4imua7vs237rkc4m5qogitqwrgyd.onion',
  544. 'http://libredoxhxwnmsb6dvzzd35hmgzmawsq5i764es7witwhddvpc2razid.onion',
  545. 'http://liredejj74h5xjqr2dylnl5howb2bpikfowqoveub55ru27x43357iid.onion',
  546. 'http://ol5begilptoou34emq2sshf3may3hlblvipdjtybbovpb7c7zodxmtqd.onion',
  547. 'http://qwikxx4xqvhdyyazkrw7pwdpdppfnmn7j2n6cvq5zecm4atbppaslzad.onion',
  548. 'http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion',
  549. 'http://woo5ugmoomzbtaq6z46q4wgei5mqmc6jkafqfi5c37zni7xc4ymq.b32.i2p',
  550. 'https://farside.link/libreddit',
  551. 'https://discuss.whatever.social',
  552. //'https://de.leddit.xyz',
  553. //'https://leddit.xyz',
  554. //'https://libreddit.40two.app',
  555. 'https://libreddit.albony.xyz',
  556. //'https://libreddit.alefvanoon.xyz',
  557. //'https://libreddit.autarkic.org',
  558. //'https://libreddit.awesomehub.io',
  559. 'https://libreddit.bloatcat.tk/',
  560. 'https://libreddit.bus-hit.me',
  561. 'https://libreddit.crewz.me',
  562. //'https://libreddit.database.red',
  563. 'https://libreddit.datatunnel.xyz',
  564. 'https://libreddit.de',
  565. 'https://libreddit.domain.glass',
  566. //'https://libreddit.dothq.co',
  567. //'https://libreddit.drivet.xyz',
  568. 'https://libreddit.esmailelbob.xyz',
  569. 'https://libreddit.eu.org/',
  570. 'https://libreddit.flux.industries',
  571. 'https://libreddit.hu',
  572. //'https://libreddit.igna.rocks',
  573. 'https://libredd.it',
  574. 'https://libreddit.jamiethalacker.dev',
  575. 'https://libreddit.kavin.rocks',
  576. 'https://libreddit.kylrth.com',
  577. //'https://libreddit.lunar.icu',
  578. 'https://libreddit.mutahar.rocks',
  579. 'https://libreddit.nl',
  580. 'https://libreddit.northboot.xyz',
  581. 'https://libreddit.pabloferreiro.es',
  582. 'https://libreddit.privacy.com.de',
  583. 'https://libreddit.pussthecat.org',
  584. 'https://libreddit.qwik.space',
  585. //'https://libreddit.silkky.cloud',
  586. 'https://libreddit.some-things.org',
  587. 'https://libreddit.spike.codes',
  588. 'https://libreddit.strongthany.cc',
  589. 'https://libreddit.sugoma.tk',
  590. 'https://libreddit.tiekoetter.com',
  591. 'https://libreddit.totaldarkness.net',
  592. 'https://libreddit.winscloud.net',
  593. 'https://libreddit.yonalee.eu',
  594. 'https://lr.cowfee.moe',
  595. 'https://lr.foss.wtf',
  596. 'https://lr.mint.lgbt',
  597. 'https://lr.oversold.host',
  598. 'https://lr.riverside.rocks',
  599. //'https://lr.stilic.ml',
  600. 'https://r.nf',
  601. 'https://r.walkx.org',
  602. //'https://reddi.tk',
  603. 'https://reddit.artemislena.eu',
  604. 'https://reddit.invak.id',
  605. //'https://reddit.phii.me',
  606. 'https://reddit.rtrace.io',
  607. 'https://reddit.stuehieyr.com',
  608. 'https://safereddit.com'
  609. ], // libreddit
  610. 'libremdb' : [
  611. 'http://ld.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  612. 'http://libremdb.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  613. 'http://vernz3ubrntql4wrgyrssd6u3qzi36zrhz2agbo6vibzbs5olk2q.b32.i2p',
  614. 'https://binge.whatever.social',
  615. 'https://ld.vern.cc',
  616. 'https://libremdb.esmailelbob.xyz',
  617. 'https://libremdb.iket.me',
  618. 'https://libremdb.pussthecat.org',
  619. //'https://libremdbeu.herokuapp.com',
  620. 'https://libremdb.jeikobu.net',
  621. 'https://libremdb.lunar.icu',
  622. 'https://lmdb.hostux.net',
  623. 'https://lmdb.tokhmi.xyz'
  624. ], // libremdb
  625. 'librarian' : [
  626. 'http://5znbzx2xcymhddzekfjib3isgqq4ilcyxa2bsq6vqmnvbtgu4f776lqd.onion',
  627. 'http://bxewpsswttslepw27w2hhxhlizwm7l7y54x3jw5cfrb64hb6lgc557ad.onion',
  628. 'http://lbry.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  629. 'http://librarian.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  630. 'https://lbn.frail.duckdns.org',
  631. 'https://lbry.mywire.org',
  632. 'https://lbry.ooguy.com',
  633. 'https://lbry.projectsegfau.lt',
  634. 'https://lbry.slipfox.xyz',
  635. 'https://lbry.vern.cc',
  636. 'https://librarian.esmailelbob.xyz',
  637. 'https://librarian.pussthecat.org',
  638. //'https://odysee.076.ne.jp',
  639. 'https://odysee.owacon.moe'
  640. ], // librarian
  641. 'librex' : [
  642. 'http://7huurwog32tny663wkglrhozfoyqyqmsuxjbd7dtudccx44awjda.b32.i2p',
  643. 'http://fcnfg6avz45hqzwbneekq57u2mqbnwa7veyvjcc4dndqbatvkjlaj7yd.onion',
  644. 'http://f7ssz7l3biu4fugwctfpcx4txg5yq4gqhrt473ledsuc3ivtd3omniid.onion',
  645. 'http://librex.revvybrr6pvbx4n3j4475h4ghw4elqr4t5xo2vtd3gfpu2nrsnhh57id.onion',
  646. 'http://librex.zzlsghu6mvvwyy75mvga6gaf4znbp3erk5xwfzedb4gg6qqh2j6rlvid.onion',
  647. 'http://lqbchqljxiwl3bbjt4vqe76luovk5ly6khqhg7mt5qcqfn6e4sbq.b32.i2p',
  648. 'http://lx.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  649. 'http://revekebotog64xrrammtsmjwtwlg3vqyzwdurzt2pu6botg4bejq.b32.i2p',
  650. 'http://search.cepyxplublbyw2f4axy4pyztfbxmf63lrt2c7uwv6wl4iixz53czload.onion',
  651. 'http://search.swxoebbpeqiiixyhbuh3vbw53pdrmtbiaj2sqveol6kkn5rpapfi4aad.onion',
  652. 'http://vernziqfqvweijfaacmwazohgpdo2bt2ib2jlupt2pwwu27bhgxq.b32.i2p',
  653. 'https://buscar.weblibre.org',
  654. 'https://librex.baczek.me',
  655. 'https://librex.bloatcat.tk',
  656. 'https://librex.mikata.ru',
  657. 'https://librex.myroware.eu',
  658. 'https://librex.pufe.org',
  659. 'https://librex.ratakor.com',
  660. 'https://librex.retro-hax.net',
  661. 'https://librex.revvy.de',
  662. 'https://librex.zzls.xyz',
  663. 'https://lx.drain.win',
  664. 'https://lx.vern.cc',
  665. 'https://search.ahwx.org',
  666. 'https://search.davidovski.xyz',
  667. 'https://search.femboy.hu',
  668. 'https://search.funami.tech',
  669. 'https://search.madreyk.xyz',
  670. 'https://search.milivojevic.in.rs',
  671. 'https://search.pabloferreiro.es',
  672. 'https://search.sesu.cc',
  673. 'https://search.tildevarsh.in',
  674. 'https://search.zeroish.xyz'
  675. ], // LibreX
  676. 'lieu' : [
  677. 'https://lieu.cblgh.org'
  678. ], // Lieu
  679. 'lingva' : [
  680. 'https://farside.link/lingva',
  681. 'https://lingva.ml',
  682. 'https://lingva.pussthecat.org'
  683. ], // Lingva
  684. 'map' : [
  685. 'https://facilmap.org',
  686. 'https://www.openstreetmap.org'
  687. ], // Maps
  688. 'mikuinvidious' : [
  689. //'https://mi.resrv.org',
  690. 'https://moeyy.cn/mikuinvidious',
  691. 'https://mikuinv-gs.vern.cc',
  692. 'https://mikuinv.resrv.org'
  693. ], // MikuInvidious
  694. 'neuters' : [
  695. 'https://neuters.de'
  696. ], // Neuters
  697. 'nitter' : [
  698. 'http://tm4rwkeysv3zz3q5yacyr4rlmca2c4etkdobfvuqzt6vsfsu4weq.b32.i2p',
  699. 'http://qwikxx2erhx6qrymued6ox2qkf2yeogjwypqvzoif4fqkljixasr6oid.onion',
  700. 'https://bird.trom.tf',
  701. 'https://birdsite.xanny.family',
  702. 'https://de.nttr.stream',
  703. 'https://farside.link/nitter',
  704. 'https://n.hyperborea.cloud',
  705. 'https://nitter.1d4.us',
  706. 'https://nitter.42l.fr',
  707. 'https://nitter.actionsack.com',
  708. 'https://nitter.bus-hit.me',
  709. 'https://nitter.ca',
  710. 'https://nitter.domain.glass',
  711. //'https://nitter.eu',
  712. 'https://nitter.fdn.fr',
  713. //'https://nitter.ggc-project.de',
  714. 'https://nitter.grimneko.de',
  715. 'https://nitter.hostux.net',
  716. 'https://nitter.hu',
  717. 'https://nitter.it',
  718. //'https://nitter.kavin.rocks',
  719. //'https://nitter.koyu.space',
  720. 'https://nitter.moomoo.me',
  721. 'https://nitter.namazso.eu',
  722. 'https://nitter.net',
  723. //'https://nitter.pussthecat.org',
  724. 'https://nitter.qwik.space',
  725. 'https://nitter.sethforprivacy.com',
  726. 'https://nitter.sneed.network',
  727. 'https://nitter.unixfox.eu',
  728. 'https://nttr.stream',
  729. 'https://read.whatever.social',
  730. //'https://twitter.076.ne.jp',
  731. 'https://twitter.censors.us',
  732. 'https://twitter.owacon.moe',
  733. 'https://unofficialbird.com'
  734. ], // Nitter
  735. 'piped' : [
  736. 'https://farside.link/piped',
  737. 'https://il.ax',
  738. 'https://piped.adminforge.de',
  739. 'https://piped.chauvet.pro',
  740. 'https://piped.esmailelbob.xyz',
  741. 'https://piped.garudalinux.org',
  742. 'https://piped.hostux.net',
  743. 'https://piped.hostux.net',
  744. 'https://piped.in.projectsegfau.lt',
  745. 'https://piped.kavin.rocks',
  746. 'https://piped.lunar.icu',
  747. 'https://piped.mint.lgbt',
  748. 'https://piped.mha.fi',
  749. 'https://piped.moomoo.me',
  750. 'https://piped.palveluntarjoaja.eu',
  751. 'https://piped.privacy.com.de',
  752. 'https://piped.privacydev.net',
  753. 'https://piped.projectsegfau.lt',
  754. 'https://piped.qdi.fi',
  755. 'https://piped.smnz.de',
  756. 'https://piped.tokhmi.xyz',
  757. 'https://piped.tokhmi.xyz',
  758. 'https://piped.video',
  759. 'https://piped.video',
  760. 'https://piped.us.projectsegfau.lt',
  761. 'https://watch.leptons.xyz',
  762. 'https://watch.whatever.social',
  763. 'https://watch.whatevertinfoil.de',
  764. 'https://yt.777.tf'
  765. ], // Piped
  766. 'pipedmaterial' : [
  767. //'https://ngp.piped.xn--17b.net',
  768. 'https://piped-material.ftp.sh',
  769. 'https://piped-material.xn--17b.net'
  770. ], // Piped Material
  771. 'poketube' : [
  772. 'https://poketube.fun',
  773. //'https://pt.zzls.xyz'
  774. ], // PokeTube
  775. 'proxitok' : [
  776. 'https://cringe.whatever.social',
  777. 'https://proxitok.pabloferreiro.es',
  778. 'https://proxitok.lunar.icu',
  779. 'https://proxitok.esmailelbob.xyz',
  780. 'https://proxitok.pabloferreiro.es',
  781. 'https://proxitok.privacy.com.de',
  782. 'https://proxitok.privacydev.net',
  783. 'https://proxitok.pufe.org',
  784. 'https://proxitok.pussthecat.org',
  785. 'https://tok.adminforge.de',
  786. 'https://tok.artemislena.eu',
  787. 'https://tok.habedieeh.re',
  788. 'https://tok.thekitty.zone',
  789. 'https://tik.hostux.net',
  790. 'https://tiktok.chauvet.pro',
  791. 'https://tt.vern.cc'
  792. ], // ProxiTok
  793. 'quetre' : [
  794. 'http://ask.habeehrhadazsw3izbrbilqajalfyqqln54mrja3iwpqxgcuxnus7eid.onion',
  795. 'http://qr.vern.i2p',
  796. 'http://qr.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  797. 'http://quetre.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  798. 'http://quetre.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion',
  799. 'http://quora.cepyxplublbyw2f4axy4pyztfbxmf63lrt2c7uwv6wl4iixz53czload.onion',
  800. //'https://que.wilbvr.me',
  801. 'https://quetre.iket.me',
  802. 'https://quetre.pussthecat.org',
  803. 'https://quetre.tokhmi.xyz',
  804. 'https://quetre.projectsegfau.lt',
  805. 'https://quetre.esmailelbob.xyz',
  806. //'https://quetre.odyssey346.dev',
  807. 'https://quetre.privacydev.net',
  808. 'https://ask.habedieeh.re',
  809. 'https://quetre.marcopisco.com',
  810. 'https://quetre.blackdrgn.nl',
  811. 'https://quetre.pufe.org',
  812. 'https://quetre.lunar.icu',
  813. 'https://quora.femboy.hu',
  814. 'https://quora.vern.cc'
  815. ], // Quetre
  816. 'rimgo' : [
  817. 'https://farside.link/rimgo',
  818. //'https://i.bcow.xyz',
  819. //'https://img.riverside.rocks',
  820. 'https://rimgo.bus-hit.me',
  821. 'https://rimgo.hostux.net',
  822. 'https://rimgo.pussthecat.org',
  823. 'https://rimgo.totaldarkness.net',
  824. 'https://rimgo.vern.cc'
  825. ], // rimgo
  826. 'ruraldictionary' : [
  827. 'http://rd.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  828. 'http://ruraldictionary.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  829. 'http://vern5cxiaufqvhv4hu5ypkvw3tiwvuinae4evdbqzrioql6s2sha.b32.i2p',
  830. 'https://isdoingyour.mom',
  831. 'https://rd.bloatcat.tk',
  832. 'https://rd.vern.cc',
  833. 'https://ruraldictionary.esmailelbob.xyz'
  834. ], // Rural Dictionary
  835. 'scribe' : [
  836. 'https://farside.link/scribe',
  837. 'https://scribe.bus-hit.me',
  838. 'https://scribe.citizen4.eu',
  839. 'https://scribe.froth.zone',
  840. 'https://scribe.nixnet.services',
  841. 'https://scribe.rip'
  842. ], // Scribe
  843. 'searx' : [
  844. 'https://dynabyte.ca',
  845. 'https://etsi.me',
  846. 'https://farside.link/searx',
  847. 'https://farside.link/searxng',
  848. //'https://monocles.de',
  849. 'https://procurx.pt',
  850. 'https://northboot.xyz',
  851. 'https://paulgo.io',
  852. 'https://recherche.facil.services',
  853. 'https://s.zhaocloud.net',
  854. 'https://search.asynchronousexchange.com',
  855. 'https://search.jpope.org',
  856. 'https://search.mdosch.de',
  857. 'https://search.neet.works',
  858. 'https://search.ononoki.org',
  859. 'https://search.rabbit-company.com',
  860. 'https://search.vojkovic.xyz',
  861. 'https://search.zzls.xyz',
  862. 'https://searx.be',
  863. 'https://searx.catfluori.de',
  864. 'https://searx.divided-by-zero.eu',
  865. 'https://searx.domain.glass',
  866. 'https://searx.dresden.network',
  867. 'https://searx.ebnar.xyz',
  868. 'https://searx.fmac.xyz',
  869. 'https://searx.foss.wtf',
  870. 'https://searx.gnu.style',
  871. //'https://searx.jaska.cc',
  872. 'https://searx.mha.fi',
  873. 'https://searx.ninja',
  874. 'https://searx.prvcy.eu',
  875. 'https://searx.rasp.fr',
  876. 'https://searx.ru',
  877. 'https://searx.sp-codes.de',
  878. 'https://searx.stuehieyr.com',
  879. 'https://searx.theanonymouse.xyz',
  880. 'https://searx.tiekoetter.com',
  881. 'https://searx.tux.land',
  882. 'https://searx.tuxcloud.net',
  883. 'https://searx.tyil.nl',
  884. 'https://searx.webheberg.info',
  885. 'https://searxng.zackptg5.com',
  886. 'https://swag.pw',
  887. 'https://sx.catgirl.cloud',
  888. ], // SearXNG
  889. 'simplytranslate' : [
  890. 'https://farside.link/simplytranslate',
  891. 'https://simplytranslate.esmailelbob.xyz',
  892. 'https://simplytranslate.org',
  893. 'https://simplytranslate.pussthecat.org',
  894. //'https://st.alefvanoon.xyz',
  895. 'https://st.bloatcat.tk/',
  896. 'https://st.manerakai.com',
  897. 'https://translate.bus-hit.me',
  898. 'https://translate.josias.dev',
  899. 'https://translate.namazso.eu',
  900. 'https://translate.northboot.xyz',
  901. 'https://translate.riverside.rocks',
  902. 'https://translate.syncpundit.com',
  903. 'https://translate.tiekoetter.com'
  904. ], // SimplyTranslate
  905. 'spot' : [
  906. 'https://search.ggc-project.de',
  907. ], // Spot
  908. 'teddit' : [
  909. 'http://[200:5e4b:515c:e42b:3e73:6fbf:2f11:779d]',
  910. 'http://k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq.b32.i2p',
  911. 'http://teddit.i2p',
  912. 'http://tedditfyn6idalzso5wam5qd3kdtxoljjhbrbbx34q2xkcisvshuytad.onion',
  913. 'https://farside.link/teddit',
  914. 'https://incogsnoo.com',
  915. 'https://teddit.adminforge.de',
  916. //'https://teddit.alefvanoon.xyz',
  917. 'https://teddit.bus-hit.me',
  918. //'https://teddit.domain.glass',
  919. 'https://teddit.froth.zone',
  920. //'https://teddit.ggc-project.de',
  921. 'https://teddit.hostux.net',
  922. 'https://teddit.httpjames.space/',
  923. 'https://teddit.namazso.eu',
  924. 'https://teddit.net',
  925. 'https://teddit.pussthecat.org',
  926. 'https://teddit.sethforprivacy.com',
  927. //'https://teddit.tinfoil-hat.net',
  928. 'https://teddit.totaldarkness.net',
  929. 'https://teddit.zaggy.nl'
  930. ], // teddit
  931. 'tent' : [
  932. 'https://tent.sny.sh',
  933. 'https://tent.bloatcat.tk'
  934. ], // Tent
  935. 'uso' : [
  936. 'https://userscripts-mirror.org'
  937. ], // UserScripts.org
  938. 'waybackclassic' : [
  939. 'http://waybackclassic.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion',
  940. 'https://waybackclassic.esmailelbob.xyz',
  941. 'https://wayback-classic.net'
  942. ], // Wayback Classic
  943. 'wikiless' : [
  944. 'https://farside.link/wikiless',
  945. //'https://wiki.604kph.xyz',
  946. 'https://wiki.froth.zone',
  947. //'https://wikiless.alefvanoon.xyz',
  948. 'https://wikiless.bloatcat.tk/',
  949. //'https://wikiless.lunar.icu',
  950. 'https://wikiless.northboot.xyz',
  951. 'https://wikiless.org',
  952. //'https://wikiless.sethforprivacy.com',
  953. 'https://wikiless.tiekoetter.com'
  954. ], // Wikiless
  955. 'whoogle' : [
  956. 'http://nuifgsnbb2mcyza74o7illtqmuaqbwu4flam3cdmsrnudwcmkqur37qd.onion',
  957. 'http://whoglqjdkgt2an4tdepberwqz3hk7tjo4kqgdnuj77rt7nshw2xqhqad.onion',
  958. 'http://whoogle.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion',
  959. 'http://whoogle.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion',
  960. 'http://verneks7rfjptpz5fpii7n7nrxilsidi2qxepeuuf66c3tsf4nhq.b32.i2p',
  961. 'https://farside.link/whoogle',
  962. 'https://google.owacon.moe',
  963. 'https://gowogle.voring.me',
  964. //'https://s.alefvanoon.xyz',
  965. 'https://s.tokhmi.xyz',
  966. 'https://search.albony.xyz',
  967. 'https://search.dr460nf1r3.org',
  968. 'https://search.foss.wtf',
  969. 'https://search.garudalinux.org',
  970. 'https://search.sethforprivacy.com',
  971. 'https://wgl.frail.duckdns.org',
  972. 'https://wg.vern.cc',
  973. 'https://whoogle.dcs0.hu',
  974. 'https://whoogle.esmailelbob.xyz',
  975. 'https://whoogle.hxvy0.gq',
  976. 'https://whoogle.lunar.icu',
  977. 'https://whoogle.privacydev.net'
  978. ], // Whoogle
  979. 'yacy' : [
  980. 'https://51.79.164.235:8443',
  981. 'https://58.179.103.130:49153',
  982. 'https://76.9.226.109:8444',
  983. 'https://78.55.177.108:8443',
  984. 'https://85.199.74.98:8443',
  985. 'https://93.190.202.83:8443',
  986. 'https://109.230.224.225:8443',
  987. 'https://162.210.6.138:8443',
  988. 'https://176.31.104.225:8448',
  989. //'https://185.243.10.140:8443',
  990. 'https://farside.link/yacy',
  991. 'https://search.yacy.net',
  992. 'https://www.gumx.de:8091',
  993. 'https://yacy.iko.soy'
  994. ], // YaCy
  995. };
  996.  
  997. function pageLoader() {
  998. //window.onprogress = (event) => {
  999. // /questions/6464592/how-to-align-entire-html-body-to-the-center
  1000. const loadPage = '<html><head><link type="image/svg+xml" rel="shortcut icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🥸</text></svg>"><title>Proxy Redirect</title><style>html,body{height:100%;}html{display:table;margin:auto;}body{display:table-cell;vertical-align:middle;}body{background-color:#f1f1f1;font-family:"Helvetica Neue", Helvetica,Arial,sans-serif;cursor:default;user-select:none;max-height:100%;max-width:100%;}div{font-size:2.3em;font-weight:bold;}#main{font-size:2em;color:#F83600;text-transform:uppercase;position:relative;text-align:center;}#loader{font-style:italic;animation:flickerAnimation 1s infinite;}.centerm{display:block;margin-left:auto;margin-right:auto;width:100%;}.center{padding:1em 0px 1em 0px;text-align:center;}@keyframes flickerAnimation{0%{opacity:1;}50%{opacity:0;}100%{opacity:1;}}.flip{display:inline-block;transform:scaleX(-1);-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);filter:FlipH;-ms-filter:FlipH;}</style></head><body><div id="message" class="center"></div><div id="loader" class="center">🔀 Redirecting...</div></body></html>';
  1001. //const loadPage = '<html><head><link type="image/svg+xml" rel="shortcut icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🥸</text></svg>"><title>Proxy Redirect</title><style>html,body{height:100%;}html{display:table;margin:auto;}body{display:table-cell;vertical-align:middle;}body{background-color:#f1f1f1;font-family:"Helvetica Neue", Helvetica,Arial,sans-serif;cursor:default;user-select:none;max-height:100%;max-width:100%;}div{font-size:2.3em;font-weight:bold;}#icon-tc:before{content:"🔀";font-size:4em;display:flow-root;text-align:center;}#icon-tc{font-size:3em;}#main{font-size:2em;color:#F83600;text-transform:uppercase;position:relative;text-align:center;}#loader{font-style:italic;animation:flickerAnimation 1s infinite;}.centerm{display:block;margin-left:auto;margin-right:auto;width:100%;}.center{padding:1em 0px 1em 0px;text-align:center;}@keyframes flickerAnimation{0%{opacity:1;}50%{opacity:0;}100%{opacity:1;}}.flip{display:inline-block;transform:scaleX(-1);-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);filter:FlipH;-ms-filter:FlipH;}</style></head><body><div id="icon-tc"></div><div id="message" class="center"></div><div id="loader" class="center">Redirecting...</div></body></html>';
  1002. //const loadPage = '<html><head><link type="image/svg+xml" rel="shortcut icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🥸</text></svg>"><title>Proxy Redirect</title><meta http-equiv="content-type" content="text/html;charset=utf-8" /><meta name="generator" content="Clear Cinema Player" /><style>body {background-color:#efefef;font-family:"Helvetica Neue", Helvetica,Arial,sans-serif; cursor: default; user-select: none;max-height:100%;max-width:100%;}div{font-size:2.3em;font-weight:bold;}#icon-tc:before{content:"🔀";font-size:4em;display:flow-root;text-align:center;}#icon-tc{font-size:3em;}#main{font-size:2em;color:#F83600;text-transform:uppercase;position:relative;text-align:center;}#loader{font-style: italic;animation:flickerAnimation 1s infinite;} #wait, #reload, #footer {font-size:14px;font-weight:normal;} #wait {font-style: italic;} .centerm {display:block;margin-left:auto;margin-right:auto;width:100%;}.center{padding:1em 0px 1em 0px;text-align:center;/* border: 3px solid green; */}@keyframes flickerAnimation {0%{opacity:1;}50%{opacity:0;}100% {opacity:1;}}.flip {display: inline-block; transform: scaleX(-1); -moz-transform: scaleX(-1); -o-transform: scaleX(-1); -webkit-transform: scaleX(-1); filter: FlipH; -ms-filter: FlipH;}</style></head><body><div id="intro" class="center">Proxy Redirect</div><div id="icon-tc" onclick="(function(){document.location = document.location})();"></div><div id="loader" class="center">Redirecting...</div><div id="wait" class="center">Please wait while our monkeys find a working proxy</div><div id="reload" class="center" onclick="(function(){document.location = document.location})();"></div><div id="footer" class="center">Made with <a href="https://falkon.org/">Falkon</a> web browser (<a href="https://openuserjs.org/scripts/sjehuda/Proxy_Redirect/issues">Report issue</a>)</div></body></html>';
  1003. const domParser = new DOMParser();
  1004. const newDocument = domParser.parseFromString(loadPage, 'text/html');
  1005. //newDocument.querySelector('#icon-tc').onclick = () => {disable()}; // FIXME
  1006. //newDocument.querySelector('#icon-tc').addEventListener("click", disable, false);
  1007. const insertDocument = document.importNode(newDocument.documentElement, true);
  1008. const removeDocument = document.documentElement;
  1009. document.replaceChild(insertDocument, removeDocument);
  1010. setTimeout(message, 9000); // FIXME
  1011. }
  1012.  
  1013. function message() {
  1014. var div = document.querySelector('#message');
  1015. if (div) {
  1016. div.innerHTML = `🔀 Continue to ${modURL.hostname}`;
  1017. div.onclick = () => {location.href = modURL};
  1018. document.querySelector('#loader').remove();
  1019. } else {
  1020. location.href = 'https://openuserjs.org/scripts/sjehuda/Proxy_Redirect?autoredirect'
  1021. }
  1022. }
  1023.  
  1024. function noRespond() {
  1025. var div = document.querySelector('#message');
  1026. div.id = 'message-error'
  1027. div.innerHTML = 'Proxy list appears to be out of date. Continue to ' + location.host + ' or...';
  1028. div.onclick = () => {location.href = location.href + '#noredirect'; location.reload()};
  1029. var div = document.querySelector('#loader');
  1030. div.innerHTML = '🥸 Update Proxy Redirect';
  1031. div.onclick = () => {location.href = 'https://openuserjs.org/scripts/sjehuda/Proxy_Redirect'};
  1032. }
  1033.  
  1034. // FIXME
  1035. // /questions/1397329/how-to-remove-the-hash-from-window-location-url-with-javascript-without-page-r
  1036. function disable() {
  1037. window.location.href =
  1038. window.location.href.substr(
  1039. 0,
  1040. window.location.href.indexOf('#'))
  1041. + '#noredirect';
  1042. }
  1043.  
  1044. /*
  1045. loop = setInterval(function() {
  1046. //modifyURL(location.href);
  1047. window.open(newURL,'_self');
  1048. //location.href = newURL;
  1049. console.info('Redirecting to ' + newURL);
  1050. clearInterval(loop);
  1051. }, 1000);
  1052. */
  1053.  
  1054. /*
  1055. function modifyURL() {
  1056. inst = pickURL();
  1057. // make function synchronous
  1058. // /questions/8778267/synchronous-gm-xmlhttprequest-acting-asynchronously
  1059. stat = statRES(inst);
  1060. if (stat.match(200)) {
  1061. newURL = settURL();
  1062. } else {
  1063. pickURL(url);
  1064. }
  1065. return newURL;
  1066. }
  1067. */
  1068.  
  1069. // var caller = (function xhr() {
  1070. var init = (function xhr() {
  1071. instance = pickURL();
  1072. try {
  1073. gmXmlhttpRequest({
  1074. method: 'GET',
  1075. url: instance,
  1076. synchronous: true,
  1077. onprogress: pageLoader(),
  1078. onload: function(response) {
  1079. if (response.finalUrl.startsWith(instance)) {
  1080. location.href = settURL();
  1081. } else {
  1082. instance = instance.slice(instance.lastIndexOf('/')+1);
  1083. instance = instance.replace(/\./g,'-');
  1084. console.warn('Instance URL ' + instance + ' might be out of service. URL has changed. Please report this to the developer.');
  1085. if (maxAttempts()) {
  1086. noRespond()
  1087. return;
  1088. }
  1089. maxAttempts()
  1090. xhr();
  1091. }
  1092. },
  1093. onerror: function(response) {
  1094. instance = instance.slice(instance.lastIndexOf('/')+1);
  1095. instance = instance.replace(/\./g,'-');
  1096. console.warn('Instance URL ' + instance + ' might be offline. Status error: ' + response.status + '. Please report this to the developer.');
  1097. if (maxAttempts()) {
  1098. noRespond()
  1099. return;
  1100. }
  1101. maxAttempts()
  1102. xhr();
  1103. }
  1104. });
  1105. } catch (err) {
  1106. console.warn(err)
  1107. console.info('Please contribute C++ to Greasemonkey for Falkon https://bugs.kde.org/show_bug.cgi?id=466533')
  1108. //pickURL();
  1109. location.href = settURL();
  1110. }
  1111.  
  1112. })();
  1113.  
  1114. function maxAttempts() {
  1115. attemptCounter = attemptCounter + 1;
  1116. if (attemptCounter == urlArray.length) { return true; }
  1117. }
  1118.  
  1119. function setValue(para) {
  1120. if (partedURL.searchParams.get(para)) {
  1121. para = [para];
  1122. return pickParameters(para);
  1123. } else {
  1124. return 'auto';
  1125. }
  1126. }
  1127.  
  1128. function pickParameters(para) {
  1129. for (let i = 0; i < para.length; i++) {
  1130. if (partedURL.searchParams.get(para[i])) {
  1131. para = partedURL.searchParams.get(para[i]);
  1132. partedURL.searchParams.delete(para[i]);
  1133. return para;
  1134. }
  1135. }
  1136. }
  1137.  
  1138. function pickURL() {
  1139.  
  1140. partedURL = new URL(location.href);
  1141.  
  1142. paras = ['continue', 'retpath']
  1143. for (let i = 0; i < paras.length; i++) {
  1144. if (partedURL.searchParams.get(paras[i])) {
  1145. //partedURL = pickParameters(paras[i]);
  1146. partedURL = partedURL.searchParams.get(paras[i]);
  1147. partedURL = new URL(partedURL);
  1148. }
  1149. }
  1150.  
  1151. hostname = partedURL.hostname;
  1152. pathname = partedURL.pathname;
  1153.  
  1154. switch (true) {
  1155.  
  1156. case hostname.endsWith('bandcamp.com'):
  1157. urlArray = proxy.tent;
  1158. break;
  1159.  
  1160. case hostname.endsWith('bilibili.com'):
  1161. urlArray = proxy.mikuinvidious;
  1162. break;
  1163.  
  1164. case hostname.endsWith('bt4g.org'):
  1165. case hostname.endsWith('torrentdownload.info'):
  1166. case hostname.endsWith('torrentz.eu'):
  1167. case hostname.endsWith('torrentz.me'):
  1168. case hostname.endsWith('torrentz2.is'):
  1169. urlArray = proxy.btdigg;
  1170. break;
  1171.  
  1172. case hostname.endsWith('fandom.com'):
  1173. urlArray = proxy.breezewiki;
  1174. break;
  1175.  
  1176. case hostname.endsWith('github.com'):
  1177. urlArray = proxy.gothub;
  1178. break;
  1179.  
  1180. case hostname.endsWith('gitlab.com'):
  1181. urlArray = proxy.laboratory;
  1182. break;
  1183.  
  1184. case hostname.endsWith('goodreads.com'):
  1185. urlArray = proxy.biblioreads;
  1186. break;
  1187.  
  1188. // TODO quadkey (mapquest)
  1189. // NOTE quadkeyToTile(quadkey) See /mapbox/tilebelt
  1190. case hostname.endsWith('wikimap.toolforge.org'):
  1191. case (hostname.endsWith('moovitapp.com') &&
  1192. partedURL.search.includes('tll')):
  1193. case (hostname.endsWith('bing.com') &&
  1194. pathname.startsWith('/maps')):
  1195. case (hostname.includes('google.') &&
  1196. pathname.startsWith('/maps')):
  1197. case (hostname.includes('waze.com') &&
  1198. pathname.startsWith('/live-map')):
  1199. case (hostname.includes('waze.com') &&
  1200. pathname.startsWith('/ul')):
  1201. case (hostname.includes('yandex.') &&
  1202. pathname.startsWith('/maps')):
  1203. urlArray = proxy.map;
  1204. break;
  1205.  
  1206. case hostname.endsWith('imdb.com'):
  1207. urlArray = proxy.libremdb;
  1208. break;
  1209.  
  1210. case hostname.endsWith('imgur.com'):
  1211. proxyArray = [proxy.imgin, proxy.rimgo];
  1212. break;
  1213. /*
  1214. case hostname.endsWith('instagram.com'):
  1215. urlArray = proxy.bibliogram;
  1216. break;
  1217. */
  1218. case hostname.endsWith('medium.com'):
  1219. proxyArray = [proxy.libmedium, proxy.scribe];
  1220. break;
  1221.  
  1222. case hostname.endsWith('odysee.com'):
  1223. urlArray = proxy.librarian;
  1224. break;
  1225.  
  1226. case hostname.endsWith('quora.com'):
  1227. urlArray = proxy.quetre;
  1228. break;
  1229.  
  1230. case hostname.endsWith('reddit.com'):
  1231. proxyArray = [proxy.libreddit, proxy.teddit];
  1232. break;
  1233.  
  1234. case hostname.endsWith('reuters.com'):
  1235. urlArray = proxy.neuters;
  1236. break;
  1237.  
  1238. // FIXME
  1239. case (hostname.startsWith('search.yahoo.')):
  1240. case (pathname.startsWith('/search')):
  1241. case (hostname.includes('yandex.') &&
  1242. pathname.startsWith('/search')):
  1243. case (hostname.includes('yahoo.') &&
  1244. pathname.startsWith('/search')):
  1245. case (hostname.includes('bing.') &&
  1246. pathname.startsWith('/search')):
  1247. case (hostname.includes('google.') &&
  1248. pathname.startsWith('/search')):
  1249. proxyArray = [proxy.librex, proxy.lieu,
  1250. proxy.searx, proxy.spot,
  1251. proxy.whoogle
  1252. ];
  1253. break;
  1254.  
  1255. case hostname.endsWith('stackoverflow.com'):
  1256. urlArray = proxy.anonymousoverflow;
  1257. break;
  1258.  
  1259. case hostname.endsWith('tiktok.com'):
  1260. urlArray = proxy.proxitok;
  1261. break;
  1262.  
  1263. case (hostname.endsWith('translate.yandex.com')):
  1264. // FIXME website blocks us from redirecting
  1265. // function setTimeout() seems to not work
  1266. // consider different approach/way
  1267. case (hostname.endsWith('translate.google.com')):
  1268. proxyArray = [proxy.lingva, proxy.simplytranslate];
  1269. break;
  1270.  
  1271. case hostname.endsWith('twitter.com'):
  1272. urlArray = proxy.nitter;
  1273. break;
  1274.  
  1275. case hostname.endsWith('urbandictionary.com'):
  1276. urlArray = proxy.ruraldictionary;
  1277. break;
  1278.  
  1279. case hostname.endsWith('userscripts.org'):
  1280. urlArray = proxy.uso;
  1281. break;
  1282.  
  1283. case hostname.endsWith('wikipedia.org'):
  1284. urlArray = proxy.wikiless;
  1285. break;
  1286.  
  1287. case hostname.endsWith('youtu.be'):
  1288. case hostname.endsWith('youtube.com'):
  1289. case hostname.endsWith('youtube-nocookie.com'):
  1290. case hostname.endsWith('invidious-invidious.invidious.svc.cluster.local:3000'):
  1291. proxyArray = [proxy.cloudtube, proxy.invidious,
  1292. proxy.piped, proxy.pipedmaterial,
  1293. proxy.poketube
  1294. ];
  1295. break;
  1296.  
  1297. //default:
  1298. // return target;
  1299.  
  1300. }
  1301.  
  1302. // proxy select
  1303. if (proxyArray) {
  1304. urlArray = proxyArray[Math.floor(Math.random()*proxyArray.length)];
  1305. }
  1306.  
  1307. // instance select
  1308. return urlArray[Math.floor(Math.random()*urlArray.length)];
  1309.  
  1310. }
  1311.  
  1312. // Settlement
  1313. function settURL() {
  1314. // path
  1315. switch (urlArray) {
  1316.  
  1317. // consider function setTimeout()
  1318. case proxy.bibliogram:
  1319. if (!pathname.includes('accounts/login')) {
  1320. path = `/u/${para}`;
  1321. } else {
  1322. if (partedURL.searchParams.get('next')) {
  1323. para = ['next'];
  1324. para = pickParameters(para);
  1325. path = `/u/${para}`;
  1326. }
  1327. }
  1328. break;
  1329.  
  1330. case proxy.breezewiki:
  1331. // extract wiki name
  1332. partedHost = hostname.split('.');
  1333. if (partedHost.length === 3 || partedHost.length === 4) {
  1334. brand = partedHost[0];
  1335. }
  1336. path = `/${brand}${pathname}`;
  1337. break;
  1338.  
  1339. case proxy.btdigg:
  1340. // extract sha1sum
  1341. //hash = pathname.split('/')[2];
  1342. hash = pathname.split('/');
  1343. for (let i = 0; i < hash.length; i++) {
  1344. if (hash[i].length === 40) {
  1345. hash = hash[i];
  1346. break;
  1347. }
  1348. }
  1349. path = `/${hash}`;
  1350. break;
  1351.  
  1352. case proxy.cloudtube:
  1353. case proxy.invidious:
  1354. case proxy.piped:
  1355. case proxy.pipedmaterial:
  1356. case proxy.poketube:
  1357. if (partedURL.searchParams.get('v')) {
  1358. para = ['v'];
  1359. para = pickParameters(para);
  1360. path = `/watch?v=${para}`;
  1361. }
  1362. break;
  1363.  
  1364. case proxy.gothub:
  1365. if (hostname.endsWith('gist.github.com')) {
  1366. path = `/gist${pathname}`;
  1367. }
  1368. break;
  1369.  
  1370. case proxy.laboratory:
  1371. path = '/' + hostname + pathname;
  1372. break;
  1373.  
  1374. case proxy.libmedium:
  1375. partedHost = hostname.split('.');
  1376. if (partedHost.length === 3 || partedHost.length === 4) {
  1377. name = partedHost[0];
  1378. }
  1379. path = `/@${name}${pathname}`;
  1380. break;
  1381.  
  1382. case proxy.librex:
  1383. // extract search parameter
  1384. para = ['q','text','p'];
  1385. para = pickParameters(para);
  1386. path = `/search.php?q=${para}`;
  1387. break;
  1388.  
  1389. case proxy.lingva:
  1390. // extract text parameter
  1391. paras = ['sl','tl','text'];
  1392.  
  1393. for (let i = 0; i < paras.length; i++) {
  1394. paras[i] = setValue(paras[i]);
  1395. }
  1396.  
  1397. //if (paras[2] === 'auto') { paras[2] = ''; }
  1398. if ((paras[0] == 'auto') && (paras[1] == 'auto')) {
  1399. path = `/${paras[2]}`;
  1400. } else {
  1401. path = `/${paras[0]}/${paras[1]}/${paras[2]}`;
  1402. }
  1403. break;
  1404.  
  1405. case proxy.map:
  1406. // extract coordinations
  1407. /*
  1408. if (pathname.includes('@')) {
  1409. cord = pathname.split('/')[2].split('&')[0].slice(1);
  1410. cord = cord.split(',');
  1411. }
  1412. path = '/#map=' + cord[2].slice(0, 1) +
  1413. '/' + cord[0] + '/' + cord[1];
  1414. */
  1415. let lat, lon, zoom;
  1416. // extract coordinations
  1417. if (partedURL.search.includes('%7E')) { // %7E is ~
  1418. para = ['cp'];
  1419. cord = pickParameters(para);
  1420. cord = cord.split('~');
  1421. para = ['lvl'];
  1422. zoom = pickParameters(para);
  1423. lat = cord[0];
  1424. lon = cord[1];
  1425. } else if (partedURL.search.includes('to')) {
  1426. para = ['to'];
  1427. cord = pickParameters(para);
  1428. cord = cord.slice(3).split(',');
  1429. lat = cord[0];
  1430. lon = cord[1];
  1431. } else if (pathname.includes('ul')) {
  1432. para = ['ll'];
  1433. cord = pickParameters(para);
  1434. cord = cord.split(',');
  1435. para = ['zoom'];
  1436. zoom = pickParameters(para);
  1437. lat = cord[0];
  1438. lon = cord[1];
  1439. } else if (partedURL.search.includes('ll')) {
  1440. para = ['ll'];
  1441. cord = pickParameters(para);
  1442. cord = cord.split(',');
  1443. para = ['z'];
  1444. zoom = pickParameters(para);
  1445. lat = cord[1];
  1446. lon = cord[0];
  1447. } else if (partedURL.search.includes('tll')) {
  1448. para = ['tll'];
  1449. cord = pickParameters(para);
  1450. cord = cord.split('_');
  1451. lat = cord[0];
  1452. lon = cord[1];
  1453. } else if (pathname.includes('@')) {
  1454. partedPath = pathname.split('/')
  1455. for (let i = 0; i < partedPath.length; i++) {
  1456. if (partedPath[i].startsWith('@')) {
  1457. cord = partedPath[i].split(',');
  1458. }
  1459. }
  1460. lat = cord[0].slice(1);
  1461. lon = cord[1];
  1462. zoom = cord[2];
  1463. //path = `/#map=${cord[2].slice(0, 2)}/${cord[0].slice(1)}/${cord[1]}`;
  1464. //path = `/#map=${cord[2]}/${cord[0].slice(1)}/${cord[1]}`;
  1465. //path = `/#${cord[2]}/${cord[0].slice(1)}/${cord[1]}/`;
  1466. }
  1467.  
  1468. if (lat && lon && zoom) {
  1469. path = `/#${zoom}/${lat}/${lon}/`;
  1470. } else if (lat && lon && !zoom) {
  1471. path = `/#10/${lat}/${lon}/`;
  1472. }
  1473. if (!path && partedURL.searchParams.get('q')) {
  1474. para = ['q'];
  1475. para = pickParameters(para);
  1476. path = `/search?query=${para}`;
  1477. instance = 'https://www.openstreetmap.org';
  1478. }
  1479. break;
  1480.  
  1481. case proxy.lieu:
  1482. case proxy.searx:
  1483. case proxy.whoogle:
  1484. // extract search parameter
  1485. para = ['q','text','p'];
  1486. para = pickParameters(para);
  1487. path = `/search?q=${para}`;
  1488. break;
  1489.  
  1490. case proxy.mikuinvidious:
  1491. if (!hostname.startsWith('www.')) {
  1492. partedHost = hostname.split('.');
  1493. if (partedHost.length === 3 || partedHost.length === 4) {
  1494. name = partedHost[0];
  1495. }
  1496. path = `/${name}${pathname}`;
  1497. }
  1498. break;
  1499.  
  1500. case proxy.tent:
  1501. partedHost = hostname.split('.');
  1502. if (partedHost.length === 3 || partedHost.length === 4) {
  1503. artist = partedHost[0];
  1504. }
  1505. partedPath = pathname.split('/');
  1506. type = partedPath[1];
  1507. name = partedPath[2];
  1508. if (name) {
  1509. path = `/release.php?artist=${artist}&type=${type}&name=${name}`;
  1510. } else {
  1511. path = `/release.php?artist=${artist}&type=${type}`;
  1512. }
  1513. break;
  1514.  
  1515. case proxy.wikiless:
  1516. // extract language code
  1517. partedHost = hostname.split('.');
  1518. if (partedHost.length === 3 || partedHost.length === 4) {
  1519. lang = partedHost[0];
  1520. }
  1521. path = `${pathname}?lang=${lang}`;
  1522. break;
  1523.  
  1524. case proxy.yacy:
  1525. // extract search parameter
  1526. para = ['q','text','p'];
  1527. //pickParameters(paras); // works even when just calling the function?
  1528. para = pickParameters(para);
  1529. path = `/yacysearch.html?query=${para}`;
  1530. break;
  1531.  
  1532. }
  1533.  
  1534. if (!path || path == '/') {
  1535. path = pathname + partedURL.search + partedURL.hash;
  1536. }
  1537.  
  1538. modURL = new URL(instance + path);
  1539. return modURL;
  1540.  
  1541. }