feat: 组合订阅支持手动设置流量信息. 支持使用链接. 此时使用响应内容

This commit is contained in:
xream 2024-12-24 01:20:38 +08:00
parent 33e5aeceb5
commit 38eccca8b4
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
2 changed files with 35 additions and 11 deletions

View File

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

View File

@ -375,13 +375,12 @@ async function downloadCollection(req, res) {
proxy,
noCache,
});
let subUserInfoOfSub;
// forward flow header from the first subscription in this collection
const allSubs = $.read(SUBS_KEY);
const subnames = collection.subscriptions;
if (subnames.length > 0) {
const sub = findByName(allSubs, subnames[0]);
let flowInfo;
if (
sub.source !== 'local' ||
['localFirst', 'remoteFirst'].includes(sub.mergeSources)
@ -415,16 +414,13 @@ async function downloadCollection(req, res) {
}
}
if (!$arguments.noFlow) {
flowInfo = await getFlowHeaders(
subUserInfoOfSub = await getFlowHeaders(
$arguments?.insecure ? `${url}#insecure` : url,
$arguments.flowUserAgent,
undefined,
proxy || sub.proxy || collection.proxy,
$arguments.flowUrl,
);
if (flowInfo) {
res.set('subscription-userinfo', flowInfo);
}
}
} catch (err) {
$.error(
@ -455,13 +451,41 @@ async function downloadCollection(req, res) {
} else {
subUserInfo = sub.subUserinfo;
}
res.set(
'subscription-userinfo',
[subUserInfo, flowInfo].filter((i) => i).join('; '),
);
subUserInfoOfSub = [subUserInfo, subUserInfoOfSub]
.filter((i) => i)
.join('; ');
}
}
$.info(`组合订阅 ${name} 透传的的流量信息: ${subUserInfoOfSub}`);
let subUserInfoOfCol;
if (/^https?:\/\//.test(collection.subUserinfo)) {
try {
subUserInfoOfCol = await getFlowHeaders(
undefined,
undefined,
undefined,
proxy || collection.proxy,
collection.subUserinfo,
);
} catch (e) {
$.error(
`组合订阅 ${name} 使用自定义流量链接 ${
collection.subUserinfo
} 获取流量信息时发生错误: ${JSON.stringify(e)}`,
);
}
} else {
subUserInfoOfCol = collection.subUserinfo;
}
res.set(
'subscription-userinfo',
[subUserInfoOfCol, subUserInfoOfSub]
.filter((i) => i)
.join('; '),
);
if (platform === 'JSON') {
if (resultFormat === 'nezha') {
output = nezhaTransform(output);