mirror of
https://github.com/movixcorp/MovixOpenSource.git
synced 2026-07-26 16:32:07 +00:00
96 lines
4.9 KiB
Markdown
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.
|