Update external-proxies-sanitizer.js to refine noise patterns and enhance country detection rules

This commit is contained in:
2026-01-04 19:47:47 +03:00
parent b7f2adba40
commit 75439cf6df

View File

@@ -29,7 +29,7 @@ const NOISE_PATTERNS = [
/\bai\s*studio\b/gi, /\bai\s*studio\b/gi,
/\bno\s*p2p\b/gi, /\bno\s*p2p\b/gi,
/\b10\s*gbit\b/gi, /\b10\s*gbit\b/gi,
/\bvless\b/gi, // you said you don't want it in the visible name /\bvless\b/gi,
/\bvmess\b/gi, /\bvmess\b/gi,
/\bssr?\b/gi, /\bssr?\b/gi,
/\btrojan\b/gi, /\btrojan\b/gi,
@@ -50,6 +50,7 @@ const ICON_RULES = [
{ regex: /\bPrime\b|\bAmazon\b/gi, icon: "📦" }, { regex: /\bPrime\b|\bAmazon\b/gi, icon: "📦" },
{ regex: /\bChatGPT\b|\bOpenAI\b/gi, icon: "🤖" }, { regex: /\bChatGPT\b|\bOpenAI\b/gi, icon: "🤖" },
{ regex: /\bSteam\b/gi, icon: "🎮" }, { regex: /\bSteam\b/gi, icon: "🎮" },
{ regex: /\bTorrent✅\b|Torrent|\bP2P\b|\bP2P-Torrents\b/gi, icon: "🧲" }
]; ];
// 3) Optional “network” tag rules based on NAME text (not $server.network) // 3) Optional “network” tag rules based on NAME text (not $server.network)
@@ -62,49 +63,51 @@ const NAME_NETWORK_TAGS = [
// 4) Country detection rules by NAME (regex). First match wins (priority = lower is earlier) // 4) Country detection rules by NAME (regex). First match wins (priority = lower is earlier)
const COUNTRY_RULES = [ const COUNTRY_RULES = [
// USA { regex: /\b(Эстония|EE|EST|ESTONIA|TALLINN)\b/i, iso3: "EST", flag: "🇪🇪", priority: 110 }, // Estonia
{ regex: /\b(USA|US|UNITED\s*STATES|AMERICA|NEW\s*YORK|NYC|LOS\s*ANGELES|LA|DALLAS|CHI(CAGO)?)\b/i, iso3: "USA", flag: "🇺🇸", priority: 10 }, { regex: /\b(Финляндия|FI|FIN|FINLAND|HELSINKI)\b/i, iso3: "FIN", flag: "🇫🇮", priority: 70 }, // Finland
{ regex: /\b(Япония|JP|JPN|JAPAN|TOKYO|OSAKA)\b/i, iso3: "JPN", flag: "🇯🇵", priority: 210 }, // Japan
// Germany { regex: /\b(Гонконг|HK|HKG|HONG\s*KONG)\b/i, iso3: "HKG", flag: "🇭🇰", priority: 230 }, // Hong Kong
{ regex: /\b(DE|DEU|GER(MANY)?|FRANKFURT|BERLIN|MUNICH|MÜNCHEN)\b/i, iso3: "DEU", flag: "🇩🇪", priority: 20 }, { regex: /\b(Германия|DE|DEU|GER(MANY)?|FRANKFURT|BERLIN|MUNICH)\b/i, iso3: "DEU", flag: "🇩🇪", priority: 20 }, // Germany
{ regex: /\b(Франция|FR|FRA|FRANCE|PARIS|MARSEILLE)\b/i, iso3: "FRA", flag: "🇫🇷", priority: 50 }, // France
// Netherlands { regex: /\b(Нидерланды|NL|NLD|NETHERLANDS|HOLLAND|AMSTERDAM)\b/i, iso3: "NLD", flag: "🇳🇱", priority: 30 }, // Netherlands
{ regex: /\b(NL|NLD|NETHERLANDS|HOLLAND|AMSTERDAM)\b/i, iso3: "NLD", flag: "🇳🇱", priority: 30 }, { regex: /\b(Норвегия|NO|NOR|NORWAY|OSLO)\b/i, iso3: "NOR", flag: "🇳🇴", priority: 90 }, // Norway
{ regex: /\b(Латвия|LV|LVA|LATVIA|RIGA)\b/i, iso3: "LVA", flag: "🇱🇻", priority: 120 }, // Latvia
// UK { regex: /\b(Литва|LT|LTU|LITHUANIA|VILNIUS)\b/i, iso3: "LTU", flag: "🇱🇹", priority: 130 }, // Lithuania
{ regex: /\b(UK|GB|GBR|UNITED\s*KINGDOM|LONDON|MANCHESTER)\b/i, iso3: "GBR", flag: "🇬🇧", priority: 40 }, { regex: /\b(Польша|PL|POL|POLAND|WARSAW|WARSZAWA)\b/i, iso3: "POL", flag: "🇵🇱", priority: 60 }, // Poland
{ regex: /\b(Сингапур|SG|SGP|SINGAPORE)\b/i, iso3: "SGP", flag: "🇸🇬", priority: 200 }, // Singapore
// France { regex: /\b(South Korea|Корея|KR|KOR|KOREA|SEOUL)\b/i, iso3: "KOR", flag: "🇰🇷", priority: 220 }, // South Korea
{ regex: /\b(FR|FRA|FRANCE|PARIS|MARSEILLE)\b/i, iso3: "FRA", flag: "🇫🇷", priority: 50 }, { regex: /\b(Швеция|SE|SWE|SWEDEN|STOCKHOLM)\b/i, iso3: "SWE", flag: "🇸🇪", priority: 80 }, // Sweden
{ regex: /\b(Швейцария|CH|CHE|SWITZERLAND|ZURICH|GENEVA)\b/i, iso3: "CHE", flag: "🇨🇭", priority: 100 }, // Switzerland
// Poland { regex: /\b(Турция|TR|TUR|TURKEY|ISTANBUL)\b/i, iso3: "TUR", flag: "🇹🇷", priority: 140 }, // Turkey
{ regex: /\b(PL|POL|POLAND|WARSAW|WARSZAWA)\b/i, iso3: "POL", flag: "🇵🇱", priority: 60 }, { regex: /\b(Великобритания|Англия|England|UK|GB|GBR|UNITED\s*KINGDOM)\b/i, iso3: "GBR", flag: "🇬🇧", priority: 40 }, // UK
{ regex: /\b(США|USA|US|UNITED\s*STATES|AMERICA|NEW\s*YORK|NYC)\b/i, iso3: "USA", flag: "🇺🇸", priority: 10 }, // USA
// Finland { regex: /\b(Argentina|AR|ARG|ARGENTINA|BUENOS\s*AIRES)\b/i, iso3: "ARG", flag: "🇦🇷", priority: 240 }, // Argentina
{ regex: /\b(FI|FIN|FINLAND|HELSINKI)\b/i, iso3: "FIN", flag: "🇫🇮", priority: 70 }, { regex: /\b(Australia|AU|AUS|AUSTRALIA|SYDNEY)\b/i, iso3: "AUS", flag: "🇦🇺", priority: 250 }, // Australia
{ regex: /\b(Austria|AT|AUT|AUSTRIA|VIENNA)\b/i, iso3: "AUT", flag: "🇦🇹", priority: 260 }, // Austria
// Sweden { regex: /\b(Brazil|BR|BRA|BRAZIL|SAO\s*PAULO)\b/i, iso3: "BRA", flag: "🇧🇷", priority: 270 }, // Brazil
{ regex: /\b(SE|SWE|SWEDEN|STOCKHOLM)\b/i, iso3: "SWE", flag: "🇸🇪", priority: 80 }, { regex: /\b(Bulgaria|BG|BGR|BULGARIA|SOFIA)\b/i, iso3: "BGR", flag: "🇧🇬", priority: 280 }, // Bulgaria
{ regex: /\b(Canada|CA|CAN|CANADA|TORONTO)\b/i, iso3: "CAN", flag: "🇨🇦", priority: 290 }, // Canada
// Norway { regex: /\b(Czech\s*Republic|CZ|CZE|CZECH|PRAGUE)\b/i, iso3: "CZE", flag: "🇨🇿", priority: 300 }, // Czech Republic
{ regex: /\b(NO|NOR|NORWAY|OSLO)\b/i, iso3: "NOR", flag: "🇳🇴", priority: 90 }, { regex: /\b(Denmark|DK|DNK|DENMARK|COPENHAGEN)\b/i, iso3: "DNK", flag: "🇩🇰", priority: 310 }, // Denmark
{ regex: /\b(Egypt|EG|EGY|EGYPT|CAIRO)\b/i, iso3: "EGY", flag: "🇪🇬", priority: 320 }, // Egypt
// Switzerland { regex: /\b(Georgia|GE|GEO|GEORGIA|TBILISI)\b/i, iso3: "GEO", flag: "🇬🇪", priority: 330 }, // Georgia
{ regex: /\b(CH|CHE|SWITZERLAND|ZURICH|GENEVA)\b/i, iso3: "CHE", flag: "🇨🇭", priority: 100 }, { regex: /\b(India|IN|IND|INDIA|MUMBAI)\b/i, iso3: "IND", flag: "🇮🇳", priority: 340 }, // India
{ regex: /\b(Ireland|IE|IRL|IRELAND|DUBLIN)\b/i, iso3: "IRL", flag: "🇮🇪", priority: 350 }, // Ireland
// Estonia / Latvia / Lithuania { regex: /\b(Israel|IL|ISR|ISRAEL|TEL\s*AVIV)\b/i, iso3: "ISR", flag: "🇮🇱", priority: 360 }, // Israel
{ regex: /\b(EE|EST|ESTONIA|TALLINN)\b/i, iso3: "EST", flag: "🇪🇪", priority: 110 }, { regex: /\b(Italy|IT|ITA|ITALY|ROME)\b/i, iso3: "ITA", flag: "🇮🇹", priority: 370 }, // Italy
{ regex: /\b(LV|LVA|LATVIA|RIGA)\b/i, iso3: "LVA", flag: "🇱🇻", priority: 120 }, { regex: /\b(Kazakhstan|KZ|KAZ|KAZAKHSTAN|ALMATY)\b/i, iso3: "KAZ", flag: "🇰🇿", priority: 380 }, // Kazakhstan
{ regex: /\b(LT|LTU|LITHUANIA|VILNIUS)\b/i, iso3: "LTU", flag: "🇱🇹", priority: 130 }, { regex: /\b(Malaysia|MY|MYS|MALAYSIA|KUALA\s*LUMPUR)\b/i, iso3: "MYS", flag: "🇲🇾", priority: 390 }, // Malaysia
{ regex: /\b(Moldova|MD|MDA|MOLDOVA|CHISINAU)\b/i, iso3: "MDA", flag: "🇲🇩", priority: 400 }, // Moldova
// Turkey { regex: /\b(Nigeria|NG|NGA|NIGERIA|LAGOS)\b/i, iso3: "NGA", flag: "🇳🇬", priority: 410 }, // Nigeria
{ regex: /\b(TR|TUR|TURKEY|ISTANBUL)\b/i, iso3: "TUR", flag: "🇹🇷", priority: 140 }, { regex: /\b(Philippines|PH|PHL|PHILIPPINES|MANILA)\b/i, iso3: "PHL", flag: "🇵🇭", priority: 420 }, // Philippines
{ regex: /\b(Portugal|PT|PRT|PORTUGAL|LISBON)\b/i, iso3: "PRT", flag: "🇵🇹", priority: 430 }, // Portugal
// Singapore / Japan / Korea / Hong Kong { regex: /\b(Romania|RO|ROU|ROMANIA|BUCHAREST)\b/i, iso3: "ROU", flag: "🇷🇴", priority: 440 }, // Romania
{ regex: /\b(SG|SGP|SINGAPORE)\b/i, iso3: "SGP", flag: "🇸🇬", priority: 200 }, { regex: /\b(Russia|RU|RUS|RUSSIA|MOSCOW)\b/i, iso3: "RUS", flag: "🇷🇺", priority: 450 }, // Russia
{ regex: /\b(JP|JPN|JAPAN|TOKYO|OSAKA)\b/i, iso3: "JPN", flag: "🇯🇵", priority: 210 }, { regex: /\b(Spain|ES|ESP|SPAIN|MADRID)\b/i, iso3: "ESP", flag: "🇪🇸", priority: 460 }, // Spain
{ regex: /\b(KR|KOR|KOREA|SEOUL)\b/i, iso3: "KOR", flag: "🇰🇷", priority: 220 }, { regex: /\b(Taiwan|TW|TWN|TAIWAN|TAIPEI)\b/i, iso3: "TWN", flag: "🇹🇼", priority: 470 }, // Taiwan
{ regex: /\b(HK|HKG|HONG\s*KONG)\b/i, iso3: "HKG", flag: "🇭🇰", priority: 230 }, { regex: /\b(Thailand|TH|THA|THAILAND|BANGKOK)\b/i, iso3: "THA", flag: "🇹🇭", priority: 480 }, // Thailand
{ regex: /\b(UAE|United\s*Arab\s*Emirates|AE|ARE|DUBAI)\b/i, iso3: "ARE", flag: "🇦🇪", priority: 490 }, // UAE
{ regex: /\b(Vietnam|VN|VNM|VIETNAM|HANOI)\b/i, iso3: "VNM", flag: "🇻🇳", priority: 500 } // Vietnam
]; ];
// 5) GeoIP mapping (ISO2 -> ISO3 + flag) used only if utils.geoip.lookup(ip) returns ISO2 // 5) GeoIP mapping (ISO2 -> ISO3 + flag) used only if utils.geoip.lookup(ip) returns ISO2