/** * Appels réseau pour free-telecharger.cam. * Pas de challenge CF actif, fetch direct simple. */ const TIMEOUT = 20_000; const UA = 'Mozilla/5.0 (X11; Linux x86_64; rv:135.0) Gecko/20100101 Firefox/135.0'; async function ftGet(url: string): Promise { const res = await fetch(url, { headers: { 'User-Agent': UA, 'Accept': 'text/html,application/xhtml+xml,*/*;q=0.8', 'Accept-Language': 'fr-FR,fr;q=0.9,en;q=0.8', }, redirect: 'follow', signal: AbortSignal.timeout(TIMEOUT), }); if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.text(); } export async function fetchSearch(baseUrl: string, query: string): Promise { return ftGet(`${baseUrl}/1/recherche1/1.html?rech_fiche=${encodeURIComponent(query)}`); } export async function fetchTrending(baseUrl: string): Promise { return ftGet(`${baseUrl}/page/1.html`); } export async function fetchPage(pageUrl: string): Promise { return ftGet(pageUrl); }