cf / src /solveTurnstile.min.js
RynnHub's picture
hmm
87be38f
function solveTurnstileMin({ url, proxy, siteKey }) {
return new Promise(async (resolve, reject) => {
if (!url) return reject("Missing url parameter");
if (!siteKey) return reject("Missing siteKey parameter");
const context = await global.browser
.createBrowserContext({
proxyServer: proxy ? `http://${proxy.host}:${proxy.port}` : undefined, // https://pptr.dev/api/puppeteer.browsercontextoptions
})
.catch(() => null);
if (!context) return reject("Failed to create browser context");
let isResolved = false;
var cl = setTimeout(async () => {
if (!isResolved) {
await context.close();
reject("Timeout Error");
}
}, global.timeOut || 60000);
try {
const page = await context.newPage();
if (proxy?.username && proxy?.password)
await page.authenticate({
username: proxy.username,
password: proxy.password,
});
await page.setRequestInterception(true);
page.on("request", async (request) => {
if (
[url, url + "/"].includes(request.url()) &&
request.resourceType() === "document"
) {
const response = await request.respond({
status: 200,
contentType: "text/html",
body: String(
require("fs").readFileSync("./src/fakePage.html")
).replace(/<site-key>/g, siteKey),
});
} else {
await request.continue();
}
});
await page.goto(url, {
waitUntil: "domcontentloaded",
});
await page.waitForSelector('[name="cf-response"]', {
timeout: 60000,
});
const token = await page.evaluate(() => {
try {
return document.querySelector('[name="cf-response"]').value;
} catch (e) {
return null;
}
});
isResolved = true;
clearInterval(cl);
await context.close();
if (!token || token.length < 10) return reject("Failed to get token");
return resolve(token);
} catch (e) {
if (!isResolved) {
await context.close();
clearInterval(cl);
reject(e.message);
}
}
});
}
module.exports = solveTurnstileMin;