// Réglages de rétention des sessions terminées (archivage auto), persistés dans `settings`. // Frontière de sécurité : clés NON sensibles, n'entrent dans l'allow-list du PATCH /api/v1/settings // que via les validateurs ci-dessous. Calqué sur scan-settings.ts. import { getSetting } from '../db/index.js'; import type { Db } from '../db/index.js'; export const RETENTION_DAYS_KEY = 'session_retention_days'; export const PURGE_DAYS_KEY = 'session_purge_days'; /** Au-delà de N jours après la fin, une session managée est auto-archivée. 0 = jamais. */ export const DEFAULT_RETENTION_DAYS = 30; /** Purge définitive (DELETE) après N jours. 0 = désactivée (conçue mais OFF par défaut). */ export const DEFAULT_PURGE_DAYS = 0; export const MIN_RETENTION_DAYS = 1; export const MAX_RETENTION_DAYS = 3650; /** Rétention en jours (0 = jamais archiver). Défaut DEFAULT_RETENTION_DAYS. Lecture tolérante. */ export function readRetentionDays(db: Db): number { return readDaysSetting(db, RETENTION_DAYS_KEY, DEFAULT_RETENTION_DAYS); } /** Purge définitive en jours (0 = désactivée). Défaut DEFAULT_PURGE_DAYS. Lecture tolérante. */ export function readPurgeDays(db: Db): number { return readDaysSetting(db, PURGE_DAYS_KEY, DEFAULT_PURGE_DAYS); } function readDaysSetting(db: Db, key: string, fallback: number): number { const raw = getSetting(db, key); if (raw === null) return fallback; const n = Number(raw); return isValidDays(n) ? n : fallback; } /** * Valide un nombre de jours : entier `0` (= désactivé) OU dans [MIN, MAX]. Retourne null si invalide * (⇒ 400). Le même validateur sert pour la rétention et la purge (mêmes bornes, même sémantique de 0). */ export function normalizeRetentionDays(raw: unknown): number | null { return typeof raw === 'number' && isValidDays(raw) ? raw : null; } /** Alias sémantique pour la purge (mêmes règles). */ export const normalizePurgeDays = normalizeRetentionDays; function isValidDays(n: number): boolean { if (!Number.isInteger(n)) return false; return n === 0 || (n >= MIN_RETENTION_DAYS && n <= MAX_RETENTION_DAYS); }