Files
cf-bypass-fast/endpoints/cloudflare.js
2025-09-23 15:52:41 +05:30

80 lines
2.2 KiB
JavaScript

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