/** * TTL de cache par provider — modèle identique à `SEARCH_CACHE_TTL_MS_

` * (server/db.mjs) étendu aux caches mémoire de index.mjs. * * Priorité : `_` (ex. `DETAILS_CACHE_TTL_MS_YT`) → * `` (`DETAILS_CACHE_TTL_MS`) → défaut passé par l'appelant. * Une valeur absente, non numérique ou ≤ 0 est ignorée (jamais de TTL nul * qui viderait le cache à chaque lecture). * * Base volontairement sans suffixe imposé : `TRANSCRIPT_CACHE_TTL` garde son * nom d'env historique, le suffixe `_YT` s'y ajoute tel quel. */ /** * @param {string} base nom de la variable d'environnement de base * @param {string} provider id provider ('yt', 'dailymotion', …) * @param {number} fallback TTL par défaut (ms) * @returns {number} TTL en ms */ export function perProviderTtl(base, provider, fallback) { const p = String(provider || '').toUpperCase().replace(/[^A-Z0-9]/g, ''); if (p) { const v = Number(process.env[`${base}_${p}`]); if (Number.isFinite(v) && v > 0) return v; } const g = Number(process.env[base]); if (Number.isFinite(g) && g > 0) return g; return fallback; }