Сейчас в 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
Был бы очень благодарен, если бы исправили этот недочет. Спасибо!