Petit bug mais très visible : le compteur "en ligne" restait à 0
Cause
/api/v1/instance/info comptait les clés Redis nodyx:heartbeat:* pour déterminer qui est en ligne. Ces clés sont posées par le middleware requireAuth — donc uniquement quand l'utilisateur fait des appels API.
Un utilisateur connecté mais en lecture passive (forum, scroll) n'appelle pas l'API → sa clé expire après 15 minutes → online_count = 0.
Fix
// ❌ Avant : clés Redis — peu fiables
const keys = await redis.keys('nodyx:heartbeat:*')
const online_count = keys.length
// ✅ Après : sockets actifs — source de vérité
const sockets = await io.in('presence').fetchSockets()
const userIds = new Set(sockets.map(s => s.data.userId))
const online_count = userIds.size
Socket.IO maintient une room presence où tous les utilisateurs connectés sont présents. C'est la vraie source de vérité — pas les heartbeats API.
Règle générale : pour la présence en temps réel, toujours utiliser l'état de la connexion socket, jamais une valeur persistée qui peut expirer.