// Browser.close runs Chromium's normal shutdown path and flushes profile data. import { chromium } from '/opt/grokboy/playwright/node_modules/playwright/index.mjs'; import { readdir, readFile } from 'node:fs/promises'; import { setTimeout as delay } from 'node:timers/promises'; const deadline = setTimeout(() => process.exit(1), 8000); try { const browser = await chromium.connectOverCDP('http://127.0.0.1:9222', { timeout: 2000 }); const disconnected = new Promise(resolve => browser.once('disconnected', resolve)); const session = await browser.newBrowserCDPSession(); await session.send('Browser.close').catch(() => {}); await disconnected; // DevTools disconnects before the browser's storage shutdown has finished. for (;;) { let running = false; for (const pid of await readdir('/proc')) { if (!/^\d+$/.test(pid)) continue; const cmd = await readFile(`/proc/${pid}/cmdline`, 'utf8').catch(() => ''); const args = cmd.split('\0'); if (args[0]?.endsWith('/chromium') && !args.some(arg => arg.startsWith('--type='))) running = true; } if (!running) break; await delay(50); } } catch {} clearTimeout(deadline);