async function searchResults(keyword) { try { const response = await fetchv2(`https://coflix.cc/suggest.php?query=${encodeURIComponent(keyword)}`); const data = await response.json(); if (!Array.isArray(data)) { return JSON.stringify([]); } const results = []; for (const item of data) { let imgUrl = ''; const imgMatch = item.image.match(/src="([^"]+)"/); if (imgMatch && imgMatch[1]) { const src = imgMatch[1].trim(); imgUrl = src.startsWith('//') ? 'https:' + src : src; } const href = item.url.trim(); results.push({ title: item.title.trim(), image: imgUrl, href: href }); } return JSON.stringify(results); } catch (err) { console.error("Search failed:", err); return JSON.stringify([]); } } async function extractDetails(url) { try { const response = await fetchv2(url); const html = await response.text(); const match = html.match(/
(.*?)<\/p>/s); const description = match ? match[1].trim() : "N/A"; return JSON.stringify([{ description: description, aliases: "N/A", airdate: "N/A" }]); } catch (err) { return JSON.stringify([{ description: "Error", aliases: "Error", airdate: "Error" }]); } } async function extractEpisodes(url) { try { const response = await fetchv2(url); const html = await response.text(); const seasonMatch = html.match(/(\d+) seasons?/i); const totalSeasons = seasonMatch ? parseInt(seasonMatch[1], 10) : null; const postIdMatch = html.match(/]+postid-(\d+)/i); const postId = postIdMatch ? postIdMatch[1] : null; const results = []; if (!totalSeasons || !postId) { results.push({ href: url, number: 1 }); } else { for (let season = 1; season <= totalSeasons; season++) { const apiUrl = `https://coflix.cc/wp-json/apiflix/v1/series/${postId}/${season}`; const seasonResp = await fetchv2(apiUrl); const seasonData = await seasonResp.json(); if (seasonData.episodes && Array.isArray(seasonData.episodes)) { seasonData.episodes.forEach(ep => { results.push({ href: ep.links, number: parseInt(ep.number, 10) }); }); } } } return JSON.stringify(results); } catch (err) { return JSON.stringify([{ href: "Error", number: "Error" }]); } } async function extractStreamUrl(url) { try { const response = await fetchv2(url); const html = await response.text(); const iframeMatch = html.match(/