mirror of
https://github.com/TheNetsky/Microsoft-Rewards-Script.git
synced 2026-01-11 10:56:17 +00:00
* chore: Update TypeScript configuration and add @types/node as a dev dependency * feat: Add unified cross-platform setup script for easier configuration and installation * docs: Revise README for improved setup instructions and clarity * feat: Enhance setup scripts with improved prerequisite checks and user prompts * feat: Refactor setup scripts and enhance browser handling with automatic Playwright installation
96 lines
3.8 KiB
TypeScript
96 lines
3.8 KiB
TypeScript
import playwright, { BrowserContext } from 'rebrowser-playwright'
|
|
|
|
import { newInjectedContext } from 'fingerprint-injector'
|
|
import { FingerprintGenerator } from 'fingerprint-generator'
|
|
|
|
import { MicrosoftRewardsBot } from '../index'
|
|
import { loadSessionData, saveFingerprintData } from '../util/Load'
|
|
import { updateFingerprintUserAgent } from '../util/UserAgent'
|
|
|
|
import { AccountProxy } from '../interface/Account'
|
|
|
|
/* Test Stuff
|
|
https://abrahamjuliot.github.io/creepjs/
|
|
https://botcheck.luminati.io/
|
|
https://fv.pro/
|
|
https://pixelscan.net/
|
|
https://www.browserscan.net/
|
|
*/
|
|
|
|
class Browser {
|
|
private bot: MicrosoftRewardsBot
|
|
|
|
constructor(bot: MicrosoftRewardsBot) {
|
|
this.bot = bot
|
|
}
|
|
|
|
async createBrowser(proxy: AccountProxy, email: string): Promise<BrowserContext> {
|
|
// Optional automatic browser installation (set AUTO_INSTALL_BROWSERS=1)
|
|
if (process.env.AUTO_INSTALL_BROWSERS === '1') {
|
|
try {
|
|
// Dynamically import child_process to avoid overhead otherwise
|
|
const { execSync } = await import('child_process') as any
|
|
execSync('npx playwright install chromium', { stdio: 'ignore' })
|
|
} catch { /* silent */ }
|
|
}
|
|
|
|
let browser: any
|
|
try {
|
|
browser = await playwright.chromium.launch({
|
|
//channel: 'msedge', // Uses Edge instead of chrome
|
|
headless: this.bot.config.headless,
|
|
...(proxy.url && { proxy: { username: proxy.username, password: proxy.password, server: `${proxy.url}:${proxy.port}` } }),
|
|
args: [
|
|
'--no-sandbox',
|
|
'--mute-audio',
|
|
'--disable-setuid-sandbox',
|
|
'--ignore-certificate-errors',
|
|
'--ignore-certificate-errors-spki-list',
|
|
'--ignore-ssl-errors'
|
|
]
|
|
})
|
|
} catch (e: any) {
|
|
const msg = (e instanceof Error ? e.message : String(e))
|
|
// Common missing browser executable guidance
|
|
if (/Executable doesn't exist/i.test(msg)) {
|
|
this.bot.log(this.bot.isMobile, 'BROWSER', 'Chromium not installed for Playwright. Run: "npx playwright install chromium" (or set AUTO_INSTALL_BROWSERS=1 to auto attempt).', 'error')
|
|
} else {
|
|
this.bot.log(this.bot.isMobile, 'BROWSER', 'Failed to launch browser: ' + msg, 'error')
|
|
}
|
|
throw e
|
|
}
|
|
|
|
const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, this.bot.config.saveFingerprint)
|
|
|
|
const fingerprint = sessionData.fingerprint ? sessionData.fingerprint : await this.generateFingerprint()
|
|
|
|
const context = await newInjectedContext(browser as any, { fingerprint: fingerprint })
|
|
|
|
// Set timeout to preferred amount
|
|
context.setDefaultTimeout(this.bot.utils.stringToMs(this.bot.config?.globalTimeout ?? 30000))
|
|
|
|
await context.addCookies(sessionData.cookies)
|
|
|
|
if (this.bot.config.saveFingerprint) {
|
|
await saveFingerprintData(this.bot.config.sessionPath, email, this.bot.isMobile, fingerprint)
|
|
}
|
|
|
|
this.bot.log(this.bot.isMobile, 'BROWSER', `Created browser with User-Agent: "${fingerprint.fingerprint.navigator.userAgent}"`)
|
|
|
|
return context as BrowserContext
|
|
}
|
|
|
|
async generateFingerprint() {
|
|
const fingerPrintData = new FingerprintGenerator().getFingerprint({
|
|
devices: this.bot.isMobile ? ['mobile'] : ['desktop'],
|
|
operatingSystems: this.bot.isMobile ? ['android'] : ['windows'],
|
|
browsers: [{ name: 'edge' }]
|
|
})
|
|
|
|
const updatedFingerPrintData = await updateFingerprintUserAgent(fingerPrintData, this.bot.isMobile)
|
|
|
|
return updatedFingerPrintData
|
|
}
|
|
}
|
|
|
|
export default Browser |