feat: 支持全局请求超时(前端 > 2.14.29)

This commit is contained in:
xream 2024-01-08 07:14:10 +08:00
parent 962bcda9dd
commit 95615d1877
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
3 changed files with 22 additions and 9 deletions

View File

@ -1,6 +1,6 @@
{
"name": "sub-store",
"version": "2.14.140",
"version": "2.14.141",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js",
"scripts": {

View File

@ -7,7 +7,7 @@ import $ from '@/core/app';
const tasks = new Map();
export default async function download(url, ua) {
export default async function download(url, ua, timeout) {
let $arguments = {};
const rawArgs = url.split('#');
if (rawArgs.length > 1) {
@ -45,17 +45,19 @@ export default async function download(url, ua) {
}
const { isNode } = ENV();
const { defaultUserAgent } = $.read(SETTINGS_KEY);
ua = ua || defaultUserAgent || 'clash.meta';
const id = hex_md5(ua + url);
const { defaultUserAgent, defaultTimeout } = $.read(SETTINGS_KEY);
const userAgent = ua || defaultUserAgent || 'clash.meta';
const requestTimeout = timeout || defaultTimeout;
const id = hex_md5(userAgent + url);
if (!isNode && tasks.has(id)) {
return tasks.get(id);
}
const http = HTTP({
headers: {
'User-Agent': ua,
'User-Agent': userAgent,
},
timeout: requestTimeout,
});
const result = new Promise((resolve, reject) => {
@ -64,7 +66,9 @@ export default async function download(url, ua) {
if (!$arguments?.noCache && cached) {
resolve(cached);
} else {
$.info(`Downloading...\nUser-Agent: ${ua}\nURL: ${url}`);
$.info(
`Downloading...\nUser-Agent: ${userAgent}\nTimeout: ${requestTimeout}\nURL: ${url}`,
);
http.get(url)
.then((resp) => {
const body = resp.body;

View File

@ -1,6 +1,14 @@
import { SETTINGS_KEY } from '@/constants';
import { HTTP } from '@/vendor/open-api';
import $ from '@/core/app';
export async function getFlowHeaders(url) {
export async function getFlowHeaders(url, ua, timeout) {
const { defaultFlowUserAgent, defaultTimeout } = $.read(SETTINGS_KEY);
const userAgent =
ua ||
defaultFlowUserAgent ||
'Quantumult%20X/1.0.30 (iPhone14,2; iOS 15.6)';
const requestTimeout = timeout || defaultTimeout;
const http = HTTP();
const { headers } = await http.get({
url: url
@ -8,8 +16,9 @@ export async function getFlowHeaders(url) {
.map((i) => i.trim())
.filter((i) => i.length)[0],
headers: {
'User-Agent': 'Quantumult%20X/1.0.30 (iPhone14,2; iOS 15.6)',
'User-Agent': userAgent,
},
timeout: requestTimeout,
});
const subkey = Object.keys(headers).filter((k) =>
/SUBSCRIPTION-USERINFO/i.test(k),