Refactor: new output

This commit is contained in:
SukkaW
2024-09-20 23:29:37 +08:00
parent 5448d677fe
commit b119fa652d
7 changed files with 439 additions and 269 deletions

View File

@@ -1,6 +1,4 @@
import path from 'node:path';
import { createRuleset } from './lib/create-file';
import { sortDomains } from './lib/stable-sort-domain';
import { Sema } from 'async-sema';
import { getHostname } from 'tldts';
@@ -10,8 +8,132 @@ import { SHARED_DESCRIPTION } from './lib/constants';
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
import { TTL, deserializeArray, fsFetchCache, serializeArray, createCacheKey } from './lib/cache-filesystem';
import { createTrie } from './lib/trie';
import { output } from './lib/misc';
import { DomainsetOutput } from './lib/create-file-new';
import { OUTPUT_SURGE_DIR } from './constants/dir';
const KEYWORDS = [
'Hong Kong',
'Taiwan',
'China Telecom',
'China Mobile',
'China Unicom',
'Japan',
'Tokyo',
'Singapore',
'Korea',
'Seoul',
'Canada',
'Toronto',
'Montreal',
'Los Ang',
'San Jos',
'Seattle',
'New York',
'Dallas',
'Miami',
'Berlin',
'Frankfurt',
'London',
'Paris',
'Amsterdam',
'Moscow',
'Australia',
'Sydney',
'Brazil',
'Turkey'
];
const PREDEFINE_DOMAINS = [
// speedtest.net
'.speedtest.net',
'.speedtestcustom.com',
'.ooklaserver.net',
'.speed.misaka.one',
'.speedtest.rt.ru',
'.speedtest.aptg.com.tw',
'.speedtest.gslnetworks.com',
'.speedtest.jsinfo.net',
'.speedtest.i3d.net',
'.speedtestkorea.com',
'.speedtest.telus.com',
'.speedtest.telstra.net',
'.speedtest.clouvider.net',
'.speedtest.idv.tw',
'.speedtest.frontier.com',
'.speedtest.orange.fr',
'.speedtest.centurylink.net',
'.srvr.bell.ca',
'.speedtest.contabo.net',
'speedtest.hk.chinamobile.com',
'speedtestbb.hk.chinamobile.com',
'.hizinitestet.com',
'.linknetspeedtest.net.br',
'speedtest.rit.edu',
'speedtest.ropa.de',
'speedtest.sits.su',
'speedtest.tigo.cr',
'speedtest.upp.com',
'.speedtest.pni.tw',
'.speed.pfm.gg',
'.speedtest.faelix.net',
'.speedtest.labixe.net',
'.speedtest.warian.net',
'.speedtest.starhub.com',
'.speedtest.gibir.net.tr',
'.speedtest.ozarksgo.net',
'.speedtest.exetel.com.au',
'.speedtest.sbcglobal.net',
'.speedtest.leaptel.com.au',
'.speedtest.windstream.net',
'.speedtest.vodafone.com.au',
'.speedtest.rascom.ru',
'.speedtest.dchost.com',
'.speedtest.highnet.com',
'.speedtest.seattle.wa.limewave.net',
'.speedtest.optitel.com.au',
'.speednet.net.tr',
'.speedtest.angolacables.co.ao',
'.ookla-speedtest.fsr.com',
'.speedtest.comnet.com.tr',
'.speedtest.gslnetworks.com.au',
'.test.gslnetworks.com.au',
'.speedtest.gslnetworks.com',
'.speedtestunonet.com.br',
'.speedtest.alagas.net',
'speedtest.surfshark.com',
'.speedtest.aarnet.net.au',
'.ookla.rcp.net',
'.ookla-speedtests.e2ro.com',
'.speedtest.com.sg',
'.ookla.ddnsgeek.com',
'.speedtest.pni.tw',
'.speedtest.cmcnetworks.net',
'.speedtestwnet.com.br',
// Cloudflare
'.speed.cloudflare.com',
// Wi-Fi Man
'.wifiman.com',
'.wifiman.me',
'.wifiman.ubncloud.com',
// Fast.com
'.fast.com',
// MacPaw
'speedtest.macpaw.com',
// speedtestmaster
'.netspeedtestmaster.com',
// Google Search Result of "speedtest", powered by this
'.measurement-lab.org',
'.measurementlab.net',
// Google Fiber legacy speedtest site (new fiber speedtest use speedtestcustom.com)
'.speed.googlefiber.net',
// librespeed
'.backend.librespeed.org',
// Apple,
'mensura.cdn-apple.com', // From netQuality command
// OpenSpeedtest
'open.cachefly.net' // This is also used for openspeedtest server download
];
const s = new Sema(2);
const cacheKey = createCacheKey(__filename);
@@ -85,170 +207,24 @@ const querySpeedtestApi = async (keyword: string): Promise<Array<string | null>>
};
export const buildSpeedtestDomainSet = task(require.main === module, __filename)(async (span) => {
const domainTrie = createTrie(
[
// speedtest.net
'.speedtest.net',
'.speedtestcustom.com',
'.ooklaserver.net',
'.speed.misaka.one',
'.speedtest.rt.ru',
'.speedtest.aptg.com.tw',
'.speedtest.gslnetworks.com',
'.speedtest.jsinfo.net',
'.speedtest.i3d.net',
'.speedtestkorea.com',
'.speedtest.telus.com',
'.speedtest.telstra.net',
'.speedtest.clouvider.net',
'.speedtest.idv.tw',
'.speedtest.frontier.com',
'.speedtest.orange.fr',
'.speedtest.centurylink.net',
'.srvr.bell.ca',
'.speedtest.contabo.net',
'speedtest.hk.chinamobile.com',
'speedtestbb.hk.chinamobile.com',
'.hizinitestet.com',
'.linknetspeedtest.net.br',
'speedtest.rit.edu',
'speedtest.ropa.de',
'speedtest.sits.su',
'speedtest.tigo.cr',
'speedtest.upp.com',
'.speedtest.pni.tw',
'.speed.pfm.gg',
'.speedtest.faelix.net',
'.speedtest.labixe.net',
'.speedtest.warian.net',
'.speedtest.starhub.com',
'.speedtest.gibir.net.tr',
'.speedtest.ozarksgo.net',
'.speedtest.exetel.com.au',
'.speedtest.sbcglobal.net',
'.speedtest.leaptel.com.au',
'.speedtest.windstream.net',
'.speedtest.vodafone.com.au',
'.speedtest.rascom.ru',
'.speedtest.dchost.com',
'.speedtest.highnet.com',
'.speedtest.seattle.wa.limewave.net',
'.speedtest.optitel.com.au',
'.speednet.net.tr',
'.speedtest.angolacables.co.ao',
'.ookla-speedtest.fsr.com',
'.speedtest.comnet.com.tr',
'.speedtest.gslnetworks.com.au',
'.test.gslnetworks.com.au',
'.speedtest.gslnetworks.com',
'.speedtestunonet.com.br',
'.speedtest.alagas.net',
'speedtest.surfshark.com',
'.speedtest.aarnet.net.au',
'.ookla.rcp.net',
'.ookla-speedtests.e2ro.com',
'.speedtest.com.sg',
'.ookla.ddnsgeek.com',
'.speedtest.pni.tw',
'.speedtest.cmcnetworks.net',
'.speedtestwnet.com.br',
// Cloudflare
'.speed.cloudflare.com',
// Wi-Fi Man
'.wifiman.com',
'.wifiman.me',
'.wifiman.ubncloud.com',
// Fast.com
'.fast.com',
// MacPaw
'speedtest.macpaw.com',
// speedtestmaster
'.netspeedtestmaster.com',
// Google Search Result of "speedtest", powered by this
'.measurement-lab.org',
'.measurementlab.net',
// Google Fiber legacy speedtest site (new fiber speedtest use speedtestcustom.com)
'.speed.googlefiber.net',
// librespeed
'.backend.librespeed.org',
// Apple,
'mensura.cdn-apple.com', // From netQuality command
// OpenSpeedtest
'open.cachefly.net' // This is also used for openspeedtest server download
],
true
);
const output = new DomainsetOutput(span, 'speedtest')
.withTitle('Sukka\'s Ruleset - Speedtest Domains')
.withDescription([
...SHARED_DESCRIPTION,
'',
'This file contains common speedtest endpoints.'
])
.addFromDomainset(PREDEFINE_DOMAINS)
.addFromDomainset(await readFileIntoProcessedArray(path.resolve(OUTPUT_SURGE_DIR, 'domainset/speedtest.conf')));
await span.traceChildAsync(
'fetch previous speedtest domainset',
async () => {
try {
(
await readFileIntoProcessedArray(path.resolve(__dirname, '../List/domainset/speedtest.conf'))
) .forEach(line => {
const hn = getHostname(line, { detectIp: false, validateHostname: true });
if (hn) {
domainTrie.add(hn);
}
});
} catch { }
}
);
await Promise.all([
'Hong Kong',
'Taiwan',
'China Telecom',
'China Mobile',
'China Unicom',
'Japan',
'Tokyo',
'Singapore',
'Korea',
'Seoul',
'Canada',
'Toronto',
'Montreal',
'Los Ang',
'San Jos',
'Seattle',
'New York',
'Dallas',
'Miami',
'Berlin',
'Frankfurt',
'London',
'Paris',
'Amsterdam',
'Moscow',
'Australia',
'Sydney',
'Brazil',
'Turkey'
].map((keyword) => span.traceChildAsync(
await Promise.all(KEYWORDS.map((keyword) => span.traceChildAsync(
`fetch speedtest endpoints: ${keyword}`,
() => querySpeedtestApi(keyword)
).then(hostnameGroup => hostnameGroup.forEach(hostname => {
if (hostname) {
domainTrie.add(hostname);
output.addDomain(hostname);
}
}))));
const deduped = span.traceChildSync('sort result', () => sortDomains(domainTrie.dump()));
const description = [
...SHARED_DESCRIPTION,
'',
'This file contains common speedtest endpoints.'
];
return createRuleset(
span,
'Sukka\'s Ruleset - Speedtest Domains',
description,
new Date(),
deduped,
'domainset',
output('speedtest', 'domainset')
);
return output.write();
});