// Detects whether the browser currently has a live NewBook session — used // ONLY to decide whether to show a "you don't look logged into NewBook" // hint in the popup. NOT used as authorization for the push call itself — // that's the terminal API key (see options.js/popup.js). A NewBook cookie // proves you're logged into NewBook, not that you hold this extension's own // terminal credential; conflating the two was explicitly rejected as a // design decision, see project_checkin memory's "Extension auth" section. // // Cookie-detection heuristic (domains + name match) is lifted directly from // chrome-newbook-assistant/sidepanel/sidepanel.js's AuthManager.checkNewBookAuth // (~/laptop-archive) — already proven against real NewBook cookies, not // guessed here. const NEWBOOK_COOKIE_DOMAINS = [ 'https://appeu.newbook.cloud', 'https://login.newbook.cloud', ]; export async function isNewBookLoggedIn() { try { let allCookies = []; for (const url of NEWBOOK_COOKIE_DOMAINS) { const cookies = await chrome.cookies.getAll({ url }); allCookies = allCookies.concat(cookies); } const sessionCookie = allCookies.find( c => c.name === 'PHPSESSID' || c.name.toLowerCase().includes('session') || c.name.toLowerCase().includes('newbook') ); if (!sessionCookie) return false; // A session cookie with no expirationDate is a browser-session cookie — // still valid until the browser closes, not "expired". if (sessionCookie.expirationDate && sessionCookie.expirationDate * 1000 < Date.now()) return false; return true; } catch { return false; } }