mirror of
https://github.com/SukkaW/Surge.git
synced 2026-01-29 01:51:52 +08:00
Update CDN / Download / Domestic Hosts
This commit is contained in:
@@ -41,31 +41,49 @@ const getS3OSSDomainsPromise = (async (): Promise<Set<string>> => {
|
|||||||
return S3OSSDomains;
|
return S3OSSDomains;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
const buildCdnConf = task(import.meta.path, async (span) => {
|
export const buildCdnDownloadConf = task(import.meta.path, async (span) => {
|
||||||
/** @type {string[]} */
|
/** @type {string[]} */
|
||||||
const cdnDomainsList: string[] = await readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/cdn.conf'));
|
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}`); });
|
(await getS3OSSDomainsPromise).forEach((domain: string) => { cdnDomainsList.push(`DOMAIN-SUFFIX,${domain}`); });
|
||||||
|
|
||||||
const description: string[] = [
|
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 Promise.all([
|
||||||
|
createRuleset(
|
||||||
|
span,
|
||||||
|
'Sukka\'s Ruleset - CDN Domains',
|
||||||
|
[
|
||||||
...SHARED_DESCRIPTION,
|
...SHARED_DESCRIPTION,
|
||||||
'',
|
'',
|
||||||
'This file contains object storage and static assets CDN domains.'
|
'This file contains object storage and static assets CDN domains.'
|
||||||
];
|
],
|
||||||
|
|
||||||
return createRuleset(
|
|
||||||
span,
|
|
||||||
'Sukka\'s Ruleset - CDN Domains',
|
|
||||||
description,
|
|
||||||
new Date(),
|
new Date(),
|
||||||
cdnDomainsList,
|
cdnDomainsList,
|
||||||
'ruleset',
|
'ruleset',
|
||||||
path.resolve(import.meta.dir, '../List/non_ip/cdn.conf'),
|
path.resolve(import.meta.dir, '../List/non_ip/cdn.conf'),
|
||||||
path.resolve(import.meta.dir, '../Clash/non_ip/cdn.txt')
|
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) {
|
if (import.meta.main) {
|
||||||
buildCdnConf();
|
buildCdnDownloadConf();
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { getAppleCdnDomainsPromise } from './build-apple-cdn';
|
import { getAppleCdnDomainsPromise } from './build-apple-cdn';
|
||||||
import { getDomesticDomainsRulesetPromise } from './build-domestic-ruleset';
|
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 { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
|
||||||
import { task } from './trace';
|
import { task } from './trace';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
@@ -16,6 +16,7 @@ const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: bo
|
|||||||
['Global', true, true],
|
['Global', true, true],
|
||||||
['Microsoft & Apple', true, true],
|
['Microsoft & Apple', true, true],
|
||||||
['Stream', true, false],
|
['Stream', true, false],
|
||||||
|
['Steam Download', true, true],
|
||||||
['Domestic', false, true],
|
['Domestic', false, true],
|
||||||
['Final Match', true, true]
|
['Final Match', true, true]
|
||||||
];
|
];
|
||||||
@@ -35,6 +36,7 @@ export const buildSSPanelUIMAppProfile = task(import.meta.path, async (span) =>
|
|||||||
microsoftDomains,
|
microsoftDomains,
|
||||||
appleDomains,
|
appleDomains,
|
||||||
streamDomains,
|
streamDomains,
|
||||||
|
steamDomains,
|
||||||
globalDomains,
|
globalDomains,
|
||||||
globalPlusDomains,
|
globalPlusDomains,
|
||||||
telegramDomains,
|
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),
|
readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/apple_services.conf')).then(surgeRulesetToClashClassicalTextRuleset),
|
||||||
// stream - domains
|
// stream - domains
|
||||||
surgeRulesetToClashClassicalTextRuleset(AllStreamServices.flatMap((i) => i.rules)),
|
surgeRulesetToClashClassicalTextRuleset(AllStreamServices.flatMap((i) => i.rules)),
|
||||||
|
// steam - domains
|
||||||
|
readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/domainset/steam.conf')).then(surgeDomainsetToClashRuleset),
|
||||||
// global - domains
|
// 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.conf')).then(surgeRulesetToClashClassicalTextRuleset),
|
||||||
readFileIntoProcessedArray(path.resolve(import.meta.dir, '../Source/non_ip/global_plus.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
|
...appleDomains
|
||||||
],
|
],
|
||||||
streamDomains,
|
streamDomains,
|
||||||
|
steamDomains,
|
||||||
[
|
[
|
||||||
...globalDomains,
|
...globalDomains,
|
||||||
...globalPlusDomains,
|
...globalPlusDomains,
|
||||||
@@ -123,16 +128,16 @@ function generateAppProfile(
|
|||||||
directDomains: string[],
|
directDomains: string[],
|
||||||
microsoftAppleDomains: string[],
|
microsoftAppleDomains: string[],
|
||||||
streamDomains: string[],
|
streamDomains: string[],
|
||||||
|
steamDomains: string[],
|
||||||
globalDomains: string[],
|
globalDomains: string[],
|
||||||
|
|
||||||
lanDomains: string[],
|
lanDomains: string[],
|
||||||
directCidrs: string[],
|
directCidrs: string[],
|
||||||
streamCidrs: string[],
|
streamCidrs: string[],
|
||||||
globalCidrs: string[],
|
globalCidrs: string[],
|
||||||
lanCidrs: string[]
|
lanCidrs: string[]
|
||||||
) {
|
) {
|
||||||
const result: string[] = [];
|
return [
|
||||||
|
|
||||||
result.push(
|
|
||||||
'<?php',
|
'<?php',
|
||||||
'',
|
'',
|
||||||
`// # Build ${new Date().toISOString()}`,
|
`// # Build ${new Date().toISOString()}`,
|
||||||
@@ -190,6 +195,8 @@ function generateAppProfile(
|
|||||||
...microsoftAppleDomains.map(line => ` '${line},Microsoft & Apple',`),
|
...microsoftAppleDomains.map(line => ` '${line},Microsoft & Apple',`),
|
||||||
// stream - domains
|
// stream - domains
|
||||||
...streamDomains.map(line => ` '${line},Stream',`),
|
...streamDomains.map(line => ` '${line},Stream',`),
|
||||||
|
// steam download - domains
|
||||||
|
...steamDomains.map(line => ` '${line},Steam Download',`),
|
||||||
// global - domains
|
// global - domains
|
||||||
...globalDomains.map(line => ` '${line},Global',`),
|
...globalDomains.map(line => ` '${line},Global',`),
|
||||||
// microsoft & apple - ip cidr (nope)
|
// microsoft & apple - ip cidr (nope)
|
||||||
@@ -207,7 +214,5 @@ function generateAppProfile(
|
|||||||
' \'MATCH,Final Match\',',
|
' \'MATCH,Final Match\',',
|
||||||
' ],',
|
' ],',
|
||||||
'];'
|
'];'
|
||||||
);
|
];
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { downloadPreviousBuild } from './download-previous-build';
|
|||||||
import { buildCommon } from './build-common';
|
import { buildCommon } from './build-common';
|
||||||
import { buildAntiBogusDomain } from './build-anti-bogus-domain';
|
import { buildAntiBogusDomain } from './build-anti-bogus-domain';
|
||||||
import { buildAppleCdn } from './build-apple-cdn';
|
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 { buildRejectDomainSet } from './build-reject-domainset';
|
||||||
import { buildTelegramCIDR } from './build-telegram-cidr';
|
import { buildTelegramCIDR } from './build-telegram-cidr';
|
||||||
import { buildChnCidr } from './build-chn-cidr';
|
import { buildChnCidr } from './build-chn-cidr';
|
||||||
@@ -41,7 +41,7 @@ import { createSpan, printTraceResult } from './trace';
|
|||||||
const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon(rootSpan));
|
const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon(rootSpan));
|
||||||
const buildAntiBogusDomainPromise = downloadPreviousBuildPromise.then(() => buildAntiBogusDomain(rootSpan));
|
const buildAntiBogusDomainPromise = downloadPreviousBuildPromise.then(() => buildAntiBogusDomain(rootSpan));
|
||||||
const buildAppleCdnPromise = downloadPreviousBuildPromise.then(() => buildAppleCdn(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 buildRejectDomainSetPromise = downloadPreviousBuildPromise.then(() => buildRejectDomainSet(rootSpan));
|
||||||
const buildTelegramCIDRPromise = downloadPreviousBuildPromise.then(() => buildTelegramCIDR(rootSpan));
|
const buildTelegramCIDRPromise = downloadPreviousBuildPromise.then(() => buildTelegramCIDR(rootSpan));
|
||||||
const buildChnCidrPromise = downloadPreviousBuildPromise.then(() => buildChnCidr(rootSpan));
|
const buildChnCidrPromise = downloadPreviousBuildPromise.then(() => buildChnCidr(rootSpan));
|
||||||
|
|||||||
@@ -39,3 +39,7 @@ export const surgeRulesetToClashClassicalTextRuleset = (rules: string[] | Set<st
|
|||||||
export const surgeDomainsetToClashDomainset = (domainset: string[]) => {
|
export const surgeDomainsetToClashDomainset = (domainset: string[]) => {
|
||||||
return domainset.map(i => (i[0] === '.' ? `+${i}` : i));
|
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}`));
|
||||||
|
};
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ export function isProbablyIpv4(hostname: string): boolean {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
numberOfDots === 3
|
numberOfDots === 3
|
||||||
&& hostname.charCodeAt(0) !== 46
|
&& hostname.charCodeAt(0) !== 46 /* '.' */
|
||||||
&& /* '.' */ hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */
|
&& hostname.charCodeAt(hostname.length - 1) !== 46 /* '.' */
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -285,6 +285,9 @@ cdn.firebase.com
|
|||||||
.blogblog.com
|
.blogblog.com
|
||||||
img.youtube.com
|
img.youtube.com
|
||||||
static.corp.google.com
|
static.corp.google.com
|
||||||
|
.usercontent.google.com
|
||||||
|
safebrowsing.google.com
|
||||||
|
safebrowsing.googleapis.com
|
||||||
|
|
||||||
# >> Apple Live
|
# >> Apple Live
|
||||||
events-live.apple.com
|
events-live.apple.com
|
||||||
@@ -359,6 +362,8 @@ edgeassetservice.azureedge.net
|
|||||||
edgestatic.azureedge.net
|
edgestatic.azureedge.net
|
||||||
xpaywalletcdn.azureedge.net
|
xpaywalletcdn.azureedge.net
|
||||||
edge-consumer-static.azureedge.net
|
edge-consumer-static.azureedge.net
|
||||||
|
# Appcenter
|
||||||
|
mobilecenter.azureedge.net
|
||||||
# Microsoft Cookie Conscent
|
# Microsoft Cookie Conscent
|
||||||
wcpstatic.microsoft.com
|
wcpstatic.microsoft.com
|
||||||
# Xbox
|
# Xbox
|
||||||
@@ -1129,7 +1134,7 @@ cdn.sstatic.net
|
|||||||
steamuserimages-a.akamaihd.net
|
steamuserimages-a.akamaihd.net
|
||||||
steamusercontent-a.akamaihd.net
|
steamusercontent-a.akamaihd.net
|
||||||
steamvideo-a.akamaihd.net
|
steamvideo-a.akamaihd.net
|
||||||
steamusercontent.com
|
.steamusercontent.com
|
||||||
steamcdn-a.akamaihd.net
|
steamcdn-a.akamaihd.net
|
||||||
# TikTok
|
# TikTok
|
||||||
.ibytedtos.com
|
.ibytedtos.com
|
||||||
@@ -1587,8 +1592,6 @@ cloudflare.tv
|
|||||||
# www.tnaflix.com
|
# www.tnaflix.com
|
||||||
cdn-fck.tnaflix.com
|
cdn-fck.tnaflix.com
|
||||||
.tnastatic.com
|
.tnastatic.com
|
||||||
# appcenter
|
|
||||||
mobilecenter.azureedge.net
|
|
||||||
# mapbox
|
# mapbox
|
||||||
static-assets.mapbox.com
|
static-assets.mapbox.com
|
||||||
# openstreetmap
|
# openstreetmap
|
||||||
@@ -1902,8 +1905,6 @@ fiddle.jshell.net
|
|||||||
.pornimg.xyz
|
.pornimg.xyz
|
||||||
.hits.b3log.org
|
.hits.b3log.org
|
||||||
.safebrowsing.apple
|
.safebrowsing.apple
|
||||||
safebrowsing.google.com
|
|
||||||
safebrowsing.googleapis.com
|
|
||||||
api.wakatime.com
|
api.wakatime.com
|
||||||
.divio-media.net
|
.divio-media.net
|
||||||
.widget.clutch.co
|
.widget.clutch.co
|
||||||
@@ -2329,3 +2330,4 @@ static.namebeta.com
|
|||||||
images.arigatotravel.com
|
images.arigatotravel.com
|
||||||
static-00.iconduck.com
|
static-00.iconduck.com
|
||||||
cdn.unwire.hk
|
cdn.unwire.hk
|
||||||
|
cdn.ywxi.net
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# $ meta_title Sukka's Ruleset - Large Files Hosting Domains
|
# $ custom_build_script
|
||||||
# $ meta_description This file contains domains for software updating & large file hosting.
|
|
||||||
|
|
||||||
# >> Linux Distro
|
# >> Linux Distro
|
||||||
# Alpine
|
# Alpine
|
||||||
@@ -200,14 +199,14 @@ redstone-launcher.mojang.com
|
|||||||
download.iboysoft.com
|
download.iboysoft.com
|
||||||
# HyberBeam
|
# HyberBeam
|
||||||
cdn.hyperbeam.com
|
cdn.hyperbeam.com
|
||||||
# Steam
|
|
||||||
DOMAIN-SUFFIX,steamcontent.com
|
|
||||||
# DOMAIN-SUFFIX,steamserver.net
|
|
||||||
# Epic
|
# Epic
|
||||||
DOMAIN-SUFFIX,download.epicgames.com
|
.download.epicgames.com
|
||||||
# MikroTik
|
# MikroTik
|
||||||
DOMAIN,download.mikrotik.com
|
download.mikrotik.com
|
||||||
# ToDesktop
|
# ToDesktop
|
||||||
download.todesktop.com
|
download.todesktop.com
|
||||||
# NVIDIA
|
# NVIDIA
|
||||||
DOMAIN,us.download.nvidia.com
|
.download.nvidia.com
|
||||||
|
# AndroidFileHost
|
||||||
|
ava6.androidfilehost.com
|
||||||
|
ftp.androidfilehost.com
|
||||||
|
|||||||
18
Source/domainset/steam.conf
Normal file
18
Source/domainset/steam.conf
Normal file
@@ -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
|
||||||
@@ -296,10 +296,9 @@ DOMAIN-SUFFIX,steam.ksyna.com
|
|||||||
DOMAIN-SUFFIX,dl.bscstorage.net
|
DOMAIN-SUFFIX,dl.bscstorage.net
|
||||||
DOMAIN-SUFFIX,dl.eccdnx.com
|
DOMAIN-SUFFIX,dl.eccdnx.com
|
||||||
DOMAIN-SUFFIX,dl.pinyuncloud.com
|
DOMAIN-SUFFIX,dl.pinyuncloud.com
|
||||||
DOMAIN-SUFFIX,steamcontent.tnkjmec.com
|
DOMAIN-SUFFIX,tnkjmec.com
|
||||||
DOMAIN-SUFFIX,steampowered.com.8686c.com
|
DOMAIN-SUFFIX,8686c.com
|
||||||
DOMAIN-SUFFIX,steamstatic.com.8686c.com
|
DOMAIN-SUFFIX,pphimalayanrt.com
|
||||||
DOMAIN,xz.pphimalayanrt.com
|
|
||||||
|
|
||||||
DOMAIN-SUFFIX,steamchina.com
|
DOMAIN-SUFFIX,steamchina.com
|
||||||
DOMAIN-SUFFIX,cdn.ubionline.com.cn
|
DOMAIN-SUFFIX,cdn.ubionline.com.cn
|
||||||
|
|||||||
@@ -2,3 +2,4 @@
|
|||||||
# $ meta_description This file contains ruleset for software updating & large file hosting.
|
# $ meta_description This file contains ruleset for software updating & large file hosting.
|
||||||
|
|
||||||
AND,((DOMAIN-SUFFIX,mediafire.com), (DOMAIN-KEYWORD,download))
|
AND,((DOMAIN-SUFFIX,mediafire.com), (DOMAIN-KEYWORD,download))
|
||||||
|
AND,((DOMAIN-SUFFIX,debian.org), (DOMAIN-KEYWORD,ftp))
|
||||||
|
|||||||
Reference in New Issue
Block a user