Gros lot de travail synchronisé depuis le repo privé. Cette mise à jour regroupe la refonte du lecteur et du Cast, de nouvelles sources VOD/Live TV, le durcissement de l’API et des proxies, ainsi qu’une nouvelle version de l’application mobile. Lecteur, sources et Live TV - Refonte du lecteur HLS avec sélection et mémorisation de la qualité, détection des résolutions, scan des liens, choix des pistes audio et fallback contrôlé de 1080p vers 720p. - Ajoute une garde contre les boucles de changement de source, notamment lors des erreurs vidéo et des réponses 429. - Revoit SeekStreaming de bout en bout : validation des embeds, prise en charge de plusieurs candidats, regroupement par serveur, règles de headers persistantes et cache d’extraction raccourci. - Ajoute SwiftFlow pour les films et séries, avec lecteurs VF/VOSTFR, cache stale-while-revalidate, déduplication des requêtes et limite partagée côté API. - Adapte Coflix à son nouveau domaine et à son nouveau thème, ajoute un kill switch, développe les wrappers 1jour1film et actualise le domaine Wiflix. - Ajoute NorthLive et Vavoo à la Live TV, regroupe les variantes d’une même chaîne et permet de choisir le serveur ou la qualité. - Enrichit les Top 10 avec des filtres par période et par algorithme, ainsi que de nouvelles métriques de visionnage. Cast et application mobile - Unifie le contrôle Cast entre le Web Cast SDK et le pont Android : état distant, lecture, pause, seek, arrêt et reprise après reconnexion. - Ajoute sur Android un relais média LAN sécurisé, limité au Chromecast et au réseau Wi-Fi sélectionnés, avec sessions opaques et service foreground. - Prépare les sources avant diffusion et prend en charge les playlists HLS TS/fMP4, les flux progressifs, les sous-titres VTT, SeekStreaming et les segments MPEG-TS encapsulés dans des PNG. - Renforce le proxy média local : support Range, validation des redirections, liaison DNS/socket au réseau Cast et meilleure gestion des headers Fsvid. - Sécurise le bridge WebView avec contrôle de l’origine top-frame, capacités propres à chaque document et invalidation lors des navigations. - Ajoute le Picture-in-Picture Android avec lecture/pause et seek de 10 secondes depuis la fenêtre flottante. - Maintient désormais l’écran allumé uniquement pendant une lecture active. - Publie l’application Android 2.5.7, build 16, avec le nouvel APK et ses métadonnées d’intégrité. API, base de données et paiements - Remplace 13 migrations SQL isolées par un manifeste de schéma MySQL centralisé, additif et capable de détecter les divergences de structure. - Ajoute le workflow db:init avec prévisualisation, dry-run, verrou MySQL, confirmations pour les tables Wrapped et couverture de tests dédiée. - Rend configurables les limites du pool MySQL et fiabilise les advisory locks. - Revoit entièrement PayGate : références de callback séparées, nonces, validation des wallets et transactions, états monotones, déduplication des paiements et protection contre les courses ou réutilisations de txid. - Renforce l’annulation, la réconciliation et la livraison idempotente des factures VIP, avec réponses no-store sur les routes sensibles. - Distingue les JWT invalides des indisponibilités MySQL afin de renvoyer correctement 401 ou 503 sans provoquer de déconnexions inutiles. - Utilise ZZAPI/Claude Haiku pour la modération, avec OpenRouter/DeepSeek en solution de secours. - Améliore la gestion HLS et Range dans proxiesembed. Frontend, profils et infrastructure - Protège la sélection et l’hydratation des profils contre les réponses concurrentes, les intentions obsolètes et l’effacement accidentel du stockage local. - Rend VITE_SITE_URL obligatoire et l’injecte dans le runtime, les données structurées, le service worker, robots.txt et sitemap.xml. - Optimise les probes réseau du service worker avec cache court et single-flight. - Charge dynamiquement les traductions anglaises, plusieurs routes secondaires et les données Search/TMDB uniquement lorsqu’elles deviennent nécessaires. - Ajoute des caches mémoire/session pour les images et contenus TMDB et réduit les animations, calculs et rendus hors écran. - Ajoute la page publique des frais, les coins carrés persistants, une nouvelle intro Movix, les avertissements de publicités adultes et de nombreux textes Cast, qualité, Live TV et sources. - Met à jour les extensions Chrome 1.3.12 et Firefox 1.5.9, ainsi que le userscript, avec la nouvelle extraction SeekStreaming et la préparation Cast. - Ajoute une large couverture de tests Kotlin et JavaScript pour le Cast, le proxy média, le PiP, le bridge, la base de données, PayGate et le lecteur. - Ajoute bootstrap-icons et patch-package, régénère les lockfiles npm et actualise la documentation d’installation et d’initialisation MySQL. Co-authored-by: GPT-5.6 Sol <noreply@openai.com>
6.7 KiB
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.jsbind aujourd'hui le port25565en durNUM_WORKERSpermet 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/ :
- Télécharger l'archive : https://pixeldrain.com/u/n2M1s1MA
- Extraire les
.sqlitedansAPI/Mainapi/darkino-backups/ - (Optionnel) pointer
DARKIWORLD_SQLITE_DIRvers 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.