discovery-media-player 0.1.103 → 0.1.105

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/server/handler.js +19 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discovery-media-player",
3
- "version": "0.1.103",
3
+ "version": "0.1.105",
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
@@ -599,6 +599,25 @@ async function handler(req, res) {
599
599
  // qu'internalStrict : un cockpit doit voir l'état des DEUX hôtes sans lire un journal — c'est
600
600
  // ce booléen, lu avec `presence: { avecJeton, sansJeton }` de la carte, qui dit quand fermer.
601
601
  presenceStrict: !!(PLAYER.config && PLAYER.config.presenceStrict),
602
+ // ⚠️ LES JETONS DE PRÉSENCE SONT-ILS RÉELLEMENT ÉMIS ? Sans ce booléen, un exploitant qui vient
603
+ // de poser `PLAYER_PRESENCE_SECRET` n'a AUCUN moyen de vérifier que son réglage a pris : la
604
+ // carte affiche `presence: {0,0}` aussi bien quand le secret est actif que quand la variable est
605
+ // mal nommée, posée sur le mauvais environnement, ou non redéployée. Un réglage qu'on ne peut
606
+ // pas observer est un réglage qu'on CROIT avoir fait. (Constaté en le posant pour de vrai : il a
607
+ // fallu monter une présentation jetable sur la prod pour s'en assurer.)
608
+ //
609
+ // ⚠️ ON MESURE, ON NE DÉCLARE PAS. Demander à l'hôte un `config.presenceTokens` créerait un fait
610
+ // en DEUX exemplaires — ce qu'il annonce et ce qu'il fait — qui finiraient par diverger. On
611
+ // appelle donc la fonction et on regarde si un jeton sort : la carte rend une capacité
612
+ // CONSTATÉE, et aucun hôte n'a rien à ajouter pour en bénéficier. Le jeton fabriqué ici n'est ni
613
+ // rendu ni stocké, et la signature ne touche ni la base ni le réseau — cette route doit répondre
614
+ // quand rien d'autre ne répond.
615
+ presenceTokens: (() => {
616
+ try {
617
+ const signer = PLAYER.identity && PLAYER.identity.signPresenceToken;
618
+ return typeof signer === "function" && !!signer("carte-sonde", "carte-sonde", 60);
619
+ } catch { return false; }
620
+ })(),
602
621
  // ⚠️ LE BALAYAGE DE RÉTENTION EST-IL ARMÉ ? La capacité `retention` dit que l'instance PEUT
603
622
  // purger ; ce booléen dit si le balayage automatique TOURNE (`config.retention.balayage`).
604
623
  // Sans lui, une instance armée est indiscernable d'une instance éteinte — et une purge qui