feat: add ghostery adblocker & update deps

Woah, two years :)
This commit is contained in:
2026-02-14 14:36:20 +07:00
parent bb9a31cc78
commit b1c4ed915e
4 changed files with 166 additions and 158 deletions

BIN
bun.lockb

Binary file not shown.

View File

@@ -11,19 +11,20 @@
"build": "swc ./src -d dist --strip-leading-paths" "build": "swc ./src -d dist --strip-leading-paths"
}, },
"devDependencies": { "devDependencies": {
"@swc-node/register": "^1.10.10", "@swc-node/register": "^1.11.1",
"@swc/cli": "^0.6.0", "@swc/cli": "^0.6.0",
"@swc/core": "^1.11.20", "@swc/core": "^1.15.11",
"@types/bun": "latest" "@types/bun": "latest"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "^5.0.0" "typescript": "^5.8.3"
}, },
"dependencies": { "dependencies": {
"patchright": "^1.51.3", "@ghostery/adblocker-playwright": "^2.14.1",
"pino": "^9.6.0", "patchright": "^1.57.0",
"pino-pretty": "^13.0.0", "pino": "^9.14.0",
"playwright": "^1.51.1" "pino-pretty": "^13.1.3",
"playwright": "^1.58.2"
}, },
"trustedDependencies": [ "trustedDependencies": [
"@swc/core" "@swc/core"

View File

@@ -1,4 +1,5 @@
import { chromium, type Browser, type LaunchOptions } from "patchright"; import { chromium, type Browser, type LaunchOptions } from "patchright";
import { PlaywrightBlocker } from '@ghostery/adblocker-playwright';
import fs from 'node:fs'; import fs from 'node:fs';
import * as reflect4 from "./proxy/reflect4.js"; import * as reflect4 from "./proxy/reflect4.js";
import logger from "./logger.js"; import logger from "./logger.js";
@@ -58,7 +59,10 @@ switch (config.playwright.browser) {
break; break;
} }
logger.info("Browser launched successfully, spawning proxies"); logger.info("Browser launched successfully, enabling adblocker...");
let blocker = await PlaywrightBlocker.fromPrebuiltAdsAndTracking(fetch);
logger.info("Spawning proxies...");
if (config.proxy.mode === "reflect4") { if (config.proxy.mode === "reflect4") {
const context = await browser.newContext(); const context = await browser.newContext();
const tasks: Array<Promise<void>> = []; const tasks: Array<Promise<void>> = [];
@@ -69,7 +73,7 @@ if (config.proxy.mode === "reflect4") {
const spawnId = `${i + 1}`; const spawnId = `${i + 1}`;
while (true) { while (true) {
try { try {
await reflect4.spawn(context, config.playwright.url, config.playwright.change_viewport, spawnId); await reflect4.spawn(context, blocker, config.playwright.url, config.playwright.change_viewport, spawnId);
} catch (e) { } catch (e) {
logger.error(`[${spawnId}] Error while running: ${e}`); logger.error(`[${spawnId}] Error while running: ${e}`);
} }

View File

@@ -2,11 +2,14 @@ import { devices, type BrowserContext, type Locator } from "patchright";
import logger from "../logger.js"; import logger from "../logger.js";
import * as twitch from "../website/twitch.js"; import * as twitch from "../website/twitch.js";
import * as constants from "../constants.js"; import * as constants from "../constants.js";
import type { PlaywrightBlocker } from "@ghostery/adblocker-playwright";
async function spawn(context: BrowserContext, targetUrl: string, changeViewport: boolean = false, spawnId: string = "unknown") { async function spawn(context: BrowserContext, blocker: PlaywrightBlocker, targetUrl: string, changeViewport: boolean = false, spawnId: string = "unknown") {
const server = constants.REFLECT4_SERVERS[Math.floor(Math.random() * constants.REFLECT4_SERVERS.length)]; const server = constants.REFLECT4_SERVERS[Math.floor(Math.random() * constants.REFLECT4_SERVERS.length)];
logger.debug(`[${spawnId}] Using reflect4 server: ${server}`); logger.debug(`[${spawnId}] Using reflect4 server: ${server}`);
const page = await context.newPage(); const page = await context.newPage();
logger.debug(`[${spawnId}] New page created, enabling adblocker...`);
await blocker.enableBlockingInPage(page as any); // As any because technically patchright Page != playwright Page :D
if (changeViewport) { if (changeViewport) {
logger.debug(`[${spawnId}] Changing viewport size...`); logger.debug(`[${spawnId}] Changing viewport size...`);
const deviceName = Object.keys(devices)[Math.floor(Math.random() * Object.keys(devices).length)]; const deviceName = Object.keys(devices)[Math.floor(Math.random() * Object.keys(devices).length)];