fix (core): Clash Vmess servername does parse correctly

This commit is contained in:
Peng-YM 2022-07-11 23:20:21 +08:00
parent 2c4e47166d
commit b143476e71
7 changed files with 72 additions and 17 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

@ -281,7 +281,30 @@ function Clash_All() {
}
return true;
};
const parse = (line) => JSON.parse(line);
const parse = (line) => {
const proxy = JSON.parse(line);
if (
![
'ss',
'ssr',
'vmess',
'socks',
'http',
'snell',
'trojan',
].includes(proxy.type)
) {
throw new Error(
`Clash does not support proxy with type: ${proxy.type}`,
);
}
// handle vmess sni
proxy.sni = proxy.servername;
delete proxy.servername;
return proxy;
};
return { name, test, parse };
}

View File

@ -1,16 +1,33 @@
import { isPresent } from '@/core/proxy-utils/producers/utils';
export default function Clash_Producer() {
const type = 'ALL';
const produce = (proxies) => {
proxies.filter((proxy) => {
if (proxy.type === 'vless') return false;
return true;
});
// filter unsupported proxies
proxies = proxies.filter((proxy) =>
['ss', 'ssr', 'vmess', 'socks', 'http', 'snell', 'trojan'].includes(
proxy.type,
),
);
return (
'proxies:\n' +
proxies
.map((proxy) => {
if (proxy.type === 'vmess') {
// handle vmess aead
if (isPresent(proxy, 'aead')) {
if (proxy.aead) {
proxy.alterId = 0;
}
delete proxy.aead;
}
if (isPresent(proxy, 'sni')) {
proxy.servername = proxy.sni;
delete proxy.sni;
}
}
delete proxy['tls-fingerprint'];
delete proxy['aead'];
return ' - ' + JSON.stringify(proxy) + '\n';
})
.join('')

View File

@ -1,3 +1,5 @@
import { isPresent } from '@/core/proxy-utils/producers/utils';
export default function Stash_Producer() {
const type = 'ALL';
const produce = (proxies) => {
@ -5,8 +7,21 @@ export default function Stash_Producer() {
'proxies:\n' +
proxies
.map((proxy) => {
if (proxy.type === 'vmess') {
// handle vmess aead
if (isPresent(proxy, 'aead')) {
if (proxy.aead) {
proxy.alterId = 0;
}
delete proxy.aead;
}
if (isPresent(proxy, 'sni')) {
proxy.servername = proxy.sni;
delete proxy.sni;
}
}
delete proxy['tls-fingerprint'];
delete proxy['aead'];
return ' - ' + JSON.stringify(proxy) + '\n';
})
.join('')

File diff suppressed because one or more lines are too long