From 04a1a4c0a4179dcc750402aa7a27bfc009fcd812 Mon Sep 17 00:00:00 2001 From: LightZirconite Date: Mon, 10 Nov 2025 19:57:43 +0100 Subject: [PATCH] Clean up --- package.json | 2 +- src/browser/Browser.ts | 63 +------------------------------ src/config.jsonc | 4 +- src/interface/Config.ts | 1 - src/util/ErrorReportingWebhook.ts | 6 ++- 5 files changed, 9 insertions(+), 67 deletions(-) diff --git a/package.json b/package.json index 3d15372..7619df7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "microsoft-rewards-bot", - "version": "2.56.2", + "version": "2.56.4", "description": "Automate Microsoft Rewards points collection", "private": true, "main": "index.js", diff --git a/src/browser/Browser.ts b/src/browser/Browser.ts index 97f5b54..ce7a816 100644 --- a/src/browser/Browser.ts +++ b/src/browser/Browser.ts @@ -58,14 +58,11 @@ class Browser { '--disk-cache-size=1' ] : [] - // IMPROVED: Add channel option to stabilize rebrowser-playwright browser = await playwright.chromium.launch({ headless, ...(proxyConfig && { proxy: proxyConfig }), args: [...baseArgs, ...linuxStabilityArgs], - timeout: isLinux ? 90000 : 60000, - // Use chromium channel for better stability with rebrowser-playwright - channel: undefined as unknown as undefined + timeout: isLinux ? 90000 : 60000 }) } catch (e: unknown) { const msg = (e instanceof Error ? e.message : String(e)) @@ -83,63 +80,7 @@ class Browser { const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, saveFingerprint) const fingerprint = sessionData.fingerprint ? sessionData.fingerprint : await this.generateFingerprint() - - // Check if fingerprint injection is enabled (can be disabled to avoid session closed errors) - const enableInjection = this.bot.config.fingerprinting?.enableInjection !== false - - // FIXED: Add error handling and retry logic for fingerprint injection - let context: BrowserContext | undefined - - if (!enableInjection) { - // Fallback: use plain context without fingerprint injection - this.bot.log(this.bot.isMobile, 'BROWSER', 'Fingerprint injection disabled, using plain context', 'warn') - context = await browser.newContext({ - ignoreHTTPSErrors: true, - bypassCSP: true, - userAgent: fingerprint.fingerprint.navigator.userAgent, - viewport: this.bot.isMobile - ? { width: 390, height: 844 } - : { width: 1280, height: 800 } - }) as unknown as BrowserContext - } else { - // Use fingerprint injection with retry logic - let retries = 3 - while (retries > 0) { - try { - context = await newInjectedContext(browser as unknown as import('playwright').Browser, { - fingerprint: fingerprint, - // Add context options to prevent premature closure - newContextOptions: { - ignoreHTTPSErrors: true, - bypassCSP: true - } - }) - break - } catch (e) { - retries-- - if (retries === 0) { - this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed after retries: ${e instanceof Error ? e.message : String(e)}`, 'error') - this.bot.log(this.bot.isMobile, 'BROWSER', 'Falling back to plain context without fingerprint injection', 'warn') - // Final fallback: use plain context - context = await browser.newContext({ - ignoreHTTPSErrors: true, - bypassCSP: true, - userAgent: fingerprint.fingerprint.navigator.userAgent, - viewport: this.bot.isMobile - ? { width: 390, height: 844 } - : { width: 1280, height: 800 } - }) as unknown as BrowserContext - break - } - this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed, retrying... (${retries} left)`, 'warn') - await new Promise(resolve => setTimeout(resolve, 1000)) - } - } - } - - if (!context) { - throw new Error('Failed to create browser context') - } + const context = await newInjectedContext(browser as unknown as import('playwright').Browser, { fingerprint: fingerprint }) const globalTimeout = this.bot.config.browser?.globalTimeout ?? 30000 context.setDefaultTimeout(typeof globalTimeout === 'number' ? globalTimeout : this.bot.utils.stringToMs(globalTimeout)) diff --git a/src/config.jsonc b/src/config.jsonc index c0429cf..29acf3c 100644 --- a/src/config.jsonc +++ b/src/config.jsonc @@ -96,9 +96,7 @@ "saveFingerprint": { "mobile": true, "desktop": true - }, - // Set to false if you encounter "session closed" errors with fingerprint injection - "enableInjection": true + } }, // === PROXY === diff --git a/src/interface/Config.ts b/src/interface/Config.ts index c943ef4..7723971 100644 --- a/src/interface/Config.ts +++ b/src/interface/Config.ts @@ -45,7 +45,6 @@ export interface ConfigBrowser { export interface ConfigFingerprinting { saveFingerprint?: ConfigSaveFingerprint; - enableInjection?: boolean; // Enable fingerprint injection (default: true, set to false if session closed errors occur) } export interface ConfigSearchSettings { diff --git a/src/util/ErrorReportingWebhook.ts b/src/util/ErrorReportingWebhook.ts index 2b4349f..c0b2703 100644 --- a/src/util/ErrorReportingWebhook.ts +++ b/src/util/ErrorReportingWebhook.ts @@ -53,7 +53,11 @@ function shouldReportError(errorMessage: string): boolean { /invalid.*configuration/i, /missing.*required.*field/i, /port.*already.*in.*use/i, - /eaddrinuse/i + /eaddrinuse/i, + // Rebrowser-playwright expected errors (benign, non-fatal) + /rebrowser-patches.*cannot get world/i, + /session closed.*rebrowser/i, + /addScriptToEvaluateOnNewDocument.*session closed/i ] // Don't report user configuration errors