mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-21 05:40:29 +08:00
113 lines
5.1 KiB
JavaScript
113 lines
5.1 KiB
JavaScript
'use strict';Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'});const buildSpeedtestDomainset=require('../_virtual/build-speedtest-domainset.cjs'),require$$0=require('node:path'),require$$5=require('tldts-experimental'),index=require('./trace/index.cjs'),description=require('./constants/description.cjs'),fetchTextByLine=require('./lib/fetch-text-by-line.cjs'),domainset=require('./lib/rules/domainset.cjs'),dir=require('./constants/dir.cjs'),require$$7=require('@henrygd/queue'),fetchRetry=require('./lib/fetch-retry.cjs');var hasRequiredBuildSpeedtestDomainset;
|
|
|
|
function requireBuildSpeedtestDomainset () {
|
|
if (hasRequiredBuildSpeedtestDomainset) return buildSpeedtestDomainset.__module.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.__require();
|
|
const _description = /*@__PURE__*/ description.__require();
|
|
const _fetchtextbyline = /*@__PURE__*/ fetchTextByLine.__require();
|
|
const _domainset = /*@__PURE__*/ domainset.__require();
|
|
const _dir = /*@__PURE__*/ dir.__require();
|
|
const _queue = require$$7;
|
|
const _fetchretry = /*@__PURE__*/ fetchRetry.__require();
|
|
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.__module, buildSpeedtestDomainset.__module.exports));
|
|
return buildSpeedtestDomainset.__module.exports;
|
|
}exports.__require=requireBuildSpeedtestDomainset; |