From 64048e35d78af87aaae056fbb063bf3d26ce257c Mon Sep 17 00:00:00 2001 From: TheNetsky <56271887+TheNetsky@users.noreply.github.com> Date: Fri, 1 Mar 2024 12:19:48 +0100 Subject: [PATCH] 1.4.5 - Fix login not working - Sessions are now saved after logging in - Check if promotions, and searches are available before counting total point amount --- package.json | 8 ++++---- src/browser/BrowserFunc.ts | 18 +++++++++++------- src/functions/Login.ts | 8 +++++--- src/index.ts | 6 ++---- src/util/Load.ts | 6 ++++-- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 843c6ad..72e2d23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "microsoft-rewards-script", - "version": "1.4.4", + "version": "1.4.5", "description": "Automatically do tasks for Microsoft Rewards but in TS!", "main": "index.js", "engines": { @@ -34,9 +34,9 @@ "dependencies": { "axios": "^1.6.7", "cheerio": "^1.0.0-rc.12", - "fingerprint-generator": "^2.1.48", - "fingerprint-injector": "^2.1.48", - "playwright": "^1.41.2", + "fingerprint-generator": "^2.1.49", + "fingerprint-injector": "^2.1.49", + "playwright": "^1.42.0", "ts-node": "^10.9.2" } } diff --git a/src/browser/BrowserFunc.ts b/src/browser/BrowserFunc.ts index df797e0..6307631 100644 --- a/src/browser/BrowserFunc.ts +++ b/src/browser/BrowserFunc.ts @@ -142,7 +142,9 @@ export default class BrowserFunc { let totalEarnablePoints = 0 // Desktop Search Points - data.userStatus.counters.pcSearch.forEach(x => totalEarnablePoints += (x.pointProgressMax - x.pointProgress)) + if (data.userStatus.counters.pcSearch?.length) { + data.userStatus.counters.pcSearch.forEach(x => totalEarnablePoints += (x.pointProgressMax - x.pointProgress)) + } // Mobile Search Points if (data.userStatus.counters.mobileSearch?.length) { @@ -153,12 +155,14 @@ export default class BrowserFunc { data.dailySetPromotions[this.bot.utils.getFormattedDate()]?.forEach(x => totalEarnablePoints += (x.pointProgressMax - x.pointProgress)) // More Promotions - data.morePromotions.forEach(x => { - // Only count points from supported activities - if (['quiz', 'urlreward'].includes(x.activityType)) { - totalEarnablePoints += (x.pointProgressMax - x.pointProgress) - } - }) + if (data.morePromotions?.length) { + data.morePromotions.forEach(x => { + // Only count points from supported activities + if (['quiz', 'urlreward'].includes(x.activityType)) { + totalEarnablePoints += (x.pointProgressMax - x.pointProgress) + } + }) + } return totalEarnablePoints } catch (error) { diff --git a/src/functions/Login.ts b/src/functions/Login.ts index 89a42e9..6dea0a6 100644 --- a/src/functions/Login.ts +++ b/src/functions/Login.ts @@ -2,6 +2,7 @@ import { Page } from 'playwright' import readline from 'readline' import { MicrosoftRewardsBot } from '../index' +import { saveSessionData } from '../util/Load' const rl = readline.createInterface({ input: process.stdin, @@ -26,14 +27,12 @@ export class Login { if (!isLoggedIn) { // Check if account is locked - const isLocked = await page.waitForSelector('.serviceAbusePageContainer', { state: 'visible', timeout: 10_000 }).then(() => true).catch(() => false) + const isLocked = await page.waitForSelector('.serviceAbusePageContainer', { state: 'visible', timeout: 1000 }).then(() => true).catch(() => false) if (isLocked) { this.bot.log('LOGIN', 'This account has been locked!', 'error') throw new Error('Account has been locked!') } - await page.waitForSelector('#loginHeader', { state: 'visible', timeout: 10_000 }) - await this.execLogin(page, email, password) this.bot.log('LOGIN', 'Logged into Microsoft successfully') } else { @@ -43,6 +42,9 @@ export class Login { // Check if logged in to bing await this.checkBingLogin(page) + // Save session + await saveSessionData(this.bot.config.sessionPath, page.context(), email, this.bot.isMobile) + // We're done logging in this.bot.log('LOGIN', 'Logged in successfully') diff --git a/src/index.ts b/src/index.ts index 79be2af..8a7aed3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -178,8 +178,7 @@ export class MicrosoftRewardsBot { } // Save cookies - const cookies = await browser.cookies() - await saveSessionData(this.config.sessionPath, account.email, this.isMobile, cookies) + await saveSessionData(this.config.sessionPath, browser, account.email, this.isMobile) // Close desktop browser return await this.closeBrowser(browser, account.email) @@ -247,8 +246,7 @@ export class MicrosoftRewardsBot { private async closeBrowser(browser: BrowserContext, email: string) { // Save cookies - const cookies = await browser.cookies() - await saveSessionData(this.config.sessionPath, email, this.isMobile, cookies) + await saveSessionData(this.config.sessionPath, browser, email, this.isMobile) // Close browser await browser.close() diff --git a/src/util/Load.ts b/src/util/Load.ts index 0b148a2..ba1695a 100644 --- a/src/util/Load.ts +++ b/src/util/Load.ts @@ -1,4 +1,4 @@ -import { Cookie } from 'playwright' +import { BrowserContext, Cookie } from 'playwright' import { BrowserFingerprintWithHeaders } from 'fingerprint-generator' import fs from 'fs' import path from 'path' @@ -67,8 +67,10 @@ export async function loadSessionData(sessionPath: string, email: string, isMobi } } -export async function saveSessionData(sessionPath: string, email: string, isMobile: boolean, cookies: Cookie[]): Promise { +export async function saveSessionData(sessionPath: string, browser: BrowserContext, email: string, isMobile: boolean): Promise { try { + const cookies = await browser.cookies() + // Fetch path const sessionDir = path.join(__dirname, '../browser/', sessionPath, email)