# Audit des sources FilyX

Date de l'audit : 28 juillet 2026  
Sources auditées en lecture seule :

- `D:\Codex\2026-06-25\si-on-travaille-ensemble-tu-sais\outputs\Hom3r`
- `D:\Codex\3D\creality-k1c-overlay`

## Méthode

L'audit a porté sur les 137 fichiers applicatifs du dossier Hom3r et les 110 fichiers applicatifs du projet Creality, hors dépendances installées. Les points d'entrée, routes HTTP, événements temps réel, fichiers de configuration, stockages, tests, médias et dépendances ont été relevés. Aucun fichier source n'a été modifié.

## Résumé exécutable

Les sources contiennent bien :

- un Overlay Sport PHP/HTML avec six disciplines réellement présentes : football, handball, basketball, tennis, MMA et F1 ;
- un StreamBot PHP comportant commandes, minuteurs, alertes, modération, sound requests et overlays ;
- quatre mini-jeux Node.js réellement présents : Quiz, Motus, Qui suis-je et Petit Bac ;
- des overlays HTML dédiés pour chacun de ces quatre jeux ;
- un système anti-répétition local par streamer pour ces quatre jeux ;
- 10 000 questions de Quiz, 275 solutions Motus, 180 370 mots acceptés, 987 entrées Qui suis-je et 15 catégories Petit Bac.

Les jeux « Trouve l'intrus », « Juste Prix » et « Blind Test » ne sont pas présents dans les sources. Ils ne sont donc pas déclarés comme migrés.

Les sources ne peuvent pas être copiées telles quelles dans une plateforme SaaS multi-utilisateur. Les points bloquants sont l'usage de JSON locaux, des dépendances à OAuth Kick interdites par le nouveau cahier des charges, des hypothèses mono-chaîne, des secrets potentiellement présents dans des configurations locales, l'absence de file centralisée et plusieurs surfaces HTTP insuffisamment cloisonnées.

## 1. Overlay Sport

- Source : `D:\Codex\2026-06-25\si-on-travaille-ensemble-tu-sais\outputs\Hom3r`
- Module : Overlay Sport
- Langages : PHP 8, HTML5, CSS, JavaScript
- Framework : aucun
- Fichiers principaux :
  - `site-template.html`
  - `fb-widget-public.php`, `hb-widget-public.php`, `bb-widget-public.php`
  - `tennis-widget-public.php`, `mma-widget-public.php`, `f1-widget-public.php`
  - `worldcup-football-2026.php`
  - `worldcup-handball-2026.php`
  - `worldcup-basketball-2026.php`
  - `worldcup-tennis-2026.php`
  - `worldcup-mma-2026.php`
  - `worldcup-f1-2026.php`
- Point d'entrée : les fichiers `*-widget-public.php` chargent `config.php`, imposent le sport et rendent `site-template.html`.
- Dépendances :
  - API ESPN pour le football, le basketball et le MMA ;
  - SofaScore pour le handball ;
  - OpenF1 pour la Formule 1 ;
  - PHP cURL ou flux HTTP selon l'adaptateur ;
  - assets locaux dans `assets`.
- Stockage : fichiers JSON dans `data`, paramètres de requête et configuration PHP.
- Événements reçus : scores, chronomètres, périodes, compositions, classements, événements de match et race control selon le sport.
- Événements émis : rendu DOM, animations et événements visuels dans le navigateur overlay.
- URLs d'overlay actuelles :
  - `/fb-widget-public.php`
  - `/hb-widget-public.php`
  - `/bb-widget-public.php`
  - `/tennis-widget-public.php`
  - `/mma-widget-public.php`
  - `/f1-widget-public.php`
- Fonctionnement actuel : un grand template monolithique sélectionne un mode et un sport via les paramètres de requête, interroge les backends PHP et rafraîchit l'overlay.
- Risques de migration :
  - `site-template.html` est très volumineux et couple plusieurs sports ;
  - dépendance à des API externes non garanties ;
  - paramètres d'URL non liés à une instance FilyX ;
  - absence d'isolation serveur par chaîne ;
  - cache et CORS à revalider dans OBS/XSplit ;
  - pas de contrat versionné entre widget et panel.
- Réutilisable : backends sportifs, normalisation des données, builders d'overlay, assets, traductions et options déjà fonctionnelles.
- À adapter : encapsulation par `widget_instance_id`, jeton OBS révocable, configuration MySQL par chaîne, proxy FilyX et contrat d'événement versionné.
- Obsolète : accès direct par paramètres non signés et données JSON partagées.
- État de migration : inventorié, prêt pour copie contrôlée derrière un adaptateur de compatibilité.

## 2. StreamBot

- Source : `D:\Codex\2026-06-25\si-on-travaille-ensemble-tu-sais\outputs\Hom3r\Widgets\streambot`
- Module : StreamBot
- Langages : PHP, HTML, CSS, JavaScript
- Framework : aucun
- Fichiers principaux :
  - `api.php`, `lib.php`, `configurer.php`
  - `chatbot.php`, `chat-daemon.php`, `chat-cron.php`
  - `tabs/chatbot-commands.php`, `tabs/chatbot-timers.php`
  - `tabs/moderation.php`, `tabs/alerts.php`, `tabs/overlays.php`
  - `overlay/alerts.php`, `overlay/soundrequest.php`
- Point d'entrée : `configurer.php` pour le panel, `api.php?action=...` pour les actions et `chat-daemon.php`/`chat-cron.php` pour le traitement.
- Dépendances : PHP, PDO facultatif, API Kick, Pusher WebSocket côté navigateur, YouTube pour les sound requests.
- Stockage actuel :
  - JSON : `streamers`, `settings`, `commands`, `timers`, `queue`, `alert_configs`, `alert_events`, `blacklist`, `blacklist_users`, `chat-send-log` ;
  - MySQL facultatif via `kick_streamers`, `kick_commands`, `kick_event_subscriptions`, `kick_processed_events`, `song_requests`, `kick_logs`.
- Événements reçus : messages de chat, commandes, minuteurs, alertes, événements Kick et actions du panel.
- Événements émis : réponses chat, événements d'alertes, état de file, overlays et logs.
- URLs d'overlay actuelles :
  - `/Widgets/streambot/overlay/alerts.php`
  - `/Widgets/streambot/overlay/soundrequest.php`
  - stubs : `chat.php`, `goal.php`, `poll.php`, `viewerqueue.php`
- Fonctionnement actuel :
  - commandes personnalisées avec alias et cooldowns ;
  - minuteurs ;
  - alertes configurables ;
  - uploads d'images et de sons ;
  - sound requests YouTube ;
  - lecture Pusher du chat ;
  - pont JSON/MySQL partiel.
- Risques de migration :
  - OAuth Kick et jetons personnels présents, incompatibles avec la règle FilyX ;
  - certains tokens sont accessibles au code d'overlay ;
  - `Access-Control-Allow-Origin: *` sur l'API ;
  - requêtes SQL interpolées dans quelques branches ;
  - contrôle d'accès non centralisé ;
  - stockage JSON concurrent non transactionnel ;
  - mono-processus et reprise après panne limitée ;
  - routes par `action` difficiles à versionner.
- Réutilisable : modèles de commandes, minuteurs, alertes, file musicale, interfaces et logique de variables.
- À adapter : persistance MySQL, validation serveur, RBAC, file de messages, HMAC, multi-chaînes et remplacement total de l'authentification Kick personnelle.
- Obsolète : `kick-oauth.php`, `kick-callback.php` et les jetons streamer pour FilyX ; ils restent uniquement comme référence de migration et ne seront pas activés.
- État de migration : inventorié ; migration fonctionnelle à effectuer vers le moteur central `fiIyx`.

## 3. Overlay Creality et alertes

- Source : `D:\Codex\3D\creality-k1c-overlay`
- Module : overlay imprimante/alertes utilisé comme hôte historique des jeux
- Langage : JavaScript Node.js CommonJS, HTML, CSS
- Framework : Express 5 et `ws`
- Fichiers principaux : `src/server-all.js`, `src/creality-client.js`, `src/data-normalizer.js`, `public/overlay.html`, `public/configuration.html`.
- Point d'entrée : `src/server-all.js`, commande `npm start`.
- Dépendances : Node.js >=18, Express 5.1, ws 8.18 ; analyse syntaxique par Acorn/Esprima en développement.
- Stockage : fichiers `config*.json`, `data/game-history.json`, assets et sons locaux.
- Événements reçus : WebSocket Creality, webhooks Kick, chat, commandes et appels du panel.
- Événements émis : WebSocket local `/live`, alertes, état imprimante et événements de jeux.
- URLs : `/overlay`, `/configuration`, `/stream-start`, `/stream-end` et `/live`.
- Risques : application monolithique, configuration spécifique HR3D, routes et événements non isolés par chaîne, console de connexion contenant des informations sensibles, OAuth Kick contraire au nouveau brief.
- Réutilisable : mécanisme de broadcast, overlays d'alertes, validation de médias et robustesse de reconnexion.
- À adapter : authentification, stockage, multi-tenant et contrats.
- Obsolète pour FilyX : fonctions Creality non liées au produit FilyX, intégration OAuth Kick et valeurs de marque HR3D.
- État de migration : référencé ; seules les briques de jeux et d'overlays pertinentes seront copiées.

## 4. Quiz

- Source : `D:\Codex\3D\creality-k1c-overlay`
- Langage/framework : Node.js CommonJS, sans framework de jeu.
- Fichiers : `src/quiz-engine.js`, `src/quiz-config-store.js`, `public/quiz.html`, `public/js/quiz.js`, `public/css/quiz.css`, `config.quiz.json`, `data/quiz-questions.fr.json`.
- Point d'entrée : routes `/api/quiz/*` dans `src/server-all.js` ; overlay `/quiz`.
- Commande Kick : `!quiz`.
- Règles : questions à choix, réponses A/B/C/D, chronomètre, première réponse, score, classement provisoire et podium.
- Stockage : configuration JSON, 10 000 questions, historique par streamer dans `game-history.json`.
- Événements : `quiz-start`, `quiz-countdown`, `quiz-question`, `quiz-correct`, `quiz-provisional`, `quiz-answer`, `quiz-podium`, `quiz-idle`, `quiz-stopped`.
- Anti-répétition : clés normalisées des questions utilisées et exclusion de la partie précédente, avec cycle par streamer.
- Risques : état en mémoire et une seule partie par processus ; le nom de streamer est une clé texte.
- Réutilisable : moteur, banque de questions, overlay, scoring et anti-répétition.
- À adapter : contexte `{channel_id, game_session_id}`, stockage SQL, générateur aléatoire injectable et événements versionnés.
- État : inventorié, migration approuvée.

## 5. Motus

- Fichiers : `src/motus-engine.js`, `src/motus-config-store.js`, `public/motus.html`, `public/js/motus.js`, `public/css/motus.css`, `config.motus.json`, banques de mots.
- Point d'entrée : `/api/motus/*` ; overlay `/motus`.
- Commande : `!motus`.
- Règles : mot de longueur donnée, première lettre imposée, états lettre bien placée/mal placée/absente, tentatives, bonus de rapidité et podium.
- Données : 275 solutions et 180 370 mots acceptés.
- Événements : `motus-state`, `motus-round-start`, `motus-guess-result`, `motus-score-update`, `motus-word-reveal`, `motus-end`.
- Anti-répétition : mots utilisés et mots de la partie précédente, séparés par streamer.
- Risques : volume de la banque en mémoire, état mono-partie et écritures JSON synchrones.
- Réutilisable : analyse de proposition, moteur de score, overlay, données et anti-répétition.
- À adapter : chargement partagé en lecture seule, contexte par chaîne et historique SQL.
- État : inventorié, migration approuvée.

## 6. Qui suis-je

- Fichiers : `src/whoami-engine.js`, `src/whoami-config-store.js`, `public/whoami.html`, `public/js/whoami.js`, `public/css/whoami.css`, `config.whoami.json`, `data/whoami-entries.fr.json`.
- Point d'entrée : `/api/whoami/*` ; overlay `/whoami`.
- Commande : `!quisuisje`.
- Règles : indices progressifs, réponses libres normalisées, points dégressifs, manches et podium.
- Données : 987 personnalités/entrées.
- Événements : `whoami-round-start`, `whoami-guess`, `whoami-round-end`, `whoami-provisional`, `whoami-podium`, `whoami-idle`.
- Anti-répétition : entrées utilisées et partie précédente par streamer.
- Risques : état mono-partie et tolérance de réponse à valider par langue.
- Réutilisable : moteur d'indices, contenu, overlay, scoring.
- À adapter : isolation par chaîne/session, journal SQL et modération des contenus.
- État : inventorié, migration approuvée.

## 7. Petit Bac

- Fichiers : `src/petitbac-engine.js`, `src/petitbac-config-store.js`, `public/petitbac.html`, `public/js/petitbac.js`, `public/css/petitbac.css`, `config.petitbac.json`, `data/petitbac/*.json`.
- Point d'entrée : `/api/petitbac/*` ; overlay `/petitbac`.
- Commande : `!petitbac`.
- Règles : tirage de lettre, catégories successives, validation par dictionnaire, bonus d'unicité, score et podium.
- Données : 15 catégories, plus de 5 000 entrées cumulées.
- Événements : `petitbac-start`, `petitbac-letter-draw`, `petitbac-category-start`, `petitbac-answer`, `petitbac-category-stop`, `petitbac-provisional`, `petitbac-podium`, `petitbac-idle`.
- Anti-répétition : lettres utilisées, lettres de la partie précédente et catégories récentes par streamer.
- Risques : le moteur peut enrichir les fichiers de données à l'exécution ; cette écriture ne convient pas à un déploiement partagé.
- Réutilisable : datasets, moteur, overlay, scoring et anti-répétition.
- À adapter : contenu en base, validation éditoriale, multi-chaînes et transactions.
- État : inventorié, migration approuvée.

## Tests observés

Le projet Creality contient des tests Node natifs :

- intégration serveur et overlays ;
- normalisation des données ;
- reconnexion ;
- événement Kick Follow.

Le dossier Hom3r ne contient pas de suite automatisée équivalente. La migration devra ajouter des tests PHP et Bot Engine avant activation.

## Décisions de migration

1. Préserver les sources en lecture seule.
2. Copier seulement les fichiers nécessaires dans `FilyX/legacy` ou dans un paquet d'adaptation.
3. Ne jamais importer les fichiers de secrets, logs, cookies, tokens, données utilisateur ou configurations actives.
4. Remplacer OAuth Kick des streamers par la vérification de propriété dans le chat.
5. Centraliser l'envoi dans `outbound_message_queue`.
6. Isoler chaque opération avec `streamer_id`, `channel_id`, `kick_channel_id`, `kick_chatroom_id` et, selon le cas, `widget_instance_id` ou `game_session_id`.
7. Maintenir les URLs historiques via un adaptateur de redirection documenté.
8. Conserver la session `fiIyx` uniquement sur la machine Bot Engine dans un coffre chiffré.

## Limites constatées

La liaison d’une chaîne streamer n’exige pas son OAuth : elle repose sur un code à usage
unique publié dans le chat et reçu par les webhooks officiels Kick. Le compte bot central
utilise, lui, OAuth et l’API publique officielle. FilyX ne dépend d’aucune route privée ni
des cookies personnels d’un streamer. Le statut modérateur reste toutefois non vérifiable
automatiquement tant que l’API publique ne fournit pas de lecture de ce rôle.

## Contrôle de migration du 1er août 2026

Un second passage exhaustif a comparé les sources historiques avec le projet FilyX après intégration.

- Overlay Sport : les six disciplines, toutes les variantes d’affichage, langues, compétitions, filtres temporels, couleurs, polices, dimensions, transparence, trackers, positions, réglages F1 et réglages Tennis sont désormais conservés par instance. Les terrains, ballons, drapeaux et images handball manquants ont été recopiés. Les six APIs historiques sont servies derrière les routes FilyX.
- Mini-jeux : les quatre moteurs historiques et leurs banques de contenu restent utilisés. Les quatre overlays HTML/CSS/JavaScript d’origine ont remplacé la carte générique et consomment désormais le flux multi-chaîne sécurisé de FilyX. Les réglages visuels et les règles avancées du Quiz, Motus, Qui suis-je et Petit Bac sont exposés dans le panel.
- StreamBot : commandes modifiables avec préfixe `!`, alias et cooldowns ; minuteurs ; modération ; alertes avancées ; widgets Chat, Objectif et Classement ; Sound Request avec file, modes OBS, couleurs et liste noire ; équipe, points et giveaways sont intégrés au stockage MySQL multi-chaîne.
- Alertes : texte principal et secondaire, variables, image/GIF ou son par URL et par import local contrôlé, volume, durée, animations d’entrée/sortie, position, couleurs, taille et filtres par événement sont repris. Les événements restent mis en file dans `overlay_events`.
- Éléments volontairement exclus : les formulaires historiques demandant les cookies personnels des streamers, les routes OAuth personnelles obsolètes, les pages de test non authentifiées, les données utilisateur/logs historiques et les fonctions Creality sans rapport avec FilyX.

État après contrôle : migration fonctionnelle intégrée ; validation finale en production et surveillance des fournisseurs sportifs externes requises.

## Contrôle de production complémentaire du 1er août 2026

- Dix URLs OBS temporaires ont été générées pour contrôler les overlays génériques,
  le Sound Request, les quatre mini-jeux et l’Overlay Sport. Les dix ont répondu en
  HTTP 200 avec un document HTML valide, sans erreur PHP fatale.
- Vingt-trois assets réellement référencés par ces rendus ont été contrôlés en
  production, sans échec.
- Six images historiques de l’Overlay Sport absentes du déploiement ont été reprises
  depuis la source auditée : `subuncon-side.png`, `sponsor-hr3d.png`,
  `sponsor-cookiz.png`, `sponsor-baco.png`, `sponsor-rose.png` et
  `hr3d-shop-logo.png`.
- Les instances et jetons créés pour ce contrôle ont été supprimés immédiatement
  après le test.
- Le chemin panel → Bot Engine → moteur Quiz → overlay a été contrôlé avec une partie de
  démonstration réelle. L’arrêt clôt désormais immédiatement la session en `cancelled`,
  puis le moteur émet `quiz-stopped` ; l’ancien état `STOPPING` persistant a été supprimé.
