fix(hysteria): standard geco share links and persistent uTLS None (#6325)

- Export standard gecko obfs query params in hysteria2 share links
- Enforce packet size bounds across Go and TypeScript link handlers
- Persist uTLS None explicitly and initialize new TLS inbounds to chrome
- Tear down stackTun safely without closeMu deadlock against WriteNotify

Co-authored-by: rqzbeh <rqzbeh@users.noreply.github.com>
This commit is contained in:
Rouzbeh†
2026-09-03 18:05:07 +03:30
committed by GitHub
parent f9898e0b24
commit 540caa4e93
14 changed files with 514 additions and 111 deletions
@@ -56,7 +56,9 @@ export const TlsCertSchema = z.union([TlsCertFileSchema, TlsCertInlineSchema]);
export type TlsCert = z.infer<typeof TlsCertSchema>;
export const TlsClientSettingsSchema = z.object({
fingerprint: TlsFingerprintSchema.default('chrome'),
// '' = None. Hysteria rejects uTLS fingerprints, and a chrome default
// silently flipped the form's None back to chrome on every save.
fingerprint: TlsFingerprintSchema.default(''),
echConfigList: z.string().default(''),
pinnedPeerCertSha256: z.array(z.string()).default([]),
// Panel-only client directive (v2rayN `vcn`): verify the server certificate
@@ -87,7 +89,7 @@ export const TlsStreamSettingsSchema = z.object({
masterKeyLog: z.string().optional(),
echSockopt: SockoptStreamSettingsSchema.optional(),
settings: TlsClientSettingsSchema.default({
fingerprint: 'chrome',
fingerprint: '',
echConfigList: '',
pinnedPeerCertSha256: [],
verifyPeerCertByName: '',