const express = require('express') const app = express() const port = process.env.PORT || 7860 const bodyParser = require('body-parser') const authToken = process.env.authToken || null const cors = require('cors') const reqValidate = require('./reqValidate') global.browserLength = 0 global.browserLimit = Number(process.env.browserLimit) || 20 global.timeOut = Number(process.env.timeOut || 60000) app.use(bodyParser.json({})) app.use(bodyParser.urlencoded({ extended: true })) app.use(cors()) if (process.env.NODE_ENV !== 'development') { let server = app.listen(port, () => { console.log(`Server running on port ${port}`) }) try { server.timeout = global.timeOut } catch (e) { } } if (process.env.SKIP_LAUNCH != 'true') require('./createBrowser') const getSource = require('./getSource') const solveTurnstileMin = require('./solveTurnstile.min') const solveTurnstileMax = require('./solveTurnstile.max') const wafSession = require('./wafSession') app.get("/", (req, res) => { res.send({ msg: "Hello World" }) }) app.post('/action', async (req, res) => { const data = req.body const check = reqValidate(data) if (check !== true) return res.status(400).json({ code: 400, message: 'Bad Request', schema: check }) if (authToken && data.authToken !== authToken) return res.status(401).json({ code: 401, message: 'Unauthorized' }) if (global.browserLength >= global.browserLimit) return res.status(429).json({ code: 429, message: 'Too Many Requests' }) if (process.env.SKIP_LAUNCH != 'true' && !global.browser) return res.status(500).json({ code: 500, message: 'The scanner is not ready yet. Please try again a little later.' }) var result = { code: 500 } global.browserLength++ switch (data.mode) { case "source": result = await getSource(data).then(res => { return { source: res, code: 200 } }).catch(err => { return { code: 500, message: err.message } }) break; case "turnstile-min": result = await solveTurnstileMin(data).then(res => { return { token: res, code: 200 } }).catch(err => { return { code: 500, message: err.message } }) break; case "turnstile-max": result = await solveTurnstileMax(data).then(res => { return { token: res, code: 200 } }).catch(err => { return { code: 500, message: err.message } }) break; case "waf-session": result = await wafSession(data).then(res => { return { ...res, code: 200 } }).catch(err => { return { code: 500, message: err.message } }) break; } global.browserLength-- res.status(result.code ?? 500).send(result) }) app.use((req, res) => { res.status(404).json({ code: 404, message: 'Not Found' }) }) if (process.env.NODE_ENV == 'development') module.exports = app