From bfb56d1c39981b0b53cf9485027d269f8aa76f9c Mon Sep 17 00:00:00 2001 From: wulkan <42183076+Pudochu@users.noreply.github.com> Date: Tue, 3 Oct 2023 23:03:37 +0300 Subject: [PATCH 1/2] Update proxy.js Error Fix: useProxyPer[target.constructor.name]: name will be mangled in minified code --- src/core/proxy.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/proxy.js b/src/core/proxy.js index 7a67584..f09f812 100644 --- a/src/core/proxy.js +++ b/src/core/proxy.js @@ -76,6 +76,9 @@ const useProxyPer = { // Call this if page object passed CDPPage: async (page, proxy) => { + if (!page.eventsMap) { + page.eventsMap = new Map(); + } await page.setRequestInterception(true); const listener = "$ppp_requestListener"; removeRequestListener(page, listener); @@ -87,9 +90,9 @@ const useProxyPer = { } } -// Main function const useProxy = async (target, data) => { + if(target.constructor.name == "CdpPage") return useProxyPer.CDPPage(target, data); useProxyPer[target.constructor.name](target, data); }; -module.exports = useProxy; \ No newline at end of file +module.exports = useProxy; From 30bfe18b08d4c96ef62983e8a61c2e731b815bc1 Mon Sep 17 00:00:00 2001 From: wulkan <42183076+Pudochu@users.noreply.github.com> Date: Tue, 21 May 2024 19:20:30 +0300 Subject: [PATCH 2/2] FIXING EVERYTHING. (Update Proxy.js) All bugs have been fixed. --- src/core/proxy.js | 73 +++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/src/core/proxy.js b/src/core/proxy.js index f09f812..6b39c35 100644 --- a/src/core/proxy.js +++ b/src/core/proxy.js @@ -1,16 +1,15 @@ const got = require("got"); const CookieHandler = require("../lib/cookies"); -const {setHeaders, setAgent} = require("../lib/options"); +const { setHeaders, setAgent } = require("../lib/options"); const type = require("../util/types"); // Responsible for applying proxy const requestHandler = async (request, proxy, overrides = {}) => { - // Reject non http(s) URI schemes if (!request.url().startsWith("http") && !request.url().startsWith("https")) { - request.continue(); return; + request.continue(); + return; } const cookieHandler = new CookieHandler(request); - // Request options for GOT accounting for overrides const options = { cookieJar: await cookieHandler.getCookies(), method: overrides.method || request.method(), @@ -21,12 +20,10 @@ const requestHandler = async (request, proxy, overrides = {}) => { maxRedirects: 15, throwHttpErrors: false, ignoreInvalidCookies: true, - followRedirect: false + followRedirect: false, }; try { const response = await got(overrides.url || request.url(), options); - // Set cookies manually because "set-cookie" doesn't set all cookies (?) - // Perhaps related to https://github.com/puppeteer/puppeteer/issues/5364 const setCookieHeader = response.headers["set-cookie"]; if (setCookieHeader) { await cookieHandler.setCookies(setCookieHeader); @@ -35,7 +32,7 @@ const requestHandler = async (request, proxy, overrides = {}) => { await request.respond({ status: response.statusCode, headers: response.headers, - body: response.body + body: response.body, }); } catch (error) { await request.abort(); @@ -44,55 +41,55 @@ const requestHandler = async (request, proxy, overrides = {}) => { // For reassigning proxy of page const removeRequestListener = (page, listenerName) => { - const eventName = "request"; - const listeners = page.eventsMap.get(eventName); - if (listeners) { - const i = listeners.findIndex((listener) => { - return listener.name === listenerName - }); - listeners.splice(i, 1); - if (!listeners.length) { - page.eventsMap.delete(eventName); - } - } + page.removeListener("request", page[listenerName]); }; +// Define listeners directly on the page object const useProxyPer = { - // Call this if request object passed HTTPRequest: async (request, data) => { let proxy, overrides; - // Separate proxy and overrides if (type(data) === "object") { if (Object.keys(data).length !== 0) { proxy = data.proxy; delete data.proxy; overrides = data; } - } else {proxy = data} - // Skip request if proxy omitted - if (proxy) {await requestHandler(request, proxy, overrides)} - else {request.continue(overrides)} + } else { + proxy = data; + } + if (proxy) { + await requestHandler(request, proxy, overrides); + } else { + request.continue(overrides); + } }, - // Call this if page object passed - CDPPage: async (page, proxy) => { - if (!page.eventsMap) { - page.eventsMap = new Map(); - } + CdpPage: async (page, proxy) => { await page.setRequestInterception(true); const listener = "$ppp_requestListener"; removeRequestListener(page, listener); - const f = {[listener]: async (request) => { + page[listener] = async request => { await requestHandler(request, proxy); - }}; - if (proxy) {page.on("request", f[listener])} - else {await page.setRequestInterception(false)} - } -} + }; + if (proxy) { + page.on("request", page[listener]); + } else { + await page.setRequestInterception(false); + } + }, +}; +// Main function const useProxy = async (target, data) => { - if(target.constructor.name == "CdpPage") return useProxyPer.CDPPage(target, data); - useProxyPer[target.constructor.name](target, data); + try { + const targetType = target.constructor.name; + if (!useProxyPer[targetType]) { + throw new TypeError(`No proxy handler found for target type: ${targetType}`); + } + await useProxyPer[targetType](target, data); + } catch (error) { + console.error("Unhandled Rejection at:", error); + } }; module.exports = useProxy;