diff --git a/apps/api/src/routes/screenshots/index.ts b/apps/api/src/routes/screenshots/index.ts index bb873b4..c59682b 100644 --- a/apps/api/src/routes/screenshots/index.ts +++ b/apps/api/src/routes/screenshots/index.ts @@ -24,7 +24,7 @@ export default async function screenshots(options: ScreenshotsOptions) { }); return { browser }; }) - .onAfterHandle(({ browser }) => browser.disconnect()) + .onAfterResponse(({ browser }) => browser?.disconnect()) .get( '/:url', async ({ params: { url }, query, browser }) => { diff --git a/apps/api/src/routes/screenshots/takeScreenshots.ts b/apps/api/src/routes/screenshots/takeScreenshots.ts index 519777b..d021181 100644 --- a/apps/api/src/routes/screenshots/takeScreenshots.ts +++ b/apps/api/src/routes/screenshots/takeScreenshots.ts @@ -29,18 +29,19 @@ export async function* takeScreenshots( ) { const { deviceType = 'desktop', colorSchemes = ['dark', 'light'] } = options; const page = await browser.newPage(); - await page.emulate(deviceMapping[deviceType]); - - for (const colorScheme of colorSchemes) { - await page.emulateMediaFeatures([ - { name: 'prefers-color-scheme', value: colorScheme } - ]); - await page.goto(url, { waitUntil: 'networkidle0' }); - const screenshot = await page.screenshot({ - type: 'webp' - }); - yield [colorScheme, new Blob([screenshot])] as const; + try { + await page.emulate(deviceMapping[deviceType]); + for (const colorScheme of colorSchemes) { + await page.emulateMediaFeatures([ + { name: 'prefers-color-scheme', value: colorScheme } + ]); + await page.goto(url, { waitUntil: 'networkidle0' }); + const screenshot = await page.screenshot({ + type: 'webp' + }); + yield [colorScheme, new Blob([screenshot])] as const; + } + } finally { + await page.close(); } - - await page.close(); }