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", "name": "sub-store",
"version": "2.14.448", "version": "2.14.449",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {

View File

@ -375,13 +375,12 @@ async function downloadCollection(req, res) {
proxy, proxy,
noCache, noCache,
}); });
let subUserInfoOfSub;
// forward flow header from the first subscription in this collection // forward flow header from the first subscription in this collection
const allSubs = $.read(SUBS_KEY); const allSubs = $.read(SUBS_KEY);
const subnames = collection.subscriptions; const subnames = collection.subscriptions;
if (subnames.length > 0) { if (subnames.length > 0) {
const sub = findByName(allSubs, subnames[0]); const sub = findByName(allSubs, subnames[0]);
let flowInfo;
if ( if (
sub.source !== 'local' || sub.source !== 'local' ||
['localFirst', 'remoteFirst'].includes(sub.mergeSources) ['localFirst', 'remoteFirst'].includes(sub.mergeSources)
@ -415,16 +414,13 @@ async function downloadCollection(req, res) {
} }
} }
if (!$arguments.noFlow) { if (!$arguments.noFlow) {
flowInfo = await getFlowHeaders( subUserInfoOfSub = await getFlowHeaders(
$arguments?.insecure ? `${url}#insecure` : url, $arguments?.insecure ? `${url}#insecure` : url,
$arguments.flowUserAgent, $arguments.flowUserAgent,
undefined, undefined,
proxy || sub.proxy || collection.proxy, proxy || sub.proxy || collection.proxy,
$arguments.flowUrl, $arguments.flowUrl,
); );
if (flowInfo) {
res.set('subscription-userinfo', flowInfo);
}
} }
} catch (err) { } catch (err) {
$.error( $.error(
@ -455,13 +451,41 @@ async function downloadCollection(req, res) {
} else { } else {
subUserInfo = sub.subUserinfo; subUserInfo = sub.subUserinfo;
} }
res.set( subUserInfoOfSub = [subUserInfo, subUserInfoOfSub]
'subscription-userinfo', .filter((i) => i)
[subUserInfo, flowInfo].filter((i) => i).join('; '), .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 (platform === 'JSON') {
if (resultFormat === 'nezha') { if (resultFormat === 'nezha') {
output = nezhaTransform(output); output = nezhaTransform(output);