# VLESS Route ID = 0 ошибочно обрабатывается как disabled

**URL:** https://f.docs.rw/t/topic/761
**Category:** Баг-репорты
**Created:** 2026-09-18T21:13:12Z
**Posts:** 1

## Post 1 by @personov — 2026-09-18T21:13:13Z

Сейчас в Remnawave значение `vlessRouteId = 0` фактически нельзя использовать как полноценный VLESS Route ID: оно трактуется как отсутствие route ID / disabled.

При этом на стороне Xray `0` является валидным значением.

В Xray VLESS Route ID кодируется в 7–8 байтах UUID и интерпретируется как unsigned 16-bit integer. Соответственно, допустимый диапазон — `0..65535`.

В самом Remnawave API это уже отражает корректно:

```
vlessRouteId: z.int().min(0).max(65535).nullish(),
```

> <https://github.com/remnawave/backend/blob/main/libs/contract/commands/hosts/create.command.ts>

Frontend input также формально допускает `0`:

```
max={65535}
min={0}
```

> <https://github.com/remnawave/frontend/blob/main/src/shared/ui/forms/hosts/base-host-form/options/fields/vless-route-id.option.tsx>

* * *

Проблема, судя по всему, в `setVlessRouteForUuid()`:

> <https://github.com/remnawave/backend/blob/main/src/common/utils/vless-route/set-vless-route-for-uuid.util.ts>

Сейчас там используется:

```
if (!routeId || typeof routeId !== 'number') {
    return uuid;
}
```

Так как numeric `0` в JavaScript/TypeScript является falsy, при:

```
routeId === 0
```

условие `!routeId` становится `true`, функция сразу возвращает исходный UUID и не записывает `0000` в соответствующие байты UUID.

То есть сейчас фактическая логика выглядит так:

```
null / undefined -> disabled
0 -> disabled
1..65535 -> valid route ID
```

Хотя с учётом поведения Xray и текущего API-типа логичнее было бы:

```
null / undefined -> disabled
0..65535 -> valid route ID
```

* * *

Также сейчас подсказка во frontend:

```
From 1 to 65535, 0/empty to disable
```

не соответствует диапазону, который поддерживает Xray.

Логичнее было бы:

```
From 0 to 65535, empty to disable
```

Был бы очень благодарен, если бы исправили этот недочет. Спасибо!
