feat: 默认输出格式改为 V2Ray; accept 为 application/json 时, 输出 JSON; 响应增加 X-Powered-By Sub-Store

This commit is contained in:
xream 2024-11-19 23:06:45 +08:00
parent bc1247efaf
commit 7d8132d7cd
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
4 changed files with 28 additions and 22 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.422", "version": "2.14.423",
"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

@ -6,21 +6,19 @@ import $ from '@/core/app';
import headersResourceCache from '@/utils/headers-resource-cache'; import headersResourceCache from '@/utils/headers-resource-cache';
export function getFlowField(headers) { export function getFlowField(headers) {
let subKey = ''; const keys = Object.keys(headers);
let webPageKey = ''; let sub = '';
let webPage = '';
Object.keys(headers).some((k) => { for (let k of keys) {
if (/SUBSCRIPTION-USERINFO/i.test(k)) { const lower = k.toLowerCase();
subKey = k; if (lower === 'subscription-userinfo') {
} else if (/PROFILE-WEB-PAGE-URL/i.test(k)) { sub = headers[k];
webPageKey = k; } else if (lower === 'profile-web-page-url') {
webPage = headers[k];
} }
return subKey && webPageKey; }
});
return `${headers[subKey] || ''}${ return `${sub || ''}${webPage ? `;app_url=${webPage}` : ''}`;
webPageKey ? `;app_url=${headers[webPageKey]}` : ''
}`;
} }
export async function getFlowHeaders( export async function getFlowHeaders(
rawUrl, rawUrl,

View File

@ -2,16 +2,20 @@ export function getUserAgentFromHeaders(headers) {
const keys = Object.keys(headers); const keys = Object.keys(headers);
let UA = ''; let UA = '';
let ua = ''; let ua = '';
let accept = '';
for (let k of keys) { for (let k of keys) {
if (/USER-AGENT/i.test(k)) { const lower = k.toLowerCase();
if (lower === 'user-agent') {
UA = headers[k]; UA = headers[k];
ua = UA.toLowerCase(); ua = UA.toLowerCase();
break; } else if (lower === 'accept') {
accept = headers[k];
} }
} }
return { UA, ua }; return { UA, ua, accept };
} }
export function getPlatformFromUserAgent({ ua, UA }) {
export function getPlatformFromUserAgent({ ua, UA, accept }) {
if (UA.indexOf('Quantumult%20X') !== -1) { if (UA.indexOf('Quantumult%20X') !== -1) {
return 'QX'; return 'QX';
} else if (UA.indexOf('Surfboard') !== -1) { } else if (UA.indexOf('Surfboard') !== -1) {
@ -35,15 +39,18 @@ export function getPlatformFromUserAgent({ ua, UA }) {
return 'ClashMeta'; return 'ClashMeta';
} else if (ua.indexOf('clash') !== -1) { } else if (ua.indexOf('clash') !== -1) {
return 'Clash'; return 'Clash';
} else if (ua.indexOf('v2ray') !== -1) { } else if (ua.indexOf('v2ray') !== -1 || ua.indexOf('egern') !== -1) {
return 'V2Ray'; return 'V2Ray';
} else if (ua.indexOf('sing-box') !== -1) { } else if (ua.indexOf('sing-box') !== -1) {
return 'sing-box'; return 'sing-box';
} else { } else if (accept.indexOf('application/json') === 0) {
return 'JSON'; return 'JSON';
} else {
return 'V2Ray';
} }
} }
export function getPlatformFromHeaders(headers) { export function getPlatformFromHeaders(headers) {
const { UA, ua } = getUserAgentFromHeaders(headers); const { UA, ua, accept } = getUserAgentFromHeaders(headers);
return getPlatformFromUserAgent({ ua, UA }); return getPlatformFromUserAgent({ ua, UA, accept });
} }

View File

@ -9,6 +9,7 @@ export default function express({ substore: $, port, host }) {
'Access-Control-Allow-Methods': 'POST,GET,OPTIONS,PATCH,PUT,DELETE', 'Access-Control-Allow-Methods': 'POST,GET,OPTIONS,PATCH,PUT,DELETE',
'Access-Control-Allow-Headers': 'Access-Control-Allow-Headers':
'Origin, X-Requested-With, Content-Type, Accept', 'Origin, X-Requested-With, Content-Type, Accept',
'X-Powered-By': 'Sub-Store',
}; };
// node support // node support