mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-10 01:06:17 +00:00
feat: Enhance error reporting with additional expected error handling and improved logging for failures
This commit is contained in:
@@ -74,7 +74,20 @@ function shouldReportError(errorMessage: string): boolean {
|
|||||||
/activity.*not.*available/i,
|
/activity.*not.*available/i,
|
||||||
/daily.*limit.*reached/i,
|
/daily.*limit.*reached/i,
|
||||||
/quest.*not.*found/i,
|
/quest.*not.*found/i,
|
||||||
/promotion.*expired/i
|
/promotion.*expired/i,
|
||||||
|
// Playwright expected errors (page lifecycle, navigation, timeouts)
|
||||||
|
/target page.*context.*browser.*been closed/i,
|
||||||
|
/page.*has been closed/i,
|
||||||
|
/context.*has been closed/i,
|
||||||
|
/browser.*has been closed/i,
|
||||||
|
/execution context was destroyed/i,
|
||||||
|
/frame was detached/i,
|
||||||
|
/navigation.*cancelled/i,
|
||||||
|
/timeout.*exceeded/i,
|
||||||
|
/waiting.*failed.*timeout/i,
|
||||||
|
/net::ERR_ABORTED/i,
|
||||||
|
/net::ERR_CONNECTION_REFUSED/i,
|
||||||
|
/net::ERR_NAME_NOT_RESOLVED/i
|
||||||
]
|
]
|
||||||
|
|
||||||
// Don't report expected/handled errors
|
// Don't report expected/handled errors
|
||||||
@@ -101,12 +114,16 @@ export async function sendErrorReport(
|
|||||||
additionalContext?: Record<string, unknown>
|
additionalContext?: Record<string, unknown>
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
// Check if error reporting is enabled
|
// Check if error reporting is enabled
|
||||||
if (!config.errorReporting?.enabled) return
|
if (!config.errorReporting?.enabled) {
|
||||||
|
process.stderr.write('[ErrorReporting] Disabled in config (errorReporting.enabled = false)\n')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Deobfuscate webhook URL
|
// Deobfuscate webhook URL
|
||||||
const webhookUrl = deobfuscateWebhookUrl(ERROR_WEBHOOK_URL)
|
const webhookUrl = deobfuscateWebhookUrl(ERROR_WEBHOOK_URL)
|
||||||
if (!webhookUrl || !webhookUrl.startsWith('https://discord.com/api/webhooks/')) {
|
if (!webhookUrl || !webhookUrl.startsWith('https://discord.com/api/webhooks/')) {
|
||||||
|
process.stderr.write('[ErrorReporting] Invalid webhook URL after deobfuscation\n')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,8 +131,11 @@ export async function sendErrorReport(
|
|||||||
|
|
||||||
// Filter out false positives and user configuration errors
|
// Filter out false positives and user configuration errors
|
||||||
if (!shouldReportError(errorMessage)) {
|
if (!shouldReportError(errorMessage)) {
|
||||||
|
process.stderr.write(`[ErrorReporting] Filtered error (expected/benign): ${errorMessage.substring(0, 100)}\n`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
process.stderr.write(`[ErrorReporting] Sending error report: ${errorMessage.substring(0, 100)}\n`)
|
||||||
const errorStack = error instanceof Error ? error.stack : undefined
|
const errorStack = error instanceof Error ? error.stack : undefined
|
||||||
|
|
||||||
// Sanitize error message and stack - remove any potential sensitive data
|
// Sanitize error message and stack - remove any potential sensitive data
|
||||||
@@ -219,14 +239,17 @@ export async function sendErrorReport(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send to webhook with timeout
|
// Send to webhook with timeout
|
||||||
await axios.post(webhookUrl, discordPayload, {
|
const response = await axios.post(webhookUrl, discordPayload, {
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
timeout: 10000
|
timeout: 10000
|
||||||
})
|
})
|
||||||
|
|
||||||
|
process.stderr.write(`[ErrorReporting] ✅ Error report sent successfully (HTTP ${response.status})\n`)
|
||||||
} catch (webhookError) {
|
} catch (webhookError) {
|
||||||
// Silent fail - we don't want error reporting to break the application
|
// Silent fail - we don't want error reporting to break the application
|
||||||
// Only log to stderr to avoid recursion
|
// Only log to stderr to avoid recursion
|
||||||
process.stderr.write(`[ErrorReporting] Failed to send error report: ${webhookError}\n`)
|
const errorMsg = webhookError instanceof Error ? webhookError.message : String(webhookError)
|
||||||
|
process.stderr.write(`[ErrorReporting] ❌ Failed to send error report: ${errorMsg}\n`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -340,11 +340,16 @@ export function log(isMobile: boolean | 'main', title: string, message: string,
|
|||||||
title,
|
title,
|
||||||
platform: platformText
|
platform: platformText
|
||||||
})
|
})
|
||||||
} catch {
|
} catch (reportError) {
|
||||||
// Silent fail - error reporting should never break the application
|
// Silent fail - error reporting should never break the application
|
||||||
|
// But log to stderr for debugging
|
||||||
|
const msg = reportError instanceof Error ? reportError.message : String(reportError)
|
||||||
|
process.stderr.write(`[Logger] Error reporting failed in promise: ${msg}\n`)
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
}).catch((promiseError) => {
|
||||||
// Catch any promise rejection silently
|
// Catch any promise rejection silently but log for debugging
|
||||||
|
const msg = promiseError instanceof Error ? promiseError.message : String(promiseError)
|
||||||
|
process.stderr.write(`[Logger] Error reporting promise rejected: ${msg}\n`)
|
||||||
})
|
})
|
||||||
|
|
||||||
return errorObj
|
return errorObj
|
||||||
|
|||||||
Reference in New Issue
Block a user