:3000 encode zstd gzip # ── Facebook OAuth2 microserver (Node.js en puerto 3002) ────────────────────── handle /fb-server/* { uri strip_prefix /fb-server reverse_proxy localhost:3002 } # ── yt-dlp stream extractor (servicio externo configurable via env) ─────────── # /yt-stream/{VIDEO_ID} → http://YTDLP_HOST/stream/{VIDEO_ID} # yt-dlp puede tardar 20-30s — timeouts extendidos a 120s handle_path /yt-stream/* { rewrite * /stream{path} reverse_proxy {env.YTDLP_HOST} { transport http { dial_timeout 10s response_header_timeout 120s read_timeout 120s } } } # OAuth2 callback page — must be served as a static HTML (not the SPA index) handle /oauth2callback { rewrite * /oauth2callback.html file_server { root /ui/build } } # Facebook OAuth2 callback popup — soporta tanto .html como .htm # .html → servir directamente handle /oauth/facebook/callback.html { file_server { root /ui/build } } # .htm → reescribir internamente a .html (misma página, misma URL visible para Facebook) handle /oauth/facebook/callback.htm { rewrite * /oauth/facebook/callback.html file_server { root /ui/build } } # Sin extensión → redirigir a .html handle /oauth/facebook/callback { redir /oauth/facebook/callback.html{query} 302 } # SPA — serve static files, fallback to index.html for client-side routing handle { root * /ui/build try_files {path} /index.html file_server }