Skip to content

Commit

Permalink
feat: update chromium
Browse files Browse the repository at this point in the history
  • Loading branch information
tabiodun committed Jun 19, 2024
1 parent 8f91dc1 commit e770424
Show file tree
Hide file tree
Showing 4 changed files with 2,273 additions and 1,522 deletions.
2 changes: 1 addition & 1 deletion .projenrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ const pdfRendererConstruct = AwsCdkTsConstructBuilder.build({
name: 'construct.awscdk.pdf-renderer',
deps: ['[email protected]', 'zod'],
// served via lambda layer during runtime
devDeps: ['@sparticuz/chromium@109.0.0', '@types/aws-lambda'],
devDeps: ['@sparticuz/chromium-min@123.0.1', '@types/aws-lambda'],
lambdaOptions: {
runtime: awscdk.LambdaRuntime.NODEJS_18_X,
},
Expand Down
4 changes: 2 additions & 2 deletions packages/construct/awscdk/pdf-renderer/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 12 additions & 32 deletions packages/construct/awscdk/pdf-renderer/src/handler.lambda.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import chrome from '@sparticuz/chromium'
import chromium from '@sparticuz/chromium-min'
import type { APIGatewayEvent } from 'aws-lambda'
import puppeteer, { type Browser } from 'puppeteer-core'
import { z } from 'zod'
Expand Down Expand Up @@ -33,44 +33,24 @@ const doRender = async (
return pdf
}

const launchBrowserWithRetry = async (
path: string,
retries = 3,
delay = 1000,
) => {
while (retries > 0) {
try {
const browser = await puppeteer.launch({
executablePath: path,
headless: chrome.headless,
args: chrome.args,
})
return browser
} catch (error) {
if (retries > 1) {
console.warn(
`Retrying to launch browser... ${retries - 1} retries left.`,
)
retries--
await new Promise((res) => setTimeout(res, delay))
} else {
throw error
}
}
}
}

export async function handler(event: APIGatewayEvent) {
export const handler = async (event: APIGatewayEvent) => {
console.log('Incoming event:', event)

const payload = await schema.parseAsync(JSON.parse(event.body!))
console.log('Received payload:', payload)

const path = await chrome.executablePath
console.log('Resolved Chromium path:', path)
const executablePath = await chromium.executablePath(
'https://github.com/Sparticuz/chromium/releases/download/v123.0.1/chromium-v123.0.1-pack.tar',
)
console.log('Resolved Chromium path:', executablePath)

let browser: Browser | undefined
try {
browser = await launchBrowserWithRetry(path || '/usr/bin/chromium-browser')
browser = await puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: executablePath,
})
if (!browser) {
throw new Error('Failed to launch browser')
}
Expand Down
Loading

0 comments on commit e770424

Please sign in to comment.