discovery-media-player 0.1.82 → 0.1.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discovery-media-player",
3
- "version": "0.1.82",
3
+ "version": "0.1.83",
4
4
  "description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
5
5
  "keywords": [
6
6
  "pdf-viewer",
@@ -211,14 +211,20 @@ async function purgerRetention(now, optsBrutes = {}) {
211
211
  // Présentations mortes : bornées à PLAFOND_PRESENTATIONS par exécution ; la ligne, ses messages,
212
212
  // ses présences — et les fichiers du bucket si storage.remove est fourni (OPTIONNELLE).
213
213
  const bPres = borne(now, f.presentationsMois);
214
- const mortes = await PLAYER.db.request(`doc_presentations?active=eq.false&updated_at=lt.${enc(bPres)}&select=slug&order=slug.asc&limit=${PLAFOND_PRESENTATIONS}`);
214
+ // ⚠️ On interroge PLAFOND+1 pour départager « pile PLAFOND présentations, rien après » (non
215
+ // tronqué) de « il y en a plus » — `>= PLAFOND` seul rendait un faux positif à exactement 500
216
+ // (P3 douzième audit : annoncé en 0.1.82, mais l'édition avait été perdue, sans essai pour la
217
+ // garder — c'est cet essai-ci qui manquait).
218
+ const mortesLot = await PLAYER.db.request(`doc_presentations?active=eq.false&updated_at=lt.${enc(bPres)}&select=slug&order=slug.asc&limit=${PLAFOND_PRESENTATIONS + 1}`);
219
+ const troncPres = Array.isArray(mortesLot) && mortesLot.length > PLAFOND_PRESENTATIONS;
220
+ const mortes = Array.isArray(mortesLot) ? mortesLot.slice(0, PLAFOND_PRESENTATIONS) : [];
215
221
  // ⚠️ BUDGET GLOBAL AUX PRÉSENTATIONS (P2 dixième audit). Le plafond n'était appliqué qu'À CHAQUE
216
222
  // présentation : 500 présentations × 5 000 = 2,5 M de messages en une exécution, timeout et
217
223
  // contention avec le chat. Deux budgets partagés — messages et présences — décrémentés au fil
218
224
  // des présentations ; la boucle s'arrête quand ils sont épuisés (tronque), sans supprimer les
219
225
  // parents restants. En dry-run, on parcourt quand même pour REMONTER ce que la vraie purge
220
226
  // ferait (examinés), sans jamais détruire.
221
- const presRapport = { examinees: 0, supprimees: 0, messages: 0, presences: 0, messagesExaminees: 0, presencesExaminees: 0, fichiers: 0, fichiersErreur: 0, fichiersCandidats: 0, tronque: Array.isArray(mortes) && mortes.length >= PLAFOND_PRESENTATIONS };
227
+ const presRapport = { examinees: 0, supprimees: 0, messages: 0, presences: 0, messagesExaminees: 0, presencesExaminees: 0, fichiers: 0, fichiersErreur: 0, fichiersCandidats: 0, tronque: troncPres };
222
228
  let budgetMessages = opts.plafond, budgetPresences = opts.plafond;
223
229
  for (const p of (Array.isArray(mortes) ? mortes : [])) {
224
230
  const slug = p && p.slug; if (!slug) continue;