diff --git a/frontend/src/pages/inbounds/form/protocols/hysteria.tsx b/frontend/src/pages/inbounds/form/protocols/hysteria.tsx index 5a9337789..97845d115 100644 --- a/frontend/src/pages/inbounds/form/protocols/hysteria.tsx +++ b/frontend/src/pages/inbounds/form/protocols/hysteria.tsx @@ -19,7 +19,7 @@ export default function HysteriaFields({ form }: { form: FormInstance }) { label={t('pages.inbounds.form.udpIdleTimeout')} name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']} > - + diff --git a/frontend/src/pages/xray/outbounds/transport/hysteria.tsx b/frontend/src/pages/xray/outbounds/transport/hysteria.tsx index 8b45d082a..155a04ccd 100644 --- a/frontend/src/pages/xray/outbounds/transport/hysteria.tsx +++ b/frontend/src/pages/xray/outbounds/transport/hysteria.tsx @@ -25,7 +25,7 @@ export default function HysteriaForm({ form }: { form: FormInstance }) { label={t('pages.inbounds.form.udpIdleTimeout')} name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']} > - + diff --git a/frontend/src/schemas/protocols/stream/hysteria.ts b/frontend/src/schemas/protocols/stream/hysteria.ts index c1a6efc6d..23698811c 100644 --- a/frontend/src/schemas/protocols/stream/hysteria.ts +++ b/frontend/src/schemas/protocols/stream/hysteria.ts @@ -25,7 +25,8 @@ export type HysteriaMasquerade = z.infer; export const HysteriaStreamSettingsSchema = z.object({ version: z.literal(2).default(2), auth: z.string().default(''), - udpIdleTimeout: z.number().int().min(1).default(60), + // Xray-core rejects values outside 2-600 seconds at startup. + udpIdleTimeout: z.number().int().min(2).max(600).default(60), masquerade: HysteriaMasqueradeSchema.optional(), }); export type HysteriaStreamSettings = z.infer;