b7911badb2
AudioLevelsServer s'auto-attachait à l'événement 'upgrade' du serveur HTTP via la lib ws (server + path), en plus du listener manuel du proxy LiveKit. Pour toute connexion /livekit, les deux listeners s'exécutaient : le proxy LiveKit aboutissait bien côté upstream, mais le listener ws (path /audio-levels ne matchant pas) appelait abortHandshake(socket, 400) sur le même socket juste après, cassant la connexion côté client en HTTPS prod. AudioLevelsServer passe maintenant en noServer: true et expose handleUpgrade(), appelée par un dispatcher 'upgrade' unique dans server/index.js qui route explicitement par chemin (/livekit vs /audio-levels). Ajout de certs/ au .gitignore (clés privées SSL locales mkcert).