Files
cf-bypass-fast-fork/endpoints/cookie.js
estebanthilliez 2220b92849
Some checks failed
CI / release (push) Failing after 30s
return full cookie jar on request
2026-04-24 22:26:27 +02:00

84 lines
2.1 KiB
JavaScript

function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
function logBrowserCookies({ domain, cookieName, cookies }) {
console.log(
`[cookie] Browser cookies before return for ${domain} (${cookieName}): ${JSON.stringify(cookies)}`
)
}
function buildCookieResponse({ cookieName, matchedCookie, userAgent, elapsedTime, cookies, includeCookies }) {
const result = {
cookie_name: matchedCookie?.name ?? cookieName,
cookie_value: matchedCookie?.value ?? null,
user_agent: userAgent,
elapsed_time: elapsedTime,
}
if (matchedCookie) {
result.cookie_domain = matchedCookie.domain
result.cookie_path = matchedCookie.path
result.http_only = matchedCookie.httpOnly
result.secure = matchedCookie.secure
}
if (includeCookies) {
result.cookies = cookies
}
return result
}
async function waitForCookie({ domain, proxy, cookieName, includeCookies }, page) {
if (!domain) throw new Error("Missing domain parameter")
if (!cookieName) throw new Error("Missing cookieName parameter")
const timeout = global.timeOut || 60000
const pollInterval = 250
const startTime = Date.now()
if (proxy?.username && proxy?.password) {
await page.authenticate({
username: proxy.username,
password: proxy.password,
})
}
await page.goto(domain, { waitUntil: "domcontentloaded" })
const userAgent = await page.evaluate(() => navigator.userAgent)
while (Date.now() - startTime < timeout) {
const cookies = await page.cookies()
const match = cookies.find((cookie) => cookie.name === cookieName)
if (match) {
logBrowserCookies({ domain, cookieName, cookies })
return buildCookieResponse({
cookieName,
matchedCookie: match,
userAgent,
elapsedTime: (Date.now() - startTime) / 1000,
cookies,
includeCookies,
})
}
await sleep(pollInterval)
}
const cookies = await page.cookies()
logBrowserCookies({ domain, cookieName, cookies })
return buildCookieResponse({
cookieName,
userAgent,
elapsedTime: (Date.now() - startTime) / 1000,
cookies,
includeCookies,
})
}
module.exports = waitForCookie