code-share/server/lib/screenshot.ts

40 lines
865 B
TypeScript

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;
}
};