From 1c72dcb5e0e7535ee9fb95239de80311268f9d02 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Wed, 17 Jan 2024 19:15:43 +0800 Subject: [PATCH] Update CDN / Download / Domestic Hosts --- ...cdn-conf.ts => build-cdn-download-conf.ts} | 56 ++++++++++++------- Build/build-sspanel-appprofile.ts | 19 ++++--- Build/index.ts | 4 +- Build/lib/clash.ts | 4 ++ Build/lib/is-fast-ip.ts | 4 +- Source/domainset/cdn.conf | 12 ++-- Source/domainset/download.conf | 15 +++-- Source/domainset/steam.conf | 18 ++++++ Source/non_ip/domestic.conf | 7 +-- Source/non_ip/download.conf | 1 + 10 files changed, 93 insertions(+), 47 deletions(-) rename Build/{build-cdn-conf.ts => build-cdn-download-conf.ts} (54%) create mode 100644 Source/domainset/steam.conf diff --git a/Build/build-cdn-conf.ts b/Build/build-cdn-download-conf.ts similarity index 54% rename from Build/build-cdn-conf.ts rename to Build/build-cdn-download-conf.ts index a7aa6aaf..777ef59d 100644 --- a/Build/build-cdn-conf.ts +++ b/Build/build-cdn-download-conf.ts @@ -41,31 +41,49 @@ const getS3OSSDomainsPromise = (async (): Promise> => { return S3OSSDomains; })(); -const buildCdnConf = task(import.meta.path, async (span) => { +export const buildCdnDownloadConf = task(import.meta.path, async (span) => { /** @type {string[]} */ const cdnDomainsList: string[] = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/cdn.conf')); (await getS3OSSDomainsPromise).forEach((domain: string) => { cdnDomainsList.push(`DOMAIN-SUFFIX,${domain}`); }); - const description: string[] = [ - ...SHARED_DESCRIPTION, - '', - 'This file contains object storage and static assets CDN domains.' - ]; + const downloadDomainSet: string[] = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/domainset/download.conf')); + const steamDomainSet: string[] = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/domainset/steam.conf')); - return createRuleset( - span, - 'Sukka\'s Ruleset - CDN Domains', - description, - new Date(), - cdnDomainsList, - 'ruleset', - path.resolve(import.meta.dir, '../List/non_ip/cdn.conf'), - path.resolve(import.meta.dir, '../Clash/non_ip/cdn.txt') - ); + return Promise.all([ + createRuleset( + span, + 'Sukka\'s Ruleset - CDN Domains', + [ + ...SHARED_DESCRIPTION, + '', + 'This file contains object storage and static assets CDN domains.' + ], + new Date(), + cdnDomainsList, + 'ruleset', + path.resolve(import.meta.dir, '../List/non_ip/cdn.conf'), + path.resolve(import.meta.dir, '../Clash/non_ip/cdn.txt') + ), + createRuleset( + span, + 'Sukka\'s Ruleset - Large Files Hosting Domains', + [ + ...SHARED_DESCRIPTION, + '', + 'This file contains domains for software updating & large file hosting.' + ], + new Date(), + [ + ...downloadDomainSet, + ...steamDomainSet + ], + 'domainset', + path.resolve(import.meta.dir, '../List/domainset/download.conf'), + path.resolve(import.meta.dir, '../Clash/domainset/download.txt') + ) + ]); }); -export { buildCdnConf }; - if (import.meta.main) { - buildCdnConf(); + buildCdnDownloadConf(); } diff --git a/Build/build-sspanel-appprofile.ts b/Build/build-sspanel-appprofile.ts index f0050d31..d1ec457e 100644 --- a/Build/build-sspanel-appprofile.ts +++ b/Build/build-sspanel-appprofile.ts @@ -1,6 +1,6 @@ import { getAppleCdnDomainsPromise } from './build-apple-cdn'; import { getDomesticDomainsRulesetPromise } from './build-domestic-ruleset'; -import { surgeRulesetToClashClassicalTextRuleset } from './lib/clash'; +import { surgeRulesetToClashClassicalTextRuleset, surgeDomainsetToClashRuleset } from './lib/clash'; import { readFileIntoProcessedArray } from './lib/fetch-text-by-line'; import { task } from './trace'; import path from 'path'; @@ -16,6 +16,7 @@ const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: bo ['Global', true, true], ['Microsoft & Apple', true, true], ['Stream', true, false], + ['Steam Download', true, true], ['Domestic', false, true], ['Final Match', true, true] ]; @@ -35,6 +36,7 @@ export const buildSSPanelUIMAppProfile = task(import.meta.path, async (span) => microsoftDomains, appleDomains, streamDomains, + steamDomains, globalDomains, globalPlusDomains, telegramDomains, @@ -55,6 +57,8 @@ export const buildSSPanelUIMAppProfile = task(import.meta.path, async (span) => readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/apple_services.conf')).then(surgeRulesetToClashClassicalTextRuleset), // stream - domains surgeRulesetToClashClassicalTextRuleset(AllStreamServices.flatMap((i) => i.rules)), + // steam - domains + readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/domainset/steam.conf')).then(surgeDomainsetToClashRuleset), // global - domains readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/global.conf')).then(surgeRulesetToClashClassicalTextRuleset), readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/global_plus.conf')).then(surgeRulesetToClashClassicalTextRuleset), @@ -92,6 +96,7 @@ export const buildSSPanelUIMAppProfile = task(import.meta.path, async (span) => ...appleDomains ], streamDomains, + steamDomains, [ ...globalDomains, ...globalPlusDomains, @@ -123,16 +128,16 @@ function generateAppProfile( directDomains: string[], microsoftAppleDomains: string[], streamDomains: string[], + steamDomains: string[], globalDomains: string[], + lanDomains: string[], directCidrs: string[], streamCidrs: string[], globalCidrs: string[], lanCidrs: string[] ) { - const result: string[] = []; - - result.push( + return [ ' ` '${line},Microsoft & Apple',`), // stream - domains ...streamDomains.map(line => ` '${line},Stream',`), + // steam download - domains + ...steamDomains.map(line => ` '${line},Steam Download',`), // global - domains ...globalDomains.map(line => ` '${line},Global',`), // microsoft & apple - ip cidr (nope) @@ -207,7 +214,5 @@ function generateAppProfile( ' \'MATCH,Final Match\',', ' ],', '];' - ); - - return result; + ]; } diff --git a/Build/index.ts b/Build/index.ts index 94ba8cbf..5ade4f39 100644 --- a/Build/index.ts +++ b/Build/index.ts @@ -2,7 +2,7 @@ import { downloadPreviousBuild } from './download-previous-build'; import { buildCommon } from './build-common'; import { buildAntiBogusDomain } from './build-anti-bogus-domain'; import { buildAppleCdn } from './build-apple-cdn'; -import { buildCdnConf } from './build-cdn-conf'; +import { buildCdnDownloadConf } from './build-cdn-download-conf'; import { buildRejectDomainSet } from './build-reject-domainset'; import { buildTelegramCIDR } from './build-telegram-cidr'; import { buildChnCidr } from './build-chn-cidr'; @@ -41,7 +41,7 @@ import { createSpan, printTraceResult } from './trace'; const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon(rootSpan)); const buildAntiBogusDomainPromise = downloadPreviousBuildPromise.then(() => buildAntiBogusDomain(rootSpan)); const buildAppleCdnPromise = downloadPreviousBuildPromise.then(() => buildAppleCdn(rootSpan)); - const buildCdnConfPromise = downloadPreviousBuildPromise.then(() => buildCdnConf(rootSpan)); + const buildCdnConfPromise = downloadPreviousBuildPromise.then(() => buildCdnDownloadConf(rootSpan)); const buildRejectDomainSetPromise = downloadPreviousBuildPromise.then(() => buildRejectDomainSet(rootSpan)); const buildTelegramCIDRPromise = downloadPreviousBuildPromise.then(() => buildTelegramCIDR(rootSpan)); const buildChnCidrPromise = downloadPreviousBuildPromise.then(() => buildChnCidr(rootSpan)); diff --git a/Build/lib/clash.ts b/Build/lib/clash.ts index bcf80734..3dade26d 100644 --- a/Build/lib/clash.ts +++ b/Build/lib/clash.ts @@ -39,3 +39,7 @@ export const surgeRulesetToClashClassicalTextRuleset = (rules: string[] | Set { return domainset.map(i => (i[0] === '.' ? `+${i}` : i)); }; + +export const surgeDomainsetToClashRuleset = (domainset: string[]) => { + return domainset.map(i => (i[0] === '.' ? `DOMAIN-SUFFIX,${i.slice(1)}` : `DOMAIN,${i}`)); +}; diff --git a/Build/lib/is-fast-ip.ts b/Build/lib/is-fast-ip.ts index a2abc4b1..cee2aff0 100644 --- a/Build/lib/is-fast-ip.ts +++ b/Build/lib/is-fast-ip.ts @@ -27,8 +27,8 @@ export function isProbablyIpv4(hostname: string): boolean { return ( numberOfDots === 3 - && hostname.charCodeAt(0) !== 46 - && /* '.' */ hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */ + && hostname.charCodeAt(0) !== 46 /* '.' */ + && hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */ ); } diff --git a/Source/domainset/cdn.conf b/Source/domainset/cdn.conf index 44d08f5f..e95640f5 100644 --- a/Source/domainset/cdn.conf +++ b/Source/domainset/cdn.conf @@ -285,6 +285,9 @@ cdn.firebase.com .blogblog.com img.youtube.com static.corp.google.com +.usercontent.google.com +safebrowsing.google.com +safebrowsing.googleapis.com # >> Apple Live events-live.apple.com @@ -359,6 +362,8 @@ edgeassetservice.azureedge.net edgestatic.azureedge.net xpaywalletcdn.azureedge.net edge-consumer-static.azureedge.net +# Appcenter +mobilecenter.azureedge.net # Microsoft Cookie Conscent wcpstatic.microsoft.com # Xbox @@ -1129,7 +1134,7 @@ cdn.sstatic.net steamuserimages-a.akamaihd.net steamusercontent-a.akamaihd.net steamvideo-a.akamaihd.net -steamusercontent.com +.steamusercontent.com steamcdn-a.akamaihd.net # TikTok .ibytedtos.com @@ -1587,8 +1592,6 @@ cloudflare.tv # www.tnaflix.com cdn-fck.tnaflix.com .tnastatic.com -# appcenter -mobilecenter.azureedge.net # mapbox static-assets.mapbox.com # openstreetmap @@ -1902,8 +1905,6 @@ fiddle.jshell.net .pornimg.xyz .hits.b3log.org .safebrowsing.apple -safebrowsing.google.com -safebrowsing.googleapis.com api.wakatime.com .divio-media.net .widget.clutch.co @@ -2329,3 +2330,4 @@ static.namebeta.com images.arigatotravel.com static-00.iconduck.com cdn.unwire.hk +cdn.ywxi.net diff --git a/Source/domainset/download.conf b/Source/domainset/download.conf index b7fd429a..13e26608 100644 --- a/Source/domainset/download.conf +++ b/Source/domainset/download.conf @@ -1,5 +1,4 @@ -# $ meta_title Sukka's Ruleset - Large Files Hosting Domains -# $ meta_description This file contains domains for software updating & large file hosting. +# $ custom_build_script # >> Linux Distro # Alpine @@ -200,14 +199,14 @@ redstone-launcher.mojang.com download.iboysoft.com # HyberBeam cdn.hyperbeam.com -# Steam -DOMAIN-SUFFIX,steamcontent.com -# DOMAIN-SUFFIX,steamserver.net # Epic -DOMAIN-SUFFIX,download.epicgames.com +.download.epicgames.com # MikroTik -DOMAIN,download.mikrotik.com +download.mikrotik.com # ToDesktop download.todesktop.com # NVIDIA -DOMAIN,us.download.nvidia.com +.download.nvidia.com +# AndroidFileHost +ava6.androidfilehost.com +ftp.androidfilehost.com diff --git a/Source/domainset/steam.conf b/Source/domainset/steam.conf new file mode 100644 index 00000000..1f6c45bc --- /dev/null +++ b/Source/domainset/steam.conf @@ -0,0 +1,18 @@ +# $ custom_build_script -- will be included in download.conf + +.steamcontent.com +.content.steampowered.com +content1.steampowered.com +content2.steampowered.com +content3.steampowered.com +content4.steampowered.com +content5.steampowered.com +content6.steampowered.com +content7.steampowered.com +content8.steampowered.com +content-origin.steampowered.com +steam.apac.qtlglb.com +steam.eca.qtlglb.com +steam.naeu.qtlglb.com +steam.ru.qtlglb.com +# DOMAIN-SUFFIX,steamserver.net diff --git a/Source/non_ip/domestic.conf b/Source/non_ip/domestic.conf index c09aca26..c38d9ebf 100644 --- a/Source/non_ip/domestic.conf +++ b/Source/non_ip/domestic.conf @@ -296,10 +296,9 @@ DOMAIN-SUFFIX,steam.ksyna.com DOMAIN-SUFFIX,dl.bscstorage.net DOMAIN-SUFFIX,dl.eccdnx.com DOMAIN-SUFFIX,dl.pinyuncloud.com -DOMAIN-SUFFIX,steamcontent.tnkjmec.com -DOMAIN-SUFFIX,steampowered.com.8686c.com -DOMAIN-SUFFIX,steamstatic.com.8686c.com -DOMAIN,xz.pphimalayanrt.com +DOMAIN-SUFFIX,tnkjmec.com +DOMAIN-SUFFIX,8686c.com +DOMAIN-SUFFIX,pphimalayanrt.com DOMAIN-SUFFIX,steamchina.com DOMAIN-SUFFIX,cdn.ubionline.com.cn diff --git a/Source/non_ip/download.conf b/Source/non_ip/download.conf index 4c1e9bb3..bb221e7b 100644 --- a/Source/non_ip/download.conf +++ b/Source/non_ip/download.conf @@ -2,3 +2,4 @@ # $ meta_description This file contains ruleset for software updating & large file hosting. AND,((DOMAIN-SUFFIX,mediafire.com), (DOMAIN-KEYWORD,download)) +AND,((DOMAIN-SUFFIX,debian.org), (DOMAIN-KEYWORD,ftp))