fix: Revert version to 2.56.2 in package.json; enhance fingerprint injection error handling and configuration options

This commit is contained in:
2025-11-10 19:51:34 +01:00
parent 103312e0d2
commit aeaffeb7ca
4 changed files with 51 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "microsoft-rewards-bot", "name": "microsoft-rewards-bot",
"version": "2.56.3", "version": "2.56.2",
"description": "Automate Microsoft Rewards points collection", "description": "Automate Microsoft Rewards points collection",
"private": true, "private": true,
"main": "index.js", "main": "index.js",

View File

@@ -84,8 +84,25 @@ class Browser {
const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, saveFingerprint) const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, saveFingerprint)
const fingerprint = sessionData.fingerprint ? sessionData.fingerprint : await this.generateFingerprint() 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 // FIXED: Add error handling and retry logic for fingerprint injection
let context: BrowserContext | undefined 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 let retries = 3
while (retries > 0) { while (retries > 0) {
try { try {
@@ -102,12 +119,23 @@ class Browser {
retries-- retries--
if (retries === 0) { 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', `Fingerprint injection failed after retries: ${e instanceof Error ? e.message : String(e)}`, 'error')
throw e 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') this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed, retrying... (${retries} left)`, 'warn')
await new Promise(resolve => setTimeout(resolve, 1000)) await new Promise(resolve => setTimeout(resolve, 1000))
} }
} }
}
if (!context) { if (!context) {
throw new Error('Failed to create browser context') throw new Error('Failed to create browser context')

View File

@@ -96,7 +96,9 @@
"saveFingerprint": { "saveFingerprint": {
"mobile": true, "mobile": true,
"desktop": true "desktop": true
} },
// Set to false if you encounter "session closed" errors with fingerprint injection
"enableInjection": true
}, },
// === PROXY === // === PROXY ===

View File

@@ -45,6 +45,7 @@ export interface ConfigBrowser {
export interface ConfigFingerprinting { export interface ConfigFingerprinting {
saveFingerprint?: ConfigSaveFingerprint; saveFingerprint?: ConfigSaveFingerprint;
enableInjection?: boolean; // Enable fingerprint injection (default: true, set to false if session closed errors occur)
} }
export interface ConfigSearchSettings { export interface ConfigSearchSettings {