kazzle.config.ts. Um componente pode ter quantos triggers você precisar.
A estrutura
processModeescolhe o ciclo de vida — servidor de longa duração, ou uma execução única por trigger.triggers[]lista os eventos que devem disparar este componente.
processMode
| Modo | O que roda | Quando usar |
|---|---|---|
persistent (padrão) | Um servidor HTTP de longa duração. Triggers são POSTados para ele. | O componente já serve HTTP, ou mantém estado em memória (filas, websockets, caches). |
triggered | O script de entrada é executado por trigger e sai. | Tarefas de background puro — limpeza noturna, handler único de webhook Stripe, etc. Sem servidores ociosos. |
Triggers
Cada trigger tem umname (único dentro do componente), um kind, e — dependendo do modo — um schedule e/ou path.
| Campo | Quando obrigatório | Notas |
|---|---|---|
name | sempre | Usado no segmento da URL do webhook e em logs. Kebab-case. |
kind | sempre | 'schedule' ou 'webhook'. |
schedule | quando kind: 'schedule' | Expressão cron de 5 campos. Resolução de minuto é o mínimo. |
path | quando processMode: 'persistent' | Rota HTTP no seu servidor onde o trigger chega. |
Modo persistente — HTTP para o servidor
Quando um trigger dispara para um componente persistente, Kazzle faz POST no seu servidor nopath declarado. A requisição carrega:
| Header | O que informa |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | Valide isto. Rejeite chamadas que não correspondem. |
x-kazzle-trigger-name | O name do trigger do manifesto. |
x-kazzle-trigger-run-id | ID opaco para correlação de logs. |
x-kazzle-triggered-by | cron | webhook | manual. |
Modo triggered — uma execução por trigger
Quando um trigger dispara para um componentetriggered, Kazzle executa o script de entrada do zero e aguarda sua saída. Não há path; o script aprende qual trigger disparou através de variáveis de ambiente.
| Variável de ambiente | Valor |
|---|---|
TRIGGER_NAME | O name do trigger do manifesto. |
TRIGGERED_BY | cron | webhook | manual. |
RUN_ID | ID opaco para correlação de logs. |
WEBHOOK_PAYLOAD | Corpo JSON (apenas triggers de webhook). |
URLs de webhook
triggerName deve corresponder a uma entrada kind: 'webhook' em triggers[] daquele componente. Nomes de trigger desconhecidos retornam 404.
Resolução de cronograma
Expressões cron são de 5 campos (minuto, hora, dia do mês, mês, dia da semana) e resolução de minuto é o mínimo. Cronogramas sub-minuto são rejeitados na validação do manifesto.Como as execuções são registradas
Cada disparo de trigger escreve uma linhaprocess_runs com trigger_name, triggered_by, run_id e o status de saída da execução. Você pode consultá-las do seu próprio código ou inspecioná-las na visualização de execuções do app.
Ficando sem créditos
Uma execução com falha é registrada e registrada em log, mas o cronograma continua rodando em seu ritmo normal — uma execução instável nunca desativa o trigger. A única coisa que para uma execução é créditos: cada disparo de trigger é verificado contra o saldo do espaço, e enquanto o espaço está sem créditos (ou não tem cobrança configurada) as execuções são puladas com um402. Isto é auto-recuperável — o cronograma permanece armado e o próximo disparo após você recarregar roda normalmente, sem retomada manual.
Adicionando automações depois
Um app simples pode começar sem triggers e ganhá-los depois — adicione um resumo diário, conecte Stripe, execute limpeza. O ciclo de vida do componente (processMode) e triggers (triggers[]) são independentes, então você pode alterá-los sem reescrever o resto do app.