Descrizione
Operatore enterprise di sospensione del workflow flessibile che combina i pattern timer-based (delay temporizzato) e signal-based (wait-for-webhook-callback) in un'unica primitiva configurable. Sospende l'esecuzione fino a uno dei tre scenari: timer scaduto (mode=timer, configurazione durationMs identica a logic_delay), arrivo di una callback HTTP esterna (mode=webhook, configurazione signalName + authToken, identico semantically a logic_wait_signal), oppure la combinazione "either" early-exit (mode=either — riprende al PRIMO dei due eventi che accade, pattern hybrid timeout + signal critical per use case real-world dove "se l'utente non conferma entro 24h prendiamo decisione automatica"). Il workflow è completamente suspended durante l'attesa: zero consumo CPU/RAM, lo state è persistito in checkpoint del SQLite runtime, sopravvive a restart container per deploy o crash, scheduler centrale del portal riprende il workflow quando il timer scade o il webhook arriva. Cap di sicurezza configurable maxTimeoutMs default 30 giorni — pattern di safety per evitare workflow zombie che restano paused per sempre per signal mai arrivato. Mode timer — simple, deterministic, prevedibile: durationMs (range 1ms-30giorni), resume al expire esatto, output con ms effettivi attesi (può differire micro-secondi da nominal per scheduler precision); Mode webhook — signal_name come endpoint POST /signals/<name> con auth_token validation, payload JSON del POST disponibile nel resume output; Mode either — early-exit racing: timer + webhook armati simultanei, primo che firma fa resume + log di chi ha vinto, pattern critico per "approval con timeout business default" (esempio canonico: wait_for_approval_or_24h). Output al resume: { resumedBy ("timer" | "webhook"), durationMs effettivo, signalPayload? (se webhook), timeoutReached (bool se timer ha vinto in mode either) }. Use case: aspettare conferma utente prima di proseguire (mode=webhook → invia link conferma + aspetta click), pausa anti-rate-limit prima di chiamata API successiva (mode=timer 1s tra 100 chiamate batch), wait per propagazione DNS/cache CDN (mode=timer 30s prima di check post-invalidate), attesa di esecuzione async esterna con callback notify (mode=webhook per "il processing OCR di Vision Extract è completed e invia signal"), pattern approval con default (mode=either con webhook + 24h timer per "se il manager non risponde entro 24h auto-approva" in workflow finance enterprise).
