From 2a78f65b0942d9143e96457dda4d422f17065627 Mon Sep 17 00:00:00 2001 From: Jamie Brunton Date: Mon, 5 Jan 2026 15:11:35 +0000 Subject: [PATCH] Update --- scripts/login.ts | 43 +++++++++++++++++++++++++++++++++---- src/browser/message-page.ts | 40 +++++++++++++++++++++++++--------- 2 files changed, 69 insertions(+), 14 deletions(-) diff --git a/scripts/login.ts b/scripts/login.ts index d508aa4..cafd9c4 100644 --- a/scripts/login.ts +++ b/scripts/login.ts @@ -63,11 +63,46 @@ async function manualLogin(): Promise { await page.goto('https://www.reddit.com'); await page.waitForTimeout(3000); - // Check for login indicators - const userButton = await page.$('[data-testid="user-drawer-button"]'); - const avatar = await page.$('[class*="avatar"], [class*="Avatar"]'); + const visibleIndicators = [ + '[data-testid="user-drawer-button"]', + 'button[aria-label*="User menu"]', + ]; - const isLoggedIn = (userButton && (await userButton.isVisible())) || avatar !== null; + let isLoggedIn = false; + for (const selector of visibleIndicators) { + const el = page.locator(selector).first(); + if (await el.isVisible().catch(() => false)) { + isLoggedIn = true; + break; + } + } + + if (!isLoggedIn) { + const attributeIndicators = [ + 'reddit-header-large[is-logged-in="true"]', + 'shreddit-post-overflow-menu[current-user-id]', + ]; + for (const selector of attributeIndicators) { + const el = await page.$(selector); + if (el) { + isLoggedIn = true; + break; + } + } + } + + if (!isLoggedIn) { + isLoggedIn = await page.evaluate(async () => { + try { + const res = await fetch('https://www.reddit.com/api/me.json', { credentials: 'include' }); + if (!res.ok) return false; + const data = await res.json(); + return Boolean(data && data.name); + } catch { + return false; + } + }); + } console.log(); if (isLoggedIn) { diff --git a/src/browser/message-page.ts b/src/browser/message-page.ts index 4ecdb6a..0b0af1a 100644 --- a/src/browser/message-page.ts +++ b/src/browser/message-page.ts @@ -238,20 +238,40 @@ export class RedditMessagePage { // Wait for page to stabilize await this.page.waitForTimeout(2000); - // Check for user menu button (indicates logged in) - const userButton = await this.page.$('[data-testid="user-drawer-button"]'); - if (userButton) { - const isVisible = await userButton.isVisible(); - return isVisible; + const visibleIndicators = [ + '[data-testid="user-drawer-button"]', + 'button[aria-label*="User menu"]', + ]; + + for (const selector of visibleIndicators) { + const el = this.page.locator(selector).first(); + if (await el.isVisible().catch(() => false)) { + return true; + } } - // Alternative check - look for avatar or user icon - const avatar = await this.page.$('[class*="avatar"], [class*="Avatar"]'); - if (avatar) { - return true; + const attributeIndicators = [ + 'reddit-header-large[is-logged-in="true"]', + 'shreddit-post-overflow-menu[current-user-id]', + ]; + + for (const selector of attributeIndicators) { + const el = await this.page.$(selector); + if (el) { + return true; + } } - return false; + return await this.page.evaluate(async () => { + try { + const res = await fetch('https://www.reddit.com/api/me.json', { credentials: 'include' }); + if (!res.ok) return false; + const data = await res.json(); + return Boolean(data && data.name); + } catch { + return false; + } + }); } catch (error) { this.logger.error('Failed to check login status:', error); return false;