reVPN: сервис общей статистики доступности

Статус: подготовлен и протестирован локально. В интернете не опубликован.
Приложения не отправляют сюда данные: нет публичного HTTPS endpoint и
провижининга индивидуальных токенов подписки. Сбор посещений не включён.

Запуск для разработки:
  REVPN_COLLECTOR_DATA=/private/path node service/collector.cjs
По умолчанию слушает только 127.0.0.1:17920.

POST /v1/observations: домен сервиса, страна, результаты прямого/VPN HEAD-теста.
Нужен индивидуальный токен подписки. Хранятся только SHA-256 токенов доступа.
Токены для авторизации выпускает будущий сервис подписок; в установщик они не входят.

Один голос на токен / домен / страну / день. Пользовательские отметки отделены
между доменами HMAC. Доказательства хранятся до 14 дней. Кандидат требует
10 определённых результатов от минимум 5 токенов за минимум 2 дня.
Доля совпадающих результатов — минимум 90%. В первый период кандидат
проходит проверку администратором: клиентские результаты могут быть ложными,
а определение страны пока ручное, поэтому автоматическая публикация небезопасна.

GET /admin/candidates: очередь кандидатов, нужен администраторский токен.
POST /admin/approve: подтвердить кандидата, только после достижения порога.
GET /v1/rules?country=RU: подписанный Ed25519 список только для этой страны.
Срок жизни правила — 7 дней, подписанного ответа — 24 часа.

Перед публичным включением: HTTPS, индивидуальные токены, ограничения частоты,
проверка страны и качества сетевых измерений, закреплённый публичный ключ
в клиенте и явный выбор пользователя об отправке результатов проверок.
URL страниц, cookies, аккаунты и история посещений не принимаются.
