Update Puppeter and other dependencies

This commit is contained in:
ngosang 2022-01-30 22:49:15 +01:00
parent bb7e82e6c4
commit fe6cfd75b8
7 changed files with 3590 additions and 4488 deletions

View File

@ -71,8 +71,7 @@ This is the recommended way for macOS users and for developers.
* Run `export PUPPETEER_PRODUCT=firefox` (Linux/macOS) or `set PUPPETEER_PRODUCT=firefox` (Windows). * Run `export PUPPETEER_PRODUCT=firefox` (Linux/macOS) or `set PUPPETEER_PRODUCT=firefox` (Windows).
* Run `npm install` command to install FlareSolverr dependencies. * Run `npm install` command to install FlareSolverr dependencies.
* Run `node node_modules/puppeteer/install.js` to install Firefox. * Run `node node_modules/puppeteer/install.js` to install Firefox.
* Run `npm run build` command to compile TypeScript code. * Run `npm start` command to compile TypeScript code and start FlareSolverr.
* Run `npm start` command to start FlareSolverr.
### Systemd service ### Systemd service

8037
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
"version": "2.1.0", "version": "2.1.0",
"description": "Proxy server to bypass Cloudflare protection.", "description": "Proxy server to bypass Cloudflare protection.",
"scripts": { "scripts": {
"start": "node ./dist/server.js", "start": "tsc && node ./dist/server.js",
"build": "tsc", "build": "tsc",
"dev": "nodemon -e ts --exec ts-node src/server.ts", "dev": "nodemon -e ts --exec ts-node src/server.ts",
"package": "node build-binaries.js", "package": "node build-binaries.js",
@ -23,7 +23,7 @@
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"console-log-level": "^1.4.1", "console-log-level": "^1.4.1",
"express": "^4.17.1", "express": "^4.17.1",
"puppeteer": "^3.3.0", "puppeteer": "^13.1.2",
"uuid": "^8.3.2" "uuid": "^8.3.2"
}, },
"devDependencies": { "devDependencies": {
@ -31,13 +31,13 @@
"@types/body-parser": "^1.19.1", "@types/body-parser": "^1.19.1",
"@types/express": "^4.17.13", "@types/express": "^4.17.13",
"@types/jest": "^27.0.2", "@types/jest": "^27.0.2",
"@types/node": "^14.17.27", "@types/node": "^16.11.7",
"@types/puppeteer": "^3.0.6", "@types/puppeteer": "^5.4.4",
"@types/supertest": "^2.0.11", "@types/supertest": "^2.0.11",
"@types/uuid": "^8.3.1", "@types/uuid": "^8.3.1",
"archiver": "^5.3.0", "archiver": "^5.3.0",
"nodemon": "^2.0.13", "nodemon": "^2.0.13",
"pkg": "^5.3.3", "pkg": "^4.4.9",
"supertest": "^6.1.6", "supertest": "^6.1.6",
"ts-jest": "^27.0.7", "ts-jest": "^27.0.7",
"ts-node": "^10.3.0", "ts-node": "^10.3.0",

View File

@ -1,6 +1,5 @@
// todo: avoid puppeter objects
import {SetCookie, Headers, HttpMethod} from 'puppeteer'
import {Request, Response} from 'express'; import {Request, Response} from 'express';
import {Protocol} from "devtools-protocol";
import log from '../services/log' import log from '../services/log'
import {browserRequest, ChallengeResolutionResultT, ChallengeResolutionT} from "../services/solver"; import {browserRequest, ChallengeResolutionResultT, ChallengeResolutionT} from "../services/solver";
@ -20,11 +19,11 @@ export interface Proxy {
export interface V1RequestBase { export interface V1RequestBase {
cmd: string cmd: string
cookies?: SetCookie[], cookies?: Protocol.Network.CookieParam[],
maxTimeout?: number maxTimeout?: number
proxy?: Proxy proxy?: Proxy
session: string session: string
headers?: Headers // deprecated v2, not used headers?: Record<string, string> // deprecated v2, not used
userAgent?: string // deprecated v2, not used userAgent?: string // deprecated v2, not used
} }
@ -33,7 +32,7 @@ interface V1RequestSession extends V1RequestBase {
export interface V1Request extends V1RequestBase { export interface V1Request extends V1RequestBase {
url: string url: string
method?: HttpMethod method?: string
postData?: string postData?: string
returnOnlyCookies?: boolean returnOnlyCookies?: boolean
download?: boolean // deprecated v2, not used download?: boolean // deprecated v2, not used

View File

@ -1,4 +1,4 @@
import {Page, Response} from 'puppeteer' import {Page, HTTPResponse} from 'puppeteer'
import log from "../services/log"; import log from "../services/log";
@ -14,7 +14,7 @@ const CHALLENGE_SELECTORS = [
]; ];
const CAPTCHA_SELECTORS = ['input[name="cf_captcha_kind"]']; const CAPTCHA_SELECTORS = ['input[name="cf_captcha_kind"]'];
export default async function resolveChallenge(url: string, page: Page, response: Response): Promise<Response> { export default async function resolveChallenge(url: string, page: Page, response: HTTPResponse): Promise<HTTPResponse> {
// look for challenge and return fast if not detected // look for challenge and return fast if not detected
let cfDetected = response.headers().server && response.headers().server.startsWith('cloudflare'); let cfDetected = response.headers().server && response.headers().server.startsWith('cloudflare');

View File

@ -1,6 +1,7 @@
import {v1 as UUIDv1} from 'uuid' import {v1 as UUIDv1} from 'uuid'
import * as path from 'path' import * as path from 'path'
import {SetCookie, Browser} from 'puppeteer' import {Browser} from 'puppeteer'
import {Protocol} from "devtools-protocol";
import log from './log' import log from './log'
import {Proxy} from "../controllers/v1"; import {Proxy} from "../controllers/v1";
@ -20,7 +21,7 @@ interface SessionsCache {
export interface SessionCreateOptions { export interface SessionCreateOptions {
oneTimeSession: boolean oneTimeSession: boolean
cookies?: SetCookie[], cookies?: Protocol.Network.CookieParam[],
maxTimeout?: number maxTimeout?: number
proxy?: Proxy proxy?: Proxy
} }

View File

@ -1,4 +1,4 @@
import {Response, Headers, Page} from 'puppeteer' import {Page, HTTPResponse} from 'puppeteer'
const Timeout = require('await-timeout'); const Timeout = require('await-timeout');
import log from './log' import log from './log'
@ -11,7 +11,7 @@ const sessions = require('./sessions')
export interface ChallengeResolutionResultT { export interface ChallengeResolutionResultT {
url: string url: string
status: number, status: number,
headers?: Headers, headers?: Record<string, string>,
response: string, response: string,
cookies: object[] cookies: object[]
userAgent: string userAgent: string
@ -64,7 +64,7 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
// go to the page // go to the page
log.debug(`Navigating to... ${params.url}`) log.debug(`Navigating to... ${params.url}`)
let response: Response = await gotoPage(params, page); let response: HTTPResponse = await gotoPage(params, page);
// set cookies // set cookies
if (params.cookies) { if (params.cookies) {
@ -128,8 +128,8 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
} }
} }
async function gotoPage(params: V1Request, page: Page): Promise<Response> { async function gotoPage(params: V1Request, page: Page): Promise<HTTPResponse> {
let response: Response; let response: HTTPResponse;
if (params.method != 'POST') { if (params.method != 'POST') {
response = await page.goto(params.url, {waitUntil: 'domcontentloaded'}); response = await page.goto(params.url, {waitUntil: 'domcontentloaded'});