kazzle.config.ts. Eén component kan zoveel triggers hebben als je nodig hebt.
De structuur
processModebepaalt de levenscyclus — langlopende server, of eenmalige uitvoering per trigger.triggers[]geeft de gebeurtenissen aan die deze component moeten activeren.
processMode
| Modus | Wat wordt uitgevoerd | Wanneer gebruiken |
|---|---|---|
persistent (standaard) | Een langlopende HTTP-server. Triggers worden erin geplaatst. | De component serveert al HTTP, of behoudt status in het geheugen (wachtrijen, websockets, caches). |
triggered | Het invoerscript wordt per trigger gestart en afgesloten. | Zuivere achtergrondtaken — nachtelijke opschoning, enkele Stripe-webhook-handler, enz. Geen inactieve servers. |
Triggers
Elke trigger heeft eenname (uniek binnen de component), een kind, en — afhankelijk van de modus — een schedule en/of path.
| Veld | Wanneer vereist | Opmerkingen |
|---|---|---|
name | altijd | Gebruikt als webhook-URL-segment en in logs. Kebab-case. |
kind | altijd | 'schedule' of 'webhook'. |
schedule | wanneer kind: 'schedule' | 5-veld cron-expressie. Minuutresolutie is het minimum. |
path | wanneer processMode: 'persistent' | HTTP-route op je server waar de trigger aankomt. |
Persistent modus — HTTP naar de server
Wanneer een trigger voor een persistent component wordt geactiveerd, stuurt Kazzle een POST naar je server op het aangegevenpath. Het verzoek bevat:
| Header | Wat het je vertelt |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | Valideer dit. Wijs oproepen af die niet overeenkomen. |
x-kazzle-trigger-name | De name van de trigger uit het manifest. |
x-kazzle-trigger-run-id | Ondoorzichtige ID voor logcorrelatie. |
x-kazzle-triggered-by | cron | webhook | manual. |
Triggered modus — eenmalig per trigger
Wanneer een trigger voor eentriggered-component wordt geactiveerd, start Kazzle het invoerscript opnieuw op en wacht tot het afsluit. Er is geen path; het script leert welke trigger is geactiveerd via omgevingsvariabelen.
| Omgevingsvariabele | Waarde |
|---|---|
TRIGGER_NAME | De name van de trigger uit het manifest. |
TRIGGERED_BY | cron | webhook | manual. |
RUN_ID | Ondoorzichtige ID voor logcorrelatie. |
WEBHOOK_PAYLOAD | JSON-body (alleen webhook-triggers). |
Webhook-URL’s
triggerName-segment moet overeenkomen met een kind: 'webhook'-item in de triggers[] van die component. Onbekende triggernamen retourneren 404.
Schemaresolutie
Cron-expressies zijn 5-veld (minuut, uur, dag-van-maand, maand, dag-van-week) en minuutresolutie is het minimum. Sub-minuutschema’s worden afgewezen bij validatie van het manifest.Hoe runs worden geregistreerd
Elke triggeractivering schrijft eenprocess_runs-rij met de trigger_name, triggered_by, run_id en de afsluitstatus van de run. Je kunt deze opvragen vanuit je eigen code of inspecteren in de runs-weergave van de app.
Tegoed op
Een mislukte run wordt geregistreerd en gelogd, maar het schema blijft op zijn normale cadans lopen — een onbetrouwbare run schakelt de trigger nooit uit. Het enige wat een run stopt is tegoed: elke triggeractivering wordt gecontroleerd tegen het saldo van de space, en terwijl de space geen tegoed heeft (of geen facturering is ingesteld) worden runs overgeslagen met een402. Dit herstelt zichzelf — het schema blijft actief en de volgende activering nadat je het aanvult, wordt normaal uitgevoerd, zonder handmatig hervatten.
Automatiseringen later toevoegen
Een eenvoudige app kan zonder triggers beginnen en deze later krijgen — voeg een dagelijks overzicht toe, verbind Stripe, voer opschoning uit. De levenscyclus van de component (processMode) en triggers (triggers[]) zijn onafhankelijk, dus je kunt ze wijzigen zonder de rest van de app te herschrijven.