From 470efb7a64d55f01e5e5e8105b9f8f2200a5cb97 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Wed, 27 May 2026 21:22:09 +0200 Subject: [PATCH] fix(schemas): accept empty-string fingerprint on externalProxy The External Proxy form offers a "Default" option with value '' for the uTLS fingerprint dropdown, but UtlsFingerprintSchema.optional() rejects empty strings (only undefined or a valid enum member). Saving an inbound with externalProxy rows failed with `expected one of "360"|"chrome"|...`. Preprocess '' to undefined before the optional enum, matching the existing pattern used for VmessSecuritySchema. --- frontend/src/schemas/protocols/stream/external-proxy.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/schemas/protocols/stream/external-proxy.ts b/frontend/src/schemas/protocols/stream/external-proxy.ts index 2026f460..1624fab3 100644 --- a/frontend/src/schemas/protocols/stream/external-proxy.ts +++ b/frontend/src/schemas/protocols/stream/external-proxy.ts @@ -17,7 +17,10 @@ export const ExternalProxyEntrySchema = z.object({ port: PortSchema.default(443), remark: z.string().default(''), sni: z.string().optional(), - fingerprint: UtlsFingerprintSchema.optional(), + fingerprint: z.preprocess( + (val) => (val === '' ? undefined : val), + UtlsFingerprintSchema.optional(), + ), alpn: z.array(AlpnSchema).optional(), }); export type ExternalProxyEntry = z.infer;