const axios = require('axios') const config = require('../config/llm.json') const queriesToday = new Map() function getDateKey() { return new Date().toISOString().split('T')[0] } function checkBudget() { const today = getDateKey() const used = queriesToday.get(today) || 0 if (used >= config.webSearch.dailyBudget) return false queriesToday.set(today, used) return true } function consumeQuery() { const today = getDateKey() const used = (queriesToday.get(today) || 0) + 1 queriesToday.set(today, used) } async function searchDomains(providerName) { const apiKey = process.env.GOOGLE_CSE_API_KEY || config.webSearch.apiKey const engineId = process.env.GOOGLE_CSE_ENGINE_ID || config.webSearch.engineId const maxResults = config.webSearch.maxResults if (!apiKey || !engineId) return [] if (!checkBudget()) return [] const queries = [ `${providerName} streaming ver online 2026`, `sitio como ${providerName} peliculas gratis`, `dominio ${providerName} funciona`, ] const results = [] for (const query of queries) { try { consumeQuery() const response = await axios.get('https://www.googleapis.com/customsearch/v1', { params: { key: apiKey, cx: engineId, q: query, num: Math.min(maxResults, 10), }, timeout: 10000, }) const items = response.data.items || [] for (const item of items) { try { const url = new URL(item.link) results.push(url.hostname) } catch { continue } } } catch { continue } } return [...new Set(results)] } async function searchAlternativesDomains(providerName) { return searchDomains(providerName) } module.exports = { searchDomains, searchAlternativesDomains, }