// apps/hq/scripts/backup.ts — `npm run backup` (D33). Dumps the production Postgres to a // timestamped, compressed, restorable file under ./backups (or $HQ_BACKUP_DIR) and rotates to // the newest $HQ_BACKUP_KEEP (default 14). Run from the repo root: // npm run backup // DATABASE_URL=postgres://… npm run backup (explicit target, overrides resolution) // The target is resolved through the SAME shared resolver the server and every other // maintenance script uses (`requireDbUrlForEnv`, D19) — the old scripts/backup.mjs read // DATABASE_URL directly and so could never find the production database, which is resolved // rather than exported on that box. The resolved host/db is logged (never the password) // before pg_dump runs. // // Restore a dump with: // pg_restore --clean --if-exists --no-owner -d "$DATABASE_URL" backups/hq-.dump // // SECURITY (D32): credentials are stored in the CLEAR, so these dumps contain plaintext // logins. Keep backups/ access-controlled and off any shared drive (it is gitignored). import { runBackup } from '../src/backup' try { runBackup() } catch (e) { console.error(e instanceof Error ? e.message : String(e)) process.exit(1) }