Справочник JavaScript / TypeScript
Публичный API соответствует src/vorivox.js и src/vorivox.d.ts. Методы с ведущим подчёркиванием — внутренние.
Создание и свойства
new VorivoxClient(manifest, options) проверяет входные данные. options.WebSocketImpl нужен для тестового транспорта; authenticationTimeoutMs по умолчанию 5000. Свойства: manifest, connectionState, sessionState, deviceState и capabilities. Копия manifest содержит секрет: её нельзя журналировать.
Подключение и подписка
connect(): Promise<Capabilities> завершается после принятого hello. Параллельные вызовы используют одно подключение; использованный клиент не восстанавливает старый запуск. on(name, listener) возвращает функцию отписки. Callback синхронный; промисы внутри него требуют собственного catch.
Готовность и итог
ready(scene='Game') сообщает готовность после загрузки. updateScore({score,shots,hits,time_left_ms}) отправляет промежуточные значения. complete({score,shots,hits,duration_ms,status,player_count}) требует активный сеанс и совпадение числа игроков; повтор возвращает false. Это передача сообщения, не подтверждение хранения результата.
Подсветка
triggerLed(trigger='HIT'), setLedOverride({mode,r,g,b,w,duration_ms}), clearLedOverride(). Проверяются capabilities, целые каналы 0…255 и неотрицательная длительность. Список допустимых аппаратных mode определяется платформой, не этой библиотекой.
Диагностика
log(level,text): debug/info/warning/error; длина текста ограничена, известный session_token скрывается. disconnect() останавливает heartbeat и закрывает соединение. Он не является игровым complete.
События
connection, state, error, ignored; server.hello; session.start с player_count/mode/countdown_ms; session.pause и session.stop с reason; session.resume; device.state; target.hit с shot_id/x_mm/y_mm/nx/ny/source/demo; heartbeat. target.hit может прийти не в активной игровой фазе: фильтрация по состоянию и shot_id остаётся в игре.
Утилиты
validateManifest(input) возвращает нормализованную копию. toCanvasPoint(hit,{x,y,width,height}) преобразует bottom-left в top-left внутри заданного viewport, но не обрезает физический letterbox. Отдельный mock.js экспортирует createMockSdk({playerCount,gameId,locale}) → {sdk,controls}. Это явный инструмент разработки, не fallback production.