import { Browser, chromium } from 'playwright'; class BrowserManager { private static instance: Browser | null = null; private static isInitializing = false; private static initPromise: Promise | null = null; static async getInstance(): Promise { if (this.instance && this.instance.isConnected()) { return this.instance; } if (this.isInitializing) { return this.initPromise!; } this.isInitializing = true; this.initPromise = this.initializeBrowser(); try { this.instance = await this.initPromise; return this.instance; } finally { this.isInitializing = false; this.initPromise = null; } } private static async initializeBrowser(): Promise { return chromium.launch({ headless: process.env.NODE_ENV === 'development' ? false : true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-blink-features=AutomationControlled', '--disable-infobars', '--window-size=1920,1080' ], executablePath: process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH, }); } static async closeBrowser() { if (this.instance) { await this.instance.close(); this.instance = null; } } } export default BrowserManager;