Жизненный цикл

Последовательность запуска

  1. Главный процесс запускает воркер интеграций (WorkerMain('integrations')) и ждёт loadComplete.
  2. Главный процесс отправляет executeCode с { integration: { id, name, permissions, … }, codePath }.
  3. Воркер создаёт GenerateContext(), затем выполняет index.js аддона внутри vm.runInContext (таймаут начального выполнения: 5 секунд).
  4. Код аддона регистрирует эндпоинты, схему настроек и обработчики событий на этапе загрузки.

Долгие операции должны продолжаться после загрузки через setTimeout, setInterval, sleep или асинхронные обработчики — не блокируйте синхронным кодом начальный запуск VM.

Когда воркер перезапускается

Воркер перезапускается, когда:

storage.Read() / storage.Write() сохраняются между перезапусками воркера в рамках одной установки. Параметры api.config хранятся в конфиге приложения.

Защита от цикла падений

Если процесс воркера падает (неперехваченное исключение, фатальная ошибка, аварийное завершение), StreamKit+ перезапускает его автоматически — как при обычном рестарте.

Чтобы избежать бесконечного цикла перезапусков, приложение отслеживает последовательные падения:

Правило Значение
Максимум падений подряд 3
Стабильная работа для сброса счётчика 30 секунд после loadComplete

Что считается падением

Что не считается падением

Когда лимит достигнут

  1. Автоперезапуск прекращается; воркер аддона больше не запускается.
  2. Пользователь видит уведомление об ошибке и статус аддона в состоянии error.
  3. В настройках аддон остаётся включённым, но отображается бейдж Остановлен из-за ошибок.
  4. После перезапуска приложения аддон по-прежнему не стартует, пока пользователь не предпримет действие.

Как восстановить работу

Пользователь должен перезапустить аддон вручную в настройках (кнопка ↻) или отключить и снова включить его. Это сбрасывает флаг остановки и запускает новый воркер с обнулённым счётчиком падений.

Что важно разработчику аддона

Статические веб-маршруты

Когда задан manifest.web и выдано разрешение WEB_CONTENT (или ROOT), главный процесс регистрирует статические маршруты:

http://localhost:{WEB_SERVER_PORT}/addon_static/{id}/

Корень отдаёт файл web; пути из web_contents обслуживаются под тем же префиксом. Маршруты удаляются при отключении, перезапуске или удалении аддона.

Отсутствующие файлы

Если manifest.json или index.js отсутствуют по сохранённому пути установки, приложение считает аддон повреждённым: в настройках показывается баннер ошибки, настройки нельзя открыть, доступно только удаление. Триггеры оверлея/таймера, ссылающиеся на этот аддон, очищаются при запуске.