Просмотр исходного кода

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).
mrchatam 2 часов назад
Родитель
Сommit
958d7f138e
1 измененных файлов с 10 добавлено и 2 удалено
  1. 10 2
      frontend/src/lib/xray/inbound-form-adapter.ts

+ 10 - 2
frontend/src/lib/xray/inbound-form-adapter.ts

@@ -184,9 +184,17 @@ export function rawInboundToFormValues(row: RawInboundRow): InboundFormValues {
     }
     }
     const so = streamRecord.sockopt;
     const so = streamRecord.sockopt;
     if (so && typeof so === 'object' && !Array.isArray(so)) {
     if (so && typeof so === 'object' && !Array.isArray(so)) {
-      const parsed = SockoptStreamSettingsSchema.safeParse(so);
+      const raw = { ...(so as Record<string, unknown>) };
+      // 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) {
       if (parsed.success) {
-        streamRecord.sockopt = { ...(so as Record<string, unknown>), ...parsed.data };
+        streamRecord.sockopt = { ...raw, ...parsed.data };
+      } else {
+        streamRecord.sockopt = raw;
       }
       }
     }
     }
   }
   }