Skip to content
frostl-projectsPublic

About

Static browser tool for playing and diagnosing VAST/VPAID ads

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Vasty

Vasty — небольшой браузерный стенд для воспроизведения и диагностики VAST/VPAID.

Проект полностью статический: backend и обязательная сборка не нужны.

Онлайн-версия

Открыть Vasty в браузере

VPAID может исполнять сторонний JavaScript в origin Vasty. Для недоверенных тегов используй отдельный профиль браузера без личных сессий.

Возможности

  • Сырой VAST XML и VAST URL.
  • VAST 3/4 через rmp-vast 17.2.0.
  • JavaScript VPAID 1/2 для legacy compatibility/debugging.
  • MP4/WebM и HLS.
  • Лог VAST/VPAID событий, browser media events, JS errors и unhandled promise rejections.
  • VAST error code/message, выбранный media URL и content type.
  • Лёгкий анализ типичных проблем VAST: XML, структура, MediaFile, tracking events, VPAID fallback и некоторые VAST 3 проверки.
  • Диагностика вложенных <video> внутри VPAID creative.
  • Точечные compatibility-слои для известных структурных проблем legacy VPAID.
  • Копирование полного диагностического отчёта.
  • ZIP-экспорт диагностики.

Анализатор не является полной XSD-валидацией. Успешное воспроизведение означает только то, что текущий браузер/runtime смог исполнить тег.

Структура

  • index.html — UI и подключение runtime.
  • app.js — основной VAST/VPAID player и анализатор.
  • vasty-core.js — общие функции форматирования и очистки URL; версия релиза берётся из cache key в index.html.
  • styles.css — интерфейс.
  • vpaid-compat.js — общая VPAID-диагностика и структурный bridge для remote-style input, когда видимый UI находится в slot, а keyboard handlers — в execution iframe.
  • vpaid-layout-compat.js — структурная совместимость composite VPAID creative с фоновым изображением и отдельным video layer.
  • vpaid-transition-compat.js — единственный обработчик анимации этого video layer; вызывается layout-модулем после распознавания структуры.
  • report-export.js — ZIP-экспорт диагностического отчёта.

Compatibility-код включается только при обнаружении соответствующей DOM-структуры/семантики и не должен менять обычные video VAST.

Модули используют общий интерфейс window.Vasty: логирование с одним таймером и очисткой URL, реестр загруженных модулей и генератор отчёта. В интерфейсе и отчёте показывается одна версия Vasty; список модулей в отчёте не дублирует её.

ZIP-отчёт

Кнопка «Скачать ZIP» создаёт архив с:

  • report.txt — полный диагностический отчёт;
  • events.tsv — event log в табличном виде;
  • vast.xml — исходный XML в режиме VAST XML;
  • vast-url.txt — URL без query-параметров и hash в режиме VAST URL.

Копирование и ZIP используют один генератор: структурированный анализ, предупреждения, медиа, состояние плеера и хронологический лог совпадают. XML сохраняется без обрезки пробелов и переносов.

Состояние последнего runtime-события, включая настоящий код ошибки, сохраняется после завершения плеера до следующего запуска.

Приватность

Собственный диагностический код Vasty не читает и не выгружает cookies, localStorage, sessionStorage, referrer, IP-адрес, содержимое clipboard, данные аккаунта/профиля, локальные файлы или историю браузера. Кнопка «Копировать» только записывает готовый отчёт в clipboard.

Чужой VAST-тег может исполнять сторонний JavaScript. VPAID работает в том же origin, что и Vasty, и может читать cookies, доступные JavaScript, и хранилища этого origin, а также изменять страницу. Sandbox здесь не является границей безопасности: для совместимости нужны allow-scripts и allow-same-origin, а execution iframe дополнительно разрешает переходы по рекламе и формы. Эти разрешения устанавливаются только на VPAID iframe данного плеера до его вставки в DOM; глобальные прототипы браузера не меняются.

Размещай Vasty на отдельном origin без аккаунтов, чувствительных данных и доверенных приложений. Другая папка того же сайта не создаёт изоляцию; это относится и к проектам на одном домене GitHub Pages. Для недоверенных тегов используй отдельный профиль браузера без личных сессий. Ограничения iframe sandbox.

В отчёт входят технические данные, необходимые для диагностики: User-Agent, canPlayType, настройки запуска, runtime events и ошибки.

Runtime URL в event log очищаются от query-параметров и hash, где их можно распознать, в том числе внутри сообщений об ошибках compatibility-модулей. Это не предотвращает сетевые запросы и сбор данных сторонним креативом. В режиме VAST XML сырой VAST намеренно включается в отчёт целиком, потому что он нужен для воспроизведения конкретного рекламного кейса. Перед передачей отчёта проверь сам исходный тег на идентификаторы и токены.

Локальный запуск

Не используй file:// для проверки VPAID. Подними обычный HTTP server:

python3 -m http.server 8080

Затем открой http://localhost:8080.

Проверки

Открой http://localhost:8080/tests/ после запуска HTTP server. Страница запускает браузерные регрессионные проверки отчётов, приватности логов, VPAID iframe/input/layout/transition и пропуска. Каталог /tests/ намеренно публикуется вместе с приложением: все VAST/VPAID fixtures локальные и синтетические, рекламных трекеров в них нет, а тестовый popup сразу получает opener = null. Runtime и образец видео загружаются из тех же публичных источников, что и приложение.

Для полного прогона держи вкладку с проверками видимой и активной. В фоновой или свёрнутой вкладке браузер может остановить animation timeline и media clock, поэтому проверки transition и пропуска иногда падают независимо от поведения Vasty.

Версия всех локальных JS/CSS задаётся одинаковым ?v= в index.html; отдельные константы версий в модулях не нужны. Проверки обнаруживают рассинхронизацию cache key. Сборка и установка зависимостей для приложения и проверок не требуются.

GitHub Pages

Текущая схема публикации: main → /(root).

Проект содержит .nojekyll, поэтому GitHub Pages отдаёт статические файлы напрямую без Jekyll.

Ограничения

  • VPAID — устаревшая технология; Vasty поддерживает её именно для диагностики совместимости.
  • В режиме URL действуют обычные CORS-ограничения браузера.
  • Wrapper URL, VPAID JavaScript, measurement scripts и media URL используют стандартные browser security/network-механизмы.
  • Некоторые legacy VPAID creative зависят от нестандартных DOM/layout/input предположений; compatibility-слои покрывают только распознанные структурные паттерны.

Third-party software

Vasty использует rmp-vast от Radiant Media Player.

Сейчас rmp-vast загружается напрямую из upstream через jsDelivr и не копируется в репозиторий Vasty. Если библиотека будет завендорена внутрь проекта, вместе с ней должен быть сохранён полный текст MIT License и copyright notice.

About

Static browser tool for playing and diagnosing VAST/VPAID ads

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages