@cliqz/autoconsent
Version:
This is a library of rules for navigating through common consent popups on the web. These rules can be run in a Firefox webextension, or in a puppeteer orchestrated headless browser. Using these rules, opt-in and opt-out options can be selected automatica
63 lines (57 loc) • 2.22 kB
JavaScript
const fs = require("fs");
const path = require("path");
const https = require("https");
const rules = {
autoconsent: [],
consentomatic: {}
};
async function readFileJSON(filePath) {
const data = await fs.promises.readFile(filePath, "utf-8")
return JSON.parse(data);
}
// merge rules from ./autoconsent into rules.autoconsent array
const autoconsentDir = path.join(__dirname, "autoconsent");
const files = fs.readdirSync(autoconsentDir);
const buildAutoconsent = Promise.all(
files.map(file => readFileJSON(path.join(autoconsentDir, file)))
).then(r => (rules.autoconsent = r));
// fetch ConsentOMatic rule set and merge with our custom rules
const consentOMaticCommit = "7d7fd2bd6bf2b662350b0eaeca74db6eba155efe";
const consentOMaticUrl = `https://raw.githubusercontent.com/cavi-au/Consent-O-Matic/${consentOMaticCommit}/Rules.json`;
const consentOMaticDir = path.join(__dirname, "consentomatic");
const consentOMaticSkip = [
"trustarcbar", "trustarcframe", "sourcepoint", "lemonde.fr", "onetrust", "ez-cookie",
"tealium.com", "cookiebot", "consentmanager.net", "SFR", "Webedia", "cookiecontrolcivic",
"Autodesk", "cookieinformation", "quantcast", "onetrust-stackoverflow", "cookiebar"
];
const buildConsentOMatic = (async () => {
const comRules = await new Promise(resolve => {
https.get(consentOMaticUrl, res => {
res.setEncoding("utf-8");
let content = "";
res.on("data", data => (content += data));
res.on("end", () => resolve(JSON.parse(content)));
});
});
consentOMaticSkip.forEach(name => delete comRules[name]);
try {
const extraRules = fs.readdirSync(consentOMaticDir);
await Promise.all(
extraRules.map(async file => {
const rule = await readFileJSON(path.join(consentOMaticDir, file));
// rule name is file name with JSON extension removed
comRules[file.substring(0, file.length - 5)] = rule;
})
);
} catch(e) {
}
rules.consentomatic = comRules;
})();
Promise.all([buildAutoconsent, buildConsentOMatic]).then(() => {
fs.writeFile(
path.join(__dirname, "rules.json"),
JSON.stringify(rules, undefined, " "),
() => console.log("Written rules.json")
);
});