import { Injectable } from '@nestjs/common'; import puppeteer from 'puppeteer'; type TakeScreenshotOptions = { imageType: 'jpeg' | 'png'; url: URL; }; @Injectable() export class ScreenshotterService { async takeScreenshot(options: TakeScreenshotOptions): Promise { const browser = await puppeteer.launch(); try { const page = await browser.newPage(); page.setViewport({ width: 1024, height: 768, deviceScaleFactor: 1, }); await page.goto(options.url.toString()); const image = (await page.screenshot({ type: options.imageType, encoding: 'binary', })) as Buffer; return image; } finally { browser.close(); } } }