From 958d7f138ec68cba38f9e724533fa3dcb28daec9 Mon Sep 17 00:00:00 2001 From: mrchatam Date: Sat, 12 Sep 2026 13:21:52 +0330 Subject: [PATCH] fix(frontend): fold sockopt v6only into V6Only on inbound load (#6453) Prevents duplicate keys and an unreachable switch when Advanced/API configs store lowercase v6only (#6421). --- frontend/src/lib/xray/inbound-form-adapter.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/xray/inbound-form-adapter.ts b/frontend/src/lib/xray/inbound-form-adapter.ts index 59605c70e..5abed22bf 100644 --- a/frontend/src/lib/xray/inbound-form-adapter.ts +++ b/frontend/src/lib/xray/inbound-form-adapter.ts @@ -184,9 +184,17 @@ export function rawInboundToFormValues(row: RawInboundRow): InboundFormValues { } const so = streamRecord.sockopt; if (so && typeof so === 'object' && !Array.isArray(so)) { - const parsed = SockoptStreamSettingsSchema.safeParse(so); + const raw = { ...(so as Record) }; + // Imported/API configs may use lowercase v6only; the form key is V6Only. + if ('v6only' in raw) { + if (!('V6Only' in raw)) raw.V6Only = Boolean(raw.v6only); + delete raw.v6only; + } + const parsed = SockoptStreamSettingsSchema.safeParse(raw); if (parsed.success) { - streamRecord.sockopt = { ...(so as Record), ...parsed.data }; + streamRecord.sockopt = { ...raw, ...parsed.data }; + } else { + streamRecord.sockopt = raw; } } }