| 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 | |