AWS Lambda-specific Node.js wrapper around the Obscura browser binary.
- Obscura: same version as this package (see
package.json; built tag and checksum are indist/build-metadata.json) - Target runtime: AWS Lambda
nodejs24.xon Linux x64
npm install @chegger/node-obscura-aws-lambdaconst { chromium } = require('playwright-core');
const { startObscura } = require('@chegger/node-obscura-aws-lambda');
async function main() {
const obscura = await startObscura({ stealth: true });
const browser = await chromium.connectOverCDP(obscura.endpoint);
try {
const context = browser.contexts()[0] || (await browser.newContext());
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.title());
} finally {
await browser.close();
await obscura.close();
}
}
main().catch((error) => {
console.error(error);
process.exit(1);
});If you use CDK NodejsFunction, force Docker bundling so the postinstall step
runs in a Linux x64 Lambda-like environment and includes the downloaded binary
in the deployment artifact:
const myLambdaFunction = new lambda.NodejsFunction(this, 'MyLambdaFunction', {
// ...
runtime: l.Runtime.NODEJS_24_X,
architecture: l.Architecture.X86_64,
bundling: {
forceDockerBundling: true,
nodeModules: ['@chegger/node-obscura-aws-lambda'],
},
});Returns the installed Lambda-specific Obscura binary path.
Starts obscura serve and resolves when the CDP endpoint is ready.
Options:
port?: numberhost?: stringstealth?: booleanstartupTimeoutMs?: numberextraArgs?: string[]
Returns:
{
endpoint: string;
wsEndpoint: string;
close: () => Promise<void>;
}This repo is Docker-first. You do not need Rust installed locally for the main build flow.
npm run build:artifactThat script will:
- clone the upstream
obscurasource - build it inside an Amazon Linux 2023 Docker image
- package
obscuraandobscura-workerinto:dist/obscura-x86_64-linux-lambda.tar.gz - write a checksum and build metadata
npm run smoke:testThis runs the built binary inside the AWS Lambda Node 24 base image and waits
for /json/version to come up.
Runtime install:
OBSCURA_AWS_LAMBDA_RELEASE_TAGoverrides the package release tag to download. Default:v${package.version}OBSCURA_AWS_LAMBDA_DOWNLOAD_BASE_URLoverrides the binary download base URLNODE_OBSCURA_AWS_LAMBDA_SKIP_DOWNLOAD=1skips binary download during install
Build scripts:
OBSCURA_UPSTREAM_REPOoverrides the upstream Obscura git repoOBSCURA_UPSTREAM_TAGoverrides the upstream Obscura git tag. Default:v${package.version}OBSCURA_CARGO_FEATURESoverrides Cargo features. Default:stealthOBSCURA_LAMBDA_DOCKER_TAGoverrides the local Docker builder image tagOBSCURA_LAMBDA_ARCHIVEoverrides the archive path used by the smoke testOBSCURA_LAMBDA_SMOKE_IMAGEoverrides the Lambda base image used by the smoke test
Package version and upstream Obscura tag are kept in sync via package.json.
npm run version:set -- 0.1.9
git add package.json package-lock.json
git commit -m "Release 0.1.9 with upstream Obscura v0.1.9."
git push origin main
git tag v0.1.9
git push origin v0.1.9CI then builds the Lambda binary, creates the GitHub release, and publishes to npm.
MIT for this wrapper package. Obscura itself remains Apache-2.0 under its upstream project.