github valnesfjord/tg-ws-proxy-rs v1.5.0

latest release: v1.5.1
26 days ago

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 не запрашивается binary subprotocol, так как Worker из Python-реализации его не возвращает.
  • Добавлен 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 semver X.Y.Z;
  • в PR версия должна быть больше версии base branch;
  • при push tag vX.Y.Z tag должен совпадать с package.version.

Также workflow теперь запускается для tag push вида v[0-9]+.*.

Проверка

cargo fmt --check
cargo test --locked --tests
cargo clippy --all-targets --locked

Don't miss a new tg-ws-proxy-rs release

NewReleases is sending notifications on new releases.