63 lines
1.7 KiB
JavaScript
63 lines
1.7 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)}`
|
|
)
|
|
}
|
|
|
|
async function waitForCookie({ domain, proxy, cookieName }, 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 {
|
|
cookie_name: match.name,
|
|
cookie_value: match.value,
|
|
cookie_domain: match.domain,
|
|
cookie_path: match.path,
|
|
http_only: match.httpOnly,
|
|
secure: match.secure,
|
|
user_agent: userAgent,
|
|
elapsed_time: (Date.now() - startTime) / 1000,
|
|
}
|
|
}
|
|
|
|
await sleep(pollInterval)
|
|
}
|
|
|
|
const cookies = await page.cookies()
|
|
logBrowserCookies({ domain, cookieName, cookies })
|
|
|
|
return {
|
|
cookie_name: cookieName,
|
|
cookie_value: null,
|
|
user_agent: userAgent,
|
|
elapsed_time: (Date.now() - startTime) / 1000,
|
|
}
|
|
}
|
|
|
|
module.exports = waitForCookie
|