# Architecture FilyX

## Séparation des responsabilités

```text
Navigateur / OBS / XSplit
          |
          v
apps/web (PHP + MySQL sur IONOS)
  - comptes, RBAC, Premium
  - configuration par chaîne
  - overlays et événements
  - file de messages
          ^                     ^
          | HTTPS + HMAC        | webhooks Kick signés RSA
          v
apps/bot-engine (Node.js sur Windows)
  - jetons OAuth fiIyx chiffrés
  - abonnement officiel aux événements
  - jeux et commandes temps réel
  - envoi séquentiel et reprise
          |
          v
API publique Kick, sous l’identité exacte fiIyx
```

Le site IONOS reçoit les webhooks officiels, vérifie leur signature et les place
dans une file durable. Le moteur Windows les récupère par API HMAC. Le panel
reste la source de vérité pour la configuration, les permissions et les files.

## Isolation multi-chaînes

Tout événement opérationnel transporte au minimum :

- `streamer_id`
- `channel_id`
- `kick_channel_id`
- `kick_chatroom_id`

Les widgets ajoutent `widget_instance_id`. Les jeux ajoutent `game_session_id` et
`game_round_id`. Le moteur conserve une instance de jeu distincte par chaîne.

## Adaptateurs remplaçables

`KickSessionAdapter.ts` définit la frontière Kick. `OfficialKickApiAdapter.ts`
utilise uniquement `api.kick.com`, tandis que `KickOAuthClient.ts` gère OAuth,
le renouvellement des jetons et les abonnements aux événements.

Le statut modérateur reste `unknown` lorsque l’API officielle ne fournit pas de
preuve directe : FilyX ne simule jamais une réussite.

## Héritage audité

- `legacy/sport-original` : Overlay Sport et APIs, enveloppés par `FilyxSportAdapter`.
- `legacy/streambot-original` : référence de migration non active.
- `legacy/games-original` : moteurs et contenus des quatre jeux présents.

Le code historique OAuth Kick est conservé uniquement pour traçabilité et n'est pas routé par l'application FilyX.
