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() await page.goto(options.url.toString()) const image = await page.screenshot({ type: options.imageType, encoding: 'binary' }) as Buffer return image } finally { browser.close() } } }