Vasty — небольшой браузерный стенд для воспроизведения и диагностики VAST/VPAID.
Проект полностью статический: backend и обязательная сборка не нужны.
VPAID может исполнять сторонний JavaScript в origin Vasty. Для недоверенных тегов используй отдельный профиль браузера без личных сессий.
- Сырой VAST XML и VAST URL.
- VAST 3/4 через
rmp-vast17.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» создаёт архив с:
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. Сборка и установка зависимостей для приложения и проверок не требуются.
Текущая схема публикации: 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-слои покрывают только распознанные структурные паттерны.
Vasty использует rmp-vast от Radiant Media Player.
- Проект: https://github.com/radiantmediaplayer/rmp-vast
- Версия:
17.2.0 - Лицензия: MIT
- Copyright: © 2015–present Radiant Media Player
Сейчас rmp-vast загружается напрямую из upstream через jsDelivr и не копируется в репозиторий Vasty. Если библиотека будет завендорена внутрь проекта, вместе с ней должен быть сохранён полный текст MIT License и copyright notice.