/** * Löst den Marketing-Lauf von Hand aus - lokal oder gegen eine andere Umgebung. * Liest CRON_SECRET aus .env und ruft /api/cron/marketing mit dem richtigen * Header auf (cron-job.org kommt nicht an localhost heran). * * Usage: * npm run cron:marketing # echter Lauf gegen localhost:3000 * npm run cron:marketing -- --dry-run # nur anzeigen, wer was bekäme * npm run cron:marketing -- --date=2026-05-12 # so tun, als wäre der 12.05. * npm run cron:marketing -- --business= # nur ein Studio * npm run cron:marketing -- --url=https://… # andere Umgebung (CRON_SECRET muss passen) */ import "dotenv/config"; const args = Object.fromEntries( process.argv.slice(2).map((arg) => { const [key, value] = arg.replace(/^--/, "").split("="); return [key, value ?? "1"]; }) ); const secret = process.env.CRON_SECRET; if (!secret) { console.error("CRON_SECRET fehlt in .env"); process.exit(1); } const url = new URL("/api/cron/marketing", args.url ?? "http://localhost:3000"); if (args["dry-run"]) url.searchParams.set("dryRun", "1"); if (args.date) url.searchParams.set("date", args.date); if (args.business) url.searchParams.set("businessId", args.business); const response = await fetch(url, { headers: { Authorization: `Bearer ${secret}` } }); const body = await response.text(); try { console.log(JSON.stringify(JSON.parse(body), null, 2)); } catch { console.log(body); } process.exit(response.ok ? 0 : 1);