Surge_by_SukkaW/Dist/chunks/build-speedtest-domainset.D2jYMvWN.cjs
SukkaW d354c5e988
Some checks are pending
Build / Build (push) Waiting to run
Build / Diff output (push) Blocked by required conditions
Build / Deploy to Cloudflare Pages (push) Blocked by required conditions
Build / Deploy to GitHub and GitLab (push) Blocked by required conditions
Chore: maintainance
2025-02-07 17:52:36 +08:00

113 lines
4.9 KiB
JavaScript

'use strict';const require$$0=require('node:path'),require$$5=require('tldts-experimental'),index=require('./index.B8Uk9n3v.cjs'),base=require('./base.C13YY5P3.cjs'),fetchTextByLine=require('./fetch-text-by-line.YY5b5610.cjs'),domainset=require('./domainset.CSQfKAtf.cjs'),fetchRetry=require('./fetch-retry.D06uBUaW.cjs'),require$$7=require('@henrygd/queue');var buildSpeedtestDomainset = {exports: {}};var hasRequiredBuildSpeedtestDomainset;
function requireBuildSpeedtestDomainset () {
if (hasRequiredBuildSpeedtestDomainset) return buildSpeedtestDomainset.exports;
hasRequiredBuildSpeedtestDomainset = 1;
(function (module, exports) {
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "buildSpeedtestDomainSet", {
enumerable: true,
get: function() {
return buildSpeedtestDomainSet;
}
});
const _nodepath = /*#__PURE__*/ _interop_require_default(require$$0);
const _tldtsexperimental = /*#__PURE__*/ _interop_require_default(require$$5);
const _trace = /*@__PURE__*/ index.r();
const _description = /*@__PURE__*/ base.r();
const _fetchtextbyline = /*@__PURE__*/ fetchTextByLine.a();
const _domainset = /*@__PURE__*/ domainset.r();
const _dir = /*@__PURE__*/ fetchRetry.a();
const _queue = require$$7;
const _fetchretry = /*@__PURE__*/ fetchRetry.r();
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
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 s = (0, _queue.newQueue)(2);
const latestTopUserAgentsPromise = (0, _fetchretry.$$fetch)('https://raw.githubusercontent.com/microlinkhq/top-user-agents/master/src/desktop.json').then((res)=>res.json()).then((userAgents)=>userAgents.filter((ua)=>ua.startsWith('Mozilla/5.0 ')));
const getSpeedtestHostsGroupsPromise = Promise.all(KEYWORDS.flatMap(querySpeedtestApi));
const buildSpeedtestDomainSet = (0, _trace.task)(require.main === module, __filename)(async (span)=>{
const output = new _domainset.DomainsetOutput(span, 'speedtest').withTitle('Sukka\'s Ruleset - Speedtest Domains').withDescription([
..._description.SHARED_DESCRIPTION,
'',
'This file contains common speedtest endpoints.'
]).addFromDomainset((0, _fetchtextbyline.readFileIntoProcessedArray)(_nodepath.default.resolve(_dir.SOURCE_DIR, 'domainset/speedtest.conf'))).addFromDomainset((0, _fetchtextbyline.readFileIntoProcessedArray)(_nodepath.default.resolve(_dir.OUTPUT_SURGE_DIR, 'domainset/speedtest.conf')));
const hostnameGroup = await span.traceChildPromise('get speedtest hosts groups', getSpeedtestHostsGroupsPromise);
hostnameGroup.forEach(output.bulkAddDomain.bind(output));
return output.write();
});
async function querySpeedtestApi(keyword) {
const topUserAgents = await latestTopUserAgentsPromise;
const url = `https://www.speedtest.net/api/js/servers?engine=js&search=${keyword}&limit=100`;
try {
const randomUserAgent = topUserAgents[Math.floor(Math.random() * topUserAgents.length)];
const data = await s.add(()=>(0, _fetchretry.$$fetch)(url, {
headers: {
dnt: '1',
Referer: 'https://www.speedtest.net/',
accept: 'application/json, text/plain, */*',
'User-Agent': randomUserAgent,
'Accept-Language': 'en-US,en;q=0.9',
...randomUserAgent.includes('Chrome') ? {
'Sec-Ch-Ua-Mobile': '?0',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Sec-Gpc': '1'
} : {}
},
signal: AbortSignal.timeout(1000 * 60)
}).then((res)=>res.json()));
return data.reduce((prev, cur)=>{
const hn = _tldtsexperimental.default.getHostname(cur.host || cur.url, {
detectIp: false,
validateHostname: true
});
if (hn) {
prev.push(hn);
}
return prev;
}, []);
} catch (e) {
console.error(e);
return [];
}
}
} (buildSpeedtestDomainset, buildSpeedtestDomainset.exports));
return buildSpeedtestDomainset.exports;
}exports.r=requireBuildSpeedtestDomainset;