- Add POST /admin/jobs/run-daily-snapshots (replaces 24h setInterval in server/snapshots.ts) - Add POST /admin/jobs/sync-and-simulate (syncs standings every 2h; only simulates when standings actually changed by comparing gamesPlayed + leagueRank before upserting) - Add standingsLastChangedAt + lastSimulatedAt columns to sportsSeasons (migration 0118) - Add GET /healthz route for Docker healthcheck (pings DB, returns 503 on failure) - Add app/lib/cron-auth.ts shared X-Cron-Secret header auth helper - Remove startSnapshotSystem() from server/socket.ts (no more in-process setInterval) - Add Forgejo Actions scheduled workflows: daily-snapshots.yml (00:05 UTC) and sync-and-simulate.yml (every 2h) — require CRON_SECRET repo secret Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 lines
304 B
TypeScript
7 lines
304 B
TypeScript
export function requireCronSecret(request: Request): void {
|
|
const secret = process.env.CRON_SECRET;
|
|
if (!secret) throw new Response("CRON_SECRET not configured", { status: 500 });
|
|
if (request.headers.get("x-cron-secret") !== secret) {
|
|
throw new Response("Unauthorized", { status: 401 });
|
|
}
|
|
}
|