@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/build.sh +1 -0
  3. package/dist/addon-firefox/background.bundle.js +60 -43
  4. package/dist/addon-firefox/content.bundle.js +484 -382
  5. package/dist/addon-firefox/manifest.json +1 -1
  6. package/dist/addon-mv3/background.bundle.js +60 -43
  7. package/dist/addon-mv3/content.bundle.js +484 -382
  8. package/dist/addon-mv3/manifest.json +1 -1
  9. package/dist/addon-mv3/popup.bundle.js +71 -33
  10. package/dist/addon-mv3/popup.html +28 -0
  11. package/dist/autoconsent.cjs.js +484 -382
  12. package/dist/autoconsent.esm.js +484 -382
  13. package/dist/autoconsent.playwright.js +1 -1
  14. package/dist/autoconsent.unit.js +10370 -0
  15. package/lib/cmps/airbnb.ts +5 -6
  16. package/lib/cmps/base.ts +97 -41
  17. package/lib/cmps/consentmanager.ts +13 -14
  18. package/lib/cmps/conversant.ts +8 -9
  19. package/lib/cmps/cookiebot.ts +8 -9
  20. package/lib/cmps/evidon.ts +7 -8
  21. package/lib/cmps/klaro.ts +13 -14
  22. package/lib/cmps/onetrust.ts +15 -16
  23. package/lib/cmps/sourcepoint-frame.ts +25 -26
  24. package/lib/cmps/tiktok.ts +7 -7
  25. package/lib/cmps/trustarc-frame.ts +27 -28
  26. package/lib/cmps/trustarc-top.ts +5 -6
  27. package/lib/cmps/uniconsent.ts +9 -10
  28. package/lib/dom-actions.ts +145 -0
  29. package/lib/eval-snippets.ts +17 -2
  30. package/lib/types.ts +24 -1
  31. package/lib/utils.ts +32 -1
  32. package/lib/web.ts +46 -34
  33. package/package.json +4 -4
  34. package/playwright/runner.ts +11 -3
  35. package/playwright/unit.ts +15 -0
  36. package/readme.md +1 -1
  37. package/tests/{rule-executors.spec.ts → dom-actions.spec.ts} +20 -21
  38. package/tests/klaro.spec.ts +1 -0
  39. package/lib/config.ts +0 -2
  40. package/lib/rule-executors.ts +0 -147
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Autoconsent",
4
- "version": "2024.1.6",
4
+ "version": "2024.1.11",
5
5
  "background": {
6
6
  "service_worker": "background.bundle.js"
7
7
  },
@@ -29,8 +29,34 @@
29
29
  return chrome.storage.local.remove(key);
30
30
  }
31
31
 
32
- // lib/config.ts
33
- var enableLogs = false;
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
- enableLogs && console.log("Setting action state to", status);
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
- enableLogs && console.log("storedConfig", storedConfig);
75
- const defaultConfig = {
76
- enabled: true,
77
- autoAction: "optOut",
78
- // if falsy, the extension will wait for an explicit user signal before opting in/out
79
- disabledCmps: [],
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>