kazzle.config.ts. Eine Komponente kann beliebig viele Trigger haben.
Die Struktur
processModebestimmt den Lebenszyklus — Langzeitserver oder einmalige Ausführung pro Trigger.triggers[]listet die Ereignisse auf, die diese Komponente auslösen sollen.
processMode
| Modus | Was läuft | Wann verwenden |
|---|---|---|
persistent (Standard) | Ein Langzeit-HTTP-Server. Trigger werden darin gepostet. | Die Komponente bedient bereits HTTP oder hält Zustand im Speicher (Warteschlangen, Websockets, Caches). |
triggered | Das Entry-Skript wird pro Trigger gestartet und beendet. | Reine Hintergrund-Jobs — nächtliche Bereinigung, einzelner Stripe-Webhook-Handler usw. Keine untätigen Server. |
Trigger
Jeder Trigger hat einenname (eindeutig innerhalb der Komponente), eine kind und — je nach Modus — einen schedule und/oder path.
| Feld | Erforderlich wenn | Hinweise |
|---|---|---|
name | immer | Wird als Webhook-URL-Segment und in Logs verwendet. Kebab-Case. |
kind | immer | 'schedule' oder 'webhook'. |
schedule | wenn kind: 'schedule' | 5-Feld-Cron-Ausdruck. Minutenauflösung ist das Minimum. |
path | wenn processMode: 'persistent' | HTTP-Route auf Ihrem Server, wo der Trigger ankommt. |
Persistent-Modus — HTTP zum Server
Wenn ein Trigger für eine persistente Komponente ausgelöst wird, postet Kazzle zu Ihrem Server unter dem deklariertenpath. Die Anfrage enthält:
| Header | Was er aussagt |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | Validieren Sie dies. Lehnen Sie Aufrufe ab, die nicht übereinstimmen. |
x-kazzle-trigger-name | Der name des Triggers aus dem Manifest. |
x-kazzle-trigger-run-id | Opaque ID für Log-Korrelation. |
x-kazzle-triggered-by | cron | webhook | manual. |
Triggered-Modus — einmalig pro Trigger
Wenn ein Trigger für einetriggered-Komponente ausgelöst wird, startet Kazzle das Entry-Skript neu und wartet auf seinen Abschluss. Es gibt keinen path; das Skript erfährt, welcher Trigger ausgelöst wurde, über Umgebungsvariablen.
| Umgebungsvariable | Wert |
|---|---|
TRIGGER_NAME | Der name des Triggers aus dem Manifest. |
TRIGGERED_BY | cron | webhook | manual. |
RUN_ID | Opaque ID für Log-Korrelation. |
WEBHOOK_PAYLOAD | JSON-Body (nur Webhook-Trigger). |
Webhook-URLs
triggerName-Segment muss einem kind: 'webhook'-Eintrag in der triggers[] dieser Komponente entsprechen. Unbekannte Trigger-Namen geben 404 zurück.
Zeitplan-Auflösung
Cron-Ausdrücke sind 5-Feld (Minute, Stunde, Tag des Monats, Monat, Wochentag) und Minutenauflösung ist das Minimum. Sub-Minuten-Zeitpläne werden bei der Manifest-Validierung abgelehnt.Wie Läufe aufgezeichnet werden
Jeder Trigger-Auslöser schreibt eineprocess_runs-Zeile mit trigger_name, triggered_by, run_id und dem Exit-Status des Laufs. Sie können diese aus Ihrem eigenen Code abfragen oder in der Runs-Ansicht der App inspizieren.
Guthaben aufgebraucht
Ein fehlgeschlagener Lauf wird aufgezeichnet und protokolliert, aber der Zeitplan läuft weiter nach seinem normalen Rhythmus — ein fehlerhafter Lauf deaktiviert den Trigger nie. Das Einzige, das einen Lauf stoppt, ist das Guthaben: Jeder Trigger-Auslöser wird gegen den Kontostand des Space überprüft, und während der Space kein Guthaben hat (oder keine Abrechnung eingerichtet hat), werden Läufe mit402 übersprungen. Dies ist selbstheilend — der Zeitplan bleibt aktiv und der nächste Auslöser nach dem Aufladen läuft normal, ohne manuelles Fortsetzen.
Automatisierungen später hinzufügen
Eine einfache App kann ohne Trigger starten und sie später gewinnen — fügen Sie eine tägliche Zusammenfassung hinzu, verbinden Sie Stripe, führen Sie Bereinigung aus. Der Lebenszyklus der Komponente (processMode) und Trigger (triggers[]) sind unabhängig, sodass Sie sie ändern können, ohne den Rest der App umzuschreiben.