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

Сейчас в 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(),

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

max={65535}
min={0}

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

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

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

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

1 лайк