kazzle.config.ts. Один компонент может содержать столько триггеров, сколько вам нужно.
Структура
processModeопределяет жизненный цикл — долгоживущий сервер или одноразовый запуск на триггер.triggers[]перечисляет события, которые должны запустить этот компонент.
processMode
| Режим | Что запускается | Когда использовать |
|---|---|---|
persistent (по умолчанию) | Долгоживущий HTTP-сервер. Триггеры отправляются в него. | Компонент уже обслуживает HTTP или хранит состояние в памяти (очереди, вебсокеты, кэши). |
triggered | Скрипт входа запускается на каждый триггер и завершается. | Фоновые задачи — ночная очистка, обработчик одного вебхука Stripe и т. д. Без простаивающих серверов. |
Триггеры
Каждый триггер имеетname (уникальное в пределах компонента), kind и — в зависимости от режима — schedule и/или path.
| Поле | Когда требуется | Примечания |
|---|---|---|
name | всегда | Используется в сегменте URL вебхука и в логах. Kebab-case. |
kind | всегда | 'schedule' или 'webhook'. |
schedule | когда kind: 'schedule' | 5-полевое крон-выражение. Минутное разрешение — минимум. |
path | когда processMode: 'persistent' | HTTP-маршрут на вашем сервере, где приземляется триггер. |
Режим persistent — HTTP в сервер
Когда триггер срабатывает для постоянного компонента, Kazzle отправляет POST на ваш сервер по объявленномуpath. Запрос содержит:
| Заголовок | Что он говорит |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | Проверьте это. Отклоняйте вызовы, которые не совпадают. |
x-kazzle-trigger-name | name триггера из манифеста. |
x-kazzle-trigger-run-id | Непрозрачный ID для корреляции логов. |
x-kazzle-triggered-by | cron | webhook | manual. |
Режим triggered — одноразово на триггер
Когда триггер срабатывает для компонентаtriggered, Kazzle запускает скрипт входа заново и ждет его завершения. Нет path; скрипт узнает, какой триггер сработал, из переменных окружения.
| Переменная окружения | Значение |
|---|---|
TRIGGER_NAME | name триггера из манифеста. |
TRIGGERED_BY | cron | webhook | manual. |
RUN_ID | Непрозрачный ID для корреляции логов. |
WEBHOOK_PAYLOAD | Тело JSON (только для вебхук-триггеров). |
URL вебхуков
triggerName должен совпадать с записью kind: 'webhook' в triggers[] этого компонента. Неизвестные имена триггеров возвращают 404.
Разрешение расписания
Крон-выражения состоят из 5 полей (минута, час, день месяца, месяц, день недели) и минутное разрешение — минимум. Расписания с разрешением менее минуты отклоняются при валидации манифеста.Как записываются запуски
Каждый запуск триггера записывает строкуprocess_runs с trigger_name, triggered_by, run_id и статусом выхода запуска. Вы можете запросить их из своего кода или просмотреть в представлении запусков приложения.
Исчерпание кредитов
Неудачный запуск записывается и логируется, но расписание продолжает работать по обычному графику — нестабильный запуск никогда не отключает триггер. Единственное, что останавливает запуск — это кредиты: каждый запуск триггера проверяется на баланс пространства, и пока пространство не имеет кредитов (или не имеет настроенной биллинга), запуски пропускаются с кодом402. Это самовосстанавливающееся состояние — расписание остается активным и следующий запуск после пополнения баланса выполняется нормально, без ручного возобновления.
Добавление автоматизации позже
Простое приложение может начать без триггеров и получить их позже — добавьте ежедневное резюме, подключите Stripe, запустите очистку. Жизненный цикл компонента (processMode) и триггеры (triggers[]) независимы, поэтому вы можете изменять их без переписывания остальной части приложения.