kazzle.config.ts. Un componente puede llevar tantos triggers como necesites.
La estructura
processModeelige el ciclo de vida — servidor de larga duración, o una ejecución única por trigger.triggers[]lista los eventos que deben activar este componente.
processMode
| Modo | Qué se ejecuta | Cuándo usar |
|---|---|---|
persistent (predeterminado) | Un servidor HTTP de larga duración. Los triggers se envían por POST. | El componente ya sirve HTTP, o mantiene estado en memoria (colas, websockets, cachés). |
triggered | El script de entrada se genera por trigger y sale. | Trabajos de fondo puros — limpieza nocturna, manejador único de webhook de Stripe, etc. Sin servidores inactivos. |
Triggers
Cada trigger tiene unname (único dentro del componente), un kind, y — dependiendo del modo — un schedule y/o path.
| Campo | Cuándo es requerido | Notas |
|---|---|---|
name | siempre | Se usa como segmento de URL de webhook y en logs. Kebab-case. |
kind | siempre | 'schedule' o 'webhook'. |
schedule | cuando kind: 'schedule' | Expresión cron de 5 campos. La resolución de minutos es el mínimo. |
path | cuando processMode: 'persistent' | Ruta HTTP en tu servidor donde llega el trigger. |
Modo persistente — HTTP hacia el servidor
Cuando un trigger se activa para un componente persistente, Kazzle envía un POST a tu servidor en elpath declarado. La solicitud lleva:
| Encabezado | Qué te dice |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | Valida esto. Rechaza llamadas que no coincidan. |
x-kazzle-trigger-name | El name del trigger del manifiesto. |
x-kazzle-trigger-run-id | ID opaco para correlación de logs. |
x-kazzle-triggered-by | cron | webhook | manual. |
Modo activado — una ejecución única por trigger
Cuando un trigger se activa para un componentetriggered, Kazzle genera el script de entrada nuevo y espera a que salga. No hay path; el script aprende qué trigger se activó desde variables de entorno.
| Variable de entorno | Valor |
|---|---|
TRIGGER_NAME | El name del trigger del manifiesto. |
TRIGGERED_BY | cron | webhook | manual. |
RUN_ID | ID opaco para correlación de logs. |
WEBHOOK_PAYLOAD | Cuerpo JSON (solo triggers de webhook). |
URLs de webhook
triggerName debe coincidir con una entrada kind: 'webhook' en el triggers[] de ese componente. Los nombres de trigger desconocidos devuelven 404.
Resolución de programación
Las expresiones cron son de 5 campos (minuto, hora, día del mes, mes, día de la semana) y la resolución de minutos es el mínimo. Las programaciones sub-minuto se rechazan en el tiempo de validación del manifiesto.Cómo se registran las ejecuciones
Cada activación de trigger escribe una filaprocess_runs con el trigger_name, triggered_by, run_id, y el estado de salida de la ejecución. Puedes consultar estos desde tu propio código o inspeccionarlos en la vista de ejecuciones de la app.
Agotamiento de créditos
Una ejecución fallida se registra y se registra, pero la programación sigue ejecutándose en su cadencia normal — una ejecución inestable nunca desactiva el trigger. Lo único que detiene una ejecución son los créditos: cada activación de trigger se verifica contra el saldo del espacio, y mientras el espacio no tenga créditos (o no tenga facturación configurada) las ejecuciones se omiten con un402. Esto se recupera automáticamente — la programación permanece armada y la siguiente activación después de que recargues se ejecuta normalmente, sin reanudación manual.
Agregar automatizaciones después
Una app simple puede comenzar sin triggers y ganarlos después — agregar un resumen diario, conectar Stripe, ejecutar limpieza. El ciclo de vida del componente (processMode) y los triggers (triggers[]) son independientes, así que puedes cambiarlos sin reescribir el resto de la app.