# ADR-017: Лимиты Закрывает открытый вопрос о лимитах и антиспаме. ## Контекст Открытая регистрация (ADR-015) и реле с очередями (ADR-008) требуют потолков: на размер сообщения, на частоту действий, на объём хранимого. Сервер не видит содержимого, поэтому антиспам может быть только структурным и количественным — фильтрации по тексту не существует. ## Решение **Размеры.** - Сообщение — до 4 096 символов плейнтекста; проверяет клиент до шифрования. - Тело любого запроса к серверу — до 32 КиБ. Это единственная проверка размера на сервере. - Ник — 3–32 символа: латиница в нижнем регистре, цифры, `_`, `-`. Регистр не различается. **Частота.** Token bucket в памяти сервера, без внешних хранилищ. Превышение — `429` с `Retry-After`. - Отправка сообщений: 60 в минуту на аккаунт. - Запросы контакта: 20 в сутки на аккаунт. - Регистрация: 5 в час с одного IP. - Вход: 10 попыток за 15 минут на ник, 30 — с одного IP. Argon2 дорогой; это защита процессора сервера в той же мере, что и аккаунтов. - Прочие запросы: 120 в минуту на аккаунт. **Объёмы.** - Очередь устройства — до 10 000 сообщений; при переполнении старейшие удаляются. Плюс 30-дневный TTL из ADR-008. - Контактов у аккаунта — до 500. Участников в комнате — до 100. Устройств у аккаунта — до 10. **Антиспам.** Сводится к трём вещам: писать можно только взаимным контактам (ADR-016), блокировка ника (ADR-016), лимиты выше. Жалоб и модерации нет: серверу нечего модерировать. ## Следствия - Все числа — константы в одном файле сервера. Клиент дублирует только длину сообщения и формат ника — для подсказок до отправки. Конфигурации нет: поменять лимит — поменять константу и пересобрать. - Перезапуск сервера сбрасывает счётчики. Для маленького инструмента это приемлемо. - Лимит по IP не различает людей за одним NAT. Осознанная грубость: цифры взяты с запасом. - Переполнение очереди теряет сообщения, как и TTL. Устройство, не выходившее на связь, получает не всё — это уже зафиксировано в ADR-008.