async function cloudflare(data, page) { return new Promise(async (resolve, reject) => { if (!data.domain) return reject(new Error("Missing domain parameter")) const startTime = Date.now() let isResolved = false let userAgent = null const cl = setTimeout(() => { if (!isResolved) { isResolved = true const elapsedTime = (Date.now() - startTime) / 1000 resolve({ cf_clearance: null, user_agent: userAgent, elapsed_time: elapsedTime, }) } }, 20000) try { if (data.proxy?.username && data.proxy?.password) { await page.authenticate({ username: data.proxy.username, password: data.proxy.password, }) } page.removeAllListeners("request") page.removeAllListeners("response") await page.setRequestInterception(true) page.on("request", async (req) => { try { await req.continue() } catch (_) {} }) page.on("response", async (res) => { try { const url = res.url() if (url.includes("/cdn-cgi/challenge-platform/")) { const headers = res.headers() if (headers["set-cookie"]) { const match = headers["set-cookie"].match(/cf_clearance=([^;]+)/) if (match) { const cf_clearance = match[1] const userAgent = (await res.request().headers())["user-agent"] const elapsedTime = (Date.now() - startTime) / 1000 if (!isResolved) { isResolved = true clearTimeout(cl) resolve({ cf_clearance, user_agent: userAgent, elapsed_time: elapsedTime, }) } } } } } catch (_) {} }) await page.goto(data.domain, { waitUntil: "domcontentloaded" }) userAgent = await page.evaluate(() => navigator.userAgent) } catch (err) { if (!isResolved) { isResolved = true clearTimeout(cl) reject(err) } } }) } module.exports = cloudflare