MovixOpenSource/API/Mainapi/README.md
2026-07-05 18:23:34 +02:00

96 lines
4.9 KiB
Markdown

# Main API Movix
C'est le cœur applicatif du projet. Si le frontend affiche un catalogue, authentifie un user, synchronise du `localStorage`, gère les commentaires, le Wishboard, le Top 10, le Live TV, le debrid ou les pages VIP, il finit très souvent ici.
Le service tourne en mode cluster via `server.js` : un master lance plusieurs workers, surveille les redémarrages et gère un graceful shutdown. `app.js` monte ensuite Express, Redis, le pool MySQL, les caches disque et les routes injectées par dépendances.
## Ce que le service gère
- auth, sessions et profils
- recherche, metadata TMDB et agrégation de sources
- sync frontend <-> backend pour une partie de l'état utilisateur
- commentaires, likes, listes partagées, Wishboard et soumission de liens
- Live TV, proxies, debrid et intégrations de scraping
- VIP, invoices, wrapped et features communautaires
## Démarrage
```bash
cd API/Mainapi
cp .env.example .env
npm install
npm run dev
```
Ne lance pas le service avec un `.env` vide : MySQL, Redis, JWT, TMDB et plusieurs routes métier en dépendent directement.
Notes utiles :
- le serveur HTTP écoute actuellement sur `http://localhost:25565`
- `server.js` bind aujourd'hui le port `25565` en dur
- `NUM_WORKERS` permet de régler le nombre de workers du cluster
- MySQL et Redis sont nécessaires pour une grosse partie des routes
## Architecture
```text
API/Mainapi/
|-- server.js # Master cluster + workers + graceful shutdown
|-- app.js # Bootstrap Express, middleware, deps partagées
|-- mysqlPool.js # Pool MySQL unique
|-- config/redis.js # Redis
|-- middleware/ # CORS, sécurité, auth
|-- routes/ # Modules avec configure(deps)
|-- commentsRoutes.js # Commentaires
|-- likesRoutes.js # Likes / dislikes
|-- sharedListsRoutes.js # Listes partagées
|-- liveTvRoutes.js # Live TV
|-- wishboardRoutes.js # Wishboard
|-- top10Routes.js # Classements
|-- wrappedRoutes.js # Wrapped
|-- linkSubmissionsRoutes.js # Soumission de liens
|-- utils/ # Cache, proxies, axios helpers, VIP, etc.
|-- cache/ # Caches disque
`-- exportscripts/ # SQL et scripts de migration
```
Le pattern important dans `routes/` : beaucoup de modules exposent `configure(deps)`. C'est `app.js` qui injecte les clients HTTP, le cache, les helpers et les constantes partagées avant montage.
## Variables d'environnement à renseigner en premier
Le fichier `API/Mainapi/.env.example` est la référence complète. En pratique, les groupes de variables à traiter en premier sont :
- cœur applicatif : `JWT_SECRET`, `TMDB_API_KEY`, `FRONTEND_BASE_URL`
- données : `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`
- cache et coordination : `REDIS_HOST`, `REDIS_PORT`, `REDIS_PASSWORD`, `NUM_WORKERS`
- scraping / proxy : `PROXY_SERVER_URL`, `CF_PROXY_403_URL`, `BYPASS403_SERVER_URL`, `SOCKS5_PROXIES`, `HTTP_PROXIES`
- anti-abuse / forms : `TURNSTILE_SECRET_KEY`, `TURNSTILE_INVISIBLE_SECRETKEY`
- paiement / VIP : variables `VIP_*`, `BLOCKCYPHER_TOKEN`
Certaines intégrations sont très spécifiques à des sources données, par exemple les cookies `DARKIWORLD_*`, `FSTREAM_LOGIN_*` ou `XTREAM_*`.
## Source téléchargements (Darkino)
La source téléchargements (`routes/darkiworld.js` + `utils/darkiworldSqlite.js`) lit des snapshots SQLite locaux au lieu de scraper à chaud : `mirror.sqlite`, `darkino.sqlite` et `links_small.sqlite`. Ces fichiers ne sont pas versionnés — il faut les récupérer et les extraire dans `darkino-backups/` :
1. Télécharger l'archive : https://pixeldrain.com/u/n2M1s1MA
2. Extraire les `.sqlite` dans `API/Mainapi/darkino-backups/`
3. (Optionnel) pointer `DARKIWORLD_SQLITE_DIR` vers un autre dossier absolu — ex Pterodactyl : `/home/container/darkino-backups`
Sans ces fichiers, chaque décodage de lien renvoie `sqlite_miss` (le fallback live hydracker ne s'active que si `HYDRACKER_LIVE_ENABLED=true`).
## Points d'entrée utiles
- auth et profils : `routes/authRoutes.js`, `routes/sessions.js`, `routes/profiles.js`
- persistance frontend : `routes/sync.js`
- recherche et catalogues : `routes/search.js`, `routes/tmdb.js`
- scraping / lecture : `routes/cpasmal.js`, `routes/fstream.js`, `routes/wiflix.js`, `liveTvRoutes.js`
- communautaire : `commentsRoutes.js`, `likesRoutes.js`, `sharedListsRoutes.js`, `wishboardRoutes.js`, `linkSubmissionsRoutes.js`
- VIP / paiements : `utils/vipDonations.js`, `routes/vipDonations.js`
## À garder en tête
- Le backend actif est ici, pas dans l'ancien contenu direct de `API/`.
- Plusieurs tables MySQL sont initialisées automatiquement au démarrage.
- Une partie du comportement applicatif dépend de caches disque et de proxys externes ; un bug peut venir d'ailleurs que du code route lui-même.
- Si une feature touche la lecture vidéo, regarde aussi `API/proxiesembed/`, `API/miscs/` et parfois l'extension navigateur.