更新_worker.js,优化订阅格式判断逻辑,简化代码并统一响应头构建

This commit is contained in:
cmliu
2025-07-07 18:04:01 +08:00
parent 03be58d685
commit 2efb3cb248

View File

@@ -93,18 +93,18 @@ export default {
await sendMessage(`#获取订阅 ${FileName}`, request.headers.get('CF-Connecting-IP'), `UA: ${userAgentHeader}</tg-spoiler>\n域名: ${url.hostname}\n<tg-spoiler>入口: ${url.pathname + url.search}</tg-spoiler>`); await sendMessage(`#获取订阅 ${FileName}`, request.headers.get('CF-Connecting-IP'), `UA: ${userAgentHeader}</tg-spoiler>\n域名: ${url.hostname}\n<tg-spoiler>入口: ${url.pathname + url.search}</tg-spoiler>`);
let 订阅格式 = 'base64'; let 订阅格式 = 'base64';
if (userAgent.includes('null') || userAgent.includes('subconverter') || userAgent.includes('nekobox') || userAgent.includes(('CF-Workers-SUB').toLowerCase())) { if (!(userAgent.includes('null') || userAgent.includes('subconverter') || userAgent.includes('nekobox') || userAgent.includes(('CF-Workers-SUB').toLowerCase()))) {
订阅格式 = 'base64'; if (userAgent.includes('sing-box') || userAgent.includes('singbox') || url.searchParams.has('sb') || url.searchParams.has('singbox')) {
} else if (userAgent.includes('clash') || userAgent.includes('meta') || userAgent.includes('mihomo') || (url.searchParams.has('clash') && !userAgent.includes('subconverter'))) { 订阅格式 = 'singbox';
订阅格式 = 'clash'; } else if (userAgent.includes('surge') || url.searchParams.has('surge')) {
} else if (userAgent.includes('sing-box') || userAgent.includes('singbox') || ((url.searchParams.has('sb') || url.searchParams.has('singbox')) && !userAgent.includes('subconverter'))) { 订阅格式 = 'surge';
订阅格式 = 'singbox'; } else if (userAgent.includes('quantumult') || url.searchParams.has('quanx')) {
} else if (userAgent.includes('surge') || (url.searchParams.has('surge') && !userAgent.includes('subconverter'))) { 订阅格式 = 'quanx';
订阅格式 = 'surge'; } else if (userAgent.includes('loon') || url.searchParams.has('loon')) {
} else if (userAgent.includes('quantumult%20x') || (url.searchParams.has('quanx') && !userAgent.includes('subconverter'))) { 订阅格式 = 'loon';
订阅格式 = 'quanx'; } else if (userAgent.includes('clash') || userAgent.includes('meta') || userAgent.includes('mihomo') || url.searchParams.has('clash')) {
} else if (userAgent.includes('loon') || (url.searchParams.has('loon') && !userAgent.includes('subconverter'))) { 订阅格式 = 'clash';
订阅格式 = 'loon'; }
} }
let subConverterUrl; let subConverterUrl;
@@ -168,14 +168,16 @@ export default {
base64Data = encodeBase64(result) base64Data = encodeBase64(result)
} }
// 构建响应头对象
const responseHeaders = {
"content-type": "text/plain; charset=utf-8",
"Profile-Update-Interval": `${SUBUpdateTime}`,
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
};
if (订阅格式 == 'base64' || token == fakeToken) { if (订阅格式 == 'base64' || token == fakeToken) {
return new Response(base64Data, { return new Response(base64Data, { headers: responseHeaders });
headers: {
"content-type": "text/plain; charset=utf-8",
"Profile-Update-Interval": `${SUBUpdateTime}`,
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
}
});
} else if (订阅格式 == 'clash') { } else if (订阅格式 == 'clash') {
subConverterUrl = `${subProtocol}://${subConverter}/sub?target=clash&url=${encodeURIComponent(订阅转换URL)}&insert=false&config=${encodeURIComponent(subConfig)}&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true`; subConverterUrl = `${subProtocol}://${subConverter}/sub?target=clash&url=${encodeURIComponent(订阅转换URL)}&insert=false&config=${encodeURIComponent(subConfig)}&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true`;
} else if (订阅格式 == 'singbox') { } else if (订阅格式 == 'singbox') {
@@ -189,40 +191,15 @@ export default {
} }
//console.log(订阅转换URL); //console.log(订阅转换URL);
try { try {
const subConverterResponse = await fetch(subConverterUrl); const subConverterResponse = await fetch(subConverterUrl);//订阅转换
if (!subConverterResponse.ok) return new Response(base64Data, { headers: responseHeaders });
if (!subConverterResponse.ok) {
return new Response(base64Data, {
headers: {
"content-type": "text/plain; charset=utf-8",
"Profile-Update-Interval": `${SUBUpdateTime}`,
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
}
});
//throw new Error(`Error fetching subConverterUrl: ${subConverterResponse.status} ${subConverterResponse.statusText}`);
}
let subConverterContent = await subConverterResponse.text(); let subConverterContent = await subConverterResponse.text();
if (订阅格式 == 'clash') subConverterContent = await clashFix(subConverterContent); if (订阅格式 == 'clash') subConverterContent = await clashFix(subConverterContent);
return new Response(subConverterContent, { // 只有非浏览器订阅才会返回SUBNAME
headers: { if (!userAgent.includes('mozilla')) responseHeaders["Content-Disposition"] = `attachment; filename*=utf-8''${encodeURIComponent(FileName)}`;
"Content-Disposition": `attachment; filename*=utf-8''${encodeURIComponent(FileName)}`, return new Response(subConverterContent, { headers: responseHeaders });
"content-type": "text/plain; charset=utf-8",
"Profile-Update-Interval": `${SUBUpdateTime}`,
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
},
});
} catch (error) { } catch (error) {
return new Response(base64Data, { return new Response(base64Data, { headers: responseHeaders });
headers: {
"content-type": "text/plain; charset=utf-8",
"Profile-Update-Interval": `${SUBUpdateTime}`,
"Profile-web-page-url": request.url.includes('?') ? request.url.split('?')[0] : request.url,
//"Subscription-Userinfo": `upload=${UD}; download=${UD}; total=${total}; expire=${expire}`,
}
});
} }
} }
} }