Add Cloudflare Worker fallback support (by @Lyedok)
Добавлена поддержка Cloudflare Worker как fallback-маршрута для tg-ws-proxy-rs.
Worker используется как TCP-туннель: tg-ws-proxy-rs открывает WebSocket к *.workers.dev, передаёт нужный Telegram DC IP в query string, а Worker открывает TCP-соединение к этому DC и прокидывает бинарные данные между WebSocket и TCP.
Closes #54.
Изменения
- Добавлен параметр
--cf-worker-domain <DOMAIN>. - Добавлена переменная окружения
TG_CF_WORKER_DOMAIN. - Добавлен совместимый с Python-версией alias
--cfproxy-worker-domain. - Worker domain нормализуется: можно передать hostname или URL вида
https://example.workers.dev/apiws. - Добавлен отдельный WebSocket-путь для Worker:
- обычный WS к Telegram продолжает использовать
/apiwsиSec-WebSocket-Protocol: binary; - Worker-путь использует
/apiws?dst=<ip>&dc=<dc>&media=<0|1>; - для Worker не запрашивается
binarysubprotocol, так как Worker из Python-реализации его не возвращает.
- обычный WS к Telegram продолжает использовать
- Добавлен fallback через Worker в routing logic:
- если для DC нет прямого WS target, сначала пробуется Cloudflare Worker;
- если прямой WS target есть, Worker пробуется после ошибки direct WS;
- после Worker сохраняются существующие fallback-маршруты: CF proxy/default domains, upstream MTProto proxy и direct TCP.
- Добавлен отдельный cooldown для Worker fallback.
- В
--checkдобавлена проверка Cloudflare Worker через DC2 TCP tunnel probe. - В стартовый лог добавлен вывод настроенного Cloudflare Worker domain.
- Добавлена документация
docs/CfWorker.mdс Worker-кодом, приведённым к Python-реализации. - Обновлены README и
docs/CfProxy.mdпод новый Worker fallback. - Добавлены тесты:
- нормализация Worker domain;
- совместимость alias
--cfproxy-worker-domain; - генерация Worker path с
dst,dcиmedia.
- Версия пакета обновлена до
1.5.0.
CI
В CI добавлена проверка release version:
Cargo.tomlдолжен содержать numeric semverX.Y.Z;- в PR версия должна быть больше версии base branch;
- при push tag
vX.Y.Ztag должен совпадать сpackage.version.
Также workflow теперь запускается для tag push вида v[0-9]+.*.
Проверка
cargo fmt --check
cargo test --locked --tests
cargo clippy --all-targets --locked