@duckduckgo/autoconsent 8.1.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/build.sh +1 -0
- package/dist/addon-firefox/background.bundle.js +60 -43
- package/dist/addon-firefox/content.bundle.js +484 -382
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-mv3/background.bundle.js +60 -43
- package/dist/addon-mv3/content.bundle.js +484 -382
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/popup.bundle.js +71 -33
- package/dist/addon-mv3/popup.html +28 -0
- package/dist/autoconsent.cjs.js +484 -382
- package/dist/autoconsent.esm.js +484 -382
- package/dist/autoconsent.playwright.js +1 -1
- package/dist/autoconsent.unit.js +10370 -0
- package/lib/cmps/airbnb.ts +5 -6
- package/lib/cmps/base.ts +97 -41
- package/lib/cmps/consentmanager.ts +13 -14
- package/lib/cmps/conversant.ts +8 -9
- package/lib/cmps/cookiebot.ts +8 -9
- package/lib/cmps/evidon.ts +7 -8
- package/lib/cmps/klaro.ts +13 -14
- package/lib/cmps/onetrust.ts +15 -16
- package/lib/cmps/sourcepoint-frame.ts +25 -26
- package/lib/cmps/tiktok.ts +7 -7
- package/lib/cmps/trustarc-frame.ts +27 -28
- package/lib/cmps/trustarc-top.ts +5 -6
- package/lib/cmps/uniconsent.ts +9 -10
- package/lib/dom-actions.ts +145 -0
- package/lib/eval-snippets.ts +17 -2
- package/lib/types.ts +24 -1
- package/lib/utils.ts +32 -1
- package/lib/web.ts +46 -34
- package/package.json +4 -4
- package/playwright/runner.ts +11 -3
- package/playwright/unit.ts +15 -0
- package/readme.md +1 -1
- package/tests/{rule-executors.spec.ts → dom-actions.spec.ts} +20 -21
- package/tests/klaro.spec.ts +1 -0
- package/lib/config.ts +0 -2
- package/lib/rule-executors.ts +0 -147
|
@@ -29,8 +29,34 @@
|
|
|
29
29
|
return chrome.storage.local.remove(key);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
// lib/
|
|
33
|
-
|
|
32
|
+
// lib/utils.ts
|
|
33
|
+
function normalizeConfig(providedConfig) {
|
|
34
|
+
const defaultConfig = {
|
|
35
|
+
enabled: true,
|
|
36
|
+
autoAction: "optOut",
|
|
37
|
+
// if falsy, the extension will wait for an explicit user signal before opting in/out
|
|
38
|
+
disabledCmps: [],
|
|
39
|
+
enablePrehide: true,
|
|
40
|
+
enableCosmeticRules: true,
|
|
41
|
+
detectRetries: 20,
|
|
42
|
+
isMainWorld: false,
|
|
43
|
+
prehideTimeout: 2e3,
|
|
44
|
+
logs: {
|
|
45
|
+
lifecycle: false,
|
|
46
|
+
rulesteps: false,
|
|
47
|
+
evals: false,
|
|
48
|
+
errors: true,
|
|
49
|
+
messages: false
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const updatedConfig = structuredClone(defaultConfig);
|
|
53
|
+
for (const key of Object.keys(defaultConfig)) {
|
|
54
|
+
if (typeof providedConfig[key] !== "undefined") {
|
|
55
|
+
updatedConfig[key] = providedConfig[key];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return updatedConfig;
|
|
59
|
+
}
|
|
34
60
|
|
|
35
61
|
// addon/utils.ts
|
|
36
62
|
async function showOptOutStatus(tabId, status, cmp = "") {
|
|
@@ -55,7 +81,7 @@
|
|
|
55
81
|
title = `Click to opt out (${cmp})`;
|
|
56
82
|
icon = "icons/cookie.png";
|
|
57
83
|
}
|
|
58
|
-
|
|
84
|
+
console.log("Setting action state to", status);
|
|
59
85
|
const action = chrome.action || chrome.pageAction;
|
|
60
86
|
if (chrome.pageAction) {
|
|
61
87
|
chrome.pageAction.show(tabId);
|
|
@@ -70,36 +96,13 @@
|
|
|
70
96
|
});
|
|
71
97
|
}
|
|
72
98
|
async function initConfig() {
|
|
73
|
-
const storedConfig = await storageGet("config");
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
enablePrehide: true,
|
|
81
|
-
enableCosmeticRules: true,
|
|
82
|
-
detectRetries: 20,
|
|
83
|
-
isMainWorld: false,
|
|
84
|
-
prehideTimeout: 2e3
|
|
85
|
-
};
|
|
86
|
-
if (!storedConfig) {
|
|
87
|
-
enableLogs && console.log("new config", defaultConfig);
|
|
88
|
-
await storageSet({
|
|
89
|
-
config: defaultConfig
|
|
90
|
-
});
|
|
91
|
-
} else {
|
|
92
|
-
const updatedConfig = structuredClone(defaultConfig);
|
|
93
|
-
for (const key of Object.keys(defaultConfig)) {
|
|
94
|
-
if (typeof storedConfig[key] !== "undefined") {
|
|
95
|
-
updatedConfig[key] = storedConfig[key];
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
enableLogs && console.log("updated config", updatedConfig);
|
|
99
|
-
await storageSet({
|
|
100
|
-
config: updatedConfig
|
|
101
|
-
});
|
|
102
|
-
}
|
|
99
|
+
const storedConfig = await storageGet("config") || {};
|
|
100
|
+
console.log("storedConfig", storedConfig);
|
|
101
|
+
const updatedConfig = normalizeConfig(storedConfig);
|
|
102
|
+
console.log("updated config", updatedConfig);
|
|
103
|
+
await storageSet({
|
|
104
|
+
config: updatedConfig
|
|
105
|
+
});
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
// addon/popup.ts
|
|
@@ -114,6 +117,11 @@
|
|
|
114
117
|
const cosmeticOnRadio = document.querySelector("input#cosmetic-on");
|
|
115
118
|
const cosmeticOffRadio = document.querySelector("input#cosmetic-off");
|
|
116
119
|
const retriesInput = document.querySelector("input#retries");
|
|
120
|
+
const logsLifecycleCheckbox = document.querySelector("input#logs-lifecycle");
|
|
121
|
+
const logsRulestepsCheckbox = document.querySelector("input#logs-rulesteps");
|
|
122
|
+
const logsEvalsCheckbox = document.querySelector("input#logs-evals");
|
|
123
|
+
const logsErrorsCheckbox = document.querySelector("input#logs-errors");
|
|
124
|
+
const logsMessagesCheckbox = document.querySelector("input#logs-messages");
|
|
117
125
|
const ruleReloadButton = document.querySelector("#reload");
|
|
118
126
|
const resetButton = document.querySelector("#reset");
|
|
119
127
|
const [currentTab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
|
|
@@ -140,6 +148,11 @@
|
|
|
140
148
|
document.body.prepend(proceedButton);
|
|
141
149
|
}
|
|
142
150
|
enabledCheckbox.checked = autoconsentConfig.enabled;
|
|
151
|
+
logsLifecycleCheckbox.checked = autoconsentConfig.logs.lifecycle;
|
|
152
|
+
logsRulestepsCheckbox.checked = autoconsentConfig.logs.rulesteps;
|
|
153
|
+
logsEvalsCheckbox.checked = autoconsentConfig.logs.evals;
|
|
154
|
+
logsErrorsCheckbox.checked = autoconsentConfig.logs.errors;
|
|
155
|
+
logsMessagesCheckbox.checked = autoconsentConfig.logs.messages;
|
|
143
156
|
retriesInput.value = autoconsentConfig.detectRetries.toString();
|
|
144
157
|
if (autoconsentConfig.autoAction === "optIn") {
|
|
145
158
|
optInRadio.checked = true;
|
|
@@ -191,6 +204,31 @@
|
|
|
191
204
|
}
|
|
192
205
|
cosmeticOnRadio.addEventListener("change", cosmeticChange);
|
|
193
206
|
cosmeticOffRadio.addEventListener("change", cosmeticChange);
|
|
207
|
+
function updateLogsConfig() {
|
|
208
|
+
autoconsentConfig.logs = {
|
|
209
|
+
lifecycle: logsLifecycleCheckbox.checked,
|
|
210
|
+
rulesteps: logsRulestepsCheckbox.checked,
|
|
211
|
+
evals: logsEvalsCheckbox.checked,
|
|
212
|
+
errors: logsErrorsCheckbox.checked,
|
|
213
|
+
messages: logsMessagesCheckbox.checked
|
|
214
|
+
};
|
|
215
|
+
storageSet({ config: autoconsentConfig });
|
|
216
|
+
}
|
|
217
|
+
logsLifecycleCheckbox.addEventListener("change", () => {
|
|
218
|
+
updateLogsConfig();
|
|
219
|
+
});
|
|
220
|
+
logsRulestepsCheckbox.addEventListener("change", () => {
|
|
221
|
+
updateLogsConfig();
|
|
222
|
+
});
|
|
223
|
+
logsEvalsCheckbox.addEventListener("change", () => {
|
|
224
|
+
updateLogsConfig();
|
|
225
|
+
});
|
|
226
|
+
logsErrorsCheckbox.addEventListener("change", () => {
|
|
227
|
+
updateLogsConfig();
|
|
228
|
+
});
|
|
229
|
+
logsMessagesCheckbox.addEventListener("change", () => {
|
|
230
|
+
updateLogsConfig();
|
|
231
|
+
});
|
|
194
232
|
ruleReloadButton.addEventListener("click", async () => {
|
|
195
233
|
const res = await fetch("./rules.json");
|
|
196
234
|
storageSet({
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
<label for="enabled">Enable autoconsent</label>
|
|
30
30
|
</div>
|
|
31
31
|
</fieldset>
|
|
32
|
+
|
|
32
33
|
<fieldset>
|
|
33
34
|
<legend>Select autoconsent mode:</legend>
|
|
34
35
|
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
<label for="prompt">Prompt every time</label>
|
|
49
50
|
</div>
|
|
50
51
|
</fieldset>
|
|
52
|
+
|
|
51
53
|
<fieldset>
|
|
52
54
|
<legend>Hide popups during operation</legend>
|
|
53
55
|
|
|
@@ -62,6 +64,7 @@
|
|
|
62
64
|
<label for="prehide-off">Off</label>
|
|
63
65
|
</div>
|
|
64
66
|
</fieldset>
|
|
67
|
+
|
|
65
68
|
<fieldset>
|
|
66
69
|
<legend>Apply cosmetic rules</legend>
|
|
67
70
|
|
|
@@ -76,6 +79,31 @@
|
|
|
76
79
|
<label for="cosmetic-off">Off</label>
|
|
77
80
|
</div>
|
|
78
81
|
</fieldset>
|
|
82
|
+
|
|
83
|
+
<fieldset>
|
|
84
|
+
<legend>Debug logging</legend>
|
|
85
|
+
<div>
|
|
86
|
+
<input type="checkbox" id="logs-lifecycle" name="logs-lifecycle" checked>
|
|
87
|
+
<label for="logs-lifecycle">Lifecycle</label>
|
|
88
|
+
</div>
|
|
89
|
+
<div>
|
|
90
|
+
<input type="checkbox" id="logs-rulesteps" name="logs-rulesteps" checked>
|
|
91
|
+
<label for="logs-rulesteps">Rule steps</label>
|
|
92
|
+
</div>
|
|
93
|
+
<div>
|
|
94
|
+
<input type="checkbox" id="logs-evals" name="logs-evals" checked>
|
|
95
|
+
<label for="logs-evals">Evals</label>
|
|
96
|
+
</div>
|
|
97
|
+
<div>
|
|
98
|
+
<input type="checkbox" id="logs-errors" name="logs-errors" checked>
|
|
99
|
+
<label for="logs-errors">Errors</label>
|
|
100
|
+
</div>
|
|
101
|
+
<div>
|
|
102
|
+
<input type="checkbox" id="logs-messages" name="logs-messages" checked>
|
|
103
|
+
<label for="logs-messages">Internal messages</label>
|
|
104
|
+
</div>
|
|
105
|
+
</fieldset>
|
|
106
|
+
|
|
79
107
|
<fieldset>
|
|
80
108
|
<legend>Other</legend>
|
|
81
109
|
<div>
|