MovixOpenSource/API/Mainapi
2026-08-03 21:45:43 +02:00
..
config tird release 2026-04-28 17:55:00 +02:00
db feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
middleware feat: live TV FCTV, fournisseur OAuth, sources J1F/Cinestream, modération IA & durcissement 2026-07-05 18:22:13 +02:00
public/oauth-icons Nouvelle adresse movix + nouvelles fonctionalités 2026-05-14 17:26:13 +02:00
routes feat: ajoute KissKH et fiabilise les sources, les sous-titres et le Cast — Android 2.5.8 2026-08-03 21:37:41 +02:00
scripts feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
services/kisskh Kisskh fonctionne si proxyscrape n'est pas configuré 2026-08-03 21:45:43 +02:00
utils Kisskh fonctionne si proxyscrape n'est pas configuré 2026-08-03 21:45:43 +02:00
.env.example feat: ajoute KissKH et fiabilise les sources, les sous-titres et le Cast — Android 2.5.8 2026-08-03 21:37:41 +02:00
app.js feat: ajoute KissKH et fiabilise les sources, les sous-titres et le Cast — Android 2.5.8 2026-08-03 21:37:41 +02:00
checkVip.js feat: live TV FCTV, fournisseur OAuth, sources J1F/Cinestream, modération IA & durcissement 2026-07-05 18:22:13 +02:00
commentsRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
likesRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
linkSubmissionsRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
linkzy.json tird release 2026-04-28 17:55:00 +02:00
liveTvRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
mysqlPool.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
package-lock.json tird release 2026-04-28 17:55:00 +02:00
package.json feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
README.md feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
recommendationRoutes.js tird release 2026-04-28 17:55:00 +02:00
server.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
sharedListsRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
top10Routes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
wishboardRoutes.js feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7 2026-08-02 12:09:37 +02:00
wrappedRoutes.js feat: live TV FCTV, fournisseur OAuth, sources J1F/Cinestream, modération IA & durcissement 2026-07-05 18:22:13 +02:00

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

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

Initialiser ou compléter le schéma MySQL

L'initialiseur requiert MySQL 8.0.13 ou plus récent. Cette version minimale permet de comparer les expressions, préfixes, ordres, types et visibilité des index via INFORMATION_SCHEMA, en plus du moteur, des charsets, collations et règles de clés étrangères.

Depuis API/Mainapi :

npm run db:init

La commande analyse d'abord les tables, colonnes, index et contraintes, puis affiche toutes les opérations prévues avant la première écriture. Un drift bloquant affiche les définitions expected et actual. Si le schéma change pendant l'acquisition du verrou, aucune DDL n'est appliquée et le diagnostic demande de relancer l'initialiseur.

Si la base contient déjà des tables, elle demande Continuer ? (O/N). Si des changements concernent wrapped_viewing_data ou wrapped_pages_data, elle avertit avant le second prompt que les opérations peuvent causer des verrous longs, augmenter la charge, la durée et l'espace disque utilisé, puis demande exactement Modifier les tables Wrapped ? (O/N).

Le script est uniquement additif : aucune suppression, aucun renommage et aucune reconstruction de données. Une réponse autre que O ou o annule la confirmation concernée. N'interromps pas une création d'index Wrapped déjà confirmée : sur une table volumineuse, MySQL peut travailler longtemps.

Pour afficher le plan sans exécuter de DDL :

npm run db:init -- --dry-run

Le dry-run se connecte tout de même à la base configurée dans .env. Il ne doit donc pas être confondu avec une vérification locale hors connexion.

Architecture

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/.
  • Un petit bootstrap de compatibilité initialise encore quelques tables au démarrage ; pour créer ou compléter le schéma MainAPI, utilise l'initialiseur MySQL.
  • 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.