diff --git a/backend/package.json b/backend/package.json index e7a02b9d3..51009ac0d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.16.53", + "version": "2.16.54", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/index.js b/backend/src/core/proxy-utils/index.js index 5ad0993d5..80166e751 100644 --- a/backend/src/core/proxy-utils/index.js +++ b/backend/src/core/proxy-utils/index.js @@ -23,6 +23,7 @@ import { produceArtifact } from '@/restful/sync'; import { getFlag, removeFlag, getISO, MMDB } from '@/utils/geo'; import Gist from '@/utils/gist'; import { isPresent } from './producers/utils'; +import { doh } from '@/utils/dns'; function preprocess(raw) { for (const processor of PROXY_PREPROCESSORS) { @@ -327,6 +328,7 @@ export const ProxyUtils = { Gist, download, isValidUUID, + doh, }; function tryParse(parser, line) { diff --git a/backend/src/core/proxy-utils/producers/sing-box.js b/backend/src/core/proxy-utils/producers/sing-box.js index 3c6a9d898..d983bd212 100644 --- a/backend/src/core/proxy-utils/producers/sing-box.js +++ b/backend/src/core/proxy-utils/producers/sing-box.js @@ -641,6 +641,24 @@ const tuic5Parser = (proxy = {}) => { smuxParser(proxy.smux, parsedProxy); return parsedProxy; }; +const anytlsParser = (proxy = {}) => { + const parsedProxy = { + tag: proxy.name, + type: 'anytls', + server: proxy.server, + server_port: parseInt(`${proxy.port}`, 10), + password: proxy.password, + tls: { enabled: true, server_name: proxy.server, insecure: false }, + }; + if (/^\d+$/.test(proxy['idle-session-check-interval'])) + parsedProxy.idle_session_check_interval = `${proxy['idle-session-check-interval']}s`; + if (/^\d+$/.test(proxy['idle-session-timeout'])) + parsedProxy.idle_session_timeout = `${proxy['idle-session-timeout']}s`; + detourParser(proxy, parsedProxy); + tlsParser(proxy, parsedProxy); + smuxParser(proxy.smux, parsedProxy); + return parsedProxy; +}; const wireguardParser = (proxy = {}) => { const local_address = ['ip', 'ipv6'] @@ -829,6 +847,9 @@ export default function singbox_Producer() { case 'wireguard': list.push(wireguardParser(proxy)); break; + case 'anytls': + list.push(anytlsParser(proxy)); + break; default: throw new Error( `Platform sing-box does not support proxy type: ${proxy.type}`,