399 lines
8.2 KiB
JavaScript
399 lines
8.2 KiB
JavaScript
// ============================================================
|
|
// PROXY CONFIGURATION
|
|
// ============================================================
|
|
|
|
var PROXY = "SOCKS5 127.0.0.1:1080";
|
|
var DIRECT = "DIRECT";
|
|
|
|
|
|
// ============================================================
|
|
// GOOGLE
|
|
// ============================================================
|
|
|
|
var googleDomains = [
|
|
// Main
|
|
"google.com",
|
|
"google.net",
|
|
"google.org",
|
|
"googleapis.com",
|
|
"googleusercontent.com",
|
|
"gstatic.com",
|
|
"googlemail.com",
|
|
"gmail.com",
|
|
"googleapps.com",
|
|
"googledrive.com",
|
|
"googlephotos.com",
|
|
"googlemaps.com",
|
|
"googlestore.com",
|
|
"googleearth.com",
|
|
"googlesource.com",
|
|
"withgoogle.com",
|
|
"thinkwithgoogle.com",
|
|
|
|
// Services / short links
|
|
"g.co",
|
|
"goo.gl",
|
|
"g.page",
|
|
"g.dev",
|
|
"web.app",
|
|
"appspot.com",
|
|
"run.app",
|
|
"cloudfunctions.net",
|
|
"firebaseapp.com",
|
|
"firebaseio.com",
|
|
|
|
// CDN / infrastructure
|
|
"gvt0.com",
|
|
"gvt1.com",
|
|
"gvt2.com",
|
|
"gvt3.com",
|
|
"gvt5.com",
|
|
"gvt6.com",
|
|
"gvt7.com",
|
|
"gvt9.com",
|
|
"ggpht.com",
|
|
"1e100.net",
|
|
|
|
// CAPTCHA
|
|
"recaptcha.net",
|
|
|
|
// Ads / analytics
|
|
"doubleclick.net",
|
|
"doubleclick.com",
|
|
"googleadservices.com",
|
|
"googlesyndication.com",
|
|
"googletagmanager.com",
|
|
"googletagservices.com",
|
|
"google-analytics.com",
|
|
"googleanalytics.com",
|
|
"googleads.com",
|
|
"googlevads.com",
|
|
"2mdn.net"
|
|
];
|
|
|
|
|
|
// ============================================================
|
|
// YOUTUBE
|
|
// ============================================================
|
|
|
|
var youtubeDomains = [
|
|
// Main
|
|
"youtube.com",
|
|
"youtu.be",
|
|
"youtube-nocookie.com",
|
|
|
|
// Video / CDN / images
|
|
"googlevideo.com",
|
|
"ytimg.com",
|
|
"ggpht.com",
|
|
|
|
// APIs
|
|
"youtube.googleapis.com",
|
|
"youtubei.googleapis.com",
|
|
"youtubeembeddedplayer.googleapis.com",
|
|
|
|
// Additional
|
|
"withyoutube.com",
|
|
"youtubeeducation.com",
|
|
"youtubefanfest.com",
|
|
"youtubegaming.com",
|
|
"youtubekids.com",
|
|
"youtubemobilesupport.com",
|
|
"youtube.tv",
|
|
"youtube.soy",
|
|
"yt.be",
|
|
|
|
// Regional
|
|
"youtube.ae",
|
|
"youtube.al",
|
|
"youtube.am",
|
|
"youtube.at",
|
|
"youtube.az",
|
|
"youtube.ba",
|
|
"youtube.be",
|
|
"youtube.bg",
|
|
"youtube.bh",
|
|
"youtube.bo",
|
|
"youtube.by",
|
|
"youtube.ca",
|
|
"youtube.cat",
|
|
"youtube.ch",
|
|
"youtube.cl",
|
|
"youtube.co",
|
|
|
|
"youtube.co.ae",
|
|
"youtube.co.at",
|
|
"youtube.co.cr",
|
|
"youtube.co.hu",
|
|
"youtube.co.id",
|
|
"youtube.co.il",
|
|
"youtube.co.in",
|
|
"youtube.co.jp",
|
|
"youtube.co.ke",
|
|
"youtube.co.kr",
|
|
"youtube.co.ma",
|
|
"youtube.co.nz",
|
|
"youtube.co.th",
|
|
"youtube.co.tz",
|
|
"youtube.co.ug",
|
|
"youtube.co.uk",
|
|
"youtube.co.ve",
|
|
"youtube.co.za",
|
|
"youtube.co.zw",
|
|
|
|
"youtube.com.ar",
|
|
"youtube.com.au",
|
|
"youtube.com.az",
|
|
"youtube.com.bd",
|
|
"youtube.com.bh",
|
|
"youtube.com.bo",
|
|
"youtube.com.br",
|
|
"youtube.com.by",
|
|
"youtube.com.co",
|
|
"youtube.com.do",
|
|
"youtube.com.ec",
|
|
"youtube.com.ee",
|
|
"youtube.com.eg",
|
|
"youtube.com.es",
|
|
"youtube.com.gh",
|
|
"youtube.com.gr",
|
|
"youtube.com.gt",
|
|
"youtube.com.hk",
|
|
"youtube.com.hn",
|
|
"youtube.com.hr",
|
|
"youtube.com.jm",
|
|
"youtube.com.jo",
|
|
"youtube.com.kw",
|
|
"youtube.com.lb",
|
|
"youtube.com.lv",
|
|
"youtube.com.ly",
|
|
"youtube.com.mk",
|
|
"youtube.com.mt",
|
|
"youtube.com.mx",
|
|
"youtube.com.my",
|
|
"youtube.com.ng",
|
|
"youtube.com.ni",
|
|
"youtube.com.om",
|
|
"youtube.com.pa",
|
|
"youtube.com.pe",
|
|
"youtube.com.ph",
|
|
"youtube.com.pk",
|
|
"youtube.com.pt",
|
|
"youtube.com.py",
|
|
"youtube.com.qa",
|
|
"youtube.com.ro",
|
|
"youtube.com.sa",
|
|
"youtube.com.sg",
|
|
"youtube.com.sv",
|
|
"youtube.com.tn",
|
|
"youtube.com.tr",
|
|
"youtube.com.tw",
|
|
"youtube.com.ua",
|
|
"youtube.com.uy",
|
|
"youtube.com.ve",
|
|
|
|
"youtube.cr",
|
|
"youtube.cz",
|
|
"youtube.de",
|
|
"youtube.dk",
|
|
"youtube.ee",
|
|
"youtube.es",
|
|
"youtube.fi",
|
|
"youtube.fr",
|
|
"youtube.ge",
|
|
"youtube.gr",
|
|
"youtube.gt",
|
|
"youtube.hk",
|
|
"youtube.hr",
|
|
"youtube.hu",
|
|
"youtube.ie",
|
|
"youtube.in",
|
|
"youtube.iq",
|
|
"youtube.is",
|
|
"youtube.it",
|
|
"youtube.jo",
|
|
"youtube.jp",
|
|
"youtube.kr",
|
|
"youtube.kz",
|
|
"youtube.la",
|
|
"youtube.lk",
|
|
"youtube.lt",
|
|
"youtube.lu",
|
|
"youtube.lv",
|
|
"youtube.ly",
|
|
"youtube.ma",
|
|
"youtube.md",
|
|
"youtube.me",
|
|
"youtube.mk",
|
|
"youtube.mn",
|
|
"youtube.mx",
|
|
"youtube.my",
|
|
"youtube.ng",
|
|
"youtube.ni",
|
|
"youtube.nl",
|
|
"youtube.no",
|
|
"youtube.pa",
|
|
"youtube.pe",
|
|
"youtube.ph",
|
|
"youtube.pk",
|
|
"youtube.pl",
|
|
"youtube.pr",
|
|
"youtube.pt",
|
|
"youtube.qa",
|
|
"youtube.ro",
|
|
"youtube.rs",
|
|
"youtube.ru",
|
|
"youtube.sa",
|
|
"youtube.se",
|
|
"youtube.sg",
|
|
"youtube.si",
|
|
"youtube.sk",
|
|
"youtube.sn",
|
|
"youtube.sv",
|
|
"youtube.tn",
|
|
"youtube.ua",
|
|
"youtube.ug",
|
|
"youtube.uy",
|
|
"youtube.vn"
|
|
];
|
|
|
|
|
|
// ============================================================
|
|
// OPENAI / CHATGPT
|
|
// ============================================================
|
|
|
|
var openaiDomains = [
|
|
// Main
|
|
"openai.com",
|
|
"chatgpt.com",
|
|
"chat.com",
|
|
"sora.com",
|
|
"crixet.com",
|
|
|
|
// Static / uploads / content
|
|
"oaistatic.com",
|
|
"oaiusercontent.com",
|
|
"oaistatsig.com",
|
|
"openaimerge.com",
|
|
|
|
// CDN / storage
|
|
"openai.com.cdn.cloudflare.net",
|
|
"openaiapi-site.azureedge.net",
|
|
"openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net",
|
|
"openaicom.imgix.net",
|
|
"openaicomproductionae4b.blob.core.windows.net",
|
|
"production-openaicom-storage.azureedge.net",
|
|
|
|
// Voice / realtime
|
|
"chatgpt.livekit.cloud",
|
|
"host.livekit.cloud",
|
|
"turn.livekit.cloud",
|
|
|
|
// Authentication / supporting services
|
|
// Note: some of these are shared by other websites.
|
|
"challenges.cloudflare.com",
|
|
"workos.com",
|
|
"workoscdn.com",
|
|
"workos.imgix.net",
|
|
"intercom.io",
|
|
"intercomcdn.com",
|
|
"ct.sendgrid.net"
|
|
];
|
|
|
|
|
|
// ============================================================
|
|
// SPOTIFY
|
|
// ============================================================
|
|
|
|
var spotifyDomains = [
|
|
// Main
|
|
"spotify.com",
|
|
"spotifycdn.com",
|
|
"spotifycdn.net",
|
|
"scdn.co",
|
|
"pscdn.co",
|
|
|
|
// Links
|
|
"spoti.fi",
|
|
"spotify.link",
|
|
"byspotify.com",
|
|
"tospotify.com",
|
|
|
|
// Services
|
|
"spotify-everywhere.com",
|
|
"spotify.design",
|
|
"spotifycharts.com",
|
|
"spotifycodes.com",
|
|
"spotifyforbrands.com",
|
|
"spotifyforvendors.com",
|
|
"spotifyjobs.com",
|
|
"lifeatspotify.com",
|
|
|
|
// Audio / CDN
|
|
"audio-ak-spotify-com.akamaized.net",
|
|
"audio4-ak-spotify-com.akamaized.net",
|
|
"heads-ak-spotify-com.akamaized.net",
|
|
"heads4-ak-spotify-com.akamaized.net",
|
|
|
|
"spotify.com.edgesuite.net",
|
|
"spotify.map.fastly.net",
|
|
"spotify.map.fastlylb.net",
|
|
|
|
// Experiments / telemetry
|
|
"cdn-spotify-experiments.conductrics.com",
|
|
"adeventtracker.spotify.com",
|
|
"adstudio-assets.scdn.co",
|
|
"bloodhound.spotify.com"
|
|
];
|
|
|
|
|
|
// ============================================================
|
|
// DOMAIN MATCHING
|
|
// ============================================================
|
|
|
|
// Matches:
|
|
// spotify.com
|
|
// open.spotify.com
|
|
// accounts.spotify.com
|
|
// foo.bar.spotify.com
|
|
//
|
|
// Does NOT match:
|
|
// notspotify.com
|
|
// spotify.com.example.org
|
|
|
|
function domainMatches(host, domain) {
|
|
return host === domain ||
|
|
(host.length > domain.length &&
|
|
host.substring(host.length - domain.length - 1) === "." + domain);
|
|
}
|
|
|
|
|
|
function matchesAnyDomain(host, domains) {
|
|
for (var i = 0; i < domains.length; i++) {
|
|
if (domainMatches(host, domains[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
// ============================================================
|
|
// PAC ENTRY POINT
|
|
// ============================================================
|
|
|
|
function FindProxyForURL(url, host) {
|
|
host = host.toLowerCase();
|
|
|
|
if (
|
|
matchesAnyDomain(host, googleDomains) ||
|
|
matchesAnyDomain(host, youtubeDomains) ||
|
|
matchesAnyDomain(host, openaiDomains) ||
|
|
matchesAnyDomain(host, spotifyDomains)
|
|
) {
|
|
return PROXY;
|
|
}
|
|
|
|
return DIRECT;
|
|
} |