mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 19:51:17 +00:00
40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
/**
|
|
* 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=<id> # 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);
|