Files
3x-ui/frontend/src/schemas/primitives/options.ts
T
MHSanaei 62423cacd1 feat(xray): update xray-core to v26.9.30 and adapt panel
Bump xtls/xray-core to b26a91de4f (v26.9.30) and the three binary pins
(DockerInit.sh, release.yml Linux + Windows) in lockstep. No deleted
symbols; the sing and sing-shadowsocks indirect deps drop out with the
SS2022 rewrite.

XDNS finalmask (#6718) replaced its string lists with objects: domains
are {name, types, edns0, lenLimit, labelLimit} and client resolvers
{type, settings.addr}. The loader no longer parses the old lists, so a
single stored xdns mask keeps the whole core from starting. The new leaf
package internal/util/maskcompat converts them: "name[:type]" becomes a
domain and "name[:type]+udp://addr" a domain plus a udp resolver. A bare
name maps to TXT, the type legacy clients queried by default, and each
converted domain keeps the 1232-byte EDNS0 the old code always used
(without it the server caps answers at 512). It runs from:
- the XdnsFinalmaskObjectsFix seeder, over inbound streams, hosts, the
  xray template, the global sub-JSON mask and cached subscription
  outbounds;
- inbound save (normalizeStreamSettings) and GetXrayConfig, for rows
  that never went through the seeder;
- both link importers, since fm= from an older panel carries the lists.
The finalmask form edits the object shape (every key needs a registered
field, or the finalmask watch drops it on save) and lifts legacy masks
on open. The udp-mask golden fixture moves to the object shape, which
TestGoldenStreamFixturesBuildInXray now builds through the core. The
wire format changed as well, so pre-upgrade clients need the new core.

WireGuard outbound (#6771) dropped settings.domainStrategy and the
remoteDNS "local" mode. The endpoint lookup now follows
sockopt.domainStrategy and in-tunnel targets the outbound's
targetStrategy. The old key is silently ignored, which undid the
IPv4-first endpoint lookup the WARP outbound depends on (#5205), and
"local" now panics the core at startup because remoteDNS goes through
netip.MustParseAddr. The WireguardDomainStrategyFix seeder moves a stored
family preference to both keys (a value already set wins) and turns
"local" into targetStrategy; the outbound form lifts legacy rows the same
way and drops its select, the WARP modal writes the new placement, and
the inbound form loses a field the server never read.
ValidateOutboundConfig now refuses a non-IP remoteDNS entry, which
conf.Build() lets through, on template save and for outbound
subscriptions.

Noise finalmask items accept type "exp" (#6862), a tag expression. The
form offers it for noise items only: header-custom items go through the
core's PraseByteSlice, which refuses it.

TUN gained autoSystemDnsToGateway (Linux) and autoSystemWfpBlockLeak
(Windows). Both pass through the settings schema so a value set in JSON
survives the next form save.

MASQUE (inbound, outbound, transport) and the XDRIVE transport are new
protocols the panel does not offer yet; their new loader refusals only
cover configs the panel never generates. The FakeDNS IPv6 pool default,
the SS2022 rewrite (same gRPC account; emails are now deduped
case-insensitively, as the panel already does), the restored udphop
interval default and the rest change no panel-facing config.
2026-10-02 13:54:39 +02:00

102 lines
2.7 KiB
TypeScript

export const UTLS_FINGERPRINT = Object.freeze({
UTLS_CHROME: 'chrome',
UTLS_FIREFOX: 'firefox',
UTLS_SAFARI: 'safari',
UTLS_IOS: 'ios',
UTLS_android: 'android',
UTLS_EDGE: 'edge',
UTLS_360: '360',
UTLS_QQ: 'qq',
UTLS_RANDOM: 'random',
UTLS_RANDOMIZED: 'randomized',
UTLS_RONDOMIZEDNOALPN: 'randomizednoalpn',
UTLS_UNSAFE: 'unsafe',
});
export const ALPN_OPTION = Object.freeze({
H3: 'h3',
H2: 'h2',
HTTP1: 'http/1.1',
});
export const SNIFFING_OPTION = Object.freeze({
HTTP: 'http',
TLS: 'tls',
QUIC: 'quic',
FAKEDNS: 'fakedns',
});
export const USERS_SECURITY = Object.freeze({
AES_128_GCM: 'aes-128-gcm',
CHACHA20_POLY1305: 'chacha20-poly1305',
AUTO: 'auto',
});
export const MODE_OPTION = Object.freeze({
AUTO: 'auto',
PACKET_UP: 'packet-up',
STREAM_UP: 'stream-up',
STREAM_ONE: 'stream-one',
});
export const Address_Port_Strategy = Object.freeze({
NONE: 'none',
SRV_PORT_ONLY: 'SrvPortOnly',
SRV_ADDRESS_ONLY: 'SrvAddressOnly',
SRV_PORT_AND_ADDRESS: 'SrvPortAndAddress',
TXT_PORT_ONLY: 'TxtPortOnly',
TXT_ADDRESS_ONLY: 'TxtAddressOnly',
TXT_PORT_AND_ADDRESS: 'TxtPortAndAddress',
});
export const DNSRuleActions = Object.freeze(['direct', 'drop', 'return', 'hijack'] as const);
export const TLS_VERSION_OPTION = Object.freeze({
TLS10: '1.0',
TLS11: '1.1',
TLS12: '1.2',
TLS13: '1.3',
});
export const TLS_CIPHER_OPTION = Object.freeze({
AES_128_GCM: 'TLS_AES_128_GCM_SHA256',
AES_256_GCM: 'TLS_AES_256_GCM_SHA384',
CHACHA20_POLY1305: 'TLS_CHACHA20_POLY1305_SHA256',
ECDHE_ECDSA_AES_128_CBC: 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA',
ECDHE_ECDSA_AES_256_CBC: 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA',
ECDHE_RSA_AES_128_CBC: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA',
ECDHE_RSA_AES_256_CBC: 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA',
ECDHE_ECDSA_AES_128_GCM: 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
ECDHE_ECDSA_AES_256_GCM: 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
ECDHE_RSA_AES_128_GCM: 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
ECDHE_RSA_AES_256_GCM: 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384',
ECDHE_ECDSA_CHACHA20_POLY1305: 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256',
ECDHE_RSA_CHACHA20_POLY1305: 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256',
});
export const USAGE_OPTION = Object.freeze({
ENCIPHERMENT: 'encipherment',
VERIFY: 'verify',
ISSUE: 'issue',
});
export const DOMAIN_STRATEGY_OPTION = Object.freeze({
AS_IS: 'AsIs',
USE_IP: 'UseIP',
USE_IPV6V4: 'UseIPv6v4',
USE_IPV6: 'UseIPv6',
USE_IPV4V6: 'UseIPv4v6',
USE_IPV4: 'UseIPv4',
FORCE_IP: 'ForceIP',
FORCE_IPV6V4: 'ForceIPv6v4',
FORCE_IPV6: 'ForceIPv6',
FORCE_IPV4V6: 'ForceIPv4v6',
FORCE_IPV4: 'ForceIPv4',
});
export const TCP_CONGESTION_OPTION = Object.freeze({
BBR: 'bbr',
CUBIC: 'cubic',
RENO: 'reno',
});