Compare commits
No commits in common. "master" and "v123.0.0" have entirely different histories.
|
|
@ -12,4 +12,3 @@ _/amazon/.aws-sam
|
|||
*.tgz
|
||||
examples/**/package-lock.json
|
||||
examples/**/.serverless
|
||||
docker
|
||||
|
|
|
|||
8
Makefile
8
Makefile
|
|
@ -10,17 +10,11 @@ pretest:
|
|||
test:
|
||||
sam local invoke --template _/amazon/template.yml --event _/amazon/events/example.com.json node20
|
||||
|
||||
test16:
|
||||
sam local invoke --template _/amazon/template.yml --event _/amazon/events/example.com.json node16
|
||||
|
||||
test18:
|
||||
sam local invoke --template _/amazon/template.yml --event _/amazon/events/example.com.json node18
|
||||
|
||||
%.zip:
|
||||
npm install --fund=false --package-lock=false
|
||||
npm run build
|
||||
mkdir -p nodejs
|
||||
npm install --prefix nodejs/ tar-fs@3.0.6 follow-redirects@1.15.9 --bin-links=false --fund=false --omit=optional --omit=dev --package-lock=false --save=false
|
||||
npm install --prefix nodejs/ tar-fs@3.0.5 follow-redirects@1.15.6 --bin-links=false --fund=false --omit=optional --omit=dev --package-lock=false --save=false
|
||||
npm pack
|
||||
mkdir -p nodejs/node_modules/@sparticuz/chromium/
|
||||
tar --directory nodejs/node_modules/@sparticuz/chromium/ --extract --file sparticuz-chromium-*.tgz --strip-components=1
|
||||
|
|
|
|||
44
README.md
44
README.md
|
|
@ -204,50 +204,6 @@ From what I can tell, `headless_shell` does not seem to include support for the
|
|||
|
||||
Try marking this package as an external. Ref: https://webpack.js.org/configuration/externals/
|
||||
|
||||
### I'm experiencing timeouts or failures closing Chromium
|
||||
|
||||
This is a common issue. Chromium sometimes opens up more pages than you ask for. You can try the following
|
||||
|
||||
```typescript
|
||||
for (const page of await browser.pages()) {
|
||||
await page.close();
|
||||
}
|
||||
await browser.close();
|
||||
```
|
||||
|
||||
You can also try the following if one of the calls is hanging for some reason.
|
||||
|
||||
```typescript
|
||||
await Promise.race([browser.close(), browser.close(), browser.close()]);
|
||||
```
|
||||
|
||||
Always `await browser.close()`, even if your script is returning an error.
|
||||
|
||||
### I need Accessible pdf files
|
||||
|
||||
This is due to the way @sparticuz/chromium is built. If you require accessible pdf's, you'll need to
|
||||
recompile chromium yourself with the following patch. You can then use that binary with @sparticuz/chromium-min.
|
||||
|
||||
_Note_: This will increase the time required to generate a PDF.
|
||||
|
||||
```patch
|
||||
diff --git a/_/ansible/plays/chromium.yml b/_/ansible/plays/chromium.yml
|
||||
index b42c740..49111d7 100644
|
||||
--- a/_/ansible/plays/chromium.yml
|
||||
+++ b/_/ansible/plays/chromium.yml
|
||||
@@ -249,8 +249,9 @@
|
||||
blink_symbol_level = 0
|
||||
dcheck_always_on = false
|
||||
disable_histogram_support = false
|
||||
- enable_basic_print_dialog = false
|
||||
enable_basic_printing = true
|
||||
+ enable_pdf = true
|
||||
+ enable_tagged_pdf = true
|
||||
enable_keystone_registration_framework = false
|
||||
enable_linux_installer = false
|
||||
enable_media_remoting = false
|
||||
```
|
||||
|
||||
## Fonts
|
||||
|
||||
The Amazon Linux 2 AWS Lambda runtime is not provisioned with any font faces.
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
"url": "https://example.com",
|
||||
"expected": {
|
||||
"title": "Example Domain",
|
||||
"screenshot": "e610a8be5568f23c453b08928460aae3ae0b4b0a"
|
||||
"screenshot": "835f3ccc8fdbcb3a4a067666f1e9648e9e513570"
|
||||
}
|
||||
},
|
||||
{
|
||||
"url": "https://get.webgl.org",
|
||||
"expected": {
|
||||
"remove": "logo-container",
|
||||
"screenshot": "ec6c79a571b4cb5727c6fc23f9da30de3868138c"
|
||||
"screenshot": "7b4110af7294ae55452d636dd8e900574b21ea2d"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
const { ok } = require("node:assert");
|
||||
const { createHash } = require("node:crypto");
|
||||
const { ok } = require("assert");
|
||||
const { createHash } = require("crypto");
|
||||
const puppeteer = require("puppeteer-core");
|
||||
const chromium = require("@sparticuz/chromium");
|
||||
|
||||
|
|
@ -13,13 +13,20 @@ exports.handler = async (event, context) => {
|
|||
dumpio: true,
|
||||
executablePath: await chromium.executablePath(),
|
||||
headless: chromium.headless,
|
||||
acceptInsecureCerts: true,
|
||||
ignoreHTTPSErrors: true,
|
||||
});
|
||||
|
||||
console.log("Chromium version", await browser.version());
|
||||
|
||||
for (let job of event) {
|
||||
const page = await browser.newPage();
|
||||
const contexts = [browser.defaultBrowserContext()];
|
||||
|
||||
while (contexts.length < event.length) {
|
||||
contexts.push(await browser.createBrowserContext());
|
||||
}
|
||||
|
||||
for (let context of contexts) {
|
||||
const job = event.shift();
|
||||
const page = await context.newPage();
|
||||
|
||||
if (job.hasOwnProperty("url") === true) {
|
||||
await page.goto(job.url, { waitUntil: ["domcontentloaded", "load"] });
|
||||
|
|
@ -38,7 +45,7 @@ exports.handler = async (event, context) => {
|
|||
document.getElementById(selector).remove();
|
||||
}, job.expected.remove);
|
||||
}
|
||||
const screenshot = Buffer.from(await page.screenshot());
|
||||
const screenshot = await page.screenshot();
|
||||
/*
|
||||
console.log(
|
||||
`data:image/png;base64,${screenshot.toString("base64")}`,
|
||||
|
|
@ -61,9 +68,6 @@ exports.handler = async (event, context) => {
|
|||
throw error.message;
|
||||
} finally {
|
||||
if (browser !== null) {
|
||||
for (const page of await browser.pages()) {
|
||||
await page.close();
|
||||
}
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
[localhost:vars]
|
||||
ansible_connection=local
|
||||
ansible_python_interpreter=python
|
||||
image=ami-06c68f701d8090592
|
||||
image=ami-08d090f841c8435e9
|
||||
region=us-east-1
|
||||
instance_size=c7i.12xlarge
|
||||
instance_size=c6i.12xlarge
|
||||
|
||||
[aws]
|
||||
|
||||
|
|
@ -14,4 +14,4 @@ instance_size=c7i.12xlarge
|
|||
ansible_connection=ssh
|
||||
ansible_python_interpreter=auto_silent
|
||||
ansible_ssh_private_key_file=ansible.pem
|
||||
chromium_revision=1343869
|
||||
chromium_revision=1262506
|
||||
|
|
|
|||
|
|
@ -236,6 +236,12 @@
|
|||
path: /srv/source/chromium/src/out/Headless
|
||||
state: directory
|
||||
|
||||
- name: Mounting Build Directory in Memory
|
||||
become: true
|
||||
become_user: root
|
||||
shell: |
|
||||
mount --types tmpfs --options size=24G,nr_inodes=128k,mode=1777 tmpfs /srv/source/chromium/src/out/Headless
|
||||
|
||||
- name: Creating Headless Chromium Configuration
|
||||
copy:
|
||||
content: |
|
||||
|
|
|
|||
BIN
bin/chromium.br
BIN
bin/chromium.br
Binary file not shown.
Binary file not shown.
|
|
@ -1,40 +1,40 @@
|
|||
{
|
||||
"name": "@sparticuz/chromium",
|
||||
"version": "130.0.0",
|
||||
"version": "123.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@sparticuz/chromium",
|
||||
"version": "130.0.0",
|
||||
"version": "123.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.9",
|
||||
"tar-fs": "^3.0.6"
|
||||
"follow-redirects": "^1.15.6",
|
||||
"tar-fs": "^3.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@tsconfig/strictest": "^2.0.5",
|
||||
"@tsconfig/node16": "^16.1.1",
|
||||
"@tsconfig/strictest": "^2.0.3",
|
||||
"@types/follow-redirects": "^1.14.4",
|
||||
"@types/node": "^20.16.10",
|
||||
"@types/node": "^20.11.30",
|
||||
"@types/tar-fs": "^2.0.4",
|
||||
"clean-modules": "^3.1.1",
|
||||
"typescript": "^5.6.2"
|
||||
"clean-modules": "^3.0.5",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node20": {
|
||||
"version": "20.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz",
|
||||
"integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==",
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "16.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-16.1.1.tgz",
|
||||
"integrity": "sha512-+pio93ejHN4nINX4pXqfnR/fPLRtJBaT4ORaa5RH0Oc1zoYmo2B2koG+M328CQhHKn1Wj6FcOxCDFXAot9NhvA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@tsconfig/strictest": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.5.tgz",
|
||||
"integrity": "sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.3.tgz",
|
||||
"integrity": "sha512-MroLvRhMbqtXI5WBSwoomro6OQS4xnCoudUrMb20JO0vLKUs0bAaCEcvM/immEBSJjFAK1l6jW1oAO8q3Ancrg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/follow-redirects": {
|
||||
|
|
@ -47,13 +47,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.16.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz",
|
||||
"integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==",
|
||||
"version": "20.11.30",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz",
|
||||
"integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.2"
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/tar-fs": {
|
||||
|
|
@ -114,11 +113,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/clean-modules": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/clean-modules/-/clean-modules-3.1.1.tgz",
|
||||
"integrity": "sha512-t/7dNtn6vQYxujYxdwZeLa0NsLE92KQ0XeV3CDJ2TXgLTvn3ijmjlQN0Dm9wjYQgC0miZiF66ClTQzgIeYw96A==",
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/clean-modules/-/clean-modules-3.0.5.tgz",
|
||||
"integrity": "sha512-gRW2hxNEE+xunuv/lkdPQ6UAqhs6CGoshLxOZ6eqy2ytkUAyzSoQ4fFj8/51jAfmJhrbuBGd/8hnvplIp8KRDg==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"clipanion": "^3.2.1",
|
||||
"picomatch": "^2.3.0",
|
||||
|
|
@ -159,16 +157,15 @@
|
|||
"integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw=="
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.9",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
|
||||
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
|
|
@ -273,9 +270,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/tar-fs": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
|
||||
"integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz",
|
||||
"integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==",
|
||||
"dependencies": {
|
||||
"pump": "^3.0.0",
|
||||
"tar-stream": "^3.1.5"
|
||||
|
|
@ -302,11 +299,10 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
||||
"version": "5.4.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
|
||||
"integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
|
|
@ -316,11 +312,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.19.6",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
|
||||
"integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/wrappy": {
|
||||
"version": "1.0.2",
|
||||
|
|
|
|||
16
package.json
16
package.json
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@sparticuz/chromium",
|
||||
"version": "130.0.0",
|
||||
"version": "123.0.0",
|
||||
"description": "Chromium Binary for Serverless Platforms",
|
||||
"keywords": [
|
||||
"aws",
|
||||
|
|
@ -36,17 +36,17 @@
|
|||
"test": "make clean && make && make pretest && make test"
|
||||
},
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.9",
|
||||
"tar-fs": "^3.0.6"
|
||||
"follow-redirects": "^1.15.6",
|
||||
"tar-fs": "^3.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@tsconfig/strictest": "^2.0.5",
|
||||
"@tsconfig/node16": "^16.1.1",
|
||||
"@tsconfig/strictest": "^2.0.3",
|
||||
"@types/follow-redirects": "^1.14.4",
|
||||
"@types/node": "^20.16.10",
|
||||
"@types/node": "^20.11.30",
|
||||
"@types/tar-fs": "^2.0.4",
|
||||
"clean-modules": "^3.1.1",
|
||||
"typescript": "^5.6.2"
|
||||
"clean-modules": "^3.0.5",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
|
|
|
|||
|
|
@ -240,11 +240,9 @@ class Chromium {
|
|||
];
|
||||
|
||||
// https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md
|
||||
// Blocked by https://github.com/Sparticuz/chromium/issues/247
|
||||
//this.graphics
|
||||
// ? graphicsFlags.push("--use-gl=angle", "--use-angle=swiftshader")
|
||||
// : graphicsFlags.push("--disable-webgl");
|
||||
graphicsFlags.push("--use-gl=angle", "--use-angle=swiftshader");
|
||||
this.graphics
|
||||
? graphicsFlags.push("--use-gl=angle", "--use-angle=swiftshader")
|
||||
: graphicsFlags.push("--disable-webgl");
|
||||
|
||||
const insecureFlags = [
|
||||
"--allow-running-insecure-content", // https://source.chromium.org/search?q=lang:cpp+symbol:kAllowRunningInsecureContent&ss=chromium
|
||||
|
|
@ -400,11 +398,7 @@ class Chromium {
|
|||
`Graphics mode must be a boolean, you entered '${value}'`
|
||||
);
|
||||
}
|
||||
|
||||
// Disabling 'disabling the gpu'
|
||||
// Blocked by https://github.com/Sparticuz/chromium/issues/247
|
||||
// this.graphicsMode = value;
|
||||
this.graphicsMode = true;
|
||||
this.graphicsMode = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,4 +72,4 @@ class LambdaFS {
|
|||
}
|
||||
}
|
||||
|
||||
export default LambdaFS;
|
||||
export = LambdaFS;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"extends": ["@tsconfig/node20/tsconfig", "@tsconfig/strictest"],
|
||||
"extends": ["@tsconfig/node16/tsconfig", "@tsconfig/strictest"],
|
||||
"compilerOptions": {
|
||||
"declaration": true,
|
||||
"lib": ["dom", "ES2023"],
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"lib": ["dom", "ES2021"],
|
||||
"module": "Node16",
|
||||
"moduleResolution": "Node16",
|
||||
"outDir": "build"
|
||||
},
|
||||
"include": ["source"]
|
||||
|
|
|
|||
Loading…
Reference in New Issue