msmail / functions /utils /browser.ts
github-actions[bot]
Update from GitHub Actions
6c6d16c
import { Browser, chromium } from 'playwright';
class BrowserManager {
private static instance: Browser | null = null;
private static isInitializing = false;
private static initPromise: Promise<Browser> | null = null;
static async getInstance(): Promise<Browser> {
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<Browser> {
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;