2.0.0 Stable Realese
Вторая глобальная стабильная версия
Changelog
- Добавлен Plyr как основной видеоплеер вместо Valve VideoJS (VideoJS сохранён как legacy-режим)
- Создана абстракция
ReviewPlayerPort— единый интерфейс плеера, не зависящий от реализации - Создан
ValvePlayerHost— подмена Valve-видео на собственный контейнер с Plyr - Добавлена динамическая индикация триггера античита: обратный отсчёт, подсветка момента, маркер на прогресс-баре
- Добавлена настройка «Закрепить контролы плеера» (
keepControlsVisible) - Добавлен генерационный контроль загрузки видео для отмены устаревших операций
- Создан
webm-parser.ts— парсинг EBML-заголовков для извлечения даты матча и длительности видео - Добавлены поля
matchTimestampиwebmDurationв данные клипа readValveClipиparseValvePageстали асинхронными — ожидают метаданные WebM- Централизованная валидация URL (
url-policy.ts) — проверка origin для WebM и Valve-страниц - Санитизация HTML при подстановке фрагментов Valve-страницы
- Rollback при ошибке синхронизации страницы после submit
- Проверка
form.actionчерезgetAllowedValvePageUrl— защита от open redirect - Добавлена система миграции истории с поддержкой legacy-форматов
- Все мутации хранилища версионированы и координируются через последовательную очередь в background
- Изменён порядок эвристики для дубликатов — статус
same-match-different-clipзаменён наnew-clip - Авто-применение предыдущих вердиктов теперь только для
exact-duplicate - Панель деталей клипа показывает дату матча и статус дедупликации для всех состояний
- Импорт истории валидирует размер файла (лимит 10 MiB), добавлено подтверждение при очистке
- Timer hijacker: добавлен
markPlayerReplacement(), singleton, кэширование, откат при ошибке - Убрана привязка к конкретным значениям timeout — фильтрация по содержимому функции
- Проверки
isActive()после каждой асинхронной операции — защита от race condition try/catchвокругruntime.start()— при ошибке старта вызываетсяdispose()- Exhaustive-проверка (
assertNever) во всех обработчиках событий
📦 Для установки скачайте .zip архив ниже, распакуйте и загрузите в Chrome через "Режим разработчика".
MD5: d993783d5c0a43611a028f576036e533
SHA1: 6fb282eae4a1984e3afd13a5a654647a3c1e3059
