From 8bb19debdc5184ad3deb8151ebea7decf9bb8f3b Mon Sep 17 00:00:00 2001 From: xream Date: Thu, 23 Jan 2025 08:22:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Egern=20=E5=A2=9E=E5=8A=A0=20TUIC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- .../src/core/proxy-utils/producers/egern.js | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 6baa53a..6571332 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.16.19", + "version": "2.16.20", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/producers/egern.js b/backend/src/core/proxy-utils/producers/egern.js index 4ea87f2..2b35d8a 100644 --- a/backend/src/core/proxy-utils/producers/egern.js +++ b/backend/src/core/proxy-utils/producers/egern.js @@ -14,6 +14,7 @@ export default function Egern_Producer() { 'hysteria2', 'vless', 'vmess', + 'tuic', ].includes(proxy.type) || (proxy.type === 'ss' && ((proxy.plugin === 'obfs' && @@ -71,7 +72,10 @@ export default function Egern_Producer() { (typeof proxy.flow !== 'undefined' || proxy['reality-opts'] || (!['http', 'ws', 'tcp'].includes(proxy.network) && - proxy.network))) + proxy.network))) || + (proxy.type === 'tuic' && + proxy.token && + proxy.token.length !== 0) ) { return false; } @@ -152,6 +156,23 @@ export default function Egern_Producer() { proxy.obfs = 'salamander'; proxy.obfs_password = proxy['obfs-password']; } + } else if (proxy.type === 'tuic') { + proxy = { + type: 'tuic', + name: proxy.name, + server: proxy.server, + port: proxy.port, + uuid: proxy.uuid, + password: proxy.password, + next_hop: proxy.next_hop, + sni: proxy.sni, + alpn: Array.isArray(proxy.alpn) + ? proxy.alpn + : [proxy.alpn || 'h3'], + skip_tls_verify: proxy['skip-cert-verify'], + port_hopping: proxy.ports, + port_hopping_interval: proxy['hop-interval'], + }; } else if (proxy.type === 'trojan') { if (proxy.network === 'ws') { proxy.websocket = {