browserclaw 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chrome-launcher.ts","../src/connection.ts","../src/snapshot/ref-map.ts","../src/snapshot/ai-snapshot.ts","../src/snapshot/aria-snapshot.ts","../src/actions/interaction.ts","../src/actions/keyboard.ts","../src/security.ts","../src/actions/navigation.ts","../src/actions/wait.ts","../src/actions/evaluate.ts","../src/actions/download.ts","../src/actions/emulation.ts","../src/capture/screenshot.ts","../src/capture/pdf.ts","../src/capture/trace.ts","../src/capture/response.ts","../src/capture/activity.ts","../src/storage/index.ts","../src/browser.ts"],"names":["fs","execFileSync","path","os","resolve","net","spawn","chromium","result","out","normalize","sep","groups","lookup","devices"],"mappings":"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","file":"index.cjs","sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport net from 'node:net';\nimport { execFileSync, spawn } from 'node:child_process';\nimport type { ChromeExecutable, ChromeKind, LaunchOptions, RunningChrome } from './types.js';\n\n// ── Executable Detection ──\n\nconst CHROMIUM_BUNDLE_IDS = new Set([\n 'com.google.Chrome',\n 'com.google.Chrome.beta',\n 'com.google.Chrome.canary',\n 'com.google.Chrome.dev',\n 'com.brave.Browser',\n 'com.brave.Browser.beta',\n 'com.brave.Browser.nightly',\n 'com.microsoft.Edge',\n 'com.microsoft.EdgeBeta',\n 'com.microsoft.EdgeDev',\n 'com.microsoft.EdgeCanary',\n 'org.chromium.Chromium',\n 'com.vivaldi.Vivaldi',\n 'com.operasoftware.Opera',\n 'com.operasoftware.OperaGX',\n 'com.yandex.desktop.yandex-browser',\n 'company.thebrowser.Browser',\n]);\n\nconst CHROMIUM_DESKTOP_IDS = new Set([\n 'google-chrome.desktop',\n 'google-chrome-beta.desktop',\n 'google-chrome-unstable.desktop',\n 'brave-browser.desktop',\n 'microsoft-edge.desktop',\n 'microsoft-edge-beta.desktop',\n 'microsoft-edge-dev.desktop',\n 'microsoft-edge-canary.desktop',\n 'chromium.desktop',\n 'chromium-browser.desktop',\n 'vivaldi.desktop',\n 'vivaldi-stable.desktop',\n 'opera.desktop',\n 'opera-gx.desktop',\n 'yandex-browser.desktop',\n 'org.chromium.Chromium.desktop',\n]);\n\nconst CHROMIUM_EXE_NAMES = new Set([\n 'chrome.exe', 'msedge.exe', 'brave.exe', 'brave-browser.exe', 'chromium.exe',\n 'vivaldi.exe', 'opera.exe', 'launcher.exe', 'yandex.exe', 'yandexbrowser.exe',\n 'google chrome', 'google chrome canary', 'brave browser', 'microsoft edge',\n 'chromium', 'chrome', 'brave', 'msedge', 'brave-browser',\n 'google-chrome', 'google-chrome-stable', 'google-chrome-beta', 'google-chrome-unstable',\n 'microsoft-edge', 'microsoft-edge-beta', 'microsoft-edge-dev', 'microsoft-edge-canary',\n 'chromium-browser', 'vivaldi', 'vivaldi-stable', 'opera', 'opera-stable', 'opera-gx',\n 'yandex-browser',\n]);\n\nfunction fileExists(filePath: string): boolean {\n try { return fs.existsSync(filePath); } catch { return false; }\n}\n\nfunction execText(command: string, args: string[], timeoutMs = 1200): string | null {\n try {\n const output = execFileSync(command, args, {\n timeout: timeoutMs,\n encoding: 'utf8',\n maxBuffer: 1024 * 1024,\n });\n return String(output ?? '').trim() || null;\n } catch { return null; }\n}\n\nfunction inferKindFromIdentifier(identifier: string): ChromeKind {\n const id = identifier.toLowerCase();\n if (id.includes('brave')) return 'brave';\n if (id.includes('edge')) return 'edge';\n if (id.includes('chromium')) return 'chromium';\n if (id.includes('canary')) return 'canary';\n if (id.includes('opera') || id.includes('vivaldi') || id.includes('yandex') || id.includes('thebrowser')) return 'chromium';\n return 'chrome';\n}\n\nfunction inferKindFromExeName(name: string): ChromeKind {\n const lower = name.toLowerCase();\n if (lower.includes('brave')) return 'brave';\n if (lower.includes('edge') || lower.includes('msedge')) return 'edge';\n if (lower.includes('chromium')) return 'chromium';\n if (lower.includes('canary') || lower.includes('sxs')) return 'canary';\n if (lower.includes('opera') || lower.includes('vivaldi') || lower.includes('yandex')) return 'chromium';\n return 'chrome';\n}\n\nfunction findFirstExe(candidates: ChromeExecutable[]): ChromeExecutable | null {\n for (const c of candidates) if (fileExists(c.path)) return c;\n return null;\n}\n\n// ── Mac Detection ──\n\nfunction detectDefaultBrowserBundleIdMac(): string | null {\n const plistPath = path.join(os.homedir(), 'Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist');\n if (!fileExists(plistPath)) return null;\n const handlersRaw = execText('/usr/bin/plutil', ['-extract', 'LSHandlers', 'json', '-o', '-', '--', plistPath], 2000);\n if (!handlersRaw) return null;\n let handlers: any[];\n try { handlers = JSON.parse(handlersRaw); } catch { return null; }\n if (!Array.isArray(handlers)) return null;\n\n const resolveScheme = (scheme: string): string | null => {\n let candidate: string | null = null;\n for (const entry of handlers) {\n if (!entry || typeof entry !== 'object') continue;\n if (entry.LSHandlerURLScheme !== scheme) continue;\n const role = (typeof entry.LSHandlerRoleAll === 'string' && entry.LSHandlerRoleAll) ||\n (typeof entry.LSHandlerRoleViewer === 'string' && entry.LSHandlerRoleViewer) || null;\n if (role) candidate = role;\n }\n return candidate;\n };\n return resolveScheme('http') ?? resolveScheme('https');\n}\n\nfunction detectDefaultChromiumMac(): ChromeExecutable | null {\n const bundleId = detectDefaultBrowserBundleIdMac();\n if (!bundleId || !CHROMIUM_BUNDLE_IDS.has(bundleId)) return null;\n const appPathRaw = execText('/usr/bin/osascript', ['-e', `POSIX path of (path to application id \"${bundleId}\")`]);\n if (!appPathRaw) return null;\n const appPath = appPathRaw.trim().replace(/\\/$/, '');\n const exeName = execText('/usr/bin/defaults', ['read', path.join(appPath, 'Contents', 'Info'), 'CFBundleExecutable']);\n if (!exeName) return null;\n const exePath = path.join(appPath, 'Contents', 'MacOS', exeName.trim());\n if (!fileExists(exePath)) return null;\n return { kind: inferKindFromIdentifier(bundleId), path: exePath };\n}\n\nfunction findChromeMac(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' },\n { kind: 'chrome', path: path.join(os.homedir(), 'Applications/Google Chrome.app/Contents/MacOS/Google Chrome') },\n { kind: 'brave', path: '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser' },\n { kind: 'brave', path: path.join(os.homedir(), 'Applications/Brave Browser.app/Contents/MacOS/Brave Browser') },\n { kind: 'edge', path: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge' },\n { kind: 'edge', path: path.join(os.homedir(), 'Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge') },\n { kind: 'chromium', path: '/Applications/Chromium.app/Contents/MacOS/Chromium' },\n { kind: 'chromium', path: path.join(os.homedir(), 'Applications/Chromium.app/Contents/MacOS/Chromium') },\n { kind: 'canary', path: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary' },\n { kind: 'canary', path: path.join(os.homedir(), 'Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary') },\n ]);\n}\n\n// ── Linux Detection ──\n\nfunction detectDefaultChromiumLinux(): ChromeExecutable | null {\n const desktopId = execText('xdg-settings', ['get', 'default-web-browser']) ||\n execText('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n if (!desktopId) return null;\n const trimmed = desktopId.trim();\n if (!CHROMIUM_DESKTOP_IDS.has(trimmed)) return null;\n\n const searchDirs = [\n path.join(os.homedir(), '.local', 'share', 'applications'),\n '/usr/local/share/applications',\n '/usr/share/applications',\n '/var/lib/snapd/desktop/applications',\n ];\n let desktopPath: string | null = null;\n for (const dir of searchDirs) {\n const candidate = path.join(dir, trimmed);\n if (fileExists(candidate)) { desktopPath = candidate; break; }\n }\n if (!desktopPath) return null;\n\n let execLine: string | null = null;\n try {\n const lines = fs.readFileSync(desktopPath, 'utf8').split(/\\r?\\n/);\n for (const line of lines) if (line.startsWith('Exec=')) { execLine = line.slice(5).trim(); break; }\n } catch {}\n if (!execLine) return null;\n\n const tokens = execLine.split(/\\s+/);\n let command: string | null = null;\n for (const token of tokens) {\n if (!token || token === 'env' || (token.includes('=') && !token.startsWith('/'))) continue;\n command = token.replace(/^[\"']|[\"']$/g, '');\n break;\n }\n if (!command) return null;\n\n const resolved = command.startsWith('/') ? command : (execText('which', [command], 800)?.trim() ?? null);\n if (!resolved) return null;\n const exeName = path.posix.basename(resolved).toLowerCase();\n if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;\n return { kind: inferKindFromExeName(exeName), path: resolved };\n}\n\nfunction findChromeLinux(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/usr/bin/google-chrome' },\n { kind: 'chrome', path: '/usr/bin/google-chrome-stable' },\n { kind: 'chrome', path: '/usr/bin/chrome' },\n { kind: 'brave', path: '/usr/bin/brave-browser' },\n { kind: 'brave', path: '/usr/bin/brave-browser-stable' },\n { kind: 'brave', path: '/usr/bin/brave' },\n { kind: 'brave', path: '/snap/bin/brave' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge-stable' },\n { kind: 'chromium', path: '/usr/bin/chromium' },\n { kind: 'chromium', path: '/usr/bin/chromium-browser' },\n { kind: 'chromium', path: '/snap/bin/chromium' },\n ]);\n}\n\n// ── Windows Detection ──\n\nfunction findChromeWindows(): ChromeExecutable | null {\n const localAppData = process.env.LOCALAPPDATA ?? '';\n const programFiles = process.env.ProgramFiles ?? 'C:\\\\Program Files';\n const programFilesX86 = process.env['ProgramFiles(x86)'] ?? 'C:\\\\Program Files (x86)';\n const j = path.win32.join;\n const candidates: ChromeExecutable[] = [];\n if (localAppData) {\n candidates.push({ kind: 'chrome', path: j(localAppData, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(localAppData, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(localAppData, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'chromium', path: j(localAppData, 'Chromium', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'canary', path: j(localAppData, 'Google', 'Chrome SxS', 'Application', 'chrome.exe') });\n }\n candidates.push({ kind: 'chrome', path: j(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'chrome', path: j(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(programFiles, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'brave', path: j(programFilesX86, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(programFiles, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'edge', path: j(programFilesX86, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n return findFirstExe(candidates);\n}\n\n// ── Resolve Executable ──\n\nexport function resolveBrowserExecutable(opts?: { executablePath?: string }): ChromeExecutable | null {\n if (opts?.executablePath) {\n if (!fileExists(opts.executablePath)) throw new Error(`executablePath not found: ${opts.executablePath}`);\n return { kind: 'custom', path: opts.executablePath };\n }\n const platform = process.platform;\n // Try default browser first\n if (platform === 'darwin') return detectDefaultChromiumMac() ?? findChromeMac();\n if (platform === 'linux') return detectDefaultChromiumLinux() ?? findChromeLinux();\n if (platform === 'win32') return findChromeWindows();\n return null;\n}\n\n// ── Port Check ──\n\nasync function ensurePortAvailable(port: number): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const tester = net.createServer()\n .once('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') reject(new Error(`Port ${port} is already in use`));\n else reject(err);\n })\n .once('listening', () => { tester.close(() => resolve()); })\n .listen(port);\n });\n}\n\n// ── Profile Decoration ──\n\nfunction safeReadJson(filePath: string): Record<string, any> | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) return null;\n return parsed;\n } catch { return null; }\n}\n\nfunction safeWriteJson(filePath: string, data: Record<string, any>): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2));\n}\n\nfunction setDeep(obj: Record<string, any>, keys: string[], value: any): void {\n let node = obj;\n for (const key of keys.slice(0, -1)) {\n const next = node[key];\n if (typeof next !== 'object' || next === null || Array.isArray(next)) node[key] = {};\n node = node[key];\n }\n node[keys[keys.length - 1]!] = value;\n}\n\nfunction parseHexRgbToSignedArgbInt(hex: string): number | null {\n const cleaned = hex.trim().replace(/^#/, '');\n if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) return null;\n const argbUnsigned = (255 << 24) | Number.parseInt(cleaned, 16);\n return argbUnsigned > 2147483647 ? argbUnsigned - 4294967296 : argbUnsigned;\n}\n\nfunction decorateProfile(userDataDir: string, name: string, color: string): void {\n const colorInt = parseHexRgbToSignedArgbInt(color);\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n const localState = safeReadJson(localStatePath) ?? {};\n setDeep(localState, ['profile', 'info_cache', 'Default', 'name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'shortcut_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'user_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color_seed'], colorInt);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_highlight_color'], colorInt);\n }\n safeWriteJson(localStatePath, localState);\n\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['profile', 'name'], name);\n setDeep(prefs, ['profile', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(prefs, ['autogenerated', 'theme', 'color'], colorInt);\n setDeep(prefs, ['browser', 'theme', 'user_color2'], colorInt);\n }\n safeWriteJson(preferencesPath, prefs);\n}\n\nfunction ensureCleanExit(userDataDir: string): void {\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['exit_type'], 'Normal');\n setDeep(prefs, ['exited_cleanly'], true);\n safeWriteJson(preferencesPath, prefs);\n}\n\n// ── Launch Chrome ──\n\nconst DEFAULT_CDP_PORT = 9222;\nconst DEFAULT_PROFILE_NAME = 'browserclaw';\nconst DEFAULT_PROFILE_COLOR = '#FF4500';\n\nfunction resolveUserDataDir(profileName: string): string {\n const configDir = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config');\n return path.join(configDir, 'browserclaw', 'profiles', profileName, 'user-data');\n}\n\nexport async function isChromeReachable(cdpUrl: string, timeoutMs = 500, authToken?: string): Promise<boolean> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal, headers });\n return res.ok;\n } catch { return false; }\n finally { clearTimeout(t); }\n}\n\nexport async function getChromeWebSocketUrl(cdpUrl: string, timeoutMs = 500, authToken?: string): Promise<string | null> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal, headers });\n if (!res.ok) return null;\n const data = await res.json() as { webSocketDebuggerUrl?: string };\n return String(data?.webSocketDebuggerUrl ?? '').trim() || null;\n } catch { return null; }\n finally { clearTimeout(t); }\n}\n\nexport async function launchChrome(opts: LaunchOptions = {}): Promise<RunningChrome> {\n const cdpPort = opts.cdpPort ?? DEFAULT_CDP_PORT;\n await ensurePortAvailable(cdpPort);\n\n const exe = resolveBrowserExecutable({ executablePath: opts.executablePath });\n if (!exe) throw new Error('No supported browser found (Chrome/Brave/Edge/Chromium). Install one or provide executablePath.');\n\n const profileName = opts.profileName ?? DEFAULT_PROFILE_NAME;\n const userDataDir = opts.userDataDir ?? resolveUserDataDir(profileName);\n fs.mkdirSync(userDataDir, { recursive: true });\n\n const spawnChrome = () => {\n const args = [\n `--remote-debugging-port=${cdpPort}`,\n `--user-data-dir=${userDataDir}`,\n '--no-first-run',\n '--no-default-browser-check',\n '--disable-sync',\n '--disable-background-networking',\n '--disable-component-update',\n '--disable-features=Translate,MediaRouter',\n '--disable-blink-features=AutomationControlled',\n '--disable-session-crashed-bubble',\n '--hide-crash-restore-bubble',\n '--password-store=basic',\n ];\n if (opts.headless) {\n args.push('--headless=new', '--disable-gpu');\n }\n if (opts.noSandbox) {\n args.push('--no-sandbox', '--disable-setuid-sandbox');\n }\n if (process.platform === 'linux') args.push('--disable-dev-shm-usage');\n const extraArgs = Array.isArray(opts.chromeArgs)\n ? opts.chromeArgs.filter((a): a is string => typeof a === 'string' && a.trim().length > 0)\n : [];\n if (extraArgs.length) args.push(...extraArgs);\n args.push('about:blank');\n return spawn(exe.path, args, {\n stdio: 'pipe',\n env: { ...process.env, HOME: os.homedir() },\n });\n };\n\n const startedAt = Date.now();\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n // Bootstrap run if profile doesn't exist yet\n if (!fileExists(localStatePath) || !fileExists(preferencesPath)) {\n const bootstrap = spawnChrome();\n const deadline = Date.now() + 10000;\n while (Date.now() < deadline) {\n if (fileExists(localStatePath) && fileExists(preferencesPath)) break;\n await new Promise(r => setTimeout(r, 100));\n }\n try { bootstrap.kill('SIGTERM'); } catch {}\n const exitDeadline = Date.now() + 5000;\n while (Date.now() < exitDeadline) {\n if (bootstrap.exitCode != null) break;\n await new Promise(r => setTimeout(r, 50));\n }\n if (bootstrap.exitCode == null) {\n try { bootstrap.kill('SIGKILL'); } catch {}\n }\n }\n\n // Decorate profile\n try {\n decorateProfile(userDataDir, profileName, opts.profileColor ?? DEFAULT_PROFILE_COLOR);\n } catch {}\n\n // Ensure clean exit state\n try { ensureCleanExit(userDataDir); } catch {}\n\n // Launch for real\n const proc = spawnChrome();\n const cdpUrl = `http://127.0.0.1:${cdpPort}`;\n\n // Wait for Chrome to be ready\n const readyDeadline = Date.now() + 15000;\n while (Date.now() < readyDeadline) {\n if (await isChromeReachable(cdpUrl, 500)) break;\n await new Promise(r => setTimeout(r, 200));\n }\n\n if (!await isChromeReachable(cdpUrl, 500)) {\n try { proc.kill('SIGKILL'); } catch {}\n throw new Error(`Failed to start Chrome CDP on port ${cdpPort}. Chrome may not have started correctly.`);\n }\n\n return {\n pid: proc.pid ?? -1,\n exe,\n userDataDir,\n cdpPort,\n startedAt,\n proc,\n };\n}\n\nexport async function stopChrome(running: RunningChrome, timeoutMs = 2500): Promise<void> {\n const proc = running.proc;\n if (proc.exitCode != null) return;\n try { proc.kill('SIGTERM'); } catch {}\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (proc.exitCode != null) return;\n await new Promise(r => setTimeout(r, 100));\n }\n try { proc.kill('SIGKILL'); } catch {}\n}\n","import { chromium } from 'playwright-core';\nimport type { Browser, Page, BrowserContext } from 'playwright-core';\nimport { getChromeWebSocketUrl } from './chrome-launcher.js';\nimport type { PageState, RoleRefs } from './types.js';\n\n/** Page extended with Playwright's private `_snapshotForAI` method. */\nexport type PageWithAI = Page & {\n _snapshotForAI?: (opts: { timeout: number; track: string }) => Promise<{ full?: string }>;\n};\n\n// ── Persistent Connection Cache ──\n\nlet cached: { browser: Browser; cdpUrl: string; authToken?: string } | null = null;\nconst connectingByUrl = new Map<string, Promise<{ browser: Browser; cdpUrl: string; authToken?: string }>>();\n\nconst pageStates = new WeakMap<Page, PageState>();\nconst observedContexts = new WeakSet<BrowserContext>();\nconst observedPages = new WeakSet<Page>();\n\n// Ref cache: keyed by \"cdpUrl::targetId\"\nconst roleRefsByTarget = new Map<string, {\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}>();\nconst MAX_ROLE_REFS_CACHE = 50;\n\nconst MAX_CONSOLE_MESSAGES = 500;\nconst MAX_PAGE_ERRORS = 200;\nconst MAX_NETWORK_REQUESTS = 500;\n\nfunction normalizeCdpUrl(raw: string): string {\n return raw.replace(/\\/$/, '');\n}\n\nfunction roleRefsKey(cdpUrl: string, targetId: string): string {\n return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;\n}\n\n// ── Page State Management ──\n\nexport function ensurePageState(page: Page): PageState {\n const existing = pageStates.get(page);\n if (existing) return existing;\n\n const state: PageState = {\n console: [],\n errors: [],\n requests: [],\n requestIds: new WeakMap(),\n nextRequestId: 0,\n };\n pageStates.set(page, state);\n\n if (!observedPages.has(page)) {\n observedPages.add(page);\n\n page.on('console', (msg) => {\n state.console.push({\n type: msg.type(),\n text: msg.text(),\n timestamp: new Date().toISOString(),\n location: msg.location(),\n });\n if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();\n });\n\n page.on('pageerror', (err) => {\n state.errors.push({\n message: err?.message ? String(err.message) : String(err),\n name: err?.name ? String(err.name) : undefined,\n stack: err?.stack ? String(err.stack) : undefined,\n timestamp: new Date().toISOString(),\n });\n if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();\n });\n\n page.on('request', (req) => {\n state.nextRequestId += 1;\n const id = `r${state.nextRequestId}`;\n state.requestIds.set(req, id);\n state.requests.push({\n id,\n timestamp: new Date().toISOString(),\n method: req.method(),\n url: req.url(),\n resourceType: req.resourceType(),\n });\n if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();\n });\n\n page.on('response', (resp) => {\n const req = resp.request();\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.status = resp.status();\n rec.ok = resp.ok();\n break;\n }\n }\n });\n\n page.on('requestfailed', (req) => {\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.failureText = req.failure()?.errorText;\n rec.ok = false;\n break;\n }\n }\n });\n\n page.on('close', () => {\n pageStates.delete(page);\n observedPages.delete(page);\n });\n }\n\n return state;\n}\n\n// ── Stealth: hide navigator.webdriver ──\n\nconst STEALTH_SCRIPT = `Object.defineProperty(navigator, 'webdriver', { get: () => undefined })`;\n\nfunction applyStealthToPage(page: Page): void {\n page.evaluate(STEALTH_SCRIPT).catch((e) => {\n if (process.env.DEBUG) console.warn('[browserclaw] stealth evaluate failed:', e.message);\n });\n}\n\nfunction observeContext(context: BrowserContext): void {\n if (observedContexts.has(context)) return;\n observedContexts.add(context);\n\n context.addInitScript(STEALTH_SCRIPT).catch((e) => {\n if (process.env.DEBUG) console.warn('[browserclaw] stealth initScript failed:', e.message);\n });\n\n for (const page of context.pages()) {\n ensurePageState(page);\n applyStealthToPage(page);\n }\n context.on('page', (page) => {\n ensurePageState(page);\n applyStealthToPage(page);\n });\n}\n\nfunction observeBrowser(browser: Browser): void {\n for (const context of browser.contexts()) observeContext(context);\n}\n\n// ── Role Refs Storage ──\n\nexport function storeRoleRefsForTarget(opts: {\n page: Page;\n cdpUrl: string;\n targetId?: string;\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}): void {\n const state = ensurePageState(opts.page);\n state.roleRefs = opts.refs;\n state.roleRefsFrameSelector = opts.frameSelector;\n state.roleRefsMode = opts.mode;\n\n const targetId = opts.targetId?.trim();\n if (!targetId) return;\n roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {\n refs: opts.refs,\n ...(opts.frameSelector ? { frameSelector: opts.frameSelector } : {}),\n ...(opts.mode ? { mode: opts.mode } : {}),\n });\n while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {\n const first = roleRefsByTarget.keys().next();\n if (first.done) break;\n roleRefsByTarget.delete(first.value);\n }\n}\n\nexport function restoreRoleRefsForTarget(opts: {\n cdpUrl: string;\n targetId?: string;\n page: Page;\n}): void {\n const targetId = opts.targetId?.trim() || '';\n if (!targetId) return;\n const entry = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));\n if (!entry) return;\n const state = ensurePageState(opts.page);\n if (state.roleRefs) return;\n state.roleRefs = entry.refs;\n state.roleRefsFrameSelector = entry.frameSelector;\n state.roleRefsMode = entry.mode;\n}\n\n// ── Connect to Browser ──\n\nexport async function connectBrowser(cdpUrl: string, authToken?: string): Promise<{ browser: Browser; cdpUrl: string; authToken?: string }> {\n const normalized = normalizeCdpUrl(cdpUrl);\n if (cached?.cdpUrl === normalized) return cached;\n\n const existing = connectingByUrl.get(normalized);\n if (existing) return await existing;\n\n const connectWithRetry = async () => {\n let lastErr: unknown;\n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const timeout = 5000 + attempt * 2000;\n const endpoint = await getChromeWebSocketUrl(normalized, timeout, authToken).catch(() => null) ?? normalized;\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const browser = await chromium.connectOverCDP(endpoint, { timeout, headers });\n const connected = { browser, cdpUrl: normalized, authToken };\n cached = connected;\n observeBrowser(browser);\n browser.on('disconnected', () => {\n if (cached?.browser === browser) cached = null;\n for (const key of roleRefsByTarget.keys()) {\n if (key.startsWith(normalized + '::')) roleRefsByTarget.delete(key);\n }\n });\n return connected;\n } catch (err) {\n lastErr = err;\n await new Promise(r => setTimeout(r, 250 + attempt * 250));\n }\n }\n throw lastErr instanceof Error ? lastErr : new Error('CDP connect failed');\n };\n\n const promise = connectWithRetry().finally(() => { connectingByUrl.delete(normalized); });\n connectingByUrl.set(normalized, promise);\n return await promise;\n}\n\nexport async function disconnectBrowser(): Promise<void> {\n if (connectingByUrl.size) {\n for (const p of connectingByUrl.values()) {\n try { await p; } catch {}\n }\n }\n const cur = cached;\n cached = null;\n if (cur) await cur.browser.close().catch(() => {});\n}\n\n// ── Page Lookup ──\n\n/** CDP target entry from /json/list endpoint. */\ninterface CdpTarget {\n id: string;\n url: string;\n title?: string;\n type?: string;\n webSocketDebuggerUrl?: string;\n}\n\nexport async function getAllPages(browser: Browser) {\n return browser.contexts().flatMap(c => c.pages());\n}\n\nexport async function pageTargetId(page: Page): Promise<string | null> {\n const session = await page.context().newCDPSession(page);\n try {\n const info = await session.send('Target.getTargetInfo');\n const targetInfo = (info as { targetInfo?: { targetId?: string } }).targetInfo;\n return String(targetInfo?.targetId ?? '').trim() || null;\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nexport async function findPageByTargetId(browser: Browser, targetId: string, cdpUrl?: string) {\n const pages = await getAllPages(browser);\n let resolvedViaCdp = false;\n for (const page of pages) {\n let tid: string | null = null;\n try {\n tid = await pageTargetId(page);\n resolvedViaCdp = true;\n } catch {\n tid = null;\n }\n if (tid && tid === targetId) return page;\n }\n // Extension relays can block CDP attachment APIs entirely. If that happens and\n // Playwright only exposes one page, return it as the best available mapping.\n if (!resolvedViaCdp && pages.length === 1) {\n return pages[0];\n }\n\n // Fallback: match by URL from /json/list\n if (cdpUrl) {\n try {\n const listUrl = `${cdpUrl.replace(/\\/+$/, '').replace(/^ws:/, 'http:').replace(/\\/cdp$/, '')}/json/list`;\n const headers: Record<string, string> = {};\n if (cached?.authToken) headers['Authorization'] = `Bearer ${cached.authToken}`;\n const response = await fetch(listUrl, { headers });\n if (response.ok) {\n const targets = await response.json() as CdpTarget[];\n const target = targets.find(t => t.id === targetId);\n if (target) {\n const urlMatch = pages.filter(p => p.url() === target.url);\n if (urlMatch.length === 1) return urlMatch[0];\n if (urlMatch.length > 1) {\n const sameUrlTargets = targets.filter(t => t.url === target.url);\n if (sameUrlTargets.length === urlMatch.length) {\n const idx = sameUrlTargets.findIndex(t => t.id === targetId);\n if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx];\n }\n }\n }\n }\n } catch {}\n }\n return null;\n}\n\nexport async function getPageForTargetId(opts: { cdpUrl: string; targetId?: string }) {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available in the connected browser.');\n const first = pages[0]!;\n if (!opts.targetId) return first;\n const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!found) {\n if (pages.length === 1) return first;\n throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n }\n return found;\n}\n\n// ── Ref Locator ──\n\nexport function refLocator(page: Page, ref: string) {\n const normalized = ref.startsWith('@') ? ref.slice(1) : ref.startsWith('ref=') ? ref.slice(4) : ref;\n\n if (/^e\\d+$/.test(normalized)) {\n const state = pageStates.get(page);\n\n // Aria mode: use aria-ref locator\n if (state?.roleRefsMode === 'aria') {\n return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page)\n .locator(`aria-ref=${normalized}`);\n }\n\n // Role mode: use getByRole\n const info = state?.roleRefs?.[normalized];\n if (!info) throw new Error(`Unknown ref \"${normalized}\". Run a new snapshot and use a ref from that snapshot.`);\n\n const locAny = state?.roleRefsFrameSelector\n ? page.frameLocator(state.roleRefsFrameSelector)\n : page;\n const role = info.role as Parameters<Page['getByRole']>[0];\n const locator = info.name\n ? locAny.getByRole(role, { name: info.name, exact: true })\n : locAny.getByRole(role);\n return info.nth !== undefined ? locator.nth(info.nth) : locator;\n }\n\n return page.locator(`aria-ref=${normalized}`);\n}\n\n// ── Error Helpers ──\n\nexport function toAIFriendlyError(error: unknown, selector: string): Error {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('strict mode violation')) {\n const countMatch = message.match(/resolved to (\\d+) elements/);\n const count = countMatch ? countMatch[1] : 'multiple';\n return new Error(`Selector \"${selector}\" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);\n }\n if ((message.includes('Timeout') || message.includes('waiting for')) &&\n (message.includes('to be visible') || message.includes('not visible'))) {\n return new Error(`Element \"${selector}\" not found or not visible. Run a new snapshot to see current page elements.`);\n }\n if (message.includes('intercepts pointer events') || message.includes('not visible') || message.includes('not receive pointer events')) {\n return new Error(`Element \"${selector}\" is not interactable (hidden or covered). Try scrolling it into view, closing overlays, or re-snapshotting.`);\n }\n return error instanceof Error ? error : new Error(message);\n}\n\nexport function normalizeTimeoutMs(timeoutMs: number | undefined, fallback: number, maxMs = 120000): number {\n return Math.max(500, Math.min(maxMs, timeoutMs ?? fallback));\n}\n","import type { RoleRefs, RoleRefInfo } from '../types.js';\n\nexport const INTERACTIVE_ROLES = new Set([\n 'button', 'link', 'textbox', 'checkbox', 'radio', 'combobox', 'listbox',\n 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'searchbox',\n 'slider', 'spinbutton', 'switch', 'tab', 'treeitem',\n]);\n\nexport const CONTENT_ROLES = new Set([\n 'heading', 'cell', 'gridcell', 'columnheader', 'rowheader',\n 'listitem', 'article', 'region', 'main', 'navigation',\n]);\n\nexport const STRUCTURAL_ROLES = new Set([\n 'generic', 'group', 'list', 'table', 'row', 'rowgroup', 'grid', 'treegrid',\n 'menu', 'menubar', 'toolbar', 'tablist', 'tree', 'directory', 'document',\n 'application', 'presentation', 'none',\n]);\n\nfunction getIndentLevel(line: string): number {\n const match = line.match(/^(\\s*)/);\n return match ? Math.floor(match[1]!.length / 2) : 0;\n}\n\ninterface ParsedSnapshotLine {\n roleRaw: string;\n role: string;\n name?: string;\n suffix: string;\n}\n\nfunction matchInteractiveSnapshotLine(\n line: string,\n options: SnapshotBuildOptions,\n): ParsedSnapshotLine | null {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) {\n return null;\n }\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) {\n return null;\n }\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) {\n return null;\n }\n const role = roleRaw!.toLowerCase();\n return {\n roleRaw: roleRaw!,\n role,\n ...(name ? { name } : {}),\n suffix: suffix!,\n };\n}\n\nfunction createRoleNameTracker() {\n const counts = new Map<string, number>();\n const refsByKey = new Map<string, string[]>();\n\n return {\n counts,\n refsByKey,\n getKey(role: string, name?: string): string {\n return `${role}:${name ?? ''}`;\n },\n getNextIndex(role: string, name?: string): number {\n const key = this.getKey(role, name);\n const current = counts.get(key) ?? 0;\n counts.set(key, current + 1);\n return current;\n },\n trackRef(role: string, name: string | undefined, ref: string): void {\n const key = this.getKey(role, name);\n const list = refsByKey.get(key) ?? [];\n list.push(ref);\n refsByKey.set(key, list);\n },\n getDuplicateKeys(): Set<string> {\n const out = new Set<string>();\n for (const [key, refs] of refsByKey) if (refs.length > 1) out.add(key);\n return out;\n },\n };\n}\n\nfunction removeNthFromNonDuplicates(refs: RoleRefs, tracker: ReturnType<typeof createRoleNameTracker>): void {\n const duplicates = tracker.getDuplicateKeys();\n for (const [ref, data] of Object.entries(refs)) {\n const key = tracker.getKey(data.role, data.name);\n if (!duplicates.has(key)) delete refs[ref]?.nth;\n }\n}\n\nfunction compactTree(tree: string): string {\n const lines = tree.split('\\n');\n const result: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (line.includes('[ref=')) { result.push(line); continue; }\n if (line.includes(':') && !line.trimEnd().endsWith(':')) { result.push(line); continue; }\n const currentIndent = getIndentLevel(line);\n let hasRelevantChildren = false;\n for (let j = i + 1; j < lines.length; j++) {\n if (getIndentLevel(lines[j]!) <= currentIndent) break;\n if (lines[j]?.includes('[ref=')) { hasRelevantChildren = true; break; }\n }\n if (hasRelevantChildren) result.push(line);\n }\n return result.join('\\n');\n}\n\nexport interface SnapshotBuildOptions {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n}\n\n/**\n * Build a role snapshot from Playwright's ariaSnapshot() output.\n * Assigns ref IDs (e1, e2, ...) to interactive/content elements.\n */\nexport function buildRoleSnapshotFromAriaSnapshot(\n ariaSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = ariaSnapshot.split('\\n');\n const refs: RoleRefs = {};\n const tracker = createRoleNameTracker();\n let counter = 0;\n const nextRef = () => { counter++; return `e${counter}`; };\n\n if (options.interactive) {\n const result: string[] = [];\n for (const line of lines) {\n const parsed = matchInteractiveSnapshotLine(line, options);\n if (!parsed) continue;\n const { roleRaw, role, name, suffix } = parsed;\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const prefix = line.match(/^(\\s*-\\s*)/)?.[1] ?? '';\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n let enhanced = `${prefix}${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix.includes('[')) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n return { snapshot: result.join('\\n') || '(no interactive elements)', refs };\n }\n\n const result: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { result.push(line); continue; }\n const [, prefix, roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { result.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isInteractive = INTERACTIVE_ROLES.has(role);\n const isContent = CONTENT_ROLES.has(role);\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n if (!(isInteractive || (isContent && name))) { result.push(line); continue; }\n\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n\n let enhanced = `${prefix}${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n const tree = result.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\n/**\n * Build a role snapshot from Playwright's AI snapshot output.\n * Preserves Playwright's own aria-ref ids (e.g. ref=e13).\n */\nexport function buildRoleSnapshotFromAiSnapshot(\n aiSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = String(aiSnapshot ?? '').split('\\n');\n const refs: RoleRefs = {};\n\n function parseAiSnapshotRef(suffix: string): string | null {\n const match = suffix.match(/\\[ref=(e\\d+)\\]/i);\n return match ? match[1]! : null;\n }\n\n if (options.interactive) {\n const out: string[] = [];\n for (const line of lines) {\n const parsed = matchInteractiveSnapshotLine(line, options);\n if (!parsed) continue;\n const { roleRaw, role, name, suffix } = parsed;\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const ref = parseAiSnapshotRef(suffix);\n if (!ref) continue;\n const prefix = line.match(/^(\\s*-\\s*)/)?.[1] ?? '';\n refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(`${prefix}${roleRaw}${name ? ` \"${name}\"` : ''}${suffix}`);\n }\n return { snapshot: out.join('\\n') || '(no interactive elements)', refs };\n }\n\n const out: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { out.push(line); continue; }\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { out.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n const ref = parseAiSnapshotRef(suffix!);\n if (ref) refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(line);\n }\n const tree = out.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\nexport function getRoleSnapshotStats(snapshot: string, refs: RoleRefs) {\n const interactive = Object.values(refs).filter(r => INTERACTIVE_ROLES.has(r.role)).length;\n return {\n lines: snapshot.split('\\n').length,\n chars: snapshot.length,\n refs: Object.keys(refs).length,\n interactive,\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget, normalizeTimeoutMs } from '../connection.js';\nimport type { PageWithAI } from '../connection.js';\nimport { buildRoleSnapshotFromAiSnapshot, getRoleSnapshotStats } from './ref-map.js';\nimport type { SnapshotResult, SnapshotOptions } from '../types.js';\n\n/**\n * Take an AI-readable snapshot using Playwright's _snapshotForAI.\n * This is the primary snapshot method — uses Playwright's built-in AI mode.\n */\nexport async function snapshotAi(opts: {\n cdpUrl: string;\n targetId?: string;\n maxChars?: number;\n timeoutMs?: number;\n options?: SnapshotOptions;\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const maybe = page as PageWithAI;\n if (!maybe._snapshotForAI) {\n throw new Error('Playwright _snapshotForAI is not available. Upgrade playwright-core to >= 1.50.');\n }\n\n const sourceUrl = page.url();\n\n const result = await maybe._snapshotForAI({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 5000, 60000),\n track: 'response',\n });\n\n let snapshot = String(result?.full ?? '');\n const maxChars = opts.maxChars;\n const limit = typeof maxChars === 'number' && Number.isFinite(maxChars) && maxChars > 0\n ? Math.floor(maxChars) : undefined;\n\n if (limit && snapshot.length > limit) {\n const lastNewline = snapshot.lastIndexOf('\\n', limit);\n const cutoff = lastNewline > 0 ? lastNewline : limit;\n snapshot = `${snapshot.slice(0, cutoff)}\\n\\n[...TRUNCATED - page too large]`;\n }\n\n const built = buildRoleSnapshotFromAiSnapshot(snapshot, opts.options);\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n mode: 'aria',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-snapshot',\n capturedAt: new Date().toISOString(),\n },\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget } from '../connection.js';\nimport {\n buildRoleSnapshotFromAriaSnapshot,\n getRoleSnapshotStats,\n} from './ref-map.js';\nimport type { SnapshotResult, AriaSnapshotResult, AriaNode } from '../types.js';\n\n/**\n * Take a role-based snapshot using Playwright's ariaSnapshot().\n * This produces a tree with ref IDs that can be targeted by actions.\n */\nexport async function snapshotRole(opts: {\n cdpUrl: string;\n targetId?: string;\n selector?: string;\n frameSelector?: string;\n refsMode?: 'role' | 'aria';\n options?: {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n };\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const sourceUrl = page.url();\n const frameSelector = opts.frameSelector?.trim() || '';\n const selector = opts.selector?.trim() || '';\n const locator = frameSelector\n ? (selector\n ? page.frameLocator(frameSelector).locator(selector)\n : page.frameLocator(frameSelector).locator(':root'))\n : (selector\n ? page.locator(selector)\n : page.locator(':root'));\n\n const ariaSnapshot = await locator.ariaSnapshot({ timeout: 10000 });\n const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ''), opts.options);\n\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n frameSelector: frameSelector || undefined,\n mode: opts.refsMode ?? 'role',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-snapshot',\n capturedAt: new Date().toISOString(),\n },\n };\n}\n\n/** CDP accessibility tree node from Accessibility.getFullAXTree. */\ninterface CdpAXNode {\n nodeId: string;\n childIds?: string[];\n role?: { value?: string | number | boolean };\n name?: { value?: string | number | boolean };\n value?: { value?: string | number | boolean };\n description?: { value?: string | number | boolean };\n backendDOMNodeId?: number;\n}\n\n/**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n */\nexport async function snapshotAria(opts: {\n cdpUrl: string;\n targetId?: string;\n limit?: number;\n}): Promise<AriaSnapshotResult> {\n const limit = Math.max(1, Math.min(2000, Math.floor(opts.limit ?? 500)));\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const sourceUrl = page.url();\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Accessibility.enable').catch(() => {});\n const res = await session.send('Accessibility.getFullAXTree') as { nodes?: CdpAXNode[] };\n return {\n nodes: formatAriaNodes(Array.isArray(res?.nodes) ? res.nodes : [], limit),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-aria-tree',\n capturedAt: new Date().toISOString(),\n },\n };\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nfunction axValue(v: { value?: string | number | boolean } | undefined): string {\n if (!v || typeof v !== 'object') return '';\n const value = v.value;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return '';\n}\n\nfunction formatAriaNodes(nodes: CdpAXNode[], limit: number): AriaNode[] {\n const byId = new Map<string, CdpAXNode>();\n for (const n of nodes) if (n.nodeId) byId.set(n.nodeId, n);\n\n const referenced = new Set<string>();\n for (const n of nodes) for (const c of n.childIds ?? []) referenced.add(c);\n\n const root = nodes.find(n => n.nodeId && !referenced.has(n.nodeId)) ?? nodes[0];\n if (!root?.nodeId) return [];\n\n const out: AriaNode[] = [];\n const stack: Array<{ id: string; depth: number }> = [{ id: root.nodeId, depth: 0 }];\n\n while (stack.length && out.length < limit) {\n const popped = stack.pop();\n if (!popped) break;\n const { id, depth } = popped;\n const n = byId.get(id);\n if (!n) continue;\n\n const role = axValue(n.role);\n const name = axValue(n.name);\n const value = axValue(n.value);\n const description = axValue(n.description);\n const ref = `ax${out.length + 1}`;\n\n out.push({\n ref,\n role: role || 'unknown',\n name: name || '',\n ...(value ? { value } : {}),\n ...(description ? { description } : {}),\n ...(typeof n.backendDOMNodeId === 'number' ? { backendDOMNodeId: n.backendDOMNodeId } : {}),\n depth,\n });\n\n const children = (n.childIds ?? []).filter((c: string) => byId.has(c));\n for (let i = children.length - 1; i >= 0; i--) {\n if (children[i]) stack.push({ id: children[i], depth: depth + 1 });\n }\n }\n\n return out;\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n toAIFriendlyError,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport type { FormField } from '../types.js';\n\ntype MouseButton = 'left' | 'right' | 'middle';\ntype KeyModifier = 'Alt' | 'Control' | 'ControlOrMeta' | 'Meta' | 'Shift';\n\nexport async function clickViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n doubleClick?: boolean;\n button?: MouseButton;\n modifiers?: KeyModifier[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n try {\n if (opts.doubleClick) {\n await locator.dblclick({ timeout, button: opts.button, modifiers: opts.modifiers });\n } else {\n await locator.click({ timeout, button: opts.button, modifiers: opts.modifiers });\n }\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function hoverViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).hover({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function typeViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n text: string;\n submit?: boolean;\n slowly?: boolean;\n timeoutMs?: number;\n}): Promise<void> {\n const text = String(opts.text ?? '');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n try {\n if (opts.slowly) {\n await locator.click({ timeout });\n await locator.pressSequentially(text, { timeout, delay: 75 });\n } else {\n await locator.fill(text, { timeout });\n }\n if (opts.submit) await locator.press('Enter', { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function selectOptionViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n values: string[];\n timeoutMs?: number;\n}): Promise<void> {\n if (!opts.values?.length) throw new Error('values are required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).selectOption(opts.values, {\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function dragViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n startRef: string;\n endRef: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.startRef).dragTo(refLocator(page, opts.endRef), {\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, `${opts.startRef} -> ${opts.endRef}`);\n }\n}\n\nexport async function fillFormViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fields: FormField[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n for (let i = 0; i < opts.fields.length; i++) {\n const field = opts.fields[i]!;\n const ref = field.ref.trim();\n const type = field.type.trim();\n const rawValue = field.value;\n const value = rawValue == null ? '' : String(rawValue);\n\n if (!ref) throw new Error(`fill(): field at index ${i} has empty ref`);\n if (!type) throw new Error(`fill(): field \"${ref}\" has empty type`);\n const locator = refLocator(page, ref);\n\n if (type === 'checkbox' || type === 'radio') {\n const checked = rawValue === true || rawValue === 1 || rawValue === '1' || rawValue === 'true';\n try {\n await locator.setChecked(checked, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n continue;\n }\n\n try {\n await locator.fill(value, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n }\n}\n\nexport async function scrollIntoViewViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).scrollIntoViewIfNeeded({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 20000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function highlightViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).highlight();\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function setInputFilesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref?: string;\n element?: string;\n paths: string[];\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = opts.ref\n ? refLocator(page, opts.ref)\n : opts.element\n ? page.locator(opts.element).first()\n : null;\n if (!locator) throw new Error('Either ref or element is required for setInputFiles');\n\n try {\n await locator.setInputFiles(opts.paths);\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref ?? opts.element ?? 'unknown');\n }\n}\n\nexport async function armDialogViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n accept: boolean;\n promptText?: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n page.removeListener('dialog', handler);\n reject(new Error(`No dialog appeared within ${timeout}ms`));\n }, timeout);\n\n const handler = async (dialog: { accept: (text?: string) => Promise<void>; dismiss: () => Promise<void> }) => {\n clearTimeout(timer);\n try {\n if (opts.accept) {\n await dialog.accept(opts.promptText);\n } else {\n await dialog.dismiss();\n }\n resolve();\n } catch (err) {\n reject(err);\n }\n };\n\n page.once('dialog', handler);\n });\n}\n\nexport async function armFileUploadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n paths?: string[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n page.removeListener('filechooser', handler);\n reject(new Error(`No file chooser appeared within ${timeout}ms`));\n }, timeout);\n\n const handler = async (fc: { setFiles: (files: string[]) => Promise<void> }) => {\n clearTimeout(timer);\n try {\n await fc.setFiles(opts.paths ?? []);\n resolve();\n } catch (err) {\n reject(err);\n }\n };\n\n page.once('filechooser', handler);\n });\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pressKeyViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n key: string;\n delayMs?: number;\n}): Promise<void> {\n const key = String(opts.key ?? '').trim();\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });\n}\n","import { resolve, normalize, sep } from 'node:path';\nimport { lookup } from 'node:dns/promises';\nimport type { SsrfPolicy } from './types.js';\n\nexport type LookupFn = typeof lookup;\n\n/**\n * Thrown when a navigation URL is blocked by SSRF policy.\n * Callers can catch this specifically to distinguish navigation blocks\n * from other errors.\n */\nexport class InvalidBrowserNavigationUrlError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidBrowserNavigationUrlError';\n }\n}\n\n/** Options for browser navigation SSRF policy. */\nexport type BrowserNavigationPolicyOptions = {\n ssrfPolicy?: SsrfPolicy;\n};\n\n/** Build a BrowserNavigationPolicyOptions from an SsrfPolicy. */\nexport function withBrowserNavigationPolicy(ssrfPolicy?: SsrfPolicy): BrowserNavigationPolicyOptions {\n return { ssrfPolicy };\n}\n\n// Only http: and https: are permitted for navigation; about:blank is the sole non-network exception.\nconst NETWORK_NAVIGATION_PROTOCOLS = new Set(['http:', 'https:']);\nconst SAFE_NON_NETWORK_URLS = new Set(['about:blank']);\n\n/**\n * Assert that a URL is allowed for browser navigation under the given SSRF policy.\n * Throws `InvalidBrowserNavigationUrlError` if the URL is blocked.\n */\nexport async function assertBrowserNavigationAllowed(opts: {\n url: string;\n lookupFn?: LookupFn;\n} & BrowserNavigationPolicyOptions): Promise<void> {\n const rawUrl = String(opts.url ?? '').trim();\n\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n throw new InvalidBrowserNavigationUrlError(`Invalid URL: \"${rawUrl}\"`);\n }\n\n // Block non-network protocols (file:, data:, javascript:, etc.) — only http/https allowed.\n if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) {\n if (SAFE_NON_NETWORK_URLS.has(parsed.href)) return;\n throw new InvalidBrowserNavigationUrlError(`Navigation blocked: unsupported protocol \"${parsed.protocol}\"`);\n }\n\n const policy = opts.ssrfPolicy;\n\n if (policy?.allowPrivateNetwork) return;\n\n const allowedHostnames = [\n ...(policy?.allowedHostnames ?? []),\n ...(policy?.hostnameAllowlist ?? []),\n ];\n\n if (allowedHostnames.length) {\n const hostname = parsed.hostname.toLowerCase();\n if (allowedHostnames.some(h => h.toLowerCase() === hostname)) return;\n }\n\n if (await isInternalUrlResolved(rawUrl, opts.lookupFn)) {\n throw new InvalidBrowserNavigationUrlError(\n `Navigation to internal/loopback address blocked: \"${rawUrl}\". Use ssrfPolicy: { allowPrivateNetwork: true } if this is intentional.`\n );\n }\n}\n\n/**\n * Validate that an output file path is safe — no directory traversal or escape.\n * Rejects paths containing `..` segments or relative paths that could escape\n * the intended output directory.\n *\n * @param path - The output path to validate\n * @param allowedRoots - Optional list of allowed root directories. If provided,\n * the resolved path must be within one of these roots.\n * @throws If the path is unsafe\n */\nexport function assertSafeOutputPath(path: string, allowedRoots?: string[]): void {\n if (!path || typeof path !== 'string') {\n throw new Error('Output path is required.');\n }\n\n const normalized = normalize(path);\n\n // Reject paths with traversal segments\n if (normalized.includes('..')) {\n throw new Error(`Unsafe output path: directory traversal detected in \"${path}\".`);\n }\n\n // If allowed roots are specified, resolved path must be within one of them\n if (allowedRoots?.length) {\n const resolved = resolve(normalized);\n const withinRoot = allowedRoots.some(root => {\n const normalizedRoot = resolve(root);\n return resolved === normalizedRoot || resolved.startsWith(normalizedRoot + sep);\n });\n if (!withinRoot) {\n throw new Error(`Unsafe output path: \"${path}\" is outside allowed directories.`);\n }\n }\n}\n\n/**\n * Expand an IPv6 address (with optional :: abbreviation) to full 8-group\n * colon-separated hex form. Returns null for invalid input.\n */\nfunction expandIPv6(ip: string): string | null {\n let normalized = ip;\n\n // Handle embedded IPv4 literal at end (e.g., 64:ff9b::192.168.1.1)\n const v4Match = normalized.match(/^(.+:)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})$/);\n if (v4Match) {\n const octets = v4Match[2].split('.').map(Number);\n if (octets.some(o => o > 255)) return null;\n const hexHi = ((octets[0] << 8) | octets[1]).toString(16).padStart(4, '0');\n const hexLo = ((octets[2] << 8) | octets[3]).toString(16).padStart(4, '0');\n normalized = v4Match[1] + hexHi + ':' + hexLo;\n }\n\n const halves = normalized.split('::');\n if (halves.length > 2) return null; // multiple :: is invalid\n\n if (halves.length === 2) {\n const left = halves[0] !== '' ? halves[0].split(':') : [];\n const right = halves[1] !== '' ? halves[1].split(':') : [];\n const needed = 8 - left.length - right.length;\n if (needed < 0) return null;\n const groups = [...left, ...Array(needed).fill('0'), ...right];\n if (groups.length !== 8) return null;\n return groups.map(g => g.padStart(4, '0')).join(':');\n }\n\n const groups = normalized.split(':');\n if (groups.length !== 8) return null;\n return groups.map(g => g.padStart(4, '0')).join(':');\n}\n\n/**\n * Convert two 16-bit hex group strings to a dotted-decimal IPv4 string.\n */\nfunction hexToIPv4(hiHex: string, loHex: string): string {\n const hi = parseInt(hiHex, 16);\n const lo = parseInt(loHex, 16);\n return `${(hi >> 8) & 0xff}.${hi & 0xff}.${(lo >> 8) & 0xff}.${lo & 0xff}`;\n}\n\n/**\n * Attempt to extract an IPv4 address embedded in an IPv6 transition address.\n * Handles: IPv4-mapped (::ffff:), NAT64 (64:ff9b::/96, 64:ff9b:1::/48),\n * 6to4 (2002::/16), and Teredo (2001:0000::/32).\n *\n * Returns:\n * - The embedded IPv4 string if found\n * - null if the address is not a known transition format\n * - '' (empty string) on parse error — callers MUST treat this as internal (fail closed)\n */\nfunction extractEmbeddedIPv4(lower: string): string | null {\n // IPv4-mapped: ::ffff:a.b.c.d (most common transition form)\n if (lower.startsWith('::ffff:')) {\n return lower.slice(7);\n }\n\n // For NAT64, 6to4, and Teredo we need to fully expand the address\n const expanded = expandIPv6(lower);\n if (expanded === null) return ''; // fail closed on invalid IPv6\n\n const groups = expanded.split(':');\n if (groups.length !== 8) return ''; // fail closed\n\n // NAT64 well-known prefix: 64:ff9b::/96\n // Expanded form: 0064:ff9b:0000:0000:0000:0000:wwxx:yyzz → IPv4 = ww.xx.yy.zz\n if (\n groups[0] === '0064' && groups[1] === 'ff9b' &&\n groups[2] === '0000' && groups[3] === '0000' &&\n groups[4] === '0000' && groups[5] === '0000'\n ) {\n return hexToIPv4(groups[6], groups[7]);\n }\n\n // NAT64 local-use prefix: 64:ff9b:1::/48\n // Expanded form: 0064:ff9b:0001:xxxx:xxxx:xxxx:wwxx:yyzz → IPv4 = ww.xx.yy.zz\n if (groups[0] === '0064' && groups[1] === 'ff9b' && groups[2] === '0001') {\n return hexToIPv4(groups[6], groups[7]);\n }\n\n // 6to4 prefix: 2002::/16\n // Expanded form: 2002:aabb:ccdd:xxxx:xxxx:xxxx:xxxx:xxxx → IPv4 = aa.bb.cc.dd\n if (groups[0] === '2002') {\n return hexToIPv4(groups[1], groups[2]);\n }\n\n // Teredo prefix: 2001:0000::/32\n // Expanded form: 2001:0000:...:...:...:...:~ww~xx:~yy~zz\n // Client IPv4 is in the last 32 bits XOR'd with 0xFFFFFFFF\n if (groups[0] === '2001' && groups[1] === '0000') {\n const hiXored = (parseInt(groups[6], 16) ^ 0xffff).toString(16).padStart(4, '0');\n const loXored = (parseInt(groups[7], 16) ^ 0xffff).toString(16).padStart(4, '0');\n return hexToIPv4(hiXored, loXored);\n }\n\n return null; // not a known transition format\n}\n\n/**\n * Validate a single IPv4 octet string: must be a plain decimal integer 0-255\n * with no leading zeros, hex prefixes, or other non-standard forms.\n * Returns false for any octet that doesn't round-trip cleanly.\n */\nfunction isStrictDecimalOctet(part: string): boolean {\n if (!/^[0-9]+$/.test(part)) return false;\n const n = parseInt(part, 10);\n if (n < 0 || n > 255) return false;\n // Reject leading zeros (e.g. \"0177\" would be octal in some parsers)\n if (String(n) !== part) return false;\n return true;\n}\n\n/**\n * Returns true if the string looks like a legacy/non-standard IPv4 literal\n * that should be treated as internal and blocked (fail closed).\n * Catches octal (0177.0.0.1), hex (0xff.0.0.1), short (127.1),\n * and packed decimal (2130706433) forms.\n */\nfunction isUnsupportedIPv4Literal(ip: string): boolean {\n // Packed decimal: single integer with no dots\n if (/^[0-9]+$/.test(ip)) return true;\n\n const parts = ip.split('.');\n // Must be exactly 4 dotted parts\n if (parts.length !== 4) return true;\n // Each part must be a strict decimal octet\n if (!parts.every(isStrictDecimalOctet)) return true;\n\n return false;\n}\n\n/**\n * Check whether an IP address string is internal/private/loopback.\n */\nfunction isInternalIP(ip: string): boolean {\n // Reject non-standard IPv4 literals before any range checks (fail closed)\n if (!ip.includes(':') && isUnsupportedIPv4Literal(ip)) return true;\n\n // IPv4\n if (/^127\\./.test(ip)) return true;\n if (/^10\\./.test(ip)) return true;\n if (/^172\\.(1[6-9]|2\\d|3[01])\\./.test(ip)) return true;\n if (/^192\\.168\\./.test(ip)) return true;\n if (/^169\\.254\\./.test(ip)) return true;\n if (/^100\\.(6[4-9]|[7-9]\\d|1[01]\\d|12[0-7])\\./.test(ip)) return true;\n if (ip === '0.0.0.0') return true;\n\n // IPv6\n const lower = ip.toLowerCase();\n if (lower === '::1') return true;\n if (lower.startsWith('fe80:')) return true; // link-local\n if (lower.startsWith('fc') || lower.startsWith('fd')) return true; // ULA\n\n // IPv6 transition addresses: NAT64, 6to4, Teredo, IPv4-mapped\n const embedded = extractEmbeddedIPv4(lower);\n if (embedded !== null) {\n if (embedded === '') return true; // parse error — fail closed\n return isInternalIP(embedded);\n }\n\n return false;\n}\n\n/**\n * Check whether a URL targets a loopback or private/internal network address.\n * Synchronous hostname-based check. Used to prevent SSRF attacks.\n */\nexport function isInternalUrl(url: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n // Fail closed: treat unparseable URLs as internal/blocked\n return true;\n }\n\n const hostname = parsed.hostname.toLowerCase();\n\n // Direct hostname checks\n // Note: URL.hostname strips IPv6 brackets, so [::1] becomes ::1\n if (hostname === 'localhost') return true;\n\n // Check if hostname is an IP literal\n if (isInternalIP(hostname)) return true;\n\n // .local, .internal, .localhost TLDs\n if (hostname.endsWith('.local') || hostname.endsWith('.internal') || hostname.endsWith('.localhost')) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Async version that also resolves DNS to catch rebinding attacks\n * where a public hostname resolves to an internal IP.\n */\nexport async function isInternalUrlResolved(url: string, lookupFn: LookupFn = lookup): Promise<boolean> {\n // First do the fast synchronous check\n if (isInternalUrl(url)) return true;\n\n // Then resolve DNS to catch rebinding\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return true;\n }\n\n try {\n const { address } = await lookupFn(parsed.hostname);\n if (isInternalIP(address)) return true;\n } catch {\n // DNS resolution failed — fail closed\n return true;\n }\n\n return false;\n}\n","import { connectBrowser, getPageForTargetId, ensurePageState, pageTargetId, findPageByTargetId, getAllPages, normalizeTimeoutMs } from '../connection.js';\nimport { assertBrowserNavigationAllowed } from '../security.js';\nimport type { BrowserTab, SsrfPolicy } from '../types.js';\n\nexport async function navigateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n url: string;\n timeoutMs?: number;\n ssrfPolicy?: SsrfPolicy;\n /** @deprecated Use ssrfPolicy: { allowPrivateNetwork: true } instead */\n allowInternal?: boolean;\n}): Promise<{ url: string }> {\n const url = String(opts.url ?? '').trim();\n if (!url) throw new Error('url is required');\n const policy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n await assertBrowserNavigationAllowed({ url, ssrfPolicy: policy });\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.goto(url, { timeout: normalizeTimeoutMs(opts.timeoutMs, 20000) });\n return { url: page.url() };\n}\n\nexport async function listPagesViaPlaywright(opts: { cdpUrl: string }): Promise<BrowserTab[]> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n const results: BrowserTab[] = [];\n for (const page of pages) {\n const tid = await pageTargetId(page).catch(() => null);\n if (tid) results.push({\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n });\n }\n return results;\n}\n\nexport async function createPageViaPlaywright(opts: {\n cdpUrl: string;\n url?: string;\n ssrfPolicy?: SsrfPolicy;\n /** @deprecated Use ssrfPolicy: { allowPrivateNetwork: true } instead */\n allowInternal?: boolean;\n}): Promise<BrowserTab> {\n const targetUrl = (opts.url ?? '').trim() || 'about:blank';\n if (targetUrl !== 'about:blank') {\n const policy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n await assertBrowserNavigationAllowed({ url: targetUrl, ssrfPolicy: policy });\n }\n const { browser } = await connectBrowser(opts.cdpUrl);\n const context = browser.contexts()[0] ?? await browser.newContext();\n const page = await context.newPage();\n ensurePageState(page);\n if (targetUrl !== 'about:blank') {\n await page.goto(targetUrl, { timeout: normalizeTimeoutMs(undefined, 20000) });\n }\n const tid = await pageTargetId(page).catch(() => null);\n if (!tid) throw new Error('Failed to get targetId for new page');\n return {\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n };\n}\n\nexport async function closePageViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n await page.close();\n}\n\nexport async function closePageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n await page.close();\n}\n\nexport async function focusPageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n try {\n await page.bringToFront();\n } catch (err) {\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Page.bringToFront');\n } catch {\n throw err;\n } finally {\n await session.detach().catch(() => {});\n }\n }\n}\n\nexport async function resizeViewportViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n width: number;\n height: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.setViewportSize({\n width: Math.max(1, Math.floor(opts.width)),\n height: Math.max(1, Math.floor(opts.height)),\n });\n}\n","import { getPageForTargetId, ensurePageState, normalizeTimeoutMs } from '../connection.js';\n\nexport async function waitForViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n timeMs?: number;\n text?: string;\n textGone?: string;\n selector?: string;\n url?: string;\n loadState?: 'load' | 'domcontentloaded' | 'networkidle';\n fn?: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 20000);\n\n if (typeof opts.timeMs === 'number' && Number.isFinite(opts.timeMs)) {\n await page.waitForTimeout(Math.max(0, opts.timeMs));\n }\n if (opts.text) {\n await page.getByText(opts.text).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.textGone) {\n await page.getByText(opts.textGone).first().waitFor({ state: 'hidden', timeout });\n }\n if (opts.selector) {\n const selector = String(opts.selector).trim();\n if (selector) await page.locator(selector).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.url) {\n const url = String(opts.url).trim();\n if (url) await page.waitForURL(url, { timeout });\n }\n if (opts.loadState) {\n await page.waitForLoadState(opts.loadState, { timeout });\n }\n if (opts.fn) {\n const fn = String(opts.fn).trim();\n if (fn) await page.waitForFunction(fn, undefined, { timeout });\n }\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport interface FrameEvalResult {\n frameUrl: string;\n frameName: string;\n result: unknown;\n}\n\n/**\n * Evaluate JavaScript in ALL frames (including cross-origin iframes).\n * Playwright can access cross-origin frames via CDP, bypassing same-origin policy.\n * Returns results from each frame where evaluation succeeded.\n */\nexport async function evaluateInAllFramesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n}): Promise<FrameEvalResult[]> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n const frames = page.frames();\n const results: FrameEvalResult[] = [];\n\n for (const frame of frames) {\n try {\n // Runs in the frame's browser context (sandboxed), not in Node.js\n const result = await frame.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n );\n results.push({\n frameUrl: frame.url(),\n frameName: frame.name(),\n result,\n });\n } catch {\n // Frame may have been detached or navigation in progress — skip\n }\n }\n\n return results;\n}\n\n/**\n * Evaluate JavaScript in the browser page context.\n * This is intentionally using eval() to execute user-provided browser-side code,\n * which is the core purpose of this function — running arbitrary JS in the page.\n * The code runs in the browser sandbox, not in Node.js.\n */\nexport async function evaluateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n ref?: string;\n timeoutMs?: number;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = opts.timeoutMs != null ? opts.timeoutMs : undefined;\n\n if (opts.ref) {\n const locator = refLocator(page, opts.ref);\n // Runs in the browser page context (sandboxed), not in Node.js\n return await locator.evaluate(\n // eslint-disable-next-line no-eval\n (el: Element, fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate(el) : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n { timeout },\n );\n }\n\n // Runs in the browser page context (sandboxed), not in Node.js\n const evalPromise = page.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n );\n\n if (!opts.signal) return evalPromise;\n return Promise.race([\n evalPromise,\n new Promise<never>((_, reject) => {\n opts.signal!.addEventListener('abort', () => reject(new Error('Evaluate aborted')), { once: true });\n }),\n ]);\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n toAIFriendlyError,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport { assertSafeOutputPath } from '../security.js';\nimport type { DownloadResult } from '../types.js';\n\nexport async function downloadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n path: string;\n timeoutMs?: number;\n allowedOutputRoots?: string[];\n}): Promise<DownloadResult> {\n assertSafeOutputPath(opts.path, opts.allowedOutputRoots);\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n const locator = refLocator(page, opts.ref);\n\n try {\n const [download] = await Promise.all([\n page.waitForEvent('download', { timeout }),\n locator.click({ timeout }),\n ]);\n\n await download.saveAs(opts.path);\n\n return {\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n path: opts.path,\n };\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function waitForDownloadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n path?: string;\n timeoutMs?: number;\n allowedOutputRoots?: string[];\n}): Promise<DownloadResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n const download = await page.waitForEvent('download', { timeout });\n const savePath = opts.path ?? download.suggestedFilename();\n assertSafeOutputPath(savePath, opts.allowedOutputRoots);\n await download.saveAs(savePath);\n\n return {\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n path: savePath,\n };\n}\n","import { devices } from 'playwright-core';\nimport {\n getPageForTargetId,\n ensurePageState,\n} from '../connection.js';\nimport type { ColorScheme } from '../types.js';\n\nexport async function emulateMediaViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n colorScheme: ColorScheme;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.emulateMedia({ colorScheme: opts.colorScheme });\n}\n\nexport async function setDeviceViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n name: string;\n}): Promise<void> {\n const device = devices[opts.name];\n if (!device) {\n const available = Object.keys(devices).slice(0, 10).join(', ');\n throw new Error(`Unknown device \"${opts.name}\". Some available devices: ${available}...`);\n }\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n if (device.viewport) {\n await page.setViewportSize(device.viewport);\n }\n if (device.userAgent) {\n const context = page.context();\n // Playwright doesn't expose setUserAgent on context directly via CDP,\n // so we use CDP Emulation.setUserAgentOverride\n const session = await context.newCDPSession(page);\n try {\n await session.send('Emulation.setUserAgentOverride', {\n userAgent: device.userAgent,\n });\n } finally {\n await session.detach().catch(() => {});\n }\n }\n}\n\nexport async function setExtraHTTPHeadersViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n headers: Record<string, string>;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.setExtraHTTPHeaders(opts.headers);\n}\n\nexport async function setGeolocationViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n latitude?: number;\n longitude?: number;\n accuracy?: number;\n origin?: string;\n clear?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n\n if (opts.clear) {\n await context.setGeolocation(null);\n await context.clearPermissions();\n return;\n }\n\n if (opts.latitude === undefined || opts.longitude === undefined) {\n throw new Error('latitude and longitude are required when not clearing geolocation.');\n }\n\n await context.grantPermissions(['geolocation'], opts.origin ? { origin: opts.origin } : undefined);\n await context.setGeolocation({\n latitude: opts.latitude,\n longitude: opts.longitude,\n accuracy: opts.accuracy,\n });\n}\n\n/**\n * Set or clear HTTP credentials for the browser context.\n * Note: Playwright's `setHTTPCredentials()` is deprecated — prefer providing credentials\n * at context creation time. This function is retained for CDP-connected contexts where\n * context creation is not controlled by the library.\n */\nexport async function setHttpCredentialsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n username?: string;\n password?: string;\n clear?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n\n if (opts.clear) {\n await context.setHTTPCredentials({ username: '', password: '' });\n return;\n }\n\n await context.setHTTPCredentials({\n username: opts.username ?? '',\n password: opts.password ?? '',\n });\n}\n\nexport async function setLocaleViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n locale: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Emulation.setLocaleOverride', { locale: opts.locale });\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nexport async function setOfflineViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n offline: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.context().setOffline(opts.offline);\n}\n\nexport async function setTimezoneViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n timezoneId: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Emulation.setTimezoneOverride', { timezoneId: opts.timezoneId });\n } finally {\n await session.detach().catch(() => {});\n }\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport async function takeScreenshotViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fullPage?: boolean;\n ref?: string;\n element?: string;\n type?: 'png' | 'jpeg';\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n const type = opts.type ?? 'png';\n\n if (opts.ref) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };\n }\n if (opts.element) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await page.locator(opts.element).first().screenshot({ type }) };\n }\n return { buffer: await page.screenshot({ type, fullPage: Boolean(opts.fullPage) }) };\n}\n\nexport async function screenshotWithLabelsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n refs: string[];\n maxLabels?: number;\n type?: 'png' | 'jpeg';\n}): Promise<{ buffer: Buffer; labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }>; skipped: string[] }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const maxLabels = opts.maxLabels ?? 50;\n const type = opts.type ?? 'png';\n const refs = opts.refs.slice(0, maxLabels);\n const skipped = opts.refs.slice(maxLabels);\n\n // Collect bounding boxes for each ref\n const labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }> = [];\n for (let i = 0; i < refs.length; i++) {\n const ref = refs[i]!;\n try {\n const locator = refLocator(page, ref);\n const box = await locator.boundingBox({ timeout: 2000 });\n if (box) {\n labels.push({ ref, index: i + 1, box });\n } else {\n skipped.push(ref);\n }\n } catch {\n skipped.push(ref);\n }\n }\n\n // Inject visible label overlays into the page\n await page.evaluate((labelData: Array<{ index: number; box: { x: number; y: number; width: number; height: number } }>) => {\n const container = document.createElement('div');\n container.id = '__browserclaw_labels__';\n container.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2147483647;';\n for (const { index, box } of labelData) {\n // Border around element\n const border = document.createElement('div');\n border.style.cssText = `position:absolute;left:${box.x}px;top:${box.y}px;width:${box.width}px;height:${box.height}px;border:2px solid #FF4500;box-sizing:border-box;`;\n container.appendChild(border);\n // Label badge\n const badge = document.createElement('div');\n badge.textContent = String(index);\n badge.style.cssText = `position:absolute;left:${box.x}px;top:${Math.max(0, box.y - 18)}px;background:#FF4500;color:#fff;font:bold 12px/16px monospace;padding:0 4px;border-radius:2px;`;\n container.appendChild(badge);\n }\n document.body.appendChild(container);\n }, labels.map(l => ({ index: l.index, box: l.box })));\n\n // Take the screenshot with labels visible\n const buffer = await page.screenshot({ type });\n\n // Remove the label overlays (best-effort — page may have navigated)\n await page.evaluate(() => {\n const el = document.getElementById('__browserclaw_labels__');\n if (el) el.remove();\n }).catch(() => {});\n\n return { buffer, labels, skipped };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pdfViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { buffer: await page.pdf({ printBackground: true }) };\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n} from '../connection.js';\nimport { assertSafeOutputPath } from '../security.js';\n\nexport async function traceStartViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n screenshots?: boolean;\n snapshots?: boolean;\n sources?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n await context.tracing.start({\n screenshots: opts.screenshots ?? true,\n snapshots: opts.snapshots ?? true,\n sources: opts.sources,\n });\n}\n\nexport async function traceStopViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n path: string;\n allowedOutputRoots?: string[];\n}): Promise<void> {\n assertSafeOutputPath(opts.path, opts.allowedOutputRoots);\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n await context.tracing.stop({ path: opts.path });\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport type { ResponseBodyResult } from '../types.js';\n\nexport async function responseBodyViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n url: string;\n timeoutMs?: number;\n maxChars?: number;\n}): Promise<ResponseBodyResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n const response = await page.waitForResponse(opts.url, { timeout });\n let body = await response.text();\n let truncated = false;\n\n if (opts.maxChars && body.length > opts.maxChars) {\n body = body.slice(0, opts.maxChars);\n truncated = true;\n }\n\n const headers: Record<string, string> = {};\n const allHeaders = response.headers();\n for (const [key, value] of Object.entries(allHeaders)) {\n headers[key] = value;\n }\n\n return {\n url: response.url(),\n status: response.status(),\n headers,\n body,\n truncated,\n };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { ConsoleMessage, PageError, NetworkRequest } from '../types.js';\n\nfunction consolePriority(level: string): number {\n switch (level) {\n case 'error': return 3;\n case 'warning':\n case 'warn': return 2;\n case 'info':\n case 'log': return 1;\n case 'debug': return 0;\n default: return 1;\n }\n}\n\nexport async function getConsoleMessagesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n level?: string;\n clear?: boolean;\n}): Promise<ConsoleMessage[]> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const messages = opts.level\n ? state.console.filter(msg => consolePriority(msg.type) >= consolePriority(opts.level!))\n : [...state.console];\n if (opts.clear) state.console = [];\n return messages;\n}\n\nexport async function getPageErrorsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n clear?: boolean;\n}): Promise<{ errors: PageError[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const errors = [...state.errors];\n if (opts.clear) state.errors = [];\n return { errors };\n}\n\nexport async function getNetworkRequestsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n filter?: string;\n clear?: boolean;\n}): Promise<{ requests: NetworkRequest[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const raw = [...state.requests];\n const filter = typeof opts.filter === 'string' ? opts.filter.trim() : '';\n const requests = filter ? raw.filter(r => r.url.includes(filter)) : raw;\n if (opts.clear) {\n state.requests = [];\n state.requestIds = new WeakMap();\n }\n return { requests };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { CookieData, StorageKind } from '../types.js';\n\n// ── Cookies ──\n\nexport async function cookiesGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ cookies: Awaited<ReturnType<import('playwright-core').BrowserContext['cookies']>> }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { cookies: await page.context().cookies() };\n}\n\nexport async function cookiesSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n cookie: CookieData;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const cookie = opts.cookie;\n if (!cookie.name || cookie.value === undefined) throw new Error('cookie name and value are required');\n const hasUrl = typeof cookie.url === 'string' && cookie.url.trim();\n const hasDomain = typeof cookie.domain === 'string' && cookie.domain.trim();\n if (!hasUrl && !hasDomain) throw new Error('cookie requires url or domain');\n await page.context().addCookies([cookie]);\n}\n\nexport async function cookiesClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.context().clearCookies();\n}\n\n// ── localStorage / sessionStorage ──\n\nexport async function storageGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key?: string;\n}): Promise<{ values: Record<string, string> }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return {\n values: await page.evaluate(\n ({ kind, key }: { kind: string; key?: string }) => {\n const store = kind === 'session' ? window.sessionStorage : window.localStorage;\n if (key) {\n const value = store.getItem(key);\n return value === null ? {} : { [key]: value };\n }\n const out: Record<string, string> = {};\n for (let i = 0; i < store.length; i++) {\n const k = store.key(i);\n if (!k) continue;\n const v = store.getItem(k);\n if (v !== null) out[k] = v;\n }\n return out;\n },\n { kind: opts.kind, key: opts.key },\n ) ?? {},\n };\n}\n\nexport async function storageSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key: string;\n value: string;\n}): Promise<void> {\n const key = String(opts.key ?? '');\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind, key: k, value }: { kind: string; key: string; value: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).setItem(k, value);\n },\n { kind: opts.kind, key, value: String(opts.value ?? '') },\n );\n}\n\nexport async function storageClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind }: { kind: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).clear();\n },\n { kind: opts.kind },\n );\n}\n","import { launchChrome, stopChrome, isChromeReachable } from './chrome-launcher.js';\nimport { connectBrowser, disconnectBrowser, getPageForTargetId, ensurePageState, restoreRoleRefsForTarget, refLocator, pageTargetId, getAllPages, normalizeTimeoutMs } from './connection.js';\nimport { snapshotAi } from './snapshot/ai-snapshot.js';\nimport { snapshotRole, snapshotAria } from './snapshot/aria-snapshot.js';\nimport { clickViaPlaywright, hoverViaPlaywright, typeViaPlaywright, selectOptionViaPlaywright, dragViaPlaywright, fillFormViaPlaywright, scrollIntoViewViaPlaywright, highlightViaPlaywright, setInputFilesViaPlaywright, armDialogViaPlaywright, armFileUploadViaPlaywright } from './actions/interaction.js';\nimport { pressKeyViaPlaywright } from './actions/keyboard.js';\nimport { navigateViaPlaywright, listPagesViaPlaywright, createPageViaPlaywright, closePageByTargetIdViaPlaywright, focusPageByTargetIdViaPlaywright, resizeViewportViaPlaywright } from './actions/navigation.js';\nimport { waitForViaPlaywright } from './actions/wait.js';\nimport { evaluateViaPlaywright, evaluateInAllFramesViaPlaywright, type FrameEvalResult } from './actions/evaluate.js';\nimport { downloadViaPlaywright, waitForDownloadViaPlaywright } from './actions/download.js';\nimport { emulateMediaViaPlaywright, setDeviceViaPlaywright, setExtraHTTPHeadersViaPlaywright, setGeolocationViaPlaywright, setHttpCredentialsViaPlaywright, setLocaleViaPlaywright, setOfflineViaPlaywright, setTimezoneViaPlaywright } from './actions/emulation.js';\nimport { takeScreenshotViaPlaywright, screenshotWithLabelsViaPlaywright } from './capture/screenshot.js';\nimport { pdfViaPlaywright } from './capture/pdf.js';\nimport { traceStartViaPlaywright, traceStopViaPlaywright } from './capture/trace.js';\nimport { responseBodyViaPlaywright } from './capture/response.js';\nimport { getConsoleMessagesViaPlaywright, getPageErrorsViaPlaywright, getNetworkRequestsViaPlaywright } from './capture/activity.js';\nimport { cookiesGetViaPlaywright, cookiesSetViaPlaywright, cookiesClearViaPlaywright, storageGetViaPlaywright, storageSetViaPlaywright, storageClearViaPlaywright } from './storage/index.js';\nimport type {\n LaunchOptions, ConnectOptions, SnapshotResult, SnapshotOptions, AriaSnapshotResult,\n BrowserTab, FormField, ClickOptions, TypeOptions, WaitOptions,\n ScreenshotOptions, ConsoleMessage, PageError, NetworkRequest,\n CookieData, StorageKind, RunningChrome, SsrfPolicy,\n DownloadResult, DialogOptions, ResponseBodyResult, TraceStartOptions,\n ColorScheme, GeolocationOptions, HttpCredentials,\n} from './types.js';\n\n/**\n * Represents a single browser page/tab with ref-based automation.\n *\n * The workflow is: **snapshot → read refs → act on refs**.\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n *\n * // 1. Take a snapshot to get refs\n * const { snapshot, refs } = await page.snapshot();\n * // snapshot: AI-readable text tree\n * // refs: { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * // 2. Act on refs\n * await page.click('e1');\n * await page.type('e3', 'hello');\n * ```\n */\nexport class CrawlPage {\n private readonly cdpUrl: string;\n private readonly targetId: string;\n private readonly ssrfPolicy: SsrfPolicy | undefined;\n\n /** @internal */\n constructor(cdpUrl: string, targetId: string, ssrfPolicy?: SsrfPolicy) {\n this.cdpUrl = cdpUrl;\n this.targetId = targetId;\n this.ssrfPolicy = ssrfPolicy;\n }\n\n /** The CDP target ID for this page. Use this to identify the page in multi-tab scenarios. */\n get id(): string {\n return this.targetId;\n }\n\n // ── Snapshot ──────────────────────────────────────────────────\n\n /**\n * Take an AI-readable snapshot of the page.\n *\n * Returns a text tree with numbered refs (`e1`, `e2`, ...) that map to\n * interactive elements. Use these refs with actions like `click()` and `type()`.\n *\n * @param opts - Snapshot options (mode, filtering, depth limits)\n * @returns Snapshot text, ref map, and statistics\n *\n * @example\n * ```ts\n * // Default snapshot (aria mode)\n * const { snapshot, refs } = await page.snapshot();\n *\n * // Interactive elements only, compact\n * const result = await page.snapshot({ interactive: true, compact: true });\n *\n * // Role-based mode (uses getByRole resolution)\n * const result = await page.snapshot({ mode: 'role' });\n * ```\n */\n async snapshot(opts?: SnapshotOptions): Promise<SnapshotResult> {\n if (opts?.mode === 'role') {\n return snapshotRole({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n selector: opts.selector,\n frameSelector: opts.frameSelector,\n refsMode: opts.refsMode,\n options: {\n interactive: opts.interactive,\n compact: opts.compact,\n maxDepth: opts.maxDepth,\n },\n });\n }\n if (opts?.selector || opts?.frameSelector) {\n throw new Error('selector and frameSelector are only supported in role mode. Use { mode: \"role\" } or omit these options.');\n }\n return snapshotAi({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n maxChars: opts?.maxChars,\n options: {\n interactive: opts?.interactive,\n compact: opts?.compact,\n maxDepth: opts?.maxDepth,\n },\n });\n }\n\n /**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n *\n * Unlike `snapshot()`, this returns structured node data rather than\n * an AI-readable text tree. Useful for programmatic accessibility analysis.\n *\n * @param opts - Options (limit: max nodes to return, default 500)\n * @returns Array of accessibility tree nodes\n */\n async ariaSnapshot(opts?: { limit?: number }): Promise<AriaSnapshotResult> {\n return snapshotAria({ cdpUrl: this.cdpUrl, targetId: this.targetId, limit: opts?.limit });\n }\n\n // ── Interactions ─────────────────────────────────────────────\n\n /**\n * Click an element by ref.\n *\n * @param ref - Ref ID from a snapshot (e.g. `'e1'`)\n * @param opts - Click options (double-click, button, modifiers)\n *\n * @example\n * ```ts\n * await page.click('e1');\n * await page.click('e2', { doubleClick: true });\n * await page.click('e3', { button: 'right' });\n * await page.click('e4', { modifiers: ['Control'] });\n * ```\n */\n async click(ref: string, opts?: ClickOptions): Promise<void> {\n return clickViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n doubleClick: opts?.doubleClick,\n button: opts?.button,\n modifiers: opts?.modifiers,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Type text into an input element by ref.\n *\n * By default, uses Playwright's `fill()` for instant input. Use `slowly: true`\n * to simulate real keystroke typing with a 75ms delay per character.\n *\n * @param ref - Ref ID of the input element (e.g. `'e3'`)\n * @param text - Text to type\n * @param opts - Type options (submit, slowly)\n *\n * @example\n * ```ts\n * await page.type('e3', 'hello world');\n * await page.type('e3', 'slow typing', { slowly: true });\n * await page.type('e3', 'search query', { submit: true }); // press Enter after\n * ```\n */\n async type(ref: string, text: string, opts?: TypeOptions): Promise<void> {\n return typeViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n text,\n submit: opts?.submit,\n slowly: opts?.slowly,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Hover over an element by ref.\n *\n * @param ref - Ref ID from a snapshot\n * @param opts - Timeout options\n */\n async hover(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return hoverViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Select option(s) in a `<select>` dropdown by ref.\n *\n * @param ref - Ref ID of the select element\n * @param values - One or more option labels/values to select\n *\n * @example\n * ```ts\n * await page.select('e5', 'Option A');\n * await page.select('e5', 'Option A', 'Option B'); // multi-select\n * ```\n */\n async select(ref: string, ...values: string[]): Promise<void> {\n return selectOptionViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n values,\n });\n }\n\n /**\n * Drag one element to another.\n *\n * @param startRef - Ref ID of the element to drag\n * @param endRef - Ref ID of the drop target\n * @param opts - Timeout options\n */\n async drag(startRef: string, endRef: string, opts?: { timeoutMs?: number }): Promise<void> {\n return dragViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n startRef,\n endRef,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Fill multiple form fields at once.\n *\n * Supports text inputs, checkboxes, and radio buttons.\n *\n * @param fields - Array of form fields to fill\n *\n * @example\n * ```ts\n * await page.fill([\n * { ref: 'e2', type: 'text', value: 'Jane Doe' },\n * { ref: 'e4', type: 'text', value: 'jane@example.com' },\n * { ref: 'e6', type: 'checkbox', value: true },\n * ]);\n * ```\n */\n async fill(fields: FormField[]): Promise<void> {\n return fillFormViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fields,\n });\n }\n\n /**\n * Scroll an element into the visible viewport.\n *\n * @param ref - Ref ID of the element to scroll to\n * @param opts - Timeout options\n */\n async scrollIntoView(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return scrollIntoViewViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Highlight an element in the browser (Playwright built-in highlight).\n *\n * @param ref - Ref ID of the element to highlight\n */\n async highlight(ref: string): Promise<void> {\n return highlightViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n });\n }\n\n /**\n * Set files on an `<input type=\"file\">` element.\n *\n * @param ref - Ref ID of the file input element\n * @param paths - Array of file paths to upload\n */\n async uploadFile(ref: string, paths: string[]): Promise<void> {\n return setInputFilesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n paths,\n });\n }\n\n /**\n * Arm a one-shot dialog handler (alert, confirm, prompt).\n *\n * Returns a promise — store it (don't await), trigger the dialog, then await it.\n *\n * @param opts - Dialog options (accept/dismiss, prompt text, timeout)\n *\n * @example\n * ```ts\n * const dialogDone = page.armDialog({ accept: true }); // don't await here\n * await page.click('e5'); // triggers confirm()\n * await dialogDone; // wait for dialog to be handled\n * ```\n */\n async armDialog(opts: DialogOptions): Promise<void> {\n return armDialogViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n accept: opts.accept,\n promptText: opts.promptText,\n timeoutMs: opts.timeoutMs,\n });\n }\n\n /**\n * Arm a one-shot file chooser handler.\n *\n * Returns a promise — store it (don't await), trigger the file picker, then await it.\n *\n * @param paths - File paths to set when the chooser appears (empty to clear)\n * @param opts - Timeout options\n *\n * @example\n * ```ts\n * const uploadDone = page.armFileUpload(['/path/to/file.pdf']); // don't await here\n * await page.click('e3'); // triggers file picker\n * await uploadDone; // wait for files to be set\n * ```\n */\n async armFileUpload(paths?: string[], opts?: { timeoutMs?: number }): Promise<void> {\n return armFileUploadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n paths,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n // ── Keyboard ─────────────────────────────────────────────────\n\n /**\n * Press a keyboard key or key combination.\n *\n * Uses Playwright's key names. Supports combinations with `+`.\n *\n * @param key - Key to press (e.g. `'Enter'`, `'Tab'`, `'Control+a'`, `'Meta+c'`)\n * @param opts - Options (delayMs: hold time between keydown and keyup)\n *\n * @example\n * ```ts\n * await page.press('Enter');\n * await page.press('Control+a');\n * await page.press('Meta+Shift+p');\n * ```\n */\n async press(key: string, opts?: { delayMs?: number }): Promise<void> {\n return pressKeyViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n key,\n delayMs: opts?.delayMs,\n });\n }\n\n // ── Navigation ───────────────────────────────────────────────\n\n /**\n * Get the current URL of the page.\n */\n async url(): Promise<string> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return page.url();\n }\n\n /**\n * Get the page title.\n */\n async title(): Promise<string> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return page.title();\n }\n\n /**\n * Navigate to a URL.\n *\n * @param url - The URL to navigate to\n * @param opts - Timeout options\n * @returns The final URL after navigation (may differ due to redirects)\n */\n async goto(url: string, opts?: { timeoutMs?: number }): Promise<{ url: string }> {\n return navigateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n url,\n timeoutMs: opts?.timeoutMs,\n ssrfPolicy: this.ssrfPolicy,\n });\n }\n\n /**\n * Reload the current page.\n *\n * @param opts - Timeout options\n */\n async reload(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.reload({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n /**\n * Navigate back in browser history.\n *\n * @param opts - Timeout options\n */\n async goBack(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.goBack({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n /**\n * Navigate forward in browser history.\n *\n * @param opts - Timeout options\n */\n async goForward(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.goForward({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n // ── Wait ─────────────────────────────────────────────────────\n\n /**\n * Wait for various conditions on the page.\n *\n * Multiple conditions can be specified — they are checked in order.\n *\n * @param opts - Wait conditions (text, URL, load state, selector, etc.)\n *\n * @example\n * ```ts\n * await page.waitFor({ loadState: 'networkidle' });\n * await page.waitFor({ text: 'Welcome back' });\n * await page.waitFor({ url: '**\\/dashboard' });\n * await page.waitFor({ timeMs: 1000 }); // sleep\n * ```\n */\n async waitFor(opts: WaitOptions): Promise<void> {\n return waitForViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ...opts,\n });\n }\n\n // ── Evaluate ─────────────────────────────────────────────────\n\n /**\n * Run JavaScript in the browser page context.\n *\n * The function string is evaluated in the browser's sandbox, not in Node.js.\n * Pass a `ref` to receive the element as the first argument.\n *\n * @param fn - JavaScript function body as a string\n * @param opts - Options (ref: scope evaluation to a specific element)\n * @returns The return value of the evaluated function\n *\n * @example\n * ```ts\n * const title = await page.evaluate('() => document.title');\n * const text = await page.evaluate('(el) => el.textContent', { ref: 'e1' });\n * const count = await page.evaluate('() => document.querySelectorAll(\"img\").length');\n * ```\n */\n async evaluate(fn: string, opts?: { ref?: string; timeoutMs?: number; signal?: AbortSignal }): Promise<unknown> {\n return evaluateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n ref: opts?.ref,\n timeoutMs: opts?.timeoutMs,\n signal: opts?.signal,\n });\n }\n\n /**\n * Run JavaScript in ALL frames on the page (including cross-origin iframes).\n *\n * Playwright can access cross-origin frames via CDP, bypassing the same-origin policy.\n * This is essential for filling payment iframes (Stripe, etc.).\n *\n * @param fn - JavaScript function body as a string\n * @returns Array of results from each frame where evaluation succeeded\n *\n * @example\n * ```ts\n * const results = await page.evaluateInAllFrames(`() => {\n * const el = document.querySelector('input[name=\"cardnumber\"]');\n * return el ? 'found' : null;\n * }`);\n * ```\n */\n async evaluateInAllFrames(fn: string): Promise<FrameEvalResult[]> {\n return evaluateInAllFramesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n });\n }\n\n // ── Capture ──────────────────────────────────────────────────\n\n /**\n * Take a screenshot of the page or a specific element.\n *\n * @param opts - Screenshot options (fullPage, ref, element, type)\n * @returns PNG or JPEG image as a Buffer\n *\n * @example\n * ```ts\n * const screenshot = await page.screenshot();\n * const fullPage = await page.screenshot({ fullPage: true });\n * const element = await page.screenshot({ ref: 'e1' });\n * ```\n */\n async screenshot(opts?: ScreenshotOptions): Promise<Buffer> {\n const result = await takeScreenshotViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fullPage: opts?.fullPage,\n ref: opts?.ref,\n element: opts?.element,\n type: opts?.type,\n });\n return result.buffer;\n }\n\n /**\n * Export the page as a PDF.\n *\n * Only works in headless mode.\n *\n * @returns PDF document as a Buffer\n */\n async pdf(): Promise<Buffer> {\n const result = await pdfViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.buffer;\n }\n\n /**\n * Take a screenshot with numbered labels overlaid on referenced elements.\n *\n * Useful for visual debugging — each ref gets a numbered badge and border.\n *\n * @param refs - Array of ref IDs to label\n * @param opts - Options (maxLabels: limit, type: image format)\n * @returns Screenshot buffer, label positions, and any skipped refs\n *\n * @example\n * ```ts\n * const { buffer, labels, skipped } = await page.screenshotWithLabels(['e1', 'e2', 'e3']);\n * fs.writeFileSync('labeled.png', buffer);\n * ```\n */\n async screenshotWithLabels(refs: string[], opts?: { maxLabels?: number; type?: 'png' | 'jpeg' }): Promise<{\n buffer: Buffer;\n labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }>;\n skipped: string[];\n }> {\n return screenshotWithLabelsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n refs,\n maxLabels: opts?.maxLabels,\n type: opts?.type,\n });\n }\n\n /**\n * Start recording a Playwright trace.\n *\n * Traces capture screenshots, DOM snapshots, and network activity.\n * Stop with `traceStop()` to save the trace file.\n *\n * @param opts - Trace options (screenshots, snapshots, sources)\n */\n async traceStart(opts?: TraceStartOptions): Promise<void> {\n return traceStartViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n screenshots: opts?.screenshots,\n snapshots: opts?.snapshots,\n sources: opts?.sources,\n });\n }\n\n /**\n * Stop recording a trace and save it to a file.\n *\n * @param path - File path to save the trace (e.g. `'trace.zip'`)\n * @param opts - Options (allowedOutputRoots: constrain output to specific directories)\n */\n async traceStop(path: string, opts?: { allowedOutputRoots?: string[] }): Promise<void> {\n return traceStopViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n path,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n /**\n * Wait for a network response matching a URL pattern and return its body.\n *\n * @param url - URL string or pattern to match\n * @param opts - Options (timeoutMs, maxChars)\n * @returns Response body, status, headers, and truncation info\n *\n * @example\n * ```ts\n * const resp = await page.responseBody('/api/data');\n * console.log(resp.status, resp.body);\n * ```\n */\n async responseBody(url: string, opts?: { timeoutMs?: number; maxChars?: number }): Promise<ResponseBodyResult> {\n return responseBodyViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n url,\n timeoutMs: opts?.timeoutMs,\n maxChars: opts?.maxChars,\n });\n }\n\n /**\n * Get console messages captured from the page.\n *\n * Messages are buffered automatically. Use `level` to filter by minimum severity.\n *\n * @param opts - Filter options (level, clear)\n * @returns Array of captured console messages\n */\n async consoleLogs(opts?: { level?: string; clear?: boolean }): Promise<ConsoleMessage[]> {\n return getConsoleMessagesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n level: opts?.level,\n clear: opts?.clear,\n });\n }\n\n /**\n * Get uncaught errors from the page.\n *\n * @param opts - Options (clear: reset the error buffer after reading)\n * @returns Array of captured page errors\n */\n async pageErrors(opts?: { clear?: boolean }): Promise<PageError[]> {\n const result = await getPageErrorsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n clear: opts?.clear,\n });\n return result.errors;\n }\n\n /**\n * Get network requests captured from the page.\n *\n * @param opts - Options (filter: URL substring match, clear: reset the buffer)\n * @returns Array of captured network requests\n *\n * @example\n * ```ts\n * const all = await page.networkRequests();\n * const apiCalls = await page.networkRequests({ filter: '/api/' });\n * const fresh = await page.networkRequests({ clear: true }); // read and clear\n * ```\n */\n async networkRequests(opts?: { filter?: string; clear?: boolean }): Promise<NetworkRequest[]> {\n const result = await getNetworkRequestsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n filter: opts?.filter,\n clear: opts?.clear,\n });\n return result.requests;\n }\n\n // ── Viewport ─────────────────────────────────────────────────\n\n /**\n * Resize the browser viewport.\n *\n * @param width - Viewport width in pixels\n * @param height - Viewport height in pixels\n */\n async resize(width: number, height: number): Promise<void> {\n return resizeViewportViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n width,\n height,\n });\n }\n\n // ── Storage ──────────────────────────────────────────────────\n\n /**\n * Get all cookies for the current browser context.\n *\n * @returns Array of cookie objects\n */\n async cookies(): Promise<Awaited<ReturnType<import('playwright-core').BrowserContext['cookies']>>> {\n const result = await cookiesGetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.cookies;\n }\n\n /**\n * Set a cookie in the browser context.\n *\n * @param cookie - Cookie data (must include `name`, `value`, and either `url` or `domain`+`path`)\n *\n * @example\n * ```ts\n * await page.setCookie({\n * name: 'token',\n * value: 'abc123',\n * url: 'https://example.com',\n * });\n * ```\n */\n async setCookie(cookie: CookieData): Promise<void> {\n return cookiesSetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId, cookie });\n }\n\n /** Clear all cookies in the browser context. */\n async clearCookies(): Promise<void> {\n return cookiesClearViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n }\n\n /**\n * Get values from localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Optional specific key to retrieve (returns all if omitted)\n * @returns Key-value map of storage entries\n */\n async storageGet(kind: StorageKind, key?: string): Promise<Record<string, string>> {\n const result = await storageGetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key,\n });\n return result.values;\n }\n\n /**\n * Set a value in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Storage key\n * @param value - Storage value\n */\n async storageSet(kind: StorageKind, key: string, value: string): Promise<void> {\n return storageSetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key, value,\n });\n }\n\n /**\n * Clear all entries in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n */\n async storageClear(kind: StorageKind): Promise<void> {\n return storageClearViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind,\n });\n }\n\n // ── Downloads ───────────────────────────────────────────────\n\n /**\n * Click a ref and save the resulting file download.\n *\n * @param ref - Ref ID of the element that triggers the download\n * @param path - Local file path to save the download to\n * @param opts - Timeout options\n * @returns Download result with URL, suggested filename, and saved path\n *\n * @example\n * ```ts\n * const result = await page.download('e7', '/tmp/report.pdf');\n * console.log(result.suggestedFilename); // 'report.pdf'\n * ```\n */\n async download(ref: string, path: string, opts?: { timeoutMs?: number; allowedOutputRoots?: string[] }): Promise<DownloadResult> {\n return downloadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n path,\n timeoutMs: opts?.timeoutMs,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n /**\n * Wait for the next download event (without clicking).\n *\n * Returns a promise — store it (don't await), trigger the download, then await it.\n *\n * @param opts - Options (path: save location, timeoutMs)\n * @returns Download result with URL, suggested filename, and saved path\n */\n async waitForDownload(opts?: { path?: string; timeoutMs?: number; allowedOutputRoots?: string[] }): Promise<DownloadResult> {\n return waitForDownloadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n path: opts?.path,\n timeoutMs: opts?.timeoutMs,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n // ── Emulation ───────────────────────────────────────────────\n\n /**\n * Set the browser to offline or online mode.\n *\n * @param offline - `true` to go offline, `false` to go online\n */\n async setOffline(offline: boolean): Promise<void> {\n return setOfflineViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n offline,\n });\n }\n\n /**\n * Set extra HTTP headers for all requests.\n *\n * @param headers - Headers to add to every request\n *\n * @example\n * ```ts\n * await page.setExtraHeaders({ 'X-Custom': 'value' });\n * ```\n */\n async setExtraHeaders(headers: Record<string, string>): Promise<void> {\n return setExtraHTTPHeadersViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n headers,\n });\n }\n\n /**\n * Set HTTP authentication credentials.\n *\n * @param opts - Credentials (username, password) or `{ clear: true }` to remove\n */\n async setHttpCredentials(opts: HttpCredentials): Promise<void> {\n return setHttpCredentialsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n username: opts.username,\n password: opts.password,\n clear: opts.clear,\n });\n }\n\n /**\n * Emulate a geolocation.\n *\n * @param opts - Geolocation coordinates or `{ clear: true }` to clear\n *\n * @example\n * ```ts\n * await page.setGeolocation({ latitude: 48.8566, longitude: 2.3522 }); // Paris\n * await page.setGeolocation({ clear: true }); // reset\n * ```\n */\n async setGeolocation(opts: GeolocationOptions): Promise<void> {\n return setGeolocationViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n latitude: opts.latitude,\n longitude: opts.longitude,\n accuracy: opts.accuracy,\n origin: opts.origin,\n clear: opts.clear,\n });\n }\n\n /**\n * Emulate a preferred color scheme.\n *\n * @param opts - Color scheme options\n *\n * @example\n * ```ts\n * await page.emulateMedia({ colorScheme: 'dark' });\n * ```\n */\n async emulateMedia(opts: { colorScheme: ColorScheme }): Promise<void> {\n return emulateMediaViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n colorScheme: opts.colorScheme,\n });\n }\n\n /**\n * Override the browser locale.\n *\n * @param locale - BCP-47 locale string (e.g. `'fr-FR'`, `'ja-JP'`)\n */\n async setLocale(locale: string): Promise<void> {\n return setLocaleViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n locale,\n });\n }\n\n /**\n * Override the browser timezone.\n *\n * @param timezoneId - IANA timezone ID (e.g. `'America/New_York'`, `'Asia/Tokyo'`)\n */\n async setTimezone(timezoneId: string): Promise<void> {\n return setTimezoneViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n timezoneId,\n });\n }\n\n /**\n * Emulate a specific device (viewport + user agent).\n *\n * @param name - Playwright device name (e.g. `'iPhone 13'`, `'Pixel 5'`)\n *\n * @example\n * ```ts\n * await page.setDevice('iPhone 13');\n * ```\n */\n async setDevice(name: string): Promise<void> {\n return setDeviceViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n name,\n });\n }\n}\n\n/**\n * Main entry point for browserclaw.\n *\n * Launch or connect to a browser, then open pages and automate them\n * using the snapshot + ref pattern.\n *\n * @example\n * ```ts\n * import { BrowserClaw } from 'browserclaw';\n *\n * const browser = await BrowserClaw.launch({ headless: false });\n * const page = await browser.open('https://example.com');\n *\n * const { snapshot, refs } = await page.snapshot();\n * console.log(snapshot); // AI-readable page tree\n * console.log(refs); // { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * await page.click('e1');\n * await browser.stop();\n * ```\n */\nexport class BrowserClaw {\n private readonly cdpUrl: string;\n private readonly ssrfPolicy: SsrfPolicy | undefined;\n private chrome: RunningChrome | null;\n\n private constructor(cdpUrl: string, chrome: RunningChrome | null, ssrfPolicy?: SsrfPolicy) {\n this.cdpUrl = cdpUrl;\n this.chrome = chrome;\n this.ssrfPolicy = ssrfPolicy;\n }\n\n /**\n * Launch a new Chrome instance and connect to it.\n *\n * Automatically detects Chrome, Brave, Edge, or Chromium on the system.\n * Creates a dedicated browser profile to avoid conflicts with your daily browser.\n *\n * @param opts - Launch options (headless, executablePath, cdpPort, etc.)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Default: visible Chrome window\n * const browser = await BrowserClaw.launch();\n *\n * // Headless mode\n * const browser = await BrowserClaw.launch({ headless: true });\n *\n * // Specific browser\n * const browser = await BrowserClaw.launch({\n * executablePath: '/usr/bin/google-chrome',\n * });\n * ```\n */\n static async launch(opts: LaunchOptions = {}): Promise<BrowserClaw> {\n const chrome = await launchChrome(opts);\n const cdpUrl = `http://127.0.0.1:${chrome.cdpPort}`;\n const ssrfPolicy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n return new BrowserClaw(cdpUrl, chrome, ssrfPolicy);\n }\n\n /**\n * Connect to an already-running Chrome instance via its CDP endpoint.\n *\n * The Chrome instance must have been started with `--remote-debugging-port`.\n *\n * @param cdpUrl - CDP endpoint URL (e.g. `'http://localhost:9222'`)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Chrome started with: chrome --remote-debugging-port=9222\n * const browser = await BrowserClaw.connect('http://localhost:9222');\n * ```\n */\n static async connect(cdpUrl: string, opts?: ConnectOptions): Promise<BrowserClaw> {\n if (!await isChromeReachable(cdpUrl, 3000, opts?.authToken)) {\n throw new Error(`Cannot connect to Chrome at ${cdpUrl}. Is Chrome running with --remote-debugging-port?`);\n }\n await connectBrowser(cdpUrl, opts?.authToken);\n const ssrfPolicy = opts?.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts?.ssrfPolicy;\n return new BrowserClaw(cdpUrl, null, ssrfPolicy);\n }\n\n /**\n * Open a URL in a new tab and return the page handle.\n *\n * @param url - URL to navigate to\n * @returns A CrawlPage for the new tab\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n * const { snapshot, refs } = await page.snapshot();\n * ```\n */\n async open(url: string): Promise<CrawlPage> {\n const tab = await createPageViaPlaywright({ cdpUrl: this.cdpUrl, url, ssrfPolicy: this.ssrfPolicy });\n return new CrawlPage(this.cdpUrl, tab.targetId, this.ssrfPolicy);\n }\n\n /**\n * Get a CrawlPage handle for the currently active tab.\n *\n * @returns CrawlPage for the first/active page\n */\n async currentPage(): Promise<CrawlPage> {\n const { browser } = await connectBrowser(this.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available. Use browser.open(url) to create a tab.');\n const tid = await pageTargetId(pages[0]!).catch(() => null);\n if (!tid) throw new Error('Failed to get targetId for the current page.');\n return new CrawlPage(this.cdpUrl, tid, this.ssrfPolicy);\n }\n\n /**\n * List all open tabs.\n *\n * @returns Array of tab information objects\n */\n async tabs(): Promise<BrowserTab[]> {\n return listPagesViaPlaywright({ cdpUrl: this.cdpUrl });\n }\n\n /**\n * Bring a tab to the foreground.\n *\n * @param targetId - CDP target ID of the tab (from `tabs()` or `page.id`)\n */\n async focus(targetId: string): Promise<void> {\n return focusPageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Close a tab.\n *\n * @param targetId - CDP target ID of the tab to close\n */\n async close(targetId: string): Promise<void> {\n return closePageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Get a CrawlPage handle for a specific tab by its target ID.\n *\n * Unlike `open()`, this doesn't create a new tab — it wraps an existing one.\n *\n * @param targetId - CDP target ID of the tab\n * @returns CrawlPage for the specified tab\n */\n page(targetId: string): CrawlPage {\n return new CrawlPage(this.cdpUrl, targetId, this.ssrfPolicy);\n }\n\n /** The CDP endpoint URL for this browser connection. */\n get url(): string {\n return this.cdpUrl;\n }\n\n /**\n * Stop the browser and clean up all resources.\n *\n * If the browser was launched by `BrowserClaw.launch()`, the Chrome process\n * will be terminated. If connected via `BrowserClaw.connect()`, only the\n * Playwright connection is closed.\n */\n async stop(): Promise<void> {\n await disconnectBrowser();\n if (this.chrome) {\n await stopChrome(this.chrome);\n this.chrome = null;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/chrome-launcher.ts","../src/connection.ts","../src/snapshot/ref-map.ts","../src/snapshot/ai-snapshot.ts","../src/snapshot/aria-snapshot.ts","../src/actions/interaction.ts","../src/actions/keyboard.ts","../src/security.ts","../src/actions/navigation.ts","../src/actions/wait.ts","../src/actions/evaluate.ts","../src/actions/download.ts","../src/actions/emulation.ts","../src/capture/screenshot.ts","../src/capture/pdf.ts","../src/capture/trace.ts","../src/capture/response.ts","../src/capture/activity.ts","../src/storage/index.ts","../src/browser.ts"],"names":["fs","execFileSync","path","os","resolve","net","spawn","chromium","result","out","normalize","sep","groups","lookup","devices"],"mappings":"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","file":"index.cjs","sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport net from 'node:net';\nimport { execFileSync, spawn } from 'node:child_process';\nimport type { ChromeExecutable, ChromeKind, LaunchOptions, RunningChrome } from './types.js';\n\n// ── Executable Detection ──\n\nconst CHROMIUM_BUNDLE_IDS = new Set([\n 'com.google.Chrome',\n 'com.google.Chrome.beta',\n 'com.google.Chrome.canary',\n 'com.google.Chrome.dev',\n 'com.brave.Browser',\n 'com.brave.Browser.beta',\n 'com.brave.Browser.nightly',\n 'com.microsoft.Edge',\n 'com.microsoft.EdgeBeta',\n 'com.microsoft.EdgeDev',\n 'com.microsoft.EdgeCanary',\n 'org.chromium.Chromium',\n 'com.vivaldi.Vivaldi',\n 'com.operasoftware.Opera',\n 'com.operasoftware.OperaGX',\n 'com.yandex.desktop.yandex-browser',\n 'company.thebrowser.Browser',\n]);\n\nconst CHROMIUM_DESKTOP_IDS = new Set([\n 'google-chrome.desktop',\n 'google-chrome-beta.desktop',\n 'google-chrome-unstable.desktop',\n 'brave-browser.desktop',\n 'microsoft-edge.desktop',\n 'microsoft-edge-beta.desktop',\n 'microsoft-edge-dev.desktop',\n 'microsoft-edge-canary.desktop',\n 'chromium.desktop',\n 'chromium-browser.desktop',\n 'vivaldi.desktop',\n 'vivaldi-stable.desktop',\n 'opera.desktop',\n 'opera-gx.desktop',\n 'yandex-browser.desktop',\n 'org.chromium.Chromium.desktop',\n]);\n\nconst CHROMIUM_EXE_NAMES = new Set([\n 'chrome.exe', 'msedge.exe', 'brave.exe', 'brave-browser.exe', 'chromium.exe',\n 'vivaldi.exe', 'opera.exe', 'launcher.exe', 'yandex.exe', 'yandexbrowser.exe',\n 'google chrome', 'google chrome canary', 'brave browser', 'microsoft edge',\n 'chromium', 'chrome', 'brave', 'msedge', 'brave-browser',\n 'google-chrome', 'google-chrome-stable', 'google-chrome-beta', 'google-chrome-unstable',\n 'microsoft-edge', 'microsoft-edge-beta', 'microsoft-edge-dev', 'microsoft-edge-canary',\n 'chromium-browser', 'vivaldi', 'vivaldi-stable', 'opera', 'opera-stable', 'opera-gx',\n 'yandex-browser',\n]);\n\nfunction fileExists(filePath: string): boolean {\n try { return fs.existsSync(filePath); } catch { return false; }\n}\n\nfunction execText(command: string, args: string[], timeoutMs = 1200): string | null {\n try {\n const output = execFileSync(command, args, {\n timeout: timeoutMs,\n encoding: 'utf8',\n maxBuffer: 1024 * 1024,\n });\n return String(output ?? '').trim() || null;\n } catch { return null; }\n}\n\nfunction inferKindFromIdentifier(identifier: string): ChromeKind {\n const id = identifier.toLowerCase();\n if (id.includes('brave')) return 'brave';\n if (id.includes('edge')) return 'edge';\n if (id.includes('chromium')) return 'chromium';\n if (id.includes('canary')) return 'canary';\n if (id.includes('opera') || id.includes('vivaldi') || id.includes('yandex') || id.includes('thebrowser')) return 'chromium';\n return 'chrome';\n}\n\nfunction inferKindFromExeName(name: string): ChromeKind {\n const lower = name.toLowerCase();\n if (lower.includes('brave')) return 'brave';\n if (lower.includes('edge') || lower.includes('msedge')) return 'edge';\n if (lower.includes('chromium')) return 'chromium';\n if (lower.includes('canary') || lower.includes('sxs')) return 'canary';\n if (lower.includes('opera') || lower.includes('vivaldi') || lower.includes('yandex')) return 'chromium';\n return 'chrome';\n}\n\nfunction findFirstExe(candidates: ChromeExecutable[]): ChromeExecutable | null {\n for (const c of candidates) if (fileExists(c.path)) return c;\n return null;\n}\n\n// ── Mac Detection ──\n\nfunction detectDefaultBrowserBundleIdMac(): string | null {\n const plistPath = path.join(os.homedir(), 'Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist');\n if (!fileExists(plistPath)) return null;\n const handlersRaw = execText('/usr/bin/plutil', ['-extract', 'LSHandlers', 'json', '-o', '-', '--', plistPath], 2000);\n if (!handlersRaw) return null;\n let handlers: any[];\n try { handlers = JSON.parse(handlersRaw); } catch { return null; }\n if (!Array.isArray(handlers)) return null;\n\n const resolveScheme = (scheme: string): string | null => {\n let candidate: string | null = null;\n for (const entry of handlers) {\n if (!entry || typeof entry !== 'object') continue;\n if (entry.LSHandlerURLScheme !== scheme) continue;\n const role = (typeof entry.LSHandlerRoleAll === 'string' && entry.LSHandlerRoleAll) ||\n (typeof entry.LSHandlerRoleViewer === 'string' && entry.LSHandlerRoleViewer) || null;\n if (role) candidate = role;\n }\n return candidate;\n };\n return resolveScheme('http') ?? resolveScheme('https');\n}\n\nfunction detectDefaultChromiumMac(): ChromeExecutable | null {\n const bundleId = detectDefaultBrowserBundleIdMac();\n if (!bundleId || !CHROMIUM_BUNDLE_IDS.has(bundleId)) return null;\n const appPathRaw = execText('/usr/bin/osascript', ['-e', `POSIX path of (path to application id \"${bundleId}\")`]);\n if (!appPathRaw) return null;\n const appPath = appPathRaw.trim().replace(/\\/$/, '');\n const exeName = execText('/usr/bin/defaults', ['read', path.join(appPath, 'Contents', 'Info'), 'CFBundleExecutable']);\n if (!exeName) return null;\n const exePath = path.join(appPath, 'Contents', 'MacOS', exeName.trim());\n if (!fileExists(exePath)) return null;\n return { kind: inferKindFromIdentifier(bundleId), path: exePath };\n}\n\nfunction findChromeMac(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' },\n { kind: 'chrome', path: path.join(os.homedir(), 'Applications/Google Chrome.app/Contents/MacOS/Google Chrome') },\n { kind: 'brave', path: '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser' },\n { kind: 'brave', path: path.join(os.homedir(), 'Applications/Brave Browser.app/Contents/MacOS/Brave Browser') },\n { kind: 'edge', path: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge' },\n { kind: 'edge', path: path.join(os.homedir(), 'Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge') },\n { kind: 'chromium', path: '/Applications/Chromium.app/Contents/MacOS/Chromium' },\n { kind: 'chromium', path: path.join(os.homedir(), 'Applications/Chromium.app/Contents/MacOS/Chromium') },\n { kind: 'canary', path: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary' },\n { kind: 'canary', path: path.join(os.homedir(), 'Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary') },\n ]);\n}\n\n// ── Linux Detection ──\n\nfunction detectDefaultChromiumLinux(): ChromeExecutable | null {\n const desktopId = execText('xdg-settings', ['get', 'default-web-browser']) ||\n execText('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n if (!desktopId) return null;\n const trimmed = desktopId.trim();\n if (!CHROMIUM_DESKTOP_IDS.has(trimmed)) return null;\n\n const searchDirs = [\n path.join(os.homedir(), '.local', 'share', 'applications'),\n '/usr/local/share/applications',\n '/usr/share/applications',\n '/var/lib/snapd/desktop/applications',\n ];\n let desktopPath: string | null = null;\n for (const dir of searchDirs) {\n const candidate = path.join(dir, trimmed);\n if (fileExists(candidate)) { desktopPath = candidate; break; }\n }\n if (!desktopPath) return null;\n\n let execLine: string | null = null;\n try {\n const lines = fs.readFileSync(desktopPath, 'utf8').split(/\\r?\\n/);\n for (const line of lines) if (line.startsWith('Exec=')) { execLine = line.slice(5).trim(); break; }\n } catch {}\n if (!execLine) return null;\n\n const tokens = execLine.split(/\\s+/);\n let command: string | null = null;\n for (const token of tokens) {\n if (!token || token === 'env' || (token.includes('=') && !token.startsWith('/'))) continue;\n command = token.replace(/^[\"']|[\"']$/g, '');\n break;\n }\n if (!command) return null;\n\n const resolved = command.startsWith('/') ? command : (execText('which', [command], 800)?.trim() ?? null);\n if (!resolved) return null;\n const exeName = path.posix.basename(resolved).toLowerCase();\n if (!CHROMIUM_EXE_NAMES.has(exeName)) return null;\n return { kind: inferKindFromExeName(exeName), path: resolved };\n}\n\nfunction findChromeLinux(): ChromeExecutable | null {\n return findFirstExe([\n { kind: 'chrome', path: '/usr/bin/google-chrome' },\n { kind: 'chrome', path: '/usr/bin/google-chrome-stable' },\n { kind: 'chrome', path: '/usr/bin/chrome' },\n { kind: 'brave', path: '/usr/bin/brave-browser' },\n { kind: 'brave', path: '/usr/bin/brave-browser-stable' },\n { kind: 'brave', path: '/usr/bin/brave' },\n { kind: 'brave', path: '/snap/bin/brave' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge' },\n { kind: 'edge', path: '/usr/bin/microsoft-edge-stable' },\n { kind: 'chromium', path: '/usr/bin/chromium' },\n { kind: 'chromium', path: '/usr/bin/chromium-browser' },\n { kind: 'chromium', path: '/snap/bin/chromium' },\n ]);\n}\n\n// ── Windows Detection ──\n\nfunction findChromeWindows(): ChromeExecutable | null {\n const localAppData = process.env.LOCALAPPDATA ?? '';\n const programFiles = process.env.ProgramFiles ?? 'C:\\\\Program Files';\n const programFilesX86 = process.env['ProgramFiles(x86)'] ?? 'C:\\\\Program Files (x86)';\n const j = path.win32.join;\n const candidates: ChromeExecutable[] = [];\n if (localAppData) {\n candidates.push({ kind: 'chrome', path: j(localAppData, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(localAppData, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(localAppData, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'chromium', path: j(localAppData, 'Chromium', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'canary', path: j(localAppData, 'Google', 'Chrome SxS', 'Application', 'chrome.exe') });\n }\n candidates.push({ kind: 'chrome', path: j(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'chrome', path: j(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe') });\n candidates.push({ kind: 'brave', path: j(programFiles, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'brave', path: j(programFilesX86, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe') });\n candidates.push({ kind: 'edge', path: j(programFiles, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n candidates.push({ kind: 'edge', path: j(programFilesX86, 'Microsoft', 'Edge', 'Application', 'msedge.exe') });\n return findFirstExe(candidates);\n}\n\n// ── Resolve Executable ──\n\nexport function resolveBrowserExecutable(opts?: { executablePath?: string }): ChromeExecutable | null {\n if (opts?.executablePath) {\n if (!fileExists(opts.executablePath)) throw new Error(`executablePath not found: ${opts.executablePath}`);\n return { kind: 'custom', path: opts.executablePath };\n }\n const platform = process.platform;\n // Try default browser first\n if (platform === 'darwin') return detectDefaultChromiumMac() ?? findChromeMac();\n if (platform === 'linux') return detectDefaultChromiumLinux() ?? findChromeLinux();\n if (platform === 'win32') return findChromeWindows();\n return null;\n}\n\n// ── Port Check ──\n\nasync function ensurePortAvailable(port: number): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const tester = net.createServer()\n .once('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') reject(new Error(`Port ${port} is already in use`));\n else reject(err);\n })\n .once('listening', () => { tester.close(() => resolve()); })\n .listen(port);\n });\n}\n\n// ── Profile Decoration ──\n\nfunction safeReadJson(filePath: string): Record<string, any> | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) return null;\n return parsed;\n } catch { return null; }\n}\n\nfunction safeWriteJson(filePath: string, data: Record<string, any>): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2));\n}\n\nfunction setDeep(obj: Record<string, any>, keys: string[], value: any): void {\n let node = obj;\n for (const key of keys.slice(0, -1)) {\n const next = node[key];\n if (typeof next !== 'object' || next === null || Array.isArray(next)) node[key] = {};\n node = node[key];\n }\n node[keys[keys.length - 1]!] = value;\n}\n\nfunction parseHexRgbToSignedArgbInt(hex: string): number | null {\n const cleaned = hex.trim().replace(/^#/, '');\n if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) return null;\n const argbUnsigned = (255 << 24) | Number.parseInt(cleaned, 16);\n return argbUnsigned > 2147483647 ? argbUnsigned - 4294967296 : argbUnsigned;\n}\n\nfunction decorateProfile(userDataDir: string, name: string, color: string): void {\n const colorInt = parseHexRgbToSignedArgbInt(color);\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n const localState = safeReadJson(localStatePath) ?? {};\n setDeep(localState, ['profile', 'info_cache', 'Default', 'name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'shortcut_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'user_name'], name);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_color_seed'], colorInt);\n setDeep(localState, ['profile', 'info_cache', 'Default', 'profile_highlight_color'], colorInt);\n }\n safeWriteJson(localStatePath, localState);\n\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['profile', 'name'], name);\n setDeep(prefs, ['profile', 'profile_color'], color);\n if (colorInt != null) {\n setDeep(prefs, ['autogenerated', 'theme', 'color'], colorInt);\n setDeep(prefs, ['browser', 'theme', 'user_color2'], colorInt);\n }\n safeWriteJson(preferencesPath, prefs);\n}\n\nfunction ensureCleanExit(userDataDir: string): void {\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n const prefs = safeReadJson(preferencesPath) ?? {};\n setDeep(prefs, ['exit_type'], 'Normal');\n setDeep(prefs, ['exited_cleanly'], true);\n safeWriteJson(preferencesPath, prefs);\n}\n\n// ── Launch Chrome ──\n\nconst DEFAULT_CDP_PORT = 9222;\nconst DEFAULT_PROFILE_NAME = 'browserclaw';\nconst DEFAULT_PROFILE_COLOR = '#FF4500';\n\nfunction resolveUserDataDir(profileName: string): string {\n const configDir = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config');\n return path.join(configDir, 'browserclaw', 'profiles', profileName, 'user-data');\n}\n\nexport async function isChromeReachable(cdpUrl: string, timeoutMs = 500, authToken?: string): Promise<boolean> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal, headers });\n return res.ok;\n } catch { return false; }\n finally { clearTimeout(t); }\n}\n\nexport async function getChromeWebSocketUrl(cdpUrl: string, timeoutMs = 500, authToken?: string): Promise<string | null> {\n const ctrl = new AbortController();\n const t = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const res = await fetch(`${cdpUrl.replace(/\\/+$/, '')}/json/version`, { signal: ctrl.signal, headers });\n if (!res.ok) return null;\n const data = await res.json() as { webSocketDebuggerUrl?: string };\n return String(data?.webSocketDebuggerUrl ?? '').trim() || null;\n } catch { return null; }\n finally { clearTimeout(t); }\n}\n\nexport async function launchChrome(opts: LaunchOptions = {}): Promise<RunningChrome> {\n const cdpPort = opts.cdpPort ?? DEFAULT_CDP_PORT;\n await ensurePortAvailable(cdpPort);\n\n const exe = resolveBrowserExecutable({ executablePath: opts.executablePath });\n if (!exe) throw new Error('No supported browser found (Chrome/Brave/Edge/Chromium). Install one or provide executablePath.');\n\n const profileName = opts.profileName ?? DEFAULT_PROFILE_NAME;\n const userDataDir = opts.userDataDir ?? resolveUserDataDir(profileName);\n fs.mkdirSync(userDataDir, { recursive: true });\n\n const spawnChrome = () => {\n const args = [\n `--remote-debugging-port=${cdpPort}`,\n `--user-data-dir=${userDataDir}`,\n '--no-first-run',\n '--no-default-browser-check',\n '--disable-sync',\n '--disable-background-networking',\n '--disable-component-update',\n '--disable-features=Translate,MediaRouter',\n '--disable-blink-features=AutomationControlled',\n '--disable-session-crashed-bubble',\n '--hide-crash-restore-bubble',\n '--password-store=basic',\n ];\n if (opts.headless) {\n args.push('--headless=new', '--disable-gpu');\n }\n if (opts.noSandbox) {\n args.push('--no-sandbox', '--disable-setuid-sandbox');\n }\n if (process.platform === 'linux') args.push('--disable-dev-shm-usage');\n const extraArgs = Array.isArray(opts.chromeArgs)\n ? opts.chromeArgs.filter((a): a is string => typeof a === 'string' && a.trim().length > 0)\n : [];\n if (extraArgs.length) args.push(...extraArgs);\n args.push('about:blank');\n return spawn(exe.path, args, {\n stdio: 'pipe',\n env: { ...process.env, HOME: os.homedir() },\n });\n };\n\n const startedAt = Date.now();\n const localStatePath = path.join(userDataDir, 'Local State');\n const preferencesPath = path.join(userDataDir, 'Default', 'Preferences');\n\n // Bootstrap run if profile doesn't exist yet\n if (!fileExists(localStatePath) || !fileExists(preferencesPath)) {\n const bootstrap = spawnChrome();\n const deadline = Date.now() + 10000;\n while (Date.now() < deadline) {\n if (fileExists(localStatePath) && fileExists(preferencesPath)) break;\n await new Promise(r => setTimeout(r, 100));\n }\n try { bootstrap.kill('SIGTERM'); } catch {}\n const exitDeadline = Date.now() + 5000;\n while (Date.now() < exitDeadline) {\n if (bootstrap.exitCode != null) break;\n await new Promise(r => setTimeout(r, 50));\n }\n if (bootstrap.exitCode == null) {\n try { bootstrap.kill('SIGKILL'); } catch {}\n }\n }\n\n // Decorate profile\n try {\n decorateProfile(userDataDir, profileName, opts.profileColor ?? DEFAULT_PROFILE_COLOR);\n } catch {}\n\n // Ensure clean exit state\n try { ensureCleanExit(userDataDir); } catch {}\n\n // Launch for real\n const proc = spawnChrome();\n const cdpUrl = `http://127.0.0.1:${cdpPort}`;\n\n // Wait for Chrome to be ready\n const readyDeadline = Date.now() + 15000;\n while (Date.now() < readyDeadline) {\n if (await isChromeReachable(cdpUrl, 500)) break;\n await new Promise(r => setTimeout(r, 200));\n }\n\n if (!await isChromeReachable(cdpUrl, 500)) {\n try { proc.kill('SIGKILL'); } catch {}\n throw new Error(`Failed to start Chrome CDP on port ${cdpPort}. Chrome may not have started correctly.`);\n }\n\n return {\n pid: proc.pid ?? -1,\n exe,\n userDataDir,\n cdpPort,\n startedAt,\n proc,\n };\n}\n\nexport async function stopChrome(running: RunningChrome, timeoutMs = 2500): Promise<void> {\n const proc = running.proc;\n if (proc.exitCode != null) return;\n try { proc.kill('SIGTERM'); } catch {}\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (proc.exitCode != null) return;\n await new Promise(r => setTimeout(r, 100));\n }\n try { proc.kill('SIGKILL'); } catch {}\n}\n","import { chromium } from 'playwright-core';\nimport type { Browser, Page, BrowserContext } from 'playwright-core';\nimport { getChromeWebSocketUrl } from './chrome-launcher.js';\nimport type { PageState, RoleRefs } from './types.js';\n\n/** Page extended with Playwright's private `_snapshotForAI` method. */\nexport type PageWithAI = Page & {\n _snapshotForAI?: (opts: { timeout: number; track: string }) => Promise<{ full?: string }>;\n};\n\n// ── Persistent Connection Cache ──\n\nlet cached: { browser: Browser; cdpUrl: string; authToken?: string } | null = null;\nconst connectingByUrl = new Map<string, Promise<{ browser: Browser; cdpUrl: string; authToken?: string }>>();\n\nconst pageStates = new WeakMap<Page, PageState>();\nconst observedContexts = new WeakSet<BrowserContext>();\nconst observedPages = new WeakSet<Page>();\n\n// Ref cache: keyed by \"cdpUrl::targetId\"\nconst roleRefsByTarget = new Map<string, {\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}>();\nconst MAX_ROLE_REFS_CACHE = 50;\n\nconst MAX_CONSOLE_MESSAGES = 500;\nconst MAX_PAGE_ERRORS = 200;\nconst MAX_NETWORK_REQUESTS = 500;\n\nfunction normalizeCdpUrl(raw: string): string {\n return raw.replace(/\\/$/, '');\n}\n\nfunction roleRefsKey(cdpUrl: string, targetId: string): string {\n return `${normalizeCdpUrl(cdpUrl)}::${targetId}`;\n}\n\n// ── Page State Management ──\n\nexport function ensurePageState(page: Page): PageState {\n const existing = pageStates.get(page);\n if (existing) return existing;\n\n const state: PageState = {\n console: [],\n errors: [],\n requests: [],\n requestIds: new WeakMap(),\n nextRequestId: 0,\n };\n pageStates.set(page, state);\n\n if (!observedPages.has(page)) {\n observedPages.add(page);\n\n page.on('console', (msg) => {\n state.console.push({\n type: msg.type(),\n text: msg.text(),\n timestamp: new Date().toISOString(),\n location: msg.location(),\n });\n if (state.console.length > MAX_CONSOLE_MESSAGES) state.console.shift();\n });\n\n page.on('pageerror', (err) => {\n state.errors.push({\n message: err?.message ? String(err.message) : String(err),\n name: err?.name ? String(err.name) : undefined,\n stack: err?.stack ? String(err.stack) : undefined,\n timestamp: new Date().toISOString(),\n });\n if (state.errors.length > MAX_PAGE_ERRORS) state.errors.shift();\n });\n\n page.on('request', (req) => {\n state.nextRequestId += 1;\n const id = `r${state.nextRequestId}`;\n state.requestIds.set(req, id);\n state.requests.push({\n id,\n timestamp: new Date().toISOString(),\n method: req.method(),\n url: req.url(),\n resourceType: req.resourceType(),\n });\n if (state.requests.length > MAX_NETWORK_REQUESTS) state.requests.shift();\n });\n\n page.on('response', (resp) => {\n const req = resp.request();\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.status = resp.status();\n rec.ok = resp.ok();\n break;\n }\n }\n });\n\n page.on('requestfailed', (req) => {\n const id = state.requestIds.get(req);\n if (!id) return;\n for (let i = state.requests.length - 1; i >= 0; i--) {\n const rec = state.requests[i];\n if (rec && rec.id === id) {\n rec.failureText = req.failure()?.errorText;\n rec.ok = false;\n break;\n }\n }\n });\n\n page.on('close', () => {\n pageStates.delete(page);\n observedPages.delete(page);\n });\n }\n\n return state;\n}\n\n// ── Stealth: hide navigator.webdriver ──\n\nconst STEALTH_SCRIPT = `Object.defineProperty(navigator, 'webdriver', { get: () => undefined })`;\n\nfunction applyStealthToPage(page: Page): void {\n page.evaluate(STEALTH_SCRIPT).catch((e) => {\n if (process.env.DEBUG) console.warn('[browserclaw] stealth evaluate failed:', e.message);\n });\n}\n\nfunction observeContext(context: BrowserContext): void {\n if (observedContexts.has(context)) return;\n observedContexts.add(context);\n\n context.addInitScript(STEALTH_SCRIPT).catch((e) => {\n if (process.env.DEBUG) console.warn('[browserclaw] stealth initScript failed:', e.message);\n });\n\n for (const page of context.pages()) {\n ensurePageState(page);\n applyStealthToPage(page);\n }\n context.on('page', (page) => {\n ensurePageState(page);\n applyStealthToPage(page);\n });\n}\n\nfunction observeBrowser(browser: Browser): void {\n for (const context of browser.contexts()) observeContext(context);\n}\n\n// ── Role Refs Storage ──\n\nexport function storeRoleRefsForTarget(opts: {\n page: Page;\n cdpUrl: string;\n targetId?: string;\n refs: RoleRefs;\n frameSelector?: string;\n mode?: 'role' | 'aria';\n}): void {\n const state = ensurePageState(opts.page);\n state.roleRefs = opts.refs;\n state.roleRefsFrameSelector = opts.frameSelector;\n state.roleRefsMode = opts.mode;\n\n const targetId = opts.targetId?.trim();\n if (!targetId) return;\n roleRefsByTarget.set(roleRefsKey(opts.cdpUrl, targetId), {\n refs: opts.refs,\n ...(opts.frameSelector ? { frameSelector: opts.frameSelector } : {}),\n ...(opts.mode ? { mode: opts.mode } : {}),\n });\n while (roleRefsByTarget.size > MAX_ROLE_REFS_CACHE) {\n const first = roleRefsByTarget.keys().next();\n if (first.done) break;\n roleRefsByTarget.delete(first.value);\n }\n}\n\nexport function restoreRoleRefsForTarget(opts: {\n cdpUrl: string;\n targetId?: string;\n page: Page;\n}): void {\n const targetId = opts.targetId?.trim() || '';\n if (!targetId) return;\n const entry = roleRefsByTarget.get(roleRefsKey(opts.cdpUrl, targetId));\n if (!entry) return;\n const state = ensurePageState(opts.page);\n if (state.roleRefs) return;\n state.roleRefs = entry.refs;\n state.roleRefsFrameSelector = entry.frameSelector;\n state.roleRefsMode = entry.mode;\n}\n\n// ── Connect to Browser ──\n\nexport async function connectBrowser(cdpUrl: string, authToken?: string): Promise<{ browser: Browser; cdpUrl: string; authToken?: string }> {\n const normalized = normalizeCdpUrl(cdpUrl);\n if (cached?.cdpUrl === normalized) return cached;\n\n const existing = connectingByUrl.get(normalized);\n if (existing) return await existing;\n\n const connectWithRetry = async () => {\n let lastErr: unknown;\n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const timeout = 5000 + attempt * 2000;\n const endpoint = await getChromeWebSocketUrl(normalized, timeout, authToken).catch(() => null) ?? normalized;\n const headers: Record<string, string> = {};\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n const browser = await chromium.connectOverCDP(endpoint, { timeout, headers });\n const connected = { browser, cdpUrl: normalized, authToken };\n cached = connected;\n observeBrowser(browser);\n browser.on('disconnected', () => {\n if (cached?.browser === browser) cached = null;\n for (const key of roleRefsByTarget.keys()) {\n if (key.startsWith(normalized + '::')) roleRefsByTarget.delete(key);\n }\n });\n return connected;\n } catch (err) {\n lastErr = err;\n await new Promise(r => setTimeout(r, 250 + attempt * 250));\n }\n }\n throw lastErr instanceof Error ? lastErr : new Error('CDP connect failed');\n };\n\n const promise = connectWithRetry().finally(() => { connectingByUrl.delete(normalized); });\n connectingByUrl.set(normalized, promise);\n return await promise;\n}\n\nexport async function disconnectBrowser(): Promise<void> {\n if (connectingByUrl.size) {\n for (const p of connectingByUrl.values()) {\n try { await p; } catch {}\n }\n }\n const cur = cached;\n cached = null;\n if (cur) await cur.browser.close().catch(() => {});\n}\n\n// ── Page Lookup ──\n\n/** CDP target entry from /json/list endpoint. */\ninterface CdpTarget {\n id: string;\n url: string;\n title?: string;\n type?: string;\n webSocketDebuggerUrl?: string;\n}\n\nexport async function getAllPages(browser: Browser) {\n return browser.contexts().flatMap(c => c.pages());\n}\n\nexport async function pageTargetId(page: Page): Promise<string | null> {\n const session = await page.context().newCDPSession(page);\n try {\n const info = await session.send('Target.getTargetInfo');\n const targetInfo = (info as { targetInfo?: { targetId?: string } }).targetInfo;\n return String(targetInfo?.targetId ?? '').trim() || null;\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nexport async function findPageByTargetId(browser: Browser, targetId: string, cdpUrl?: string) {\n const pages = await getAllPages(browser);\n let resolvedViaCdp = false;\n for (const page of pages) {\n let tid: string | null = null;\n try {\n tid = await pageTargetId(page);\n resolvedViaCdp = true;\n } catch {\n tid = null;\n }\n if (tid && tid === targetId) return page;\n }\n // Extension relays can block CDP attachment APIs entirely. If that happens and\n // Playwright only exposes one page, return it as the best available mapping.\n if (!resolvedViaCdp && pages.length === 1) {\n return pages[0];\n }\n\n // Fallback: match by URL from /json/list\n if (cdpUrl) {\n try {\n const listUrl = `${cdpUrl.replace(/\\/+$/, '').replace(/^ws:/, 'http:').replace(/\\/cdp$/, '')}/json/list`;\n const headers: Record<string, string> = {};\n if (cached?.authToken) headers['Authorization'] = `Bearer ${cached.authToken}`;\n const response = await fetch(listUrl, { headers });\n if (response.ok) {\n const targets = await response.json() as CdpTarget[];\n const target = targets.find(t => t.id === targetId);\n if (target) {\n const urlMatch = pages.filter(p => p.url() === target.url);\n if (urlMatch.length === 1) return urlMatch[0];\n if (urlMatch.length > 1) {\n const sameUrlTargets = targets.filter(t => t.url === target.url);\n if (sameUrlTargets.length === urlMatch.length) {\n const idx = sameUrlTargets.findIndex(t => t.id === targetId);\n if (idx >= 0 && idx < urlMatch.length) return urlMatch[idx];\n }\n }\n }\n }\n } catch {}\n }\n return null;\n}\n\nexport async function getPageForTargetId(opts: { cdpUrl: string; targetId?: string }) {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available in the connected browser.');\n const first = pages[0]!;\n if (!opts.targetId) return first;\n const found = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!found) {\n if (pages.length === 1) return first;\n throw new Error('tab not found');\n }\n return found;\n}\n\n// ── Ref Locator ──\n\nexport function refLocator(page: Page, ref: string) {\n const normalized = ref.startsWith('@') ? ref.slice(1) : ref.startsWith('ref=') ? ref.slice(4) : ref;\n\n if (/^e\\d+$/.test(normalized)) {\n const state = pageStates.get(page);\n\n // Aria mode: use aria-ref locator\n if (state?.roleRefsMode === 'aria') {\n return (state.roleRefsFrameSelector ? page.frameLocator(state.roleRefsFrameSelector) : page)\n .locator(`aria-ref=${normalized}`);\n }\n\n // Role mode: use getByRole\n const info = state?.roleRefs?.[normalized];\n if (!info) throw new Error(`Unknown ref \"${normalized}\". Run a new snapshot and use a ref from that snapshot.`);\n\n const locAny = state?.roleRefsFrameSelector\n ? page.frameLocator(state.roleRefsFrameSelector)\n : page;\n const role = info.role as Parameters<Page['getByRole']>[0];\n const locator = info.name\n ? locAny.getByRole(role, { name: info.name, exact: true })\n : locAny.getByRole(role);\n return info.nth !== undefined ? locator.nth(info.nth) : locator;\n }\n\n return page.locator(`aria-ref=${normalized}`);\n}\n\n// ── Error Helpers ──\n\nexport function toAIFriendlyError(error: unknown, selector: string): Error {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('strict mode violation')) {\n const countMatch = message.match(/resolved to (\\d+) elements/);\n const count = countMatch ? countMatch[1] : 'multiple';\n return new Error(`Selector \"${selector}\" matched ${count} elements. Run a new snapshot to get updated refs, or use a different ref.`);\n }\n if ((message.includes('Timeout') || message.includes('waiting for')) &&\n (message.includes('to be visible') || message.includes('not visible'))) {\n return new Error(`Element \"${selector}\" not found or not visible. Run a new snapshot to see current page elements.`);\n }\n if (message.includes('intercepts pointer events') || message.includes('not visible') || message.includes('not receive pointer events')) {\n return new Error(`Element \"${selector}\" is not interactable (hidden or covered). Try scrolling it into view, closing overlays, or re-snapshotting.`);\n }\n return error instanceof Error ? error : new Error(message);\n}\n\nexport function normalizeTimeoutMs(timeoutMs: number | undefined, fallback: number, maxMs = 120000): number {\n return Math.max(500, Math.min(maxMs, timeoutMs ?? fallback));\n}\n","import type { RoleRefs, RoleRefInfo } from '../types.js';\n\nexport const INTERACTIVE_ROLES = new Set([\n 'button', 'link', 'textbox', 'checkbox', 'radio', 'combobox', 'listbox',\n 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'searchbox',\n 'slider', 'spinbutton', 'switch', 'tab', 'treeitem',\n]);\n\nexport const CONTENT_ROLES = new Set([\n 'heading', 'cell', 'gridcell', 'columnheader', 'rowheader',\n 'listitem', 'article', 'region', 'main', 'navigation',\n]);\n\nexport const STRUCTURAL_ROLES = new Set([\n 'generic', 'group', 'list', 'table', 'row', 'rowgroup', 'grid', 'treegrid',\n 'menu', 'menubar', 'toolbar', 'tablist', 'tree', 'directory', 'document',\n 'application', 'presentation', 'none',\n]);\n\nfunction getIndentLevel(line: string): number {\n const match = line.match(/^(\\s*)/);\n return match ? Math.floor(match[1]!.length / 2) : 0;\n}\n\ninterface ParsedSnapshotLine {\n roleRaw: string;\n role: string;\n name?: string;\n suffix: string;\n}\n\nfunction matchInteractiveSnapshotLine(\n line: string,\n options: SnapshotBuildOptions,\n): ParsedSnapshotLine | null {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) {\n return null;\n }\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) {\n return null;\n }\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) {\n return null;\n }\n const role = roleRaw!.toLowerCase();\n return {\n roleRaw: roleRaw!,\n role,\n ...(name ? { name } : {}),\n suffix: suffix!,\n };\n}\n\nfunction createRoleNameTracker() {\n const counts = new Map<string, number>();\n const refsByKey = new Map<string, string[]>();\n\n return {\n counts,\n refsByKey,\n getKey(role: string, name?: string): string {\n return `${role}:${name ?? ''}`;\n },\n getNextIndex(role: string, name?: string): number {\n const key = this.getKey(role, name);\n const current = counts.get(key) ?? 0;\n counts.set(key, current + 1);\n return current;\n },\n trackRef(role: string, name: string | undefined, ref: string): void {\n const key = this.getKey(role, name);\n const list = refsByKey.get(key) ?? [];\n list.push(ref);\n refsByKey.set(key, list);\n },\n getDuplicateKeys(): Set<string> {\n const out = new Set<string>();\n for (const [key, refs] of refsByKey) if (refs.length > 1) out.add(key);\n return out;\n },\n };\n}\n\nfunction removeNthFromNonDuplicates(refs: RoleRefs, tracker: ReturnType<typeof createRoleNameTracker>): void {\n const duplicates = tracker.getDuplicateKeys();\n for (const [ref, data] of Object.entries(refs)) {\n const key = tracker.getKey(data.role, data.name);\n if (!duplicates.has(key)) delete refs[ref]?.nth;\n }\n}\n\nfunction compactTree(tree: string): string {\n const lines = tree.split('\\n');\n const result: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (line.includes('[ref=')) { result.push(line); continue; }\n if (line.includes(':') && !line.trimEnd().endsWith(':')) { result.push(line); continue; }\n const currentIndent = getIndentLevel(line);\n let hasRelevantChildren = false;\n for (let j = i + 1; j < lines.length; j++) {\n if (getIndentLevel(lines[j]!) <= currentIndent) break;\n if (lines[j]?.includes('[ref=')) { hasRelevantChildren = true; break; }\n }\n if (hasRelevantChildren) result.push(line);\n }\n return result.join('\\n');\n}\n\nexport interface SnapshotBuildOptions {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n}\n\n/**\n * Build a role snapshot from Playwright's ariaSnapshot() output.\n * Assigns ref IDs (e1, e2, ...) to interactive/content elements.\n */\nexport function buildRoleSnapshotFromAriaSnapshot(\n ariaSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = ariaSnapshot.split('\\n');\n const refs: RoleRefs = {};\n const tracker = createRoleNameTracker();\n let counter = 0;\n const nextRef = () => { counter++; return `e${counter}`; };\n\n if (options.interactive) {\n const result: string[] = [];\n for (const line of lines) {\n const parsed = matchInteractiveSnapshotLine(line, options);\n if (!parsed) continue;\n const { roleRaw, role, name, suffix } = parsed;\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const prefix = line.match(/^(\\s*-\\s*)/)?.[1] ?? '';\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n let enhanced = `${prefix}${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix.includes('[')) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n return { snapshot: result.join('\\n') || '(no interactive elements)', refs };\n }\n\n const result: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { result.push(line); continue; }\n const [, prefix, roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { result.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isInteractive = INTERACTIVE_ROLES.has(role);\n const isContent = CONTENT_ROLES.has(role);\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n if (!(isInteractive || (isContent && name))) { result.push(line); continue; }\n\n const ref = nextRef();\n const nth = tracker.getNextIndex(role, name);\n tracker.trackRef(role, name, ref);\n refs[ref] = { role, name, nth };\n\n let enhanced = `${prefix}${roleRaw}`;\n if (name) enhanced += ` \"${name}\"`;\n enhanced += ` [ref=${ref}]`;\n if (nth > 0) enhanced += ` [nth=${nth}]`;\n if (suffix) enhanced += suffix;\n result.push(enhanced);\n }\n removeNthFromNonDuplicates(refs, tracker);\n const tree = result.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\n/**\n * Build a role snapshot from Playwright's AI snapshot output.\n * Preserves Playwright's own aria-ref ids (e.g. ref=e13).\n */\nexport function buildRoleSnapshotFromAiSnapshot(\n aiSnapshot: string,\n options: SnapshotBuildOptions = {},\n): { snapshot: string; refs: RoleRefs } {\n const lines = String(aiSnapshot ?? '').split('\\n');\n const refs: RoleRefs = {};\n\n function parseAiSnapshotRef(suffix: string): string | null {\n const match = suffix.match(/\\[ref=(e\\d+)\\]/i);\n return match ? match[1]! : null;\n }\n\n if (options.interactive) {\n const out: string[] = [];\n for (const line of lines) {\n const parsed = matchInteractiveSnapshotLine(line, options);\n if (!parsed) continue;\n const { roleRaw, role, name, suffix } = parsed;\n if (!INTERACTIVE_ROLES.has(role)) continue;\n const ref = parseAiSnapshotRef(suffix);\n if (!ref) continue;\n const prefix = line.match(/^(\\s*-\\s*)/)?.[1] ?? '';\n refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(`${prefix}${roleRaw}${name ? ` \"${name}\"` : ''}${suffix}`);\n }\n return { snapshot: out.join('\\n') || '(no interactive elements)', refs };\n }\n\n const out: string[] = [];\n for (const line of lines) {\n const depth = getIndentLevel(line);\n if (options.maxDepth !== undefined && depth > options.maxDepth) continue;\n const match = line.match(/^(\\s*-\\s*)(\\w+)(?:\\s+\"([^\"]*)\")?(.*)$/);\n if (!match) { out.push(line); continue; }\n const [, , roleRaw, name, suffix] = match;\n if (roleRaw!.startsWith('/')) { out.push(line); continue; }\n const role = roleRaw!.toLowerCase();\n const isStructural = STRUCTURAL_ROLES.has(role);\n if (options.compact && isStructural && !name) continue;\n const ref = parseAiSnapshotRef(suffix!);\n if (ref) refs[ref] = { role, ...(name ? { name } : {}) };\n out.push(line);\n }\n const tree = out.join('\\n') || '(empty)';\n return { snapshot: options.compact ? compactTree(tree) : tree, refs };\n}\n\nexport function getRoleSnapshotStats(snapshot: string, refs: RoleRefs) {\n const interactive = Object.values(refs).filter(r => INTERACTIVE_ROLES.has(r.role)).length;\n return {\n lines: snapshot.split('\\n').length,\n chars: snapshot.length,\n refs: Object.keys(refs).length,\n interactive,\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget, normalizeTimeoutMs } from '../connection.js';\nimport type { PageWithAI } from '../connection.js';\nimport { buildRoleSnapshotFromAiSnapshot, getRoleSnapshotStats } from './ref-map.js';\nimport type { SnapshotResult, SnapshotOptions } from '../types.js';\n\n/**\n * Take an AI-readable snapshot using Playwright's _snapshotForAI.\n * This is the primary snapshot method — uses Playwright's built-in AI mode.\n */\nexport async function snapshotAi(opts: {\n cdpUrl: string;\n targetId?: string;\n maxChars?: number;\n timeoutMs?: number;\n options?: SnapshotOptions;\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const maybe = page as PageWithAI;\n if (!maybe._snapshotForAI) {\n throw new Error('Playwright _snapshotForAI is not available. Upgrade playwright-core to >= 1.50.');\n }\n\n const sourceUrl = page.url();\n\n const result = await maybe._snapshotForAI({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 5000, 60000),\n track: 'response',\n });\n\n let snapshot = String(result?.full ?? '');\n const maxChars = opts.maxChars;\n const limit = typeof maxChars === 'number' && Number.isFinite(maxChars) && maxChars > 0\n ? Math.floor(maxChars) : undefined;\n\n if (limit && snapshot.length > limit) {\n const lastNewline = snapshot.lastIndexOf('\\n', limit);\n const cutoff = lastNewline > 0 ? lastNewline : limit;\n snapshot = `${snapshot.slice(0, cutoff)}\\n\\n[...TRUNCATED - page too large]`;\n }\n\n const built = buildRoleSnapshotFromAiSnapshot(snapshot, opts.options);\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n mode: 'aria',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-snapshot',\n capturedAt: new Date().toISOString(),\n },\n };\n}\n","import { getPageForTargetId, ensurePageState, storeRoleRefsForTarget } from '../connection.js';\nimport {\n buildRoleSnapshotFromAriaSnapshot,\n getRoleSnapshotStats,\n} from './ref-map.js';\nimport type { SnapshotResult, AriaSnapshotResult, AriaNode } from '../types.js';\n\n/**\n * Take a role-based snapshot using Playwright's ariaSnapshot().\n * This produces a tree with ref IDs that can be targeted by actions.\n */\nexport async function snapshotRole(opts: {\n cdpUrl: string;\n targetId?: string;\n selector?: string;\n frameSelector?: string;\n refsMode?: 'role' | 'aria';\n options?: {\n interactive?: boolean;\n compact?: boolean;\n maxDepth?: number;\n };\n}): Promise<SnapshotResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const sourceUrl = page.url();\n const frameSelector = opts.frameSelector?.trim() || '';\n const selector = opts.selector?.trim() || '';\n const locator = frameSelector\n ? (selector\n ? page.frameLocator(frameSelector).locator(selector)\n : page.frameLocator(frameSelector).locator(':root'))\n : (selector\n ? page.locator(selector)\n : page.locator(':root'));\n\n const ariaSnapshot = await locator.ariaSnapshot({ timeout: 10000 });\n const built = buildRoleSnapshotFromAriaSnapshot(String(ariaSnapshot ?? ''), opts.options);\n\n storeRoleRefsForTarget({\n page,\n cdpUrl: opts.cdpUrl,\n targetId: opts.targetId,\n refs: built.refs,\n frameSelector: frameSelector || undefined,\n mode: opts.refsMode ?? 'role',\n });\n\n return {\n snapshot: built.snapshot,\n refs: built.refs,\n stats: getRoleSnapshotStats(built.snapshot, built.refs),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-snapshot',\n capturedAt: new Date().toISOString(),\n },\n };\n}\n\n/** CDP accessibility tree node from Accessibility.getFullAXTree. */\ninterface CdpAXNode {\n nodeId: string;\n childIds?: string[];\n role?: { value?: string | number | boolean };\n name?: { value?: string | number | boolean };\n value?: { value?: string | number | boolean };\n description?: { value?: string | number | boolean };\n backendDOMNodeId?: number;\n}\n\n/**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n */\nexport async function snapshotAria(opts: {\n cdpUrl: string;\n targetId?: string;\n limit?: number;\n}): Promise<AriaSnapshotResult> {\n const limit = Math.max(1, Math.min(2000, Math.floor(opts.limit ?? 500)));\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const sourceUrl = page.url();\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Accessibility.enable').catch(() => {});\n const res = await session.send('Accessibility.getFullAXTree') as { nodes?: CdpAXNode[] };\n return {\n nodes: formatAriaNodes(Array.isArray(res?.nodes) ? res.nodes : [], limit),\n untrusted: true,\n contentMeta: {\n sourceUrl,\n contentType: 'browser-aria-tree',\n capturedAt: new Date().toISOString(),\n },\n };\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nfunction axValue(v: { value?: string | number | boolean } | undefined): string {\n if (!v || typeof v !== 'object') return '';\n const value = v.value;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return '';\n}\n\nfunction formatAriaNodes(nodes: CdpAXNode[], limit: number): AriaNode[] {\n const byId = new Map<string, CdpAXNode>();\n for (const n of nodes) if (n.nodeId) byId.set(n.nodeId, n);\n\n const referenced = new Set<string>();\n for (const n of nodes) for (const c of n.childIds ?? []) referenced.add(c);\n\n const root = nodes.find(n => n.nodeId && !referenced.has(n.nodeId)) ?? nodes[0];\n if (!root?.nodeId) return [];\n\n const out: AriaNode[] = [];\n const stack: Array<{ id: string; depth: number }> = [{ id: root.nodeId, depth: 0 }];\n\n while (stack.length && out.length < limit) {\n const popped = stack.pop();\n if (!popped) break;\n const { id, depth } = popped;\n const n = byId.get(id);\n if (!n) continue;\n\n const role = axValue(n.role);\n const name = axValue(n.name);\n const value = axValue(n.value);\n const description = axValue(n.description);\n const ref = `ax${out.length + 1}`;\n\n out.push({\n ref,\n role: role || 'unknown',\n name: name || '',\n ...(value ? { value } : {}),\n ...(description ? { description } : {}),\n ...(typeof n.backendDOMNodeId === 'number' ? { backendDOMNodeId: n.backendDOMNodeId } : {}),\n depth,\n });\n\n const children = (n.childIds ?? []).filter((c: string) => byId.has(c));\n for (let i = children.length - 1; i >= 0; i--) {\n if (children[i]) stack.push({ id: children[i], depth: depth + 1 });\n }\n }\n\n return out;\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n toAIFriendlyError,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport type { FormField } from '../types.js';\n\ntype MouseButton = 'left' | 'right' | 'middle';\ntype KeyModifier = 'Alt' | 'Control' | 'ControlOrMeta' | 'Meta' | 'Shift';\n\nexport async function clickViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n doubleClick?: boolean;\n button?: MouseButton;\n modifiers?: KeyModifier[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n try {\n if (opts.doubleClick) {\n await locator.dblclick({ timeout, button: opts.button, modifiers: opts.modifiers });\n } else {\n await locator.click({ timeout, button: opts.button, modifiers: opts.modifiers });\n }\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function hoverViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).hover({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function typeViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n text: string;\n submit?: boolean;\n slowly?: boolean;\n timeoutMs?: number;\n}): Promise<void> {\n const text = String(opts.text ?? '');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = refLocator(page, opts.ref);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n try {\n if (opts.slowly) {\n await locator.click({ timeout });\n await locator.pressSequentially(text, { timeout, delay: 75 });\n } else {\n await locator.fill(text, { timeout });\n }\n if (opts.submit) await locator.press('Enter', { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function selectOptionViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n values: string[];\n timeoutMs?: number;\n}): Promise<void> {\n if (!opts.values?.length) throw new Error('values are required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).selectOption(opts.values, {\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function dragViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n startRef: string;\n endRef: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.startRef).dragTo(refLocator(page, opts.endRef), {\n timeout: normalizeTimeoutMs(opts.timeoutMs, 8000, 60000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, `${opts.startRef} -> ${opts.endRef}`);\n }\n}\n\nexport async function fillFormViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fields: FormField[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 8000, 60000);\n\n for (let i = 0; i < opts.fields.length; i++) {\n const field = opts.fields[i]!;\n const ref = field.ref.trim();\n const type = field.type.trim();\n const rawValue = field.value;\n const value = rawValue == null ? '' : String(rawValue);\n\n if (!ref) throw new Error(`fill(): field at index ${i} has empty ref`);\n if (!type) throw new Error(`fill(): field \"${ref}\" has empty type`);\n const locator = refLocator(page, ref);\n\n if (type === 'checkbox' || type === 'radio') {\n const checked = rawValue === true || rawValue === 1 || rawValue === '1' || rawValue === 'true';\n try {\n await locator.setChecked(checked, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n continue;\n }\n\n try {\n await locator.fill(value, { timeout });\n } catch (err) {\n throw toAIFriendlyError(err, ref);\n }\n }\n}\n\nexport async function scrollIntoViewViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).scrollIntoViewIfNeeded({\n timeout: normalizeTimeoutMs(opts.timeoutMs, 20000),\n });\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function highlightViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n try {\n await refLocator(page, opts.ref).highlight();\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function setInputFilesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref?: string;\n element?: string;\n paths: string[];\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const locator = opts.ref\n ? refLocator(page, opts.ref)\n : opts.element\n ? page.locator(opts.element).first()\n : null;\n if (!locator) throw new Error('Either ref or element is required for setInputFiles');\n\n try {\n await locator.setInputFiles(opts.paths);\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref ?? opts.element ?? 'unknown');\n }\n}\n\nexport async function armDialogViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n accept: boolean;\n promptText?: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n page.removeListener('dialog', handler);\n reject(new Error(`No dialog appeared within ${timeout}ms`));\n }, timeout);\n\n const handler = async (dialog: { accept: (text?: string) => Promise<void>; dismiss: () => Promise<void> }) => {\n clearTimeout(timer);\n try {\n if (opts.accept) {\n await dialog.accept(opts.promptText);\n } else {\n await dialog.dismiss();\n }\n resolve();\n } catch (err) {\n reject(err);\n }\n };\n\n page.once('dialog', handler);\n });\n}\n\nexport async function armFileUploadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n paths?: string[];\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n page.removeListener('filechooser', handler);\n reject(new Error(`No file chooser appeared within ${timeout}ms`));\n }, timeout);\n\n const handler = async (fc: { setFiles: (files: string[]) => Promise<void> }) => {\n clearTimeout(timer);\n try {\n await fc.setFiles(opts.paths ?? []);\n resolve();\n } catch (err) {\n reject(err);\n }\n };\n\n page.once('filechooser', handler);\n });\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pressKeyViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n key: string;\n delayMs?: number;\n}): Promise<void> {\n const key = String(opts.key ?? '').trim();\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.keyboard.press(key, { delay: Math.max(0, Math.floor(opts.delayMs ?? 0)) });\n}\n","import { resolve, normalize, sep } from 'node:path';\nimport { lookup } from 'node:dns/promises';\nimport type { SsrfPolicy } from './types.js';\n\nexport type LookupFn = typeof lookup;\n\n/**\n * Thrown when a navigation URL is blocked by SSRF policy.\n * Callers can catch this specifically to distinguish navigation blocks\n * from other errors.\n */\nexport class InvalidBrowserNavigationUrlError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidBrowserNavigationUrlError';\n }\n}\n\n/** Options for browser navigation SSRF policy. */\nexport type BrowserNavigationPolicyOptions = {\n ssrfPolicy?: SsrfPolicy;\n};\n\n/** Build a BrowserNavigationPolicyOptions from an SsrfPolicy. */\nexport function withBrowserNavigationPolicy(ssrfPolicy?: SsrfPolicy): BrowserNavigationPolicyOptions {\n return { ssrfPolicy };\n}\n\n// Only http: and https: are permitted for navigation; about:blank is the sole non-network exception.\nconst NETWORK_NAVIGATION_PROTOCOLS = new Set(['http:', 'https:']);\nconst SAFE_NON_NETWORK_URLS = new Set(['about:blank']);\n\n/**\n * Assert that a URL is allowed for browser navigation under the given SSRF policy.\n * Throws `InvalidBrowserNavigationUrlError` if the URL is blocked.\n */\nexport async function assertBrowserNavigationAllowed(opts: {\n url: string;\n lookupFn?: LookupFn;\n} & BrowserNavigationPolicyOptions): Promise<void> {\n const rawUrl = String(opts.url ?? '').trim();\n\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n throw new InvalidBrowserNavigationUrlError(`Invalid URL: \"${rawUrl}\"`);\n }\n\n // Block non-network protocols (file:, data:, javascript:, etc.) — only http/https allowed.\n if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) {\n if (SAFE_NON_NETWORK_URLS.has(parsed.href)) return;\n throw new InvalidBrowserNavigationUrlError(`Navigation blocked: unsupported protocol \"${parsed.protocol}\"`);\n }\n\n const policy = opts.ssrfPolicy;\n\n if (policy?.allowPrivateNetwork) return;\n\n const allowedHostnames = [\n ...(policy?.allowedHostnames ?? []),\n ...(policy?.hostnameAllowlist ?? []),\n ];\n\n if (allowedHostnames.length) {\n const hostname = parsed.hostname.toLowerCase();\n if (allowedHostnames.some(h => h.toLowerCase() === hostname)) return;\n }\n\n if (await isInternalUrlResolved(rawUrl, opts.lookupFn)) {\n throw new InvalidBrowserNavigationUrlError(\n `Navigation to internal/loopback address blocked: \"${rawUrl}\". Use ssrfPolicy: { allowPrivateNetwork: true } if this is intentional.`\n );\n }\n}\n\n/**\n * Validate that an output file path is safe — no directory traversal or escape.\n * Rejects paths containing `..` segments or relative paths that could escape\n * the intended output directory.\n *\n * @param path - The output path to validate\n * @param allowedRoots - Optional list of allowed root directories. If provided,\n * the resolved path must be within one of these roots.\n * @throws If the path is unsafe\n */\nexport function assertSafeOutputPath(path: string, allowedRoots?: string[]): void {\n if (!path || typeof path !== 'string') {\n throw new Error('Output path is required.');\n }\n\n const normalized = normalize(path);\n\n // Reject paths with traversal segments\n if (normalized.includes('..')) {\n throw new Error(`Unsafe output path: directory traversal detected in \"${path}\".`);\n }\n\n // If allowed roots are specified, resolved path must be within one of them\n if (allowedRoots?.length) {\n const resolved = resolve(normalized);\n const withinRoot = allowedRoots.some(root => {\n const normalizedRoot = resolve(root);\n return resolved === normalizedRoot || resolved.startsWith(normalizedRoot + sep);\n });\n if (!withinRoot) {\n throw new Error(`Unsafe output path: \"${path}\" is outside allowed directories.`);\n }\n }\n}\n\n/**\n * Expand an IPv6 address (with optional :: abbreviation) to full 8-group\n * colon-separated hex form. Returns null for invalid input.\n */\nfunction expandIPv6(ip: string): string | null {\n let normalized = ip;\n\n // Handle embedded IPv4 literal at end (e.g., 64:ff9b::192.168.1.1)\n const v4Match = normalized.match(/^(.+:)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})$/);\n if (v4Match) {\n const octets = v4Match[2].split('.').map(Number);\n if (octets.some(o => o > 255)) return null;\n const hexHi = ((octets[0] << 8) | octets[1]).toString(16).padStart(4, '0');\n const hexLo = ((octets[2] << 8) | octets[3]).toString(16).padStart(4, '0');\n normalized = v4Match[1] + hexHi + ':' + hexLo;\n }\n\n const halves = normalized.split('::');\n if (halves.length > 2) return null; // multiple :: is invalid\n\n if (halves.length === 2) {\n const left = halves[0] !== '' ? halves[0].split(':') : [];\n const right = halves[1] !== '' ? halves[1].split(':') : [];\n const needed = 8 - left.length - right.length;\n if (needed < 0) return null;\n const groups = [...left, ...Array(needed).fill('0'), ...right];\n if (groups.length !== 8) return null;\n return groups.map(g => g.padStart(4, '0')).join(':');\n }\n\n const groups = normalized.split(':');\n if (groups.length !== 8) return null;\n return groups.map(g => g.padStart(4, '0')).join(':');\n}\n\n/**\n * Convert two 16-bit hex group strings to a dotted-decimal IPv4 string.\n */\nfunction hexToIPv4(hiHex: string, loHex: string): string {\n const hi = parseInt(hiHex, 16);\n const lo = parseInt(loHex, 16);\n return `${(hi >> 8) & 0xff}.${hi & 0xff}.${(lo >> 8) & 0xff}.${lo & 0xff}`;\n}\n\n/**\n * Attempt to extract an IPv4 address embedded in an IPv6 transition address.\n * Handles: IPv4-mapped (::ffff:), NAT64 (64:ff9b::/96, 64:ff9b:1::/48),\n * 6to4 (2002::/16), and Teredo (2001:0000::/32).\n *\n * Returns:\n * - The embedded IPv4 string if found\n * - null if the address is not a known transition format\n * - '' (empty string) on parse error — callers MUST treat this as internal (fail closed)\n */\nfunction extractEmbeddedIPv4(lower: string): string | null {\n // IPv4-mapped: ::ffff:a.b.c.d (most common transition form)\n if (lower.startsWith('::ffff:')) {\n return lower.slice(7);\n }\n\n // For NAT64, 6to4, and Teredo we need to fully expand the address\n const expanded = expandIPv6(lower);\n if (expanded === null) return ''; // fail closed on invalid IPv6\n\n const groups = expanded.split(':');\n if (groups.length !== 8) return ''; // fail closed\n\n // NAT64 well-known prefix: 64:ff9b::/96\n // Expanded form: 0064:ff9b:0000:0000:0000:0000:wwxx:yyzz → IPv4 = ww.xx.yy.zz\n if (\n groups[0] === '0064' && groups[1] === 'ff9b' &&\n groups[2] === '0000' && groups[3] === '0000' &&\n groups[4] === '0000' && groups[5] === '0000'\n ) {\n return hexToIPv4(groups[6], groups[7]);\n }\n\n // NAT64 local-use prefix: 64:ff9b:1::/48\n // Expanded form: 0064:ff9b:0001:xxxx:xxxx:xxxx:wwxx:yyzz → IPv4 = ww.xx.yy.zz\n if (groups[0] === '0064' && groups[1] === 'ff9b' && groups[2] === '0001') {\n return hexToIPv4(groups[6], groups[7]);\n }\n\n // 6to4 prefix: 2002::/16\n // Expanded form: 2002:aabb:ccdd:xxxx:xxxx:xxxx:xxxx:xxxx → IPv4 = aa.bb.cc.dd\n if (groups[0] === '2002') {\n return hexToIPv4(groups[1], groups[2]);\n }\n\n // Teredo prefix: 2001:0000::/32\n // Expanded form: 2001:0000:...:...:...:...:~ww~xx:~yy~zz\n // Client IPv4 is in the last 32 bits XOR'd with 0xFFFFFFFF\n if (groups[0] === '2001' && groups[1] === '0000') {\n const hiXored = (parseInt(groups[6], 16) ^ 0xffff).toString(16).padStart(4, '0');\n const loXored = (parseInt(groups[7], 16) ^ 0xffff).toString(16).padStart(4, '0');\n return hexToIPv4(hiXored, loXored);\n }\n\n return null; // not a known transition format\n}\n\n/**\n * Validate a single IPv4 octet string: must be a plain decimal integer 0-255\n * with no leading zeros, hex prefixes, or other non-standard forms.\n * Returns false for any octet that doesn't round-trip cleanly.\n */\nfunction isStrictDecimalOctet(part: string): boolean {\n if (!/^[0-9]+$/.test(part)) return false;\n const n = parseInt(part, 10);\n if (n < 0 || n > 255) return false;\n // Reject leading zeros (e.g. \"0177\" would be octal in some parsers)\n if (String(n) !== part) return false;\n return true;\n}\n\n/**\n * Returns true if the string looks like a legacy/non-standard IPv4 literal\n * that should be treated as internal and blocked (fail closed).\n * Catches octal (0177.0.0.1), hex (0xff.0.0.1), short (127.1),\n * and packed decimal (2130706433) forms.\n */\nfunction isUnsupportedIPv4Literal(ip: string): boolean {\n // Packed decimal: single integer with no dots\n if (/^[0-9]+$/.test(ip)) return true;\n\n const parts = ip.split('.');\n // Must be exactly 4 dotted parts\n if (parts.length !== 4) return true;\n // Each part must be a strict decimal octet\n if (!parts.every(isStrictDecimalOctet)) return true;\n\n return false;\n}\n\n/**\n * Check whether an IP address string is internal/private/loopback.\n */\nfunction isInternalIP(ip: string): boolean {\n // Reject non-standard IPv4 literals before any range checks (fail closed)\n if (!ip.includes(':') && isUnsupportedIPv4Literal(ip)) return true;\n\n // IPv4\n if (/^127\\./.test(ip)) return true;\n if (/^10\\./.test(ip)) return true;\n if (/^172\\.(1[6-9]|2\\d|3[01])\\./.test(ip)) return true;\n if (/^192\\.168\\./.test(ip)) return true;\n if (/^169\\.254\\./.test(ip)) return true;\n if (/^100\\.(6[4-9]|[7-9]\\d|1[01]\\d|12[0-7])\\./.test(ip)) return true;\n if (ip === '0.0.0.0') return true;\n\n // IPv6\n const lower = ip.toLowerCase();\n if (lower === '::1') return true;\n if (lower.startsWith('fe80:')) return true; // link-local\n if (lower.startsWith('fc') || lower.startsWith('fd')) return true; // ULA\n\n // IPv6 transition addresses: NAT64, 6to4, Teredo, IPv4-mapped\n const embedded = extractEmbeddedIPv4(lower);\n if (embedded !== null) {\n if (embedded === '') return true; // parse error — fail closed\n return isInternalIP(embedded);\n }\n\n return false;\n}\n\n/**\n * Check whether a URL targets a loopback or private/internal network address.\n * Synchronous hostname-based check. Used to prevent SSRF attacks.\n */\nexport function isInternalUrl(url: string): boolean {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n // Fail closed: treat unparseable URLs as internal/blocked\n return true;\n }\n\n const hostname = parsed.hostname.toLowerCase();\n\n // Direct hostname checks\n // Note: URL.hostname strips IPv6 brackets, so [::1] becomes ::1\n if (hostname === 'localhost') return true;\n\n // Check if hostname is an IP literal\n if (isInternalIP(hostname)) return true;\n\n // .local, .internal, .localhost TLDs\n if (hostname.endsWith('.local') || hostname.endsWith('.internal') || hostname.endsWith('.localhost')) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Async version that also resolves DNS to catch rebinding attacks\n * where a public hostname resolves to an internal IP.\n */\nexport async function isInternalUrlResolved(url: string, lookupFn: LookupFn = lookup): Promise<boolean> {\n // First do the fast synchronous check\n if (isInternalUrl(url)) return true;\n\n // Then resolve DNS to catch rebinding\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return true;\n }\n\n try {\n const { address } = await lookupFn(parsed.hostname);\n if (isInternalIP(address)) return true;\n } catch {\n // DNS resolution failed — fail closed\n return true;\n }\n\n return false;\n}\n","import { connectBrowser, getPageForTargetId, ensurePageState, pageTargetId, findPageByTargetId, getAllPages, normalizeTimeoutMs } from '../connection.js';\nimport { assertBrowserNavigationAllowed } from '../security.js';\nimport type { BrowserTab, SsrfPolicy } from '../types.js';\n\nexport async function navigateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n url: string;\n timeoutMs?: number;\n ssrfPolicy?: SsrfPolicy;\n /** @deprecated Use ssrfPolicy: { allowPrivateNetwork: true } instead */\n allowInternal?: boolean;\n}): Promise<{ url: string }> {\n const url = String(opts.url ?? '').trim();\n if (!url) throw new Error('url is required');\n const policy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n await assertBrowserNavigationAllowed({ url, ssrfPolicy: policy });\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.goto(url, { timeout: normalizeTimeoutMs(opts.timeoutMs, 20000) });\n return { url: page.url() };\n}\n\nexport async function listPagesViaPlaywright(opts: { cdpUrl: string }): Promise<BrowserTab[]> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const pages = await getAllPages(browser);\n const results: BrowserTab[] = [];\n for (const page of pages) {\n const tid = await pageTargetId(page).catch(() => null);\n if (tid) results.push({\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n });\n }\n return results;\n}\n\nexport async function createPageViaPlaywright(opts: {\n cdpUrl: string;\n url?: string;\n ssrfPolicy?: SsrfPolicy;\n /** @deprecated Use ssrfPolicy: { allowPrivateNetwork: true } instead */\n allowInternal?: boolean;\n}): Promise<BrowserTab> {\n const targetUrl = (opts.url ?? '').trim() || 'about:blank';\n if (targetUrl !== 'about:blank') {\n const policy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n await assertBrowserNavigationAllowed({ url: targetUrl, ssrfPolicy: policy });\n }\n const { browser } = await connectBrowser(opts.cdpUrl);\n const context = browser.contexts()[0] ?? await browser.newContext();\n const page = await context.newPage();\n ensurePageState(page);\n if (targetUrl !== 'about:blank') {\n await page.goto(targetUrl, { timeout: normalizeTimeoutMs(undefined, 20000) });\n }\n const tid = await pageTargetId(page).catch(() => null);\n if (!tid) throw new Error('Failed to get targetId for new page');\n return {\n targetId: tid,\n title: await page.title().catch(() => ''),\n url: page.url(),\n type: 'page',\n };\n}\n\nexport async function closePageViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n await page.close();\n}\n\nexport async function closePageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n await page.close();\n}\n\nexport async function focusPageByTargetIdViaPlaywright(opts: {\n cdpUrl: string;\n targetId: string;\n}): Promise<void> {\n const { browser } = await connectBrowser(opts.cdpUrl);\n const page = await findPageByTargetId(browser, opts.targetId, opts.cdpUrl);\n if (!page) throw new Error(`Tab not found (targetId: ${opts.targetId}). Use browser.tabs() to list open tabs.`);\n try {\n await page.bringToFront();\n } catch (err) {\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Page.bringToFront');\n } catch {\n throw err;\n } finally {\n await session.detach().catch(() => {});\n }\n }\n}\n\nexport async function resizeViewportViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n width: number;\n height: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.setViewportSize({\n width: Math.max(1, Math.floor(opts.width)),\n height: Math.max(1, Math.floor(opts.height)),\n });\n}\n","import { getPageForTargetId, ensurePageState, normalizeTimeoutMs } from '../connection.js';\n\nexport async function waitForViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n timeMs?: number;\n text?: string;\n textGone?: string;\n selector?: string;\n url?: string;\n loadState?: 'load' | 'domcontentloaded' | 'networkidle';\n fn?: string;\n timeoutMs?: number;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 20000);\n\n if (typeof opts.timeMs === 'number' && Number.isFinite(opts.timeMs)) {\n await page.waitForTimeout(Math.max(0, opts.timeMs));\n }\n if (opts.text) {\n await page.getByText(opts.text).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.textGone) {\n await page.getByText(opts.textGone).first().waitFor({ state: 'hidden', timeout });\n }\n if (opts.selector) {\n const selector = String(opts.selector).trim();\n if (selector) await page.locator(selector).first().waitFor({ state: 'visible', timeout });\n }\n if (opts.url) {\n const url = String(opts.url).trim();\n if (url) await page.waitForURL(url, { timeout });\n }\n if (opts.loadState) {\n await page.waitForLoadState(opts.loadState, { timeout });\n }\n if (opts.fn) {\n const fn = String(opts.fn).trim();\n if (fn) await page.waitForFunction(fn, undefined, { timeout });\n }\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport interface FrameEvalResult {\n frameUrl: string;\n frameName: string;\n result: unknown;\n}\n\n/**\n * Evaluate JavaScript in ALL frames (including cross-origin iframes).\n * Playwright can access cross-origin frames via CDP, bypassing same-origin policy.\n * Returns results from each frame where evaluation succeeded.\n */\nexport async function evaluateInAllFramesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n}): Promise<FrameEvalResult[]> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n const frames = page.frames();\n const results: FrameEvalResult[] = [];\n\n for (const frame of frames) {\n try {\n // Runs in the frame's browser context (sandboxed), not in Node.js\n const result = await frame.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n );\n results.push({\n frameUrl: frame.url(),\n frameName: frame.name(),\n result,\n });\n } catch {\n // Frame may have been detached or navigation in progress — skip\n }\n }\n\n return results;\n}\n\n/**\n * Evaluate JavaScript in the browser page context.\n * This is intentionally using eval() to execute user-provided browser-side code,\n * which is the core purpose of this function — running arbitrary JS in the page.\n * The code runs in the browser sandbox, not in Node.js.\n */\nexport async function evaluateViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fn: string;\n ref?: string;\n timeoutMs?: number;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const fnText = String(opts.fn ?? '').trim();\n if (!fnText) throw new Error('function is required');\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = opts.timeoutMs != null ? opts.timeoutMs : undefined;\n\n if (opts.ref) {\n const locator = refLocator(page, opts.ref);\n // Runs in the browser page context (sandboxed), not in Node.js\n return await locator.evaluate(\n // eslint-disable-next-line no-eval\n (el: Element, fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate(el) : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n { timeout },\n );\n }\n\n // Runs in the browser page context (sandboxed), not in Node.js\n const evalPromise = page.evaluate(\n // eslint-disable-next-line no-eval\n (fnBody: string) => {\n 'use strict';\n try {\n const candidate = (0, eval)('(' + fnBody + ')');\n return typeof candidate === 'function' ? candidate() : candidate;\n } catch (err: unknown) {\n throw new Error('Invalid evaluate function: ' + (err instanceof Error ? err.message : String(err)));\n }\n },\n fnText,\n );\n\n if (!opts.signal) return evalPromise;\n return Promise.race([\n evalPromise,\n new Promise<never>((_, reject) => {\n opts.signal!.addEventListener('abort', () => reject(new Error('Evaluate aborted')), { once: true });\n }),\n ]);\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n toAIFriendlyError,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport { assertSafeOutputPath } from '../security.js';\nimport type { DownloadResult } from '../types.js';\n\nexport async function downloadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n ref: string;\n path: string;\n timeoutMs?: number;\n allowedOutputRoots?: string[];\n}): Promise<DownloadResult> {\n assertSafeOutputPath(opts.path, opts.allowedOutputRoots);\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n const locator = refLocator(page, opts.ref);\n\n try {\n const [download] = await Promise.all([\n page.waitForEvent('download', { timeout }),\n locator.click({ timeout }),\n ]);\n\n await download.saveAs(opts.path);\n\n return {\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n path: opts.path,\n };\n } catch (err) {\n throw toAIFriendlyError(err, opts.ref);\n }\n}\n\nexport async function waitForDownloadViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n path?: string;\n timeoutMs?: number;\n allowedOutputRoots?: string[];\n}): Promise<DownloadResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n const download = await page.waitForEvent('download', { timeout });\n const savePath = opts.path ?? download.suggestedFilename();\n assertSafeOutputPath(savePath, opts.allowedOutputRoots);\n await download.saveAs(savePath);\n\n return {\n url: download.url(),\n suggestedFilename: download.suggestedFilename(),\n path: savePath,\n };\n}\n","import { devices } from 'playwright-core';\nimport {\n getPageForTargetId,\n ensurePageState,\n} from '../connection.js';\nimport type { ColorScheme } from '../types.js';\n\nexport async function emulateMediaViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n colorScheme: ColorScheme;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.emulateMedia({ colorScheme: opts.colorScheme });\n}\n\nexport async function setDeviceViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n name: string;\n}): Promise<void> {\n const device = devices[opts.name];\n if (!device) {\n const available = Object.keys(devices).slice(0, 10).join(', ');\n throw new Error(`Unknown device \"${opts.name}\". Some available devices: ${available}...`);\n }\n\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n if (device.viewport) {\n await page.setViewportSize(device.viewport);\n }\n if (device.userAgent) {\n const context = page.context();\n // Playwright doesn't expose setUserAgent on context directly via CDP,\n // so we use CDP Emulation.setUserAgentOverride\n const session = await context.newCDPSession(page);\n try {\n await session.send('Emulation.setUserAgentOverride', {\n userAgent: device.userAgent,\n });\n } finally {\n await session.detach().catch(() => {});\n }\n }\n}\n\nexport async function setExtraHTTPHeadersViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n headers: Record<string, string>;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.setExtraHTTPHeaders(opts.headers);\n}\n\nexport async function setGeolocationViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n latitude?: number;\n longitude?: number;\n accuracy?: number;\n origin?: string;\n clear?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n\n if (opts.clear) {\n await context.setGeolocation(null);\n await context.clearPermissions();\n return;\n }\n\n if (opts.latitude === undefined || opts.longitude === undefined) {\n throw new Error('latitude and longitude are required when not clearing geolocation.');\n }\n\n await context.grantPermissions(['geolocation'], opts.origin ? { origin: opts.origin } : undefined);\n await context.setGeolocation({\n latitude: opts.latitude,\n longitude: opts.longitude,\n accuracy: opts.accuracy,\n });\n}\n\n/**\n * Set or clear HTTP credentials for the browser context.\n * Note: Playwright's `setHTTPCredentials()` is deprecated — prefer providing credentials\n * at context creation time. This function is retained for CDP-connected contexts where\n * context creation is not controlled by the library.\n */\nexport async function setHttpCredentialsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n username?: string;\n password?: string;\n clear?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n\n if (opts.clear) {\n await context.setHTTPCredentials({ username: '', password: '' });\n return;\n }\n\n await context.setHTTPCredentials({\n username: opts.username ?? '',\n password: opts.password ?? '',\n });\n}\n\nexport async function setLocaleViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n locale: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Emulation.setLocaleOverride', { locale: opts.locale });\n } finally {\n await session.detach().catch(() => {});\n }\n}\n\nexport async function setOfflineViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n offline: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.context().setOffline(opts.offline);\n}\n\nexport async function setTimezoneViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n timezoneId: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const session = await page.context().newCDPSession(page);\n try {\n await session.send('Emulation.setTimezoneOverride', { timezoneId: opts.timezoneId });\n } finally {\n await session.detach().catch(() => {});\n }\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n restoreRoleRefsForTarget,\n refLocator,\n} from '../connection.js';\n\nexport async function takeScreenshotViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n fullPage?: boolean;\n ref?: string;\n element?: string;\n type?: 'png' | 'jpeg';\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n const type = opts.type ?? 'png';\n\n if (opts.ref) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await refLocator(page, opts.ref).screenshot({ type }) };\n }\n if (opts.element) {\n if (opts.fullPage) throw new Error('fullPage is not supported for element screenshots');\n return { buffer: await page.locator(opts.element).first().screenshot({ type }) };\n }\n return { buffer: await page.screenshot({ type, fullPage: Boolean(opts.fullPage) }) };\n}\n\nexport async function screenshotWithLabelsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n refs: string[];\n maxLabels?: number;\n type?: 'png' | 'jpeg';\n}): Promise<{ buffer: Buffer; labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }>; skipped: string[] }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n restoreRoleRefsForTarget({ cdpUrl: opts.cdpUrl, targetId: opts.targetId, page });\n\n const maxLabels = opts.maxLabels ?? 50;\n const type = opts.type ?? 'png';\n const refs = opts.refs.slice(0, maxLabels);\n const skipped = opts.refs.slice(maxLabels);\n\n // Collect bounding boxes for each ref\n const labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }> = [];\n for (let i = 0; i < refs.length; i++) {\n const ref = refs[i]!;\n try {\n const locator = refLocator(page, ref);\n const box = await locator.boundingBox({ timeout: 2000 });\n if (box) {\n labels.push({ ref, index: i + 1, box });\n } else {\n skipped.push(ref);\n }\n } catch {\n skipped.push(ref);\n }\n }\n\n // Inject visible label overlays into the page\n await page.evaluate((labelData: Array<{ index: number; box: { x: number; y: number; width: number; height: number } }>) => {\n const container = document.createElement('div');\n container.id = '__browserclaw_labels__';\n container.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2147483647;';\n for (const { index, box } of labelData) {\n // Border around element\n const border = document.createElement('div');\n border.style.cssText = `position:absolute;left:${box.x}px;top:${box.y}px;width:${box.width}px;height:${box.height}px;border:2px solid #FF4500;box-sizing:border-box;`;\n container.appendChild(border);\n // Label badge\n const badge = document.createElement('div');\n badge.textContent = String(index);\n badge.style.cssText = `position:absolute;left:${box.x}px;top:${Math.max(0, box.y - 18)}px;background:#FF4500;color:#fff;font:bold 12px/16px monospace;padding:0 4px;border-radius:2px;`;\n container.appendChild(badge);\n }\n document.body.appendChild(container);\n }, labels.map(l => ({ index: l.index, box: l.box })));\n\n // Take the screenshot with labels visible\n const buffer = await page.screenshot({ type });\n\n // Remove the label overlays (best-effort — page may have navigated)\n await page.evaluate(() => {\n const el = document.getElementById('__browserclaw_labels__');\n if (el) el.remove();\n }).catch(() => {});\n\n return { buffer, labels, skipped };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\n\nexport async function pdfViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ buffer: Buffer }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { buffer: await page.pdf({ printBackground: true }) };\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n} from '../connection.js';\nimport { assertSafeOutputPath } from '../security.js';\n\nexport async function traceStartViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n screenshots?: boolean;\n snapshots?: boolean;\n sources?: boolean;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n await context.tracing.start({\n screenshots: opts.screenshots ?? true,\n snapshots: opts.snapshots ?? true,\n sources: opts.sources,\n });\n}\n\nexport async function traceStopViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n path: string;\n allowedOutputRoots?: string[];\n}): Promise<void> {\n assertSafeOutputPath(opts.path, opts.allowedOutputRoots);\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const context = page.context();\n await context.tracing.stop({ path: opts.path });\n}\n","import {\n getPageForTargetId,\n ensurePageState,\n normalizeTimeoutMs,\n} from '../connection.js';\nimport type { ResponseBodyResult } from '../types.js';\n\nexport async function responseBodyViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n url: string;\n timeoutMs?: number;\n maxChars?: number;\n}): Promise<ResponseBodyResult> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n\n const timeout = normalizeTimeoutMs(opts.timeoutMs, 30000, 120000);\n\n const response = await page.waitForResponse(opts.url, { timeout });\n let body = await response.text();\n let truncated = false;\n\n if (opts.maxChars && body.length > opts.maxChars) {\n body = body.slice(0, opts.maxChars);\n truncated = true;\n }\n\n const headers: Record<string, string> = {};\n const allHeaders = response.headers();\n for (const [key, value] of Object.entries(allHeaders)) {\n headers[key] = value;\n }\n\n return {\n url: response.url(),\n status: response.status(),\n headers,\n body,\n truncated,\n };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { ConsoleMessage, PageError, NetworkRequest } from '../types.js';\n\nfunction consolePriority(level: string): number {\n switch (level) {\n case 'error': return 3;\n case 'warning':\n case 'warn': return 2;\n case 'info':\n case 'log': return 1;\n case 'debug': return 0;\n default: return 1;\n }\n}\n\nexport async function getConsoleMessagesViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n level?: string;\n clear?: boolean;\n}): Promise<ConsoleMessage[]> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const messages = opts.level\n ? state.console.filter(msg => consolePriority(msg.type) >= consolePriority(opts.level!))\n : [...state.console];\n if (opts.clear) state.console = [];\n return messages;\n}\n\nexport async function getPageErrorsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n clear?: boolean;\n}): Promise<{ errors: PageError[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const errors = [...state.errors];\n if (opts.clear) state.errors = [];\n return { errors };\n}\n\nexport async function getNetworkRequestsViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n filter?: string;\n clear?: boolean;\n}): Promise<{ requests: NetworkRequest[] }> {\n const state = ensurePageState(await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId }));\n const raw = [...state.requests];\n const filter = typeof opts.filter === 'string' ? opts.filter.trim() : '';\n const requests = filter ? raw.filter(r => r.url.includes(filter)) : raw;\n if (opts.clear) {\n state.requests = [];\n state.requestIds = new WeakMap();\n }\n return { requests };\n}\n","import { getPageForTargetId, ensurePageState } from '../connection.js';\nimport type { CookieData, StorageKind } from '../types.js';\n\n// ── Cookies ──\n\nexport async function cookiesGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<{ cookies: Awaited<ReturnType<import('playwright-core').BrowserContext['cookies']>> }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return { cookies: await page.context().cookies() };\n}\n\nexport async function cookiesSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n cookie: CookieData;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n const cookie = opts.cookie;\n if (!cookie.name || cookie.value === undefined) throw new Error('cookie name and value are required');\n const hasUrl = typeof cookie.url === 'string' && cookie.url.trim();\n const hasDomain = typeof cookie.domain === 'string' && cookie.domain.trim();\n if (!hasUrl && !hasDomain) throw new Error('cookie requires url or domain');\n await page.context().addCookies([cookie]);\n}\n\nexport async function cookiesClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.context().clearCookies();\n}\n\n// ── localStorage / sessionStorage ──\n\nexport async function storageGetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key?: string;\n}): Promise<{ values: Record<string, string> }> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n return {\n values: await page.evaluate(\n ({ kind, key }: { kind: string; key?: string }) => {\n const store = kind === 'session' ? window.sessionStorage : window.localStorage;\n if (key) {\n const value = store.getItem(key);\n return value === null ? {} : { [key]: value };\n }\n const out: Record<string, string> = {};\n for (let i = 0; i < store.length; i++) {\n const k = store.key(i);\n if (!k) continue;\n const v = store.getItem(k);\n if (v !== null) out[k] = v;\n }\n return out;\n },\n { kind: opts.kind, key: opts.key },\n ) ?? {},\n };\n}\n\nexport async function storageSetViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n key: string;\n value: string;\n}): Promise<void> {\n const key = String(opts.key ?? '');\n if (!key) throw new Error('key is required');\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind, key: k, value }: { kind: string; key: string; value: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).setItem(k, value);\n },\n { kind: opts.kind, key, value: String(opts.value ?? '') },\n );\n}\n\nexport async function storageClearViaPlaywright(opts: {\n cdpUrl: string;\n targetId?: string;\n kind: StorageKind;\n}): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: opts.cdpUrl, targetId: opts.targetId });\n ensurePageState(page);\n await page.evaluate(\n ({ kind }: { kind: string }) => {\n (kind === 'session' ? window.sessionStorage : window.localStorage).clear();\n },\n { kind: opts.kind },\n );\n}\n","import { launchChrome, stopChrome, isChromeReachable } from './chrome-launcher.js';\nimport { connectBrowser, disconnectBrowser, getPageForTargetId, ensurePageState, restoreRoleRefsForTarget, refLocator, pageTargetId, getAllPages, normalizeTimeoutMs } from './connection.js';\nimport { snapshotAi } from './snapshot/ai-snapshot.js';\nimport { snapshotRole, snapshotAria } from './snapshot/aria-snapshot.js';\nimport { clickViaPlaywright, hoverViaPlaywright, typeViaPlaywright, selectOptionViaPlaywright, dragViaPlaywright, fillFormViaPlaywright, scrollIntoViewViaPlaywright, highlightViaPlaywright, setInputFilesViaPlaywright, armDialogViaPlaywright, armFileUploadViaPlaywright } from './actions/interaction.js';\nimport { pressKeyViaPlaywright } from './actions/keyboard.js';\nimport { navigateViaPlaywright, listPagesViaPlaywright, createPageViaPlaywright, closePageByTargetIdViaPlaywright, focusPageByTargetIdViaPlaywright, resizeViewportViaPlaywright } from './actions/navigation.js';\nimport { waitForViaPlaywright } from './actions/wait.js';\nimport { evaluateViaPlaywright, evaluateInAllFramesViaPlaywright, type FrameEvalResult } from './actions/evaluate.js';\nimport { downloadViaPlaywright, waitForDownloadViaPlaywright } from './actions/download.js';\nimport { emulateMediaViaPlaywright, setDeviceViaPlaywright, setExtraHTTPHeadersViaPlaywright, setGeolocationViaPlaywright, setHttpCredentialsViaPlaywright, setLocaleViaPlaywright, setOfflineViaPlaywright, setTimezoneViaPlaywright } from './actions/emulation.js';\nimport { takeScreenshotViaPlaywright, screenshotWithLabelsViaPlaywright } from './capture/screenshot.js';\nimport { pdfViaPlaywright } from './capture/pdf.js';\nimport { traceStartViaPlaywright, traceStopViaPlaywright } from './capture/trace.js';\nimport { responseBodyViaPlaywright } from './capture/response.js';\nimport { getConsoleMessagesViaPlaywright, getPageErrorsViaPlaywright, getNetworkRequestsViaPlaywright } from './capture/activity.js';\nimport { cookiesGetViaPlaywright, cookiesSetViaPlaywright, cookiesClearViaPlaywright, storageGetViaPlaywright, storageSetViaPlaywright, storageClearViaPlaywright } from './storage/index.js';\nimport type {\n LaunchOptions, ConnectOptions, SnapshotResult, SnapshotOptions, AriaSnapshotResult,\n BrowserTab, FormField, ClickOptions, TypeOptions, WaitOptions,\n ScreenshotOptions, ConsoleMessage, PageError, NetworkRequest,\n CookieData, StorageKind, RunningChrome, SsrfPolicy,\n DownloadResult, DialogOptions, ResponseBodyResult, TraceStartOptions,\n ColorScheme, GeolocationOptions, HttpCredentials,\n} from './types.js';\n\n/**\n * Represents a single browser page/tab with ref-based automation.\n *\n * The workflow is: **snapshot → read refs → act on refs**.\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n *\n * // 1. Take a snapshot to get refs\n * const { snapshot, refs } = await page.snapshot();\n * // snapshot: AI-readable text tree\n * // refs: { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * // 2. Act on refs\n * await page.click('e1');\n * await page.type('e3', 'hello');\n * ```\n */\nexport class CrawlPage {\n private readonly cdpUrl: string;\n private readonly targetId: string;\n private readonly ssrfPolicy: SsrfPolicy | undefined;\n\n /** @internal */\n constructor(cdpUrl: string, targetId: string, ssrfPolicy?: SsrfPolicy) {\n this.cdpUrl = cdpUrl;\n this.targetId = targetId;\n this.ssrfPolicy = ssrfPolicy;\n }\n\n /** The CDP target ID for this page. Use this to identify the page in multi-tab scenarios. */\n get id(): string {\n return this.targetId;\n }\n\n // ── Snapshot ──────────────────────────────────────────────────\n\n /**\n * Take an AI-readable snapshot of the page.\n *\n * Returns a text tree with numbered refs (`e1`, `e2`, ...) that map to\n * interactive elements. Use these refs with actions like `click()` and `type()`.\n *\n * @param opts - Snapshot options (mode, filtering, depth limits)\n * @returns Snapshot text, ref map, and statistics\n *\n * @example\n * ```ts\n * // Default snapshot (aria mode)\n * const { snapshot, refs } = await page.snapshot();\n *\n * // Interactive elements only, compact\n * const result = await page.snapshot({ interactive: true, compact: true });\n *\n * // Role-based mode (uses getByRole resolution)\n * const result = await page.snapshot({ mode: 'role' });\n * ```\n */\n async snapshot(opts?: SnapshotOptions): Promise<SnapshotResult> {\n if (opts?.mode === 'role') {\n return snapshotRole({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n selector: opts.selector,\n frameSelector: opts.frameSelector,\n refsMode: opts.refsMode,\n options: {\n interactive: opts.interactive,\n compact: opts.compact,\n maxDepth: opts.maxDepth,\n },\n });\n }\n if (opts?.selector || opts?.frameSelector) {\n throw new Error('selector and frameSelector are only supported in role mode. Use { mode: \"role\" } or omit these options.');\n }\n return snapshotAi({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n maxChars: opts?.maxChars,\n options: {\n interactive: opts?.interactive,\n compact: opts?.compact,\n maxDepth: opts?.maxDepth,\n },\n });\n }\n\n /**\n * Take a raw ARIA accessibility tree snapshot via CDP.\n *\n * Unlike `snapshot()`, this returns structured node data rather than\n * an AI-readable text tree. Useful for programmatic accessibility analysis.\n *\n * @param opts - Options (limit: max nodes to return, default 500)\n * @returns Array of accessibility tree nodes\n */\n async ariaSnapshot(opts?: { limit?: number }): Promise<AriaSnapshotResult> {\n return snapshotAria({ cdpUrl: this.cdpUrl, targetId: this.targetId, limit: opts?.limit });\n }\n\n // ── Interactions ─────────────────────────────────────────────\n\n /**\n * Click an element by ref.\n *\n * @param ref - Ref ID from a snapshot (e.g. `'e1'`)\n * @param opts - Click options (double-click, button, modifiers)\n *\n * @example\n * ```ts\n * await page.click('e1');\n * await page.click('e2', { doubleClick: true });\n * await page.click('e3', { button: 'right' });\n * await page.click('e4', { modifiers: ['Control'] });\n * ```\n */\n async click(ref: string, opts?: ClickOptions): Promise<void> {\n return clickViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n doubleClick: opts?.doubleClick,\n button: opts?.button,\n modifiers: opts?.modifiers,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Type text into an input element by ref.\n *\n * By default, uses Playwright's `fill()` for instant input. Use `slowly: true`\n * to simulate real keystroke typing with a 75ms delay per character.\n *\n * @param ref - Ref ID of the input element (e.g. `'e3'`)\n * @param text - Text to type\n * @param opts - Type options (submit, slowly)\n *\n * @example\n * ```ts\n * await page.type('e3', 'hello world');\n * await page.type('e3', 'slow typing', { slowly: true });\n * await page.type('e3', 'search query', { submit: true }); // press Enter after\n * ```\n */\n async type(ref: string, text: string, opts?: TypeOptions): Promise<void> {\n return typeViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n text,\n submit: opts?.submit,\n slowly: opts?.slowly,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Hover over an element by ref.\n *\n * @param ref - Ref ID from a snapshot\n * @param opts - Timeout options\n */\n async hover(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return hoverViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Select option(s) in a `<select>` dropdown by ref.\n *\n * @param ref - Ref ID of the select element\n * @param values - One or more option labels/values to select\n *\n * @example\n * ```ts\n * await page.select('e5', 'Option A');\n * await page.select('e5', 'Option A', 'Option B'); // multi-select\n * ```\n */\n async select(ref: string, ...values: string[]): Promise<void> {\n return selectOptionViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n values,\n });\n }\n\n /**\n * Drag one element to another.\n *\n * @param startRef - Ref ID of the element to drag\n * @param endRef - Ref ID of the drop target\n * @param opts - Timeout options\n */\n async drag(startRef: string, endRef: string, opts?: { timeoutMs?: number }): Promise<void> {\n return dragViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n startRef,\n endRef,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Fill multiple form fields at once.\n *\n * Supports text inputs, checkboxes, and radio buttons.\n *\n * @param fields - Array of form fields to fill\n *\n * @example\n * ```ts\n * await page.fill([\n * { ref: 'e2', type: 'text', value: 'Jane Doe' },\n * { ref: 'e4', type: 'text', value: 'jane@example.com' },\n * { ref: 'e6', type: 'checkbox', value: true },\n * ]);\n * ```\n */\n async fill(fields: FormField[]): Promise<void> {\n return fillFormViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fields,\n });\n }\n\n /**\n * Scroll an element into the visible viewport.\n *\n * @param ref - Ref ID of the element to scroll to\n * @param opts - Timeout options\n */\n async scrollIntoView(ref: string, opts?: { timeoutMs?: number }): Promise<void> {\n return scrollIntoViewViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n /**\n * Highlight an element in the browser (Playwright built-in highlight).\n *\n * @param ref - Ref ID of the element to highlight\n */\n async highlight(ref: string): Promise<void> {\n return highlightViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n });\n }\n\n /**\n * Set files on an `<input type=\"file\">` element.\n *\n * @param ref - Ref ID of the file input element\n * @param paths - Array of file paths to upload\n */\n async uploadFile(ref: string, paths: string[]): Promise<void> {\n return setInputFilesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n paths,\n });\n }\n\n /**\n * Arm a one-shot dialog handler (alert, confirm, prompt).\n *\n * Returns a promise — store it (don't await), trigger the dialog, then await it.\n *\n * @param opts - Dialog options (accept/dismiss, prompt text, timeout)\n *\n * @example\n * ```ts\n * const dialogDone = page.armDialog({ accept: true }); // don't await here\n * await page.click('e5'); // triggers confirm()\n * await dialogDone; // wait for dialog to be handled\n * ```\n */\n async armDialog(opts: DialogOptions): Promise<void> {\n return armDialogViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n accept: opts.accept,\n promptText: opts.promptText,\n timeoutMs: opts.timeoutMs,\n });\n }\n\n /**\n * Arm a one-shot file chooser handler.\n *\n * Returns a promise — store it (don't await), trigger the file picker, then await it.\n *\n * @param paths - File paths to set when the chooser appears (empty to clear)\n * @param opts - Timeout options\n *\n * @example\n * ```ts\n * const uploadDone = page.armFileUpload(['/path/to/file.pdf']); // don't await here\n * await page.click('e3'); // triggers file picker\n * await uploadDone; // wait for files to be set\n * ```\n */\n async armFileUpload(paths?: string[], opts?: { timeoutMs?: number }): Promise<void> {\n return armFileUploadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n paths,\n timeoutMs: opts?.timeoutMs,\n });\n }\n\n // ── Keyboard ─────────────────────────────────────────────────\n\n /**\n * Press a keyboard key or key combination.\n *\n * Uses Playwright's key names. Supports combinations with `+`.\n *\n * @param key - Key to press (e.g. `'Enter'`, `'Tab'`, `'Control+a'`, `'Meta+c'`)\n * @param opts - Options (delayMs: hold time between keydown and keyup)\n *\n * @example\n * ```ts\n * await page.press('Enter');\n * await page.press('Control+a');\n * await page.press('Meta+Shift+p');\n * ```\n */\n async press(key: string, opts?: { delayMs?: number }): Promise<void> {\n return pressKeyViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n key,\n delayMs: opts?.delayMs,\n });\n }\n\n // ── Navigation ───────────────────────────────────────────────\n\n /**\n * Get the current URL of the page.\n */\n async url(): Promise<string> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return page.url();\n }\n\n /**\n * Get the page title.\n */\n async title(): Promise<string> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return page.title();\n }\n\n /**\n * Navigate to a URL.\n *\n * @param url - The URL to navigate to\n * @param opts - Timeout options\n * @returns The final URL after navigation (may differ due to redirects)\n */\n async goto(url: string, opts?: { timeoutMs?: number }): Promise<{ url: string }> {\n return navigateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n url,\n timeoutMs: opts?.timeoutMs,\n ssrfPolicy: this.ssrfPolicy,\n });\n }\n\n /**\n * Reload the current page.\n *\n * @param opts - Timeout options\n */\n async reload(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.reload({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n /**\n * Navigate back in browser history.\n *\n * @param opts - Timeout options\n */\n async goBack(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.goBack({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n /**\n * Navigate forward in browser history.\n *\n * @param opts - Timeout options\n */\n async goForward(opts?: { timeoutMs?: number }): Promise<void> {\n const page = await getPageForTargetId({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n ensurePageState(page);\n await page.goForward({ timeout: normalizeTimeoutMs(opts?.timeoutMs, 20000) });\n }\n\n // ── Wait ─────────────────────────────────────────────────────\n\n /**\n * Wait for various conditions on the page.\n *\n * Multiple conditions can be specified — they are checked in order.\n *\n * @param opts - Wait conditions (text, URL, load state, selector, etc.)\n *\n * @example\n * ```ts\n * await page.waitFor({ loadState: 'networkidle' });\n * await page.waitFor({ text: 'Welcome back' });\n * await page.waitFor({ url: '**\\/dashboard' });\n * await page.waitFor({ timeMs: 1000 }); // sleep\n * ```\n */\n async waitFor(opts: WaitOptions): Promise<void> {\n return waitForViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ...opts,\n });\n }\n\n // ── Evaluate ─────────────────────────────────────────────────\n\n /**\n * Run JavaScript in the browser page context.\n *\n * The function string is evaluated in the browser's sandbox, not in Node.js.\n * Pass a `ref` to receive the element as the first argument.\n *\n * @param fn - JavaScript function body as a string\n * @param opts - Options (ref: scope evaluation to a specific element)\n * @returns The return value of the evaluated function\n *\n * @example\n * ```ts\n * const title = await page.evaluate('() => document.title');\n * const text = await page.evaluate('(el) => el.textContent', { ref: 'e1' });\n * const count = await page.evaluate('() => document.querySelectorAll(\"img\").length');\n * ```\n */\n async evaluate(fn: string, opts?: { ref?: string; timeoutMs?: number; signal?: AbortSignal }): Promise<unknown> {\n return evaluateViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n ref: opts?.ref,\n timeoutMs: opts?.timeoutMs,\n signal: opts?.signal,\n });\n }\n\n /**\n * Run JavaScript in ALL frames on the page (including cross-origin iframes).\n *\n * Playwright can access cross-origin frames via CDP, bypassing the same-origin policy.\n * This is essential for filling payment iframes (Stripe, etc.).\n *\n * @param fn - JavaScript function body as a string\n * @returns Array of results from each frame where evaluation succeeded\n *\n * @example\n * ```ts\n * const results = await page.evaluateInAllFrames(`() => {\n * const el = document.querySelector('input[name=\"cardnumber\"]');\n * return el ? 'found' : null;\n * }`);\n * ```\n */\n async evaluateInAllFrames(fn: string): Promise<FrameEvalResult[]> {\n return evaluateInAllFramesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fn,\n });\n }\n\n // ── Capture ──────────────────────────────────────────────────\n\n /**\n * Take a screenshot of the page or a specific element.\n *\n * @param opts - Screenshot options (fullPage, ref, element, type)\n * @returns PNG or JPEG image as a Buffer\n *\n * @example\n * ```ts\n * const screenshot = await page.screenshot();\n * const fullPage = await page.screenshot({ fullPage: true });\n * const element = await page.screenshot({ ref: 'e1' });\n * ```\n */\n async screenshot(opts?: ScreenshotOptions): Promise<Buffer> {\n const result = await takeScreenshotViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n fullPage: opts?.fullPage,\n ref: opts?.ref,\n element: opts?.element,\n type: opts?.type,\n });\n return result.buffer;\n }\n\n /**\n * Export the page as a PDF.\n *\n * Only works in headless mode.\n *\n * @returns PDF document as a Buffer\n */\n async pdf(): Promise<Buffer> {\n const result = await pdfViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.buffer;\n }\n\n /**\n * Take a screenshot with numbered labels overlaid on referenced elements.\n *\n * Useful for visual debugging — each ref gets a numbered badge and border.\n *\n * @param refs - Array of ref IDs to label\n * @param opts - Options (maxLabels: limit, type: image format)\n * @returns Screenshot buffer, label positions, and any skipped refs\n *\n * @example\n * ```ts\n * const { buffer, labels, skipped } = await page.screenshotWithLabels(['e1', 'e2', 'e3']);\n * fs.writeFileSync('labeled.png', buffer);\n * ```\n */\n async screenshotWithLabels(refs: string[], opts?: { maxLabels?: number; type?: 'png' | 'jpeg' }): Promise<{\n buffer: Buffer;\n labels: Array<{ ref: string; index: number; box: { x: number; y: number; width: number; height: number } }>;\n skipped: string[];\n }> {\n return screenshotWithLabelsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n refs,\n maxLabels: opts?.maxLabels,\n type: opts?.type,\n });\n }\n\n /**\n * Start recording a Playwright trace.\n *\n * Traces capture screenshots, DOM snapshots, and network activity.\n * Stop with `traceStop()` to save the trace file.\n *\n * @param opts - Trace options (screenshots, snapshots, sources)\n */\n async traceStart(opts?: TraceStartOptions): Promise<void> {\n return traceStartViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n screenshots: opts?.screenshots,\n snapshots: opts?.snapshots,\n sources: opts?.sources,\n });\n }\n\n /**\n * Stop recording a trace and save it to a file.\n *\n * @param path - File path to save the trace (e.g. `'trace.zip'`)\n * @param opts - Options (allowedOutputRoots: constrain output to specific directories)\n */\n async traceStop(path: string, opts?: { allowedOutputRoots?: string[] }): Promise<void> {\n return traceStopViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n path,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n /**\n * Wait for a network response matching a URL pattern and return its body.\n *\n * @param url - URL string or pattern to match\n * @param opts - Options (timeoutMs, maxChars)\n * @returns Response body, status, headers, and truncation info\n *\n * @example\n * ```ts\n * const resp = await page.responseBody('/api/data');\n * console.log(resp.status, resp.body);\n * ```\n */\n async responseBody(url: string, opts?: { timeoutMs?: number; maxChars?: number }): Promise<ResponseBodyResult> {\n return responseBodyViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n url,\n timeoutMs: opts?.timeoutMs,\n maxChars: opts?.maxChars,\n });\n }\n\n /**\n * Get console messages captured from the page.\n *\n * Messages are buffered automatically. Use `level` to filter by minimum severity.\n *\n * @param opts - Filter options (level, clear)\n * @returns Array of captured console messages\n */\n async consoleLogs(opts?: { level?: string; clear?: boolean }): Promise<ConsoleMessage[]> {\n return getConsoleMessagesViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n level: opts?.level,\n clear: opts?.clear,\n });\n }\n\n /**\n * Get uncaught errors from the page.\n *\n * @param opts - Options (clear: reset the error buffer after reading)\n * @returns Array of captured page errors\n */\n async pageErrors(opts?: { clear?: boolean }): Promise<PageError[]> {\n const result = await getPageErrorsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n clear: opts?.clear,\n });\n return result.errors;\n }\n\n /**\n * Get network requests captured from the page.\n *\n * @param opts - Options (filter: URL substring match, clear: reset the buffer)\n * @returns Array of captured network requests\n *\n * @example\n * ```ts\n * const all = await page.networkRequests();\n * const apiCalls = await page.networkRequests({ filter: '/api/' });\n * const fresh = await page.networkRequests({ clear: true }); // read and clear\n * ```\n */\n async networkRequests(opts?: { filter?: string; clear?: boolean }): Promise<NetworkRequest[]> {\n const result = await getNetworkRequestsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n filter: opts?.filter,\n clear: opts?.clear,\n });\n return result.requests;\n }\n\n // ── Viewport ─────────────────────────────────────────────────\n\n /**\n * Resize the browser viewport.\n *\n * @param width - Viewport width in pixels\n * @param height - Viewport height in pixels\n */\n async resize(width: number, height: number): Promise<void> {\n return resizeViewportViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n width,\n height,\n });\n }\n\n // ── Storage ──────────────────────────────────────────────────\n\n /**\n * Get all cookies for the current browser context.\n *\n * @returns Array of cookie objects\n */\n async cookies(): Promise<Awaited<ReturnType<import('playwright-core').BrowserContext['cookies']>>> {\n const result = await cookiesGetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n return result.cookies;\n }\n\n /**\n * Set a cookie in the browser context.\n *\n * @param cookie - Cookie data (must include `name`, `value`, and either `url` or `domain`+`path`)\n *\n * @example\n * ```ts\n * await page.setCookie({\n * name: 'token',\n * value: 'abc123',\n * url: 'https://example.com',\n * });\n * ```\n */\n async setCookie(cookie: CookieData): Promise<void> {\n return cookiesSetViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId, cookie });\n }\n\n /** Clear all cookies in the browser context. */\n async clearCookies(): Promise<void> {\n return cookiesClearViaPlaywright({ cdpUrl: this.cdpUrl, targetId: this.targetId });\n }\n\n /**\n * Get values from localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Optional specific key to retrieve (returns all if omitted)\n * @returns Key-value map of storage entries\n */\n async storageGet(kind: StorageKind, key?: string): Promise<Record<string, string>> {\n const result = await storageGetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key,\n });\n return result.values;\n }\n\n /**\n * Set a value in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n * @param key - Storage key\n * @param value - Storage value\n */\n async storageSet(kind: StorageKind, key: string, value: string): Promise<void> {\n return storageSetViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind, key, value,\n });\n }\n\n /**\n * Clear all entries in localStorage or sessionStorage.\n *\n * @param kind - `'local'` for localStorage, `'session'` for sessionStorage\n */\n async storageClear(kind: StorageKind): Promise<void> {\n return storageClearViaPlaywright({\n cdpUrl: this.cdpUrl, targetId: this.targetId, kind,\n });\n }\n\n // ── Downloads ───────────────────────────────────────────────\n\n /**\n * Click a ref and save the resulting file download.\n *\n * @param ref - Ref ID of the element that triggers the download\n * @param path - Local file path to save the download to\n * @param opts - Timeout options\n * @returns Download result with URL, suggested filename, and saved path\n *\n * @example\n * ```ts\n * const result = await page.download('e7', '/tmp/report.pdf');\n * console.log(result.suggestedFilename); // 'report.pdf'\n * ```\n */\n async download(ref: string, path: string, opts?: { timeoutMs?: number; allowedOutputRoots?: string[] }): Promise<DownloadResult> {\n return downloadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n ref,\n path,\n timeoutMs: opts?.timeoutMs,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n /**\n * Wait for the next download event (without clicking).\n *\n * Returns a promise — store it (don't await), trigger the download, then await it.\n *\n * @param opts - Options (path: save location, timeoutMs)\n * @returns Download result with URL, suggested filename, and saved path\n */\n async waitForDownload(opts?: { path?: string; timeoutMs?: number; allowedOutputRoots?: string[] }): Promise<DownloadResult> {\n return waitForDownloadViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n path: opts?.path,\n timeoutMs: opts?.timeoutMs,\n allowedOutputRoots: opts?.allowedOutputRoots,\n });\n }\n\n // ── Emulation ───────────────────────────────────────────────\n\n /**\n * Set the browser to offline or online mode.\n *\n * @param offline - `true` to go offline, `false` to go online\n */\n async setOffline(offline: boolean): Promise<void> {\n return setOfflineViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n offline,\n });\n }\n\n /**\n * Set extra HTTP headers for all requests.\n *\n * @param headers - Headers to add to every request\n *\n * @example\n * ```ts\n * await page.setExtraHeaders({ 'X-Custom': 'value' });\n * ```\n */\n async setExtraHeaders(headers: Record<string, string>): Promise<void> {\n return setExtraHTTPHeadersViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n headers,\n });\n }\n\n /**\n * Set HTTP authentication credentials.\n *\n * @param opts - Credentials (username, password) or `{ clear: true }` to remove\n */\n async setHttpCredentials(opts: HttpCredentials): Promise<void> {\n return setHttpCredentialsViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n username: opts.username,\n password: opts.password,\n clear: opts.clear,\n });\n }\n\n /**\n * Emulate a geolocation.\n *\n * @param opts - Geolocation coordinates or `{ clear: true }` to clear\n *\n * @example\n * ```ts\n * await page.setGeolocation({ latitude: 48.8566, longitude: 2.3522 }); // Paris\n * await page.setGeolocation({ clear: true }); // reset\n * ```\n */\n async setGeolocation(opts: GeolocationOptions): Promise<void> {\n return setGeolocationViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n latitude: opts.latitude,\n longitude: opts.longitude,\n accuracy: opts.accuracy,\n origin: opts.origin,\n clear: opts.clear,\n });\n }\n\n /**\n * Emulate a preferred color scheme.\n *\n * @param opts - Color scheme options\n *\n * @example\n * ```ts\n * await page.emulateMedia({ colorScheme: 'dark' });\n * ```\n */\n async emulateMedia(opts: { colorScheme: ColorScheme }): Promise<void> {\n return emulateMediaViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n colorScheme: opts.colorScheme,\n });\n }\n\n /**\n * Override the browser locale.\n *\n * @param locale - BCP-47 locale string (e.g. `'fr-FR'`, `'ja-JP'`)\n */\n async setLocale(locale: string): Promise<void> {\n return setLocaleViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n locale,\n });\n }\n\n /**\n * Override the browser timezone.\n *\n * @param timezoneId - IANA timezone ID (e.g. `'America/New_York'`, `'Asia/Tokyo'`)\n */\n async setTimezone(timezoneId: string): Promise<void> {\n return setTimezoneViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n timezoneId,\n });\n }\n\n /**\n * Emulate a specific device (viewport + user agent).\n *\n * @param name - Playwright device name (e.g. `'iPhone 13'`, `'Pixel 5'`)\n *\n * @example\n * ```ts\n * await page.setDevice('iPhone 13');\n * ```\n */\n async setDevice(name: string): Promise<void> {\n return setDeviceViaPlaywright({\n cdpUrl: this.cdpUrl,\n targetId: this.targetId,\n name,\n });\n }\n}\n\n/**\n * Main entry point for browserclaw.\n *\n * Launch or connect to a browser, then open pages and automate them\n * using the snapshot + ref pattern.\n *\n * @example\n * ```ts\n * import { BrowserClaw } from 'browserclaw';\n *\n * const browser = await BrowserClaw.launch({ headless: false });\n * const page = await browser.open('https://example.com');\n *\n * const { snapshot, refs } = await page.snapshot();\n * console.log(snapshot); // AI-readable page tree\n * console.log(refs); // { \"e1\": { role: \"link\", name: \"More info\" }, ... }\n *\n * await page.click('e1');\n * await browser.stop();\n * ```\n */\nexport class BrowserClaw {\n private readonly cdpUrl: string;\n private readonly ssrfPolicy: SsrfPolicy | undefined;\n private chrome: RunningChrome | null;\n\n private constructor(cdpUrl: string, chrome: RunningChrome | null, ssrfPolicy?: SsrfPolicy) {\n this.cdpUrl = cdpUrl;\n this.chrome = chrome;\n this.ssrfPolicy = ssrfPolicy;\n }\n\n /**\n * Launch a new Chrome instance and connect to it.\n *\n * Automatically detects Chrome, Brave, Edge, or Chromium on the system.\n * Creates a dedicated browser profile to avoid conflicts with your daily browser.\n *\n * @param opts - Launch options (headless, executablePath, cdpPort, etc.)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Default: visible Chrome window\n * const browser = await BrowserClaw.launch();\n *\n * // Headless mode\n * const browser = await BrowserClaw.launch({ headless: true });\n *\n * // Specific browser\n * const browser = await BrowserClaw.launch({\n * executablePath: '/usr/bin/google-chrome',\n * });\n * ```\n */\n static async launch(opts: LaunchOptions = {}): Promise<BrowserClaw> {\n const chrome = await launchChrome(opts);\n const cdpUrl = `http://127.0.0.1:${chrome.cdpPort}`;\n const ssrfPolicy = opts.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts.ssrfPolicy;\n return new BrowserClaw(cdpUrl, chrome, ssrfPolicy);\n }\n\n /**\n * Connect to an already-running Chrome instance via its CDP endpoint.\n *\n * The Chrome instance must have been started with `--remote-debugging-port`.\n *\n * @param cdpUrl - CDP endpoint URL (e.g. `'http://localhost:9222'`)\n * @returns A connected BrowserClaw instance\n *\n * @example\n * ```ts\n * // Chrome started with: chrome --remote-debugging-port=9222\n * const browser = await BrowserClaw.connect('http://localhost:9222');\n * ```\n */\n static async connect(cdpUrl: string, opts?: ConnectOptions): Promise<BrowserClaw> {\n if (!await isChromeReachable(cdpUrl, 3000, opts?.authToken)) {\n throw new Error(`Cannot connect to Chrome at ${cdpUrl}. Is Chrome running with --remote-debugging-port?`);\n }\n await connectBrowser(cdpUrl, opts?.authToken);\n const ssrfPolicy = opts?.allowInternal ? { ...opts.ssrfPolicy, allowPrivateNetwork: true } : opts?.ssrfPolicy;\n return new BrowserClaw(cdpUrl, null, ssrfPolicy);\n }\n\n /**\n * Open a URL in a new tab and return the page handle.\n *\n * @param url - URL to navigate to\n * @returns A CrawlPage for the new tab\n *\n * @example\n * ```ts\n * const page = await browser.open('https://example.com');\n * const { snapshot, refs } = await page.snapshot();\n * ```\n */\n async open(url: string): Promise<CrawlPage> {\n const tab = await createPageViaPlaywright({ cdpUrl: this.cdpUrl, url, ssrfPolicy: this.ssrfPolicy });\n return new CrawlPage(this.cdpUrl, tab.targetId, this.ssrfPolicy);\n }\n\n /**\n * Get a CrawlPage handle for the currently active tab.\n *\n * @returns CrawlPage for the first/active page\n */\n async currentPage(): Promise<CrawlPage> {\n const { browser } = await connectBrowser(this.cdpUrl);\n const pages = await getAllPages(browser);\n if (!pages.length) throw new Error('No pages available. Use browser.open(url) to create a tab.');\n const tid = await pageTargetId(pages[0]!).catch(() => null);\n if (!tid) throw new Error('Failed to get targetId for the current page.');\n return new CrawlPage(this.cdpUrl, tid, this.ssrfPolicy);\n }\n\n /**\n * List all open tabs.\n *\n * @returns Array of tab information objects\n */\n async tabs(): Promise<BrowserTab[]> {\n return listPagesViaPlaywright({ cdpUrl: this.cdpUrl });\n }\n\n /**\n * Bring a tab to the foreground.\n *\n * @param targetId - CDP target ID of the tab (from `tabs()` or `page.id`)\n */\n async focus(targetId: string): Promise<void> {\n return focusPageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Close a tab.\n *\n * @param targetId - CDP target ID of the tab to close\n */\n async close(targetId: string): Promise<void> {\n return closePageByTargetIdViaPlaywright({ cdpUrl: this.cdpUrl, targetId });\n }\n\n /**\n * Get a CrawlPage handle for a specific tab by its target ID.\n *\n * Unlike `open()`, this doesn't create a new tab — it wraps an existing one.\n *\n * @param targetId - CDP target ID of the tab\n * @returns CrawlPage for the specified tab\n */\n page(targetId: string): CrawlPage {\n return new CrawlPage(this.cdpUrl, targetId, this.ssrfPolicy);\n }\n\n /** The CDP endpoint URL for this browser connection. */\n get url(): string {\n return this.cdpUrl;\n }\n\n /**\n * Stop the browser and clean up all resources.\n *\n * If the browser was launched by `BrowserClaw.launch()`, the Chrome process\n * will be terminated. If connected via `BrowserClaw.connect()`, only the\n * Playwright connection is closed.\n */\n async stop(): Promise<void> {\n await disconnectBrowser();\n if (this.chrome) {\n await stopChrome(this.chrome);\n this.chrome = null;\n }\n }\n}\n"]}