mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2025-06-08 04:25:25 +00:00
Validate Chrome is working at startup
This commit is contained in:
parent
71814a86bc
commit
a85e9c2c8c
127
src/index.ts
127
src/index.ts
@ -1,8 +1,13 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const os = require('os');
|
||||||
|
const path = require('path');
|
||||||
import log from './log'
|
import log from './log'
|
||||||
import { createServer, IncomingMessage, ServerResponse } from 'http';
|
import { createServer, IncomingMessage, ServerResponse } from 'http';
|
||||||
import { RequestContext } from './types'
|
import { RequestContext } from './types'
|
||||||
import Router, { BaseAPICall } from './routes'
|
import Router, { BaseAPICall } from './routes'
|
||||||
import getCaptchaSolver from "./captcha";
|
import getCaptchaSolver from "./captcha";
|
||||||
|
import sessions from "./session";
|
||||||
|
import {v1 as UUIDv1} from "uuid";
|
||||||
|
|
||||||
const version: string = "v" + require('../package.json').version
|
const version: string = "v" + require('../package.json').version
|
||||||
const serverPort: number = Number(process.env.PORT) || 8191
|
const serverPort: number = Number(process.env.PORT) || 8191
|
||||||
@ -30,6 +35,22 @@ function validateEnvironmentVariables() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function testChromeInstallation() {
|
||||||
|
log.debug("Testing Chrome installation...")
|
||||||
|
// create a temporary file for testing
|
||||||
|
const filePath = path.join(os.tmpdir(), 'flaresolverr.txt')
|
||||||
|
fs.writeFileSync(filePath, 'flaresolverr');
|
||||||
|
// launch the browser
|
||||||
|
const url = `file://${filePath}`;
|
||||||
|
const session = await sessions.create(UUIDv1(), {
|
||||||
|
userAgent: null,
|
||||||
|
oneTimeSession: true
|
||||||
|
})
|
||||||
|
const page = await session.browser.newPage()
|
||||||
|
await page.goto(url, { waitUntil: 'domcontentloaded' })
|
||||||
|
log.debug("Test successful.")
|
||||||
|
}
|
||||||
|
|
||||||
function errorResponse(errorMsg: string, res: ServerResponse, startTimestamp: number) {
|
function errorResponse(errorMsg: string, res: ServerResponse, startTimestamp: number) {
|
||||||
log.error(errorMsg)
|
log.error(errorMsg)
|
||||||
const response = {
|
const response = {
|
||||||
@ -87,64 +108,66 @@ function validateIncomingRequest(ctx: RequestContext, params: BaseAPICall) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init
|
// init
|
||||||
|
log.info(`FlareSolverr ${version}`);
|
||||||
|
log.debug('Debug log enabled');
|
||||||
validateEnvironmentVariables();
|
validateEnvironmentVariables();
|
||||||
|
testChromeInstallation().then(r =>
|
||||||
|
createServer((req: IncomingMessage, res: ServerResponse) => {
|
||||||
|
const startTimestamp = Date.now()
|
||||||
|
|
||||||
createServer((req: IncomingMessage, res: ServerResponse) => {
|
// health endpoint. this endpoint is special because it doesn't print traces
|
||||||
const startTimestamp = Date.now()
|
if (req.url == '/health') {
|
||||||
|
res.writeHead(200, {
|
||||||
// health endpoint. this endpoint is special because it doesn't print traces
|
'Content-Type': 'application/json'
|
||||||
if (req.url == '/health') {
|
})
|
||||||
res.writeHead(200, {
|
res.write(JSON.stringify({"status": "ok"}))
|
||||||
'Content-Type': 'application/json'
|
res.end()
|
||||||
})
|
return;
|
||||||
res.write(JSON.stringify({"status": "ok"}))
|
|
||||||
res.end()
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// count the request for the log prefix
|
|
||||||
log.incRequests()
|
|
||||||
log.info(`Incoming request: ${req.method} ${req.url}`)
|
|
||||||
|
|
||||||
// show welcome message
|
|
||||||
if (req.url == '/') {
|
|
||||||
successResponse("FlareSolverr is ready!", null, res, startTimestamp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get request body
|
|
||||||
const bodyParts: any[] = []
|
|
||||||
req.on('data', chunk => {
|
|
||||||
bodyParts.push(chunk)
|
|
||||||
}).on('end', () => {
|
|
||||||
// parse params
|
|
||||||
const body = Buffer.concat(bodyParts).toString()
|
|
||||||
let params: BaseAPICall = null
|
|
||||||
try {
|
|
||||||
params = JSON.parse(body)
|
|
||||||
} catch (err) {
|
|
||||||
errorResponse('Body must be in JSON format', res, startTimestamp)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ctx: RequestContext = {
|
// count the request for the log prefix
|
||||||
req,
|
log.incRequests()
|
||||||
res,
|
log.info(`Incoming request: ${req.method} ${req.url}`)
|
||||||
startTimestamp,
|
|
||||||
errorResponse: (msg) => errorResponse(msg, res, startTimestamp),
|
// show welcome message
|
||||||
successResponse: (msg, extendedProperties) => successResponse(msg, extendedProperties, res, startTimestamp)
|
if (req.url == '/') {
|
||||||
|
successResponse("FlareSolverr is ready!", null, res, startTimestamp);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate params
|
// get request body
|
||||||
if (!validateIncomingRequest(ctx, params)) { return }
|
const bodyParts: any[] = []
|
||||||
|
req.on('data', chunk => {
|
||||||
|
bodyParts.push(chunk)
|
||||||
|
}).on('end', () => {
|
||||||
|
// parse params
|
||||||
|
const body = Buffer.concat(bodyParts).toString()
|
||||||
|
let params: BaseAPICall = null
|
||||||
|
try {
|
||||||
|
params = JSON.parse(body)
|
||||||
|
} catch (err) {
|
||||||
|
errorResponse('Body must be in JSON format', res, startTimestamp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// process request
|
const ctx: RequestContext = {
|
||||||
Router(ctx, params).catch(e => {
|
req,
|
||||||
console.error(e)
|
res,
|
||||||
ctx.errorResponse(e.message)
|
startTimestamp,
|
||||||
|
errorResponse: (msg) => errorResponse(msg, res, startTimestamp),
|
||||||
|
successResponse: (msg, extendedProperties) => successResponse(msg, extendedProperties, res, startTimestamp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate params
|
||||||
|
if (!validateIncomingRequest(ctx, params)) { return }
|
||||||
|
|
||||||
|
// process request
|
||||||
|
Router(ctx, params).catch(e => {
|
||||||
|
console.error(e)
|
||||||
|
ctx.errorResponse(e.message)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
}).listen(serverPort, serverHost, () => {
|
||||||
|
log.info(`Listening on http://${serverHost}:${serverPort}`);
|
||||||
})
|
})
|
||||||
}).listen(serverPort, serverHost, () => {
|
)
|
||||||
log.info(`FlareSolverr ${version} listening on http://${serverHost}:${serverPort}`);
|
|
||||||
log.debug('Debug log enabled');
|
|
||||||
})
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user