discovery-media-player 0.1.71 → 0.1.73

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.71",
3
+ "version": "0.1.73",
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",
package/server/handler.js CHANGED
@@ -308,8 +308,8 @@ const LIVE_CSS = `
308
308
  .lmodal-a button{flex:1;border:0;border-radius:12px;padding:11px 0;font:inherit;font-size:14px;font-weight:600;cursor:pointer}
309
309
  .lmodal-cancel{background:#ecebe6;color:#1c1c1c}
310
310
  .lmodal-cancel:hover{background:#e2e0da}
311
- .lmodal-ok{background:#e5484d;color:#fff}
312
- .lmodal-ok:hover{background:#d13b40}
311
+ .lmodal-ok{background:#d13b40;color:#fff}
312
+ .lmodal-ok:hover{background:#c1343a}
313
313
  `;
314
314
 
315
315
  // Contrôles de la barre (pastille présence + bouton chat).
@@ -82,7 +82,17 @@ async function purgerRetention(now) {
82
82
  // Balayage opportuniste : au plus UN par fenêtre de 24 h (le verrou est le compteur de débit
83
83
  // partagé — même mécanique que les limites, donc multi-processus sans coordination). Jamais
84
84
  // bloquant : la route qui l'héberge répond sans l'attendre, l'échec se capture.
85
+ //
86
+ // ⚠️ OPT-IN STRICT (`config.retention.balayage === true`), et le second hôte a payé pour la
87
+ // règle avant qu'elle existe : il consomme le contexte autonome TEL QUEL — « nous n'avons rien
88
+ // à brancher parce que nous n'avons rien débranché » — et le premier envoi de lien après sa
89
+ // montée aurait balayé selon NOS fenêtres par défaut, sans que personne n'ait rien décidé.
90
+ // Les fenêtres sont des décisions MÉTIER (ce qu'un conseiller peut encore prouver à un client) ;
91
+ // une suppression n'agit donc que là où un exploitant l'a écrite. `retention.run` reste
92
+ // disponible sans opt-in : appeler la route EST la décision.
85
93
  function tick() {
94
+ const r = PLAYER.config && PLAYER.config.retention;
95
+ if (!r || r.balayage !== true) return;
86
96
  Promise.resolve()
87
97
  .then(() => PLAYER.limits.allow("retention:sweep", 1, 86400))
88
98
  .then((permis) => { if (permis) return purgerRetention(Date.now()); })