// Runs inside the application container. No external cron service or browser is required. const secret = process.env.NOTDIENST_JOB_SECRET; if (!secret || secret.length < 32) { console.error( "Notdienst-Hintergrundjob deaktiviert: NOTDIENST_JOB_SECRET muss mindestens 32 Zeichen haben.", ); process.exit(1); } const port = Number(process.env.PORT || 3000); if (!Number.isInteger(port) || port < 1 || port > 65535) process.exit(1); let stopped = false; let timer; async function tick() { const started = Date.now(); try { const response = await fetch( `http://127.0.0.1:${port}/api/jobs/notdienstalarme`, { method: "POST", headers: { authorization: `Bearer ${secret}` }, signal: AbortSignal.timeout(50000), }, ); if (!response.ok) console.error( `Notdienst-Hintergrundjob: HTTP ${response.status}; erneuter Versuch in einer Minute.`, ); } catch { console.error( "Notdienst-Hintergrundjob momentan nicht erreichbar; erneuter Versuch in einer Minute.", ); } if (!stopped) timer = setTimeout(tick, Math.max(1000, 60000 - (Date.now() - started))); } for (const signal of ["SIGINT", "SIGTERM"]) process.on(signal, () => { stopped = true; clearTimeout(timer); process.exit(0); }); timer = setTimeout(tick, 5000);