import puppeteer, { Browser } from "puppeteer"; let browser: Browser | null = null; let closeHandler: any; export const screenshot = async (slug: string) => { try { if (!browser) { browser = await puppeteer.launch({ headless: true, args: ["--no-sandbox"], }); } const page = await browser.newPage(); await page.setViewport({ width: 512, height: 340 }); await page.goto(`http://localhost:3000/api/preview/${slug}/index.html`, { waitUntil: "networkidle0", timeout: 5000, }); const result = await page.screenshot(); await page.close(); if (closeHandler) { clearTimeout(closeHandler); } closeHandler = setTimeout(() => { browser?.close(); browser = null; closeHandler = null; }, 60000); return result; } catch (err) { return null; } };