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", "name": "sub-store",
"version": "2.10.0", "version": "2.10.1",
"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

@ -281,7 +281,30 @@ function Clash_All() {
} }
return true; 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 }; return { name, test, parse };
} }

View File

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

View File

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

File diff suppressed because one or more lines are too long