discovery-media-player 0.1.97 → 0.1.98
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 +1 -1
- package/server/gabarit-live.js +15 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.98",
|
|
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/gabarit-live.js
CHANGED
|
@@ -179,7 +179,7 @@ var Live=(function(){
|
|
|
179
179
|
// battait deux fois. On les déclare au niveau du CYCLE DE VIE : ce qui doit être arrêté doit
|
|
180
180
|
// être visible depuis l'endroit qui arrête.
|
|
181
181
|
var _ordEtat=null,_ordChat=null,_filet=null;
|
|
182
|
-
var sb=null,ch=null,ME=null,SLUG=null,CONTROL=null,LOCKED=false,AUTHTOK=null,PRESENT=[],PRESNAME='',seen=Object.create(null),msgEls=Object.create(null),msgData=Object.create(null),replyCtx=null,typers=Object.create(null),pdfCache=Object.create(null),_tyT=0,_tyIv=0,_atIv=0,unread=0,autoOpened=false,_histDone=false,_phWired=false,_onMap=null,_onState=null,_peekT=0,MUTED=false,_maxSeq=0;
|
|
182
|
+
var sb=null,ch=null,ME=null,SLUG=null,CONTROL=null,LOCKED=false,AUTHTOK=null,PRESENT=[],PRESNAME='',seen=Object.create(null),msgEls=Object.create(null),msgData=Object.create(null),replyCtx=null,typers=Object.create(null),pdfCache=Object.create(null),_tyT=0,_tyIv=0,_atIv=0,unread=0,autoOpened=false,_histDone=false,_phWired=false,_onMap=null,_onState=null,_peekT=0,MUTED=false,_maxSeq=0,_ptJeton='';
|
|
183
183
|
try{ MUTED=localStorage.getItem('3dd-present-mute')==='1'; }catch(e){}
|
|
184
184
|
// Couper/rétablir les notifications du chat (cloche) : coupé = plus de ticker ni de pulse (badge silencieux gardé).
|
|
185
185
|
function applyMute(){ var b=document.getElementById('chatMute'); if(b){b.classList.toggle('muted',MUTED);b.title=MUTED?'Réactiver les notifications du chat':'Couper les notifications du chat';} setBadge(); }
|
|
@@ -253,8 +253,21 @@ var Live=(function(){
|
|
|
253
253
|
// Le serveur ne croit plus 'isMember' ni 'isPresenter' sur parole : l'appartenance se prouve par
|
|
254
254
|
// le jeton d'acces de la session, le titre de presentateur par le control_token. Ce qui part d'ici
|
|
255
255
|
// n'est plus qu'une AFFIRMATION, et le serveur la remplace par ce qu'il a verifie.
|
|
256
|
+
// ⚠️ JETON DE PRÉSENCE (P1c étape 2, incrément 3). Le battement PORTE le jeton reçu au précédent
|
|
257
|
+
// (champ pt) : le serveur en dérive la clé de la ligne, donc un tiers ne peut plus poster notre clé
|
|
258
|
+
// pour écraser notre présence. Tant qu'on n'en a pas, on demande l'émission (wantToken) — ce marqueur
|
|
259
|
+
// distingue un BOOTSTRAP moderne d'un client LEGACY, sans quoi sansJeton ne retomberait jamais à
|
|
260
|
+
// zéro et la porte ne pourrait jamais se fermer. La réponse est lue pour ranger le jeton émis ; un
|
|
261
|
+
// hôte sans PLAYER_PRESENCE_SECRET n'en renvoie pas, et tout continue comme avant (legacy).
|
|
262
|
+
// ⚠️ AUCUN BACKTICK DANS CE COMMENTAIRE : ce fichier ÉMET du JS via des template literals — un
|
|
263
|
+
// backtick ici ferme la chaîne et casse tout le module (vu à l'instant, 33 essais rouges d'un coup).
|
|
256
264
|
function sendAttend(){ if(!SLUG||!ME)return; try{ var h={'Content-Type':'application/json'};var jw=accessToken();if(jw)h.Authorization='Bearer '+jw;
|
|
257
|
-
|
|
265
|
+
var corps={action:'present-attend',slug:SLUG,control:CONTROL,key:attKey(),name:ME.name||'',email:ME.email||'',avatar:ME.avatar||''};
|
|
266
|
+
if(_ptJeton)corps.pt=_ptJeton;else corps.wantToken='1';
|
|
267
|
+
fetch('/api/doc',{method:'POST',headers:h,body:JSON.stringify(corps)})
|
|
268
|
+
.then(function(r){return r.json();})
|
|
269
|
+
.then(function(d){if(d&&d.pt)_ptJeton=d.pt;})
|
|
270
|
+
.catch(function(){}); }catch(e){} }
|
|
258
271
|
var EMOJIS=['👍','❤️','😂','😮','👏','🎉'];
|
|
259
272
|
var RSVG='<svg viewBox="0 0 24 24" fill=none stroke=currentColor stroke-width=2 stroke-linecap=round><circle cx=12 cy=12 r=9 /><path d="M8.5 14.5s1.4 1.7 3.5 1.7 3.5-1.7 3.5-1.7"/><line x1=9 y1=9.2 x2=9.01 y2=9.2 /><line x1=15 y1=9.2 x2=15.01 y2=9.2 /></svg>';
|
|
260
273
|
function esc(s){return Player.live.escapeHtml(s);}
|