-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
72 lines (70 loc) · 2.26 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const playwright = require("playwright-core");
exports.handler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
const { url } = event.queryStringParameters;
let browser = null;
try {
browser = await playwright.chromium.launch({
headless: true,
executablePath: "/usr/bin/chromium-browser",
args: [
"--autoplay-policy=user-gesture-required",
"--disable-background-networking",
"--disable-background-timer-throttling",
"--disable-backgrounding-occluded-windows",
"--disable-breakpad",
"--disable-client-side-phishing-detection",
"--disable-component-update",
"--disable-default-apps",
"--disable-dev-shm-usage",
"--disable-domain-reliability",
"--disable-extensions",
"--disable-features=AudioServiceOutOfProcess",
"--disable-hang-monitor",
"--disable-ipc-flooding-protection",
"--disable-notifications",
"--disable-offer-store-unmasked-wallet-cards",
"--disable-popup-blocking",
"--disable-print-preview",
"--disable-prompt-on-repost",
"--disable-renderer-backgrounding",
"--disable-setuid-sandbox",
"--disable-speech-api",
"--disable-sync",
"--disk-cache-size=33554432",
"--hide-scrollbars",
"--ignore-gpu-blacklist",
"--metrics-recording-only",
"--mute-audio",
"--no-default-browser-check",
"--no-first-run",
"--no-pings",
"--no-sandbox",
"--no-zygote",
"--password-store=basic",
"--use-gl=swiftshader",
"--use-mock-keychain",
"--single-process",
"--disable-gpu",
"--font-render-hinting=none",
],
});
const ctx = await browser.newContext();
const page = await ctx.newPage();
await page.goto(url, { waitUntil: "networkidle" });
const pdf = await page.pdf({ format: "A4" });
const response = {
headers: { "Content-type": "application/pdf" },
statusCode: 200,
body: pdf.toString("base64"),
isBase64Encoded: true,
};
context.succeed(response);
} catch (error) {
return context.fail(error);
} finally {
if (browser !== null) {
await browser.close();
}
}
};