From b7d22868a16241d20972869b342d49c7244505ed Mon Sep 17 00:00:00 2001 From: Chris Bala Date: Mon, 16 Feb 2026 02:18:41 -0800 Subject: [PATCH 1/2] Add environment variables for external files --- .../fingerprint-generator/src/fingerprint-generator.ts | 2 +- packages/fingerprint-injector/src/fingerprint-injector.ts | 8 ++++++-- .../generative-bayesian-network/src/bayesian-network.ts | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/fingerprint-generator/src/fingerprint-generator.ts b/packages/fingerprint-generator/src/fingerprint-generator.ts index c567e271..a840c352 100644 --- a/packages/fingerprint-generator/src/fingerprint-generator.ts +++ b/packages/fingerprint-generator/src/fingerprint-generator.ts @@ -141,7 +141,7 @@ export class FingerprintGenerator extends HeaderGenerator { slim: options.slim, }; this.fingerprintGeneratorNetwork = new BayesianNetwork({ - path: `${__dirname}/data_files/fingerprint-network-definition.zip`, + path: process.env.FINGERPRINT_NETWORK_DEFINITION_PATH || `${__dirname}/data_files/fingerprint-network-definition.zip`, }); } diff --git a/packages/fingerprint-injector/src/fingerprint-injector.ts b/packages/fingerprint-injector/src/fingerprint-injector.ts index 41a0353d..6ba2c3e3 100644 --- a/packages/fingerprint-injector/src/fingerprint-injector.ts +++ b/packages/fingerprint-injector/src/fingerprint-injector.ts @@ -1,4 +1,4 @@ -import { readFileSync } from 'fs'; +import { readFileSync, existsSync } from 'fs'; import { BrowserFingerprintWithHeaders, @@ -310,8 +310,12 @@ export class FingerprintInjector { * causing errors when executing it in the browser. */ private _loadUtils(): string { + const path = process.env.FINGERPRINT_INJECTOR_UTILS_PATH || `${__dirname}/utils.js` + if (!existsSync(path)) { + throw new Error(`Unable to find ${path}`); + } // path.join would be better here, but Vercel's build system doesn't like it (https://github.com/apify/fingerprint-suite/issues/135) - const utilsJs = readFileSync(`${__dirname}/utils.js`); + const utilsJs = readFileSync(path); return `\n${utilsJs}\n`; } diff --git a/packages/generative-bayesian-network/src/bayesian-network.ts b/packages/generative-bayesian-network/src/bayesian-network.ts index 80be3fd2..a7114f1b 100644 --- a/packages/generative-bayesian-network/src/bayesian-network.ts +++ b/packages/generative-bayesian-network/src/bayesian-network.ts @@ -1,4 +1,5 @@ import AdmZip = require('adm-zip'); +import { existsSync } from 'fs'; import { BayesianNode } from './bayesian-node'; @@ -13,6 +14,9 @@ export class BayesianNetwork { private nodesByName: Record = {}; constructor({ path }: { path: string }) { + if (!existsSync(path)) { + throw new Error(`Unable to find ${path}`); + } const zip = new AdmZip(path); const zipEntries = zip.getEntries(); From 5e046e47633036b0bcc1f26db78af6c99a8f8cc6 Mon Sep 17 00:00:00 2001 From: Chris Bala Date: Mon, 16 Feb 2026 02:25:26 -0800 Subject: [PATCH 2/2] Update readme --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index ad1bc943..abcf9c3f 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,15 @@ import { newInjectedPage } from 'fingerprint-injector'; })(); ``` +## Environment Variables + +The following environment variables can be used to customize file paths used by the fingerprinting tools: + +- `FINGERPRINT_NETWORK_DEFINITION_PATH`: Custom path to the fingerprint network definition zip file. If not set, defaults to the bundled file in `fingerprint-generator`. The default file can be found at `fingerprint-generator/data_files/fingerprint-network-definition.zip`. +- `FINGERPRINT_INJECTOR_UTILS_PATH`: Custom path to the fingerprint injector utils.js file. If not set, defaults to the bundled file in `fingerprint-injector`. The default file can be found at `fingerprint-injector/utils.js`. + +You can copy these files to custom locations and provide their paths via these environment variables if needed. + ## Support If you find any bug or issue with any of the fingerprinting tools, please [submit an issue on GitHub](https://github.com/apify/fingerprint-suite/issues).