From aeaffeb7ca325b68fa985a73ea2f300fe25d0dcf Mon Sep 17 00:00:00 2001 From: LightZirconite Date: Mon, 10 Nov 2025 19:51:34 +0100 Subject: [PATCH] fix: Revert version to 2.56.2 in package.json; enhance fingerprint injection error handling and configuration options --- package.json | 2 +- src/browser/Browser.ts | 64 +++++++++++++++++++++++++++++------------ src/config.jsonc | 4 ++- src/interface/Config.ts | 1 + 4 files changed, 51 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 3260571..3d15372 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "microsoft-rewards-bot", - "version": "2.56.3", + "version": "2.56.2", "description": "Automate Microsoft Rewards points collection", "private": true, "main": "index.js", diff --git a/src/browser/Browser.ts b/src/browser/Browser.ts index 455a510..97f5b54 100644 --- a/src/browser/Browser.ts +++ b/src/browser/Browser.ts @@ -84,28 +84,56 @@ 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 - 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 + + 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 } - }) - 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') - throw e + this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed, retrying... (${retries} left)`, 'warn') + await new Promise(resolve => setTimeout(resolve, 1000)) } - this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed, retrying... (${retries} left)`, 'warn') - await new Promise(resolve => setTimeout(resolve, 1000)) } } diff --git a/src/config.jsonc b/src/config.jsonc index 29acf3c..c0429cf 100644 --- a/src/config.jsonc +++ b/src/config.jsonc @@ -96,7 +96,9 @@ "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 7723971..c943ef4 100644 --- a/src/interface/Config.ts +++ b/src/interface/Config.ts @@ -45,6 +45,7 @@ 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 {