Slinetrac c672a6fef3
refactor: lint (#6511)
* refactor: lint

* chore: remove eslint-plugin/config-prettier
2026-03-15 07:40:11 +00:00

95 lines
2.5 KiB
TypeScript

import {
decodeAndTrim,
parseBoolOrPresence,
parseInteger,
parsePortOrDefault,
parseQueryStringNormalized,
parseUrlLike,
safeDecodeURIComponent,
splitOnce,
stripUriScheme,
} from './helpers'
export function URI_AnyTLS(line: string): IProxyAnyTLSConfig {
const afterScheme = stripUriScheme(line, 'anytls', 'Invalid anytls uri')
if (!afterScheme) {
throw new Error('Invalid anytls uri')
}
const {
auth: authRaw,
host: server,
port,
query: addons,
fragment: nameRaw,
} = parseUrlLike(afterScheme, {
errorMessage: 'Invalid anytls uri',
})
if (!server) {
throw new Error('Invalid anytls uri')
}
const portNum = parsePortOrDefault(port, 443)
const auth = safeDecodeURIComponent(authRaw) ?? authRaw
const decodedName = decodeAndTrim(nameRaw)
const name = decodedName ?? `AnyTLS ${server}:${portNum}`
const proxy: IProxyAnyTLSConfig = {
type: 'anytls',
name,
server,
port: portNum,
udp: true,
}
if (auth) {
const [username, password] = splitOnce(auth, ':')
proxy.password = password ?? username
}
const params = parseQueryStringNormalized(addons)
if (params.sni) {
proxy.sni = params.sni
}
if (params.alpn) {
const alpn = params.alpn
.split(',')
.map((item) => item.trim())
.filter(Boolean)
if (alpn.length > 0) {
proxy.alpn = alpn
}
}
const fingerprint = params.fingerprint ?? params.hpkp
if (fingerprint) {
proxy.fingerprint = fingerprint
}
const clientFingerprint = params['client-fingerprint'] ?? params.fp
if (clientFingerprint) {
proxy['client-fingerprint'] = clientFingerprint as ClientFingerprint
}
if (Object.prototype.hasOwnProperty.call(params, 'skip-cert-verify')) {
proxy['skip-cert-verify'] = parseBoolOrPresence(params['skip-cert-verify'])
} else if (Object.prototype.hasOwnProperty.call(params, 'insecure')) {
proxy['skip-cert-verify'] = parseBoolOrPresence(params.insecure)
}
if (Object.prototype.hasOwnProperty.call(params, 'udp')) {
proxy.udp = parseBoolOrPresence(params.udp)
}
const idleCheck = parseInteger(params['idle-session-check-interval'])
if (idleCheck !== undefined) {
proxy['idle-session-check-interval'] = idleCheck
}
const idleTimeout = parseInteger(params['idle-session-timeout'])
if (idleTimeout !== undefined) {
proxy['idle-session-timeout'] = idleTimeout
}
const minIdle = parseInteger(params['min-idle-session'])
if (minIdle !== undefined) {
proxy['min-idle-session'] = minIdle
}
return proxy
}