captcha / endpoints /cloudflare-cookies.js
rezaharis's picture
Update endpoints/cloudflare-cookies.js
3e6915a verified
async function cloudflareCookies(page, originalCookiesString, cl, opts = {}) {
const timeout = typeof opts.timeout === 'number' ? opts.timeout : 60000;
const start = Date.now();
let newClearanceCookie = null;
try {
const wait = ms => new Promise(res => setTimeout(res, ms));
while (Date.now() - start < timeout) {
const content = await page.content().catch(() => "");
const lower = content.toLowerCase();
if (lower.includes('just a moment') || lower.includes('turnstile')) {
await page.waitForLoadState('networkidle', { timeout: 30000 }).catch(() => {});
await wait(1000);
continue;
}
const cookies = await page.context().cookies().catch(() => []);
newClearanceCookie = cookies.find(c => c.name === 'cf_clearance');
if (newClearanceCookie) break;
await wait(1000);
}
clearTimeout(cl);
const finalCookies = await page.context().cookies().catch(() => []);
const finalUrl = page.url();
const userAgent = await page.evaluate(() => navigator.userAgent);
newClearanceCookie = newClearanceCookie || finalCookies.find(c => c.name === 'cf_clearance');
if (!newClearanceCookie) throw new Error('Gagal mendapatkan cf_clearance (Turnstile belum selesai)');
let updatedCookieString = (originalCookiesString || '').trim();
if (updatedCookieString && !updatedCookieString.endsWith(';')) updatedCookieString += ';';
if (/cf_clearance=[^;]+/.test(updatedCookieString)) {
updatedCookieString = updatedCookieString.replace(/cf_clearance=[^;]+/, `cf_clearance=${newClearanceCookie.value}`);
} else {
updatedCookieString += ` cf_clearance=${newClearanceCookie.value};`;
}
return {
success: true,
url: finalUrl,
cookies: finalCookies,
cookie_string: updatedCookieString.trim(),
clearance: newClearanceCookie,
cf_clearance: newClearanceCookie.value,
user_agent: userAgent
};
} catch (e) {
clearTimeout(cl);
throw e;
}
}
module.exports = cloudflareCookies;