84 lines
2.1 KiB
JavaScript
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
|