discovery-media-player 0.1.42 → 0.1.43
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/handler.js +16 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.43",
|
|
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
|
@@ -1385,6 +1385,11 @@ const CLE_INVITE = "dmp-present-me";
|
|
|
1385
1385
|
* Une clé absente ou hors forme n'est pas une erreur : elle vaut « inconnu ». Un participant mal
|
|
1386
1386
|
* compté vaut mieux qu'une audience refusée.
|
|
1387
1387
|
*/
|
|
1388
|
+
/** La clé d'un membre : son adresse, normalisée — la recherche de ligne est exacte. */
|
|
1389
|
+
function lcMembre(email) {
|
|
1390
|
+
return String(email || "").trim().toLowerCase();
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1388
1393
|
function cleAnonyme(brut) {
|
|
1389
1394
|
const v = String(brut == null ? "" : brut).trim().slice(0, 120);
|
|
1390
1395
|
return /^anon-[A-Za-z0-9_-]{4,}$/.test(v) ? v : "anon-inconnu";
|
|
@@ -2871,7 +2876,17 @@ async function handler(req, res) {
|
|
|
2871
2876
|
// lui, ne peut rien prouver : sa clé reste la sienne, mais enfermée dans un espace de noms
|
|
2872
2877
|
// dont elle ne peut pas sortir — elle ne pourra jamais ressembler à l'e-mail d'un membre.
|
|
2873
2878
|
const r = await recordAttendance(String(body.slug || ""), {
|
|
2874
|
-
|
|
2879
|
+
// ⚠️ MINUSCULÉE, ET CE DÉTAIL EST UNE LIGNE DE PRÉSENCE. La clé cliente que 0.1.42 a
|
|
2880
|
+
// remplacée l'était (`me.email.toLowerCase()`) ; la clé dérivée ne l'était pas, et la
|
|
2881
|
+
// ligne se retrouve par `attendee_key=eq.` — une correspondance EXACTE. Un hôte dont
|
|
2882
|
+
// l'identité rend l'adresse telle qu'elle a été saisie aurait donc vu, pour un même
|
|
2883
|
+
// membre, une SECONDE ligne apparaître : temps cumulé reparti de zéro, et le collègue
|
|
2884
|
+
// affiché deux fois dans la liste des participants.
|
|
2885
|
+
//
|
|
2886
|
+
// Sans effet là où les adresses sont déjà normalisées — c'est le cas des deux hôtes
|
|
2887
|
+
// actuels, et c'est pour ça que rien ne l'aurait signalé. Un contrat ouvert ne se
|
|
2888
|
+
// repose pas sur ce que ses deux premiers hôtes font.
|
|
2889
|
+
key: profil ? lcMembre(profil.email) : cleAnonyme(body.key),
|
|
2875
2890
|
name: (profil && profil.name) || body.name,
|
|
2876
2891
|
email: profil ? profil.email : body.email,
|
|
2877
2892
|
avatar: (profil && profil.avatar) || body.avatar,
|