fix(shorts): autoplay muet, langues FR/EN, proxy prod et Dailymotion embeds
CI / build-and-test (push) Successful in 14m9s
CI / build-and-test (push) Successful in 14m9s
- autoplay: les Shorts demarrent muets (comme Watch) pour garantir l'autoplay des iframes; le son se debloque a la premiere interaction (unlockSound) et reste controlable
- proxy prod: ajoute les alias /proxy/twitch-api, /proxy/twitch-auth, /proxy/dm, /proxy/odysee (evite le fallback SPA -> parse JSON 'status 200 ok:false'); forwardJson accepte les deux prefixes. Corrige aussi la validation des clips Twitch morts
- Dailymotion: allow_embed demande dans les flux shorts/trending -> les videos non-embeddables ('Forbidden') sont exclues
- langues: mapping language (Dailymotion/PeerTube/Odysee) + shortsLangOk applique a tous les fournisseurs; en+fr toujours acceptes
- PeerTube shorts: durationMin/Max cote serveur (plus de videos longues au hasard)
- Twitch: validation helix/clips de nouveau fonctionnelle + autoplay muet
This commit is contained in:
+11
-1
@@ -3071,7 +3071,11 @@ app.post('/api/ai/summarize', aiLimiter, async (req, res) => {
|
||||
// Generic JSON forwarder helper
|
||||
async function forwardJson(req, res, base) {
|
||||
try {
|
||||
const pathPart = req.originalUrl.replace(/^\/api\/(dm|odysee|twitch-api|twitch-auth)/, '');
|
||||
// Accepte les deux préfixes : `/api/<key>` (prod canonique) ET
|
||||
// `/proxy/<key>` (repli du front, défini dans proxy.conf.json pour le dev).
|
||||
// Sans le second, les replis `/proxy/...` tombaient sur le fallback SPA
|
||||
// (index.html) → erreur de parse JSON "status 200 / ok:false".
|
||||
const pathPart = req.originalUrl.replace(/^\/(?:proxy\/)?(?:api\/)?(dm|odysee|twitch-api|twitch-auth)/, '');
|
||||
const targetUrl = `${base}${pathPart}`;
|
||||
const method = (req.method || 'GET').toUpperCase();
|
||||
// Ne transfère que les headers utiles : tout le reste (cookies, content-length
|
||||
@@ -3105,6 +3109,12 @@ app.all('/api/dm/*', (req, res) => forwardJson(req, res, 'https://api.dailymotio
|
||||
app.all('/api/odysee/*', (req, res) => forwardJson(req, res, 'https://api.na-backend.odysee.com'));
|
||||
app.all('/api/twitch-api/*', (req, res) => forwardJson(req, res, 'https://api.twitch.tv'));
|
||||
app.all('/api/twitch-auth/*', (req, res) => forwardJson(req, res, 'https://id.twitch.tv'));
|
||||
// Alias `/proxy/...` : le front utilise ces chemins en repli (cf. proxy.conf.json
|
||||
// pour le dev). En prod ils doivent répondre du JSON, pas le shell SPA.
|
||||
app.all('/proxy/dm/*', (req, res) => forwardJson(req, res, 'https://api.dailymotion.com'));
|
||||
app.all('/proxy/odysee/*', (req, res) => forwardJson(req, res, 'https://api.na-backend.odysee.com'));
|
||||
app.all('/proxy/twitch-api/*', (req, res) => forwardJson(req, res, 'https://api.twitch.tv'));
|
||||
app.all('/proxy/twitch-auth/*', (req, res) => forwardJson(req, res, 'https://id.twitch.tv'));
|
||||
|
||||
// -------------------- Unified search endpoint (GET) --------------------
|
||||
app.get('/api/search', async (req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user