@duckduckgo/autoconsent 15.0.0 → 16.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 (90) hide show
  1. package/.github/dependabot.yml +0 -3
  2. package/.github/workflows/release.yml +0 -4
  3. package/AGENTS.md +3 -3
  4. package/CHANGELOG.md +32 -0
  5. package/build.sh +3 -2
  6. package/dist/addon-firefox/background.bundle.js +8 -24
  7. package/dist/addon-firefox/compact-rules.json +1 -1
  8. package/dist/addon-firefox/content.bundle.js +184 -686
  9. package/dist/addon-firefox/manifest.json +1 -1
  10. package/dist/addon-firefox/popup.bundle.js +196 -25
  11. package/dist/addon-firefox/popup.html +98 -5
  12. package/dist/addon-firefox/rule-index.json +1 -0
  13. package/dist/addon-firefox/rules.json +1 -1
  14. package/dist/addon-mv3/background.bundle.js +8 -24
  15. package/dist/addon-mv3/compact-rules.json +1 -1
  16. package/dist/addon-mv3/content.bundle.js +184 -686
  17. package/dist/addon-mv3/manifest.json +1 -1
  18. package/dist/addon-mv3/popup.bundle.js +196 -25
  19. package/dist/addon-mv3/popup.html +98 -5
  20. package/dist/addon-mv3/rule-index.json +1 -0
  21. package/dist/addon-mv3/rules.json +1 -1
  22. package/dist/autoconsent.cjs.js +184 -685
  23. package/dist/autoconsent.esm.js +184 -685
  24. package/dist/autoconsent.playwright.js +185 -689
  25. package/dist/autoconsent.standalone.js +3625 -0
  26. package/dist/types/cmps/base.d.ts +3 -3
  27. package/dist/types/cmps/trustarc-top.d.ts +1 -1
  28. package/dist/types/eval-handler.d.ts +3 -3
  29. package/dist/types/heuristics.d.ts +2 -2
  30. package/dist/types/types.d.ts +10 -23
  31. package/dist/types/web.d.ts +0 -9
  32. package/docs/api.md +1 -8
  33. package/docs/puppeteer.md +1 -3
  34. package/docs/rule-syntax.md +0 -17
  35. package/eslint.config.mjs +1 -1
  36. package/lib/cmps/base.ts +5 -6
  37. package/lib/cmps/conversant.ts +7 -4
  38. package/lib/cmps/trustarc-top.ts +1 -1
  39. package/lib/cmps/uniconsent.ts +4 -4
  40. package/lib/eval-handler.ts +6 -3
  41. package/lib/heuristics.ts +15 -15
  42. package/lib/types.ts +9 -21
  43. package/lib/utils.ts +13 -9
  44. package/lib/web.ts +3 -53
  45. package/package.json +4 -17
  46. package/playwright/content.ts +1 -2
  47. package/readme.md +3 -6
  48. package/rules/autoconsent/dreamlab-cmp.json +13 -0
  49. package/rules/build.ts +4 -23
  50. package/rules/compact-rules.json +1 -1
  51. package/rules/rule-index-builder.ts +58 -0
  52. package/rules/rule-index.json +1 -0
  53. package/rules/rules.json +1 -1
  54. package/standalone/content.ts +101 -0
  55. package/tests/dreamlab-cmp.spec.ts +3 -0
  56. package/tests/quantcast.spec.ts +0 -6
  57. package/tests-wtr/heuristics/get-actionable-popups.ts +13 -13
  58. package/tests-wtr/heuristics/heuristic-cmp.ts +32 -33
  59. package/tests-wtr/lifecycle/find-cmp.ts +5 -8
  60. package/tests-wtr/web/do-opt-in.test.ts +0 -1
  61. package/tests-wtr/web/do-opt-out.test.ts +0 -1
  62. package/tests-wtr/web/do-self-test.test.ts +0 -1
  63. package/tests-wtr/web/filter-cmps.test.ts +0 -1
  64. package/tests-wtr/web/receive-message-callback.test.ts +1 -2
  65. package/tests-wtr/web/update-state.test.ts +1 -3
  66. package/tsconfig.build.json +1 -1
  67. package/.github/workflows/update-filterlist.yml +0 -42
  68. package/dist/autoconsent.extra.cjs.js +0 -15709
  69. package/dist/autoconsent.extra.esm.js +0 -15641
  70. package/dist/types/cmps/consentomatic.d.ts +0 -34
  71. package/dist/types/consentomatic/index.d.ts +0 -2
  72. package/dist/types/consentomatic/tools.d.ts +0 -10
  73. package/dist/types/filterlist-engine.d.ts +0 -2
  74. package/dist/types/filterlist-utils.d.ts +0 -4
  75. package/dist/types/web-extra.d.ts +0 -11
  76. package/lib/cmps/consentomatic.ts +0 -97
  77. package/lib/consentomatic/index.ts +0 -252
  78. package/lib/consentomatic/tools.ts +0 -199
  79. package/lib/filterlist-engine.ts +0 -5
  80. package/lib/filterlist-utils.ts +0 -45
  81. package/lib/web-extra.ts +0 -116
  82. package/rules/consentomatic.json +0 -1
  83. package/rules/filterlist.txt +0 -18440
  84. package/rules/filterlists/overrides.txt +0 -4
  85. package/scripts/compile-filterlist.mjs +0 -63
  86. package/scripts/fetch-easylist.sh +0 -25
  87. package/scripts/rebuild-filterlist.mjs +0 -216
  88. package/tests/oil.spec.ts +0 -7
  89. package/tests/springer.spec.ts +0 -7
  90. package/tests/wordpressgdpr.spec.ts +0 -6
@@ -8,412 +8,8 @@
8
8
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
9
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
10
10
 
11
- // lib/consentomatic/tools.ts
12
- var _Tools = class _Tools {
13
- static setBase(base) {
14
- _Tools.base = base;
15
- }
16
- static findElement(options, parent = null, multiple = false) {
17
- let possibleTargets = null;
18
- if (parent != null) {
19
- possibleTargets = Array.from(parent.querySelectorAll(options.selector));
20
- } else {
21
- if (_Tools.base != null) {
22
- possibleTargets = Array.from(
23
- _Tools.base.querySelectorAll(options.selector)
24
- );
25
- } else {
26
- possibleTargets = Array.from(
27
- document.querySelectorAll(options.selector)
28
- );
29
- }
30
- }
31
- if (options.textFilter != null) {
32
- possibleTargets = possibleTargets.filter((possibleTarget) => {
33
- const textContent = possibleTarget.textContent.toLowerCase();
34
- if (Array.isArray(options.textFilter)) {
35
- let foundText = false;
36
- for (const text of options.textFilter) {
37
- if (textContent.indexOf(text.toLowerCase()) !== -1) {
38
- foundText = true;
39
- break;
40
- }
41
- }
42
- return foundText;
43
- } else if (options.textFilter != null) {
44
- return textContent.indexOf(options.textFilter.toLowerCase()) !== -1;
45
- }
46
- return false;
47
- });
48
- }
49
- if (options.styleFilters != null) {
50
- possibleTargets = possibleTargets.filter((possibleTarget) => {
51
- const styles = window.getComputedStyle(possibleTarget);
52
- let keep = true;
53
- for (const styleFilter of options.styleFilters) {
54
- const option = styles[styleFilter.option];
55
- if (styleFilter.negated) {
56
- keep = keep && option !== styleFilter.value;
57
- } else {
58
- keep = keep && option === styleFilter.value;
59
- }
60
- }
61
- return keep;
62
- });
63
- }
64
- if (options.displayFilter != null) {
65
- possibleTargets = possibleTargets.filter((possibleTarget) => {
66
- if (options.displayFilter) {
67
- return possibleTarget.offsetHeight !== 0;
68
- } else {
69
- return possibleTarget.offsetHeight === 0;
70
- }
71
- });
72
- }
73
- if (options.iframeFilter != null) {
74
- possibleTargets = possibleTargets.filter(() => {
75
- if (options.iframeFilter) {
76
- return window.location !== window.parent.location;
77
- } else {
78
- return window.location === window.parent.location;
79
- }
80
- });
81
- }
82
- if (options.childFilter != null) {
83
- possibleTargets = possibleTargets.filter((possibleTarget) => {
84
- const oldBase = _Tools.base;
85
- _Tools.setBase(possibleTarget);
86
- const childResults = _Tools.find(options.childFilter);
87
- _Tools.setBase(oldBase);
88
- return childResults.target != null;
89
- });
90
- }
91
- if (multiple) {
92
- return possibleTargets;
93
- } else {
94
- if (possibleTargets.length > 1) {
95
- console.warn(
96
- "Multiple possible targets: ",
97
- possibleTargets,
98
- options,
99
- parent
100
- );
101
- }
102
- return possibleTargets[0];
103
- }
104
- }
105
- static find(options, multiple = false) {
106
- const results = [];
107
- if (options.parent != null) {
108
- const parent = _Tools.findElement(options.parent, null, multiple);
109
- if (parent != null) {
110
- if (parent instanceof Array) {
111
- parent.forEach((p) => {
112
- const targets = _Tools.findElement(options.target, p, multiple);
113
- if (targets instanceof Array) {
114
- targets.forEach((target) => {
115
- results.push({
116
- parent: p,
117
- target
118
- });
119
- });
120
- } else {
121
- results.push({
122
- parent: p,
123
- target: targets
124
- });
125
- }
126
- });
127
- return results;
128
- } else {
129
- const targets = _Tools.findElement(options.target, parent, multiple);
130
- if (targets instanceof Array) {
131
- targets.forEach((target) => {
132
- results.push({
133
- parent,
134
- target
135
- });
136
- });
137
- } else {
138
- results.push({
139
- parent,
140
- target: targets
141
- });
142
- }
143
- }
144
- }
145
- } else {
146
- const targets = _Tools.findElement(options.target, null, multiple);
147
- if (targets instanceof Array) {
148
- targets.forEach((target) => {
149
- results.push({
150
- parent: null,
151
- target
152
- });
153
- });
154
- } else {
155
- results.push({
156
- parent: null,
157
- target: targets
158
- });
159
- }
160
- }
161
- if (results.length === 0) {
162
- results.push({
163
- parent: null,
164
- target: null
165
- });
166
- }
167
- if (multiple) {
168
- return results;
169
- } else {
170
- if (results.length !== 1) {
171
- console.warn(
172
- "Multiple results found, even though multiple false",
173
- results
174
- );
175
- }
176
- return results[0];
177
- }
178
- }
179
- };
180
- _Tools.base = null;
181
- var Tools = _Tools;
182
-
183
- // lib/consentomatic/index.ts
184
- function matches(config) {
185
- const result = Tools.find(config);
186
- if (config.type === "css") {
187
- return !!result.target;
188
- } else if (config.type === "checkbox") {
189
- return !!result.target && result.target.checked;
190
- }
191
- }
192
- async function executeAction(config, param) {
193
- switch (config.type) {
194
- case "click":
195
- return clickAction(config);
196
- case "list":
197
- return listAction(config, param);
198
- case "consent":
199
- return consentAction(config, param);
200
- case "ifcss":
201
- return ifCssAction(config, param);
202
- case "waitcss":
203
- return waitCssAction(config);
204
- case "foreach":
205
- return forEachAction(config, param);
206
- case "hide":
207
- return hideAction(config);
208
- case "slide":
209
- return slideAction(config);
210
- case "close":
211
- return closeAction();
212
- case "wait":
213
- return waitAction(config);
214
- case "eval":
215
- return evalAction(config);
216
- default:
217
- throw new Error("Unknown action type: " + config.type);
218
- }
219
- }
220
- var STEP_TIMEOUT = 0;
221
- function waitTimeout(timeout) {
222
- return new Promise((resolve) => {
223
- setTimeout(() => {
224
- resolve();
225
- }, timeout);
226
- });
227
- }
228
- async function clickAction(config) {
229
- const result = Tools.find(config);
230
- if (result.target != null) {
231
- result.target.click();
232
- }
233
- return waitTimeout(STEP_TIMEOUT);
234
- }
235
- async function listAction(config, param) {
236
- for (const action of config.actions) {
237
- await executeAction(action, param);
238
- }
239
- }
240
- async function consentAction(config, consentTypes) {
241
- for (const consentConfig of config.consents) {
242
- const shouldEnable = consentTypes.indexOf(consentConfig.type) !== -1;
243
- if (consentConfig.matcher && consentConfig.toggleAction) {
244
- const isEnabled = matches(consentConfig.matcher);
245
- if (isEnabled !== shouldEnable) {
246
- await executeAction(consentConfig.toggleAction);
247
- }
248
- } else {
249
- if (shouldEnable) {
250
- await executeAction(consentConfig.trueAction);
251
- } else {
252
- await executeAction(consentConfig.falseAction);
253
- }
254
- }
255
- }
256
- }
257
- async function ifCssAction(config, param) {
258
- const result = Tools.find(config);
259
- if (!result.target) {
260
- if (config.trueAction) {
261
- await executeAction(config.trueAction, param);
262
- }
263
- } else {
264
- if (config.falseAction) {
265
- await executeAction(config.falseAction, param);
266
- }
267
- }
268
- }
269
- async function waitCssAction(config) {
270
- await new Promise((resolve) => {
271
- let numRetries = config.retries || 10;
272
- const waitTime = config.waitTime || 250;
273
- const checkCss = () => {
274
- const result = Tools.find(config);
275
- if (config.negated && result.target || !config.negated && !result.target) {
276
- if (numRetries > 0) {
277
- numRetries -= 1;
278
- setTimeout(checkCss, waitTime);
279
- } else {
280
- resolve();
281
- }
282
- } else {
283
- resolve();
284
- }
285
- };
286
- checkCss();
287
- });
288
- }
289
- async function forEachAction(config, param) {
290
- const results = Tools.find(config, true);
291
- const oldBase = Tools.base;
292
- for (const result of results) {
293
- if (result.target) {
294
- Tools.setBase(result.target);
295
- await executeAction(config.action, param);
296
- }
297
- }
298
- Tools.setBase(oldBase);
299
- }
300
- async function hideAction(config) {
301
- const result = Tools.find(config);
302
- if (result.target) {
303
- result.target.classList.add("Autoconsent-Hidden");
304
- }
305
- }
306
- async function slideAction(config) {
307
- const result = Tools.find(config);
308
- const dragResult = Tools.find(config.dragTarget);
309
- if (result.target) {
310
- const targetBounds = result.target.getBoundingClientRect();
311
- const dragTargetBounds = dragResult.target.getBoundingClientRect();
312
- let yDiff = dragTargetBounds.top - targetBounds.top;
313
- let xDiff = dragTargetBounds.left - targetBounds.left;
314
- if (this.config.axis.toLowerCase() === "y") {
315
- xDiff = 0;
316
- }
317
- if (this.config.axis.toLowerCase() === "x") {
318
- yDiff = 0;
319
- }
320
- const screenX = window.screenX + targetBounds.left + targetBounds.width / 2;
321
- const screenY = window.screenY + targetBounds.top + targetBounds.height / 2;
322
- const clientX = targetBounds.left + targetBounds.width / 2;
323
- const clientY = targetBounds.top + targetBounds.height / 2;
324
- const mouseDown = document.createEvent("MouseEvents");
325
- mouseDown.initMouseEvent(
326
- "mousedown",
327
- true,
328
- true,
329
- window,
330
- 0,
331
- screenX,
332
- screenY,
333
- clientX,
334
- clientY,
335
- false,
336
- false,
337
- false,
338
- false,
339
- 0,
340
- result.target
341
- );
342
- const mouseMove = document.createEvent("MouseEvents");
343
- mouseMove.initMouseEvent(
344
- "mousemove",
345
- true,
346
- true,
347
- window,
348
- 0,
349
- screenX + xDiff,
350
- screenY + yDiff,
351
- clientX + xDiff,
352
- clientY + yDiff,
353
- false,
354
- false,
355
- false,
356
- false,
357
- 0,
358
- result.target
359
- );
360
- const mouseUp = document.createEvent("MouseEvents");
361
- mouseUp.initMouseEvent(
362
- "mouseup",
363
- true,
364
- true,
365
- window,
366
- 0,
367
- screenX + xDiff,
368
- screenY + yDiff,
369
- clientX + xDiff,
370
- clientY + yDiff,
371
- false,
372
- false,
373
- false,
374
- false,
375
- 0,
376
- result.target
377
- );
378
- result.target.dispatchEvent(mouseDown);
379
- await this.waitTimeout(10);
380
- result.target.dispatchEvent(mouseMove);
381
- await this.waitTimeout(10);
382
- result.target.dispatchEvent(mouseUp);
383
- }
384
- }
385
- async function waitAction(config) {
386
- await waitTimeout(config.waitTime);
387
- }
388
- async function closeAction() {
389
- window.close();
390
- }
391
- async function evalAction(config) {
392
- console.log("eval!", config.code);
393
- return new Promise((resolve) => {
394
- try {
395
- if (config.async) {
396
- window.eval(config.code);
397
- setTimeout(() => {
398
- resolve(window.eval("window.__consentCheckResult"));
399
- }, config.timeout || 250);
400
- } else {
401
- resolve(window.eval(config.code));
402
- }
403
- } catch (e) {
404
- console.warn("eval error", e, config.code);
405
- resolve(false);
406
- }
407
- });
408
- }
409
-
410
- // lib/types.ts
411
- var PopupHandlingModes = {
412
- None: -1,
413
- Reject: 0,
414
- Tier1: 1,
415
- Tier2: 2
416
- };
11
+ // lib/rules.ts
12
+ var SUPPORTED_RULE_STEP_VERSION = 2;
417
13
 
418
14
  // lib/random.ts
419
15
  function getRandomID() {
@@ -441,6 +37,9 @@
441
37
  sendContentMessage: null
442
38
  };
443
39
  function requestEval(code, snippetId) {
40
+ if (!evalState.sendContentMessage) {
41
+ return Promise.reject(new Error("AutoConsent is not initialized yet"));
42
+ }
444
43
  const id = getRandomID();
445
44
  evalState.sendContentMessage({
446
45
  type: "eval",
@@ -463,6 +62,155 @@
463
62
  }
464
63
  }
465
64
 
65
+ // lib/utils.ts
66
+ function getStyleElement(styleOverrideElementId = "autoconsent-css-rules") {
67
+ const styleSelector = `style#${styleOverrideElementId}`;
68
+ const existingElement = document.querySelector(styleSelector);
69
+ if (existingElement && existingElement instanceof HTMLStyleElement) {
70
+ return existingElement;
71
+ } else {
72
+ const parent = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
73
+ const css = document.createElement("style");
74
+ css.id = styleOverrideElementId;
75
+ parent.appendChild(css);
76
+ return css;
77
+ }
78
+ }
79
+ function getHidingStyle(method) {
80
+ const hidingSnippet = method === "opacity" ? `opacity: 0` : `display: none`;
81
+ return `${hidingSnippet} !important; z-index: -1 !important; pointer-events: none !important;`;
82
+ }
83
+ function hideElements(styleEl, selector, method = "display") {
84
+ const rule = `${selector} { ${getHidingStyle(method)} } `;
85
+ if (styleEl instanceof HTMLStyleElement) {
86
+ styleEl.innerText += rule;
87
+ return selector.length > 0;
88
+ }
89
+ return false;
90
+ }
91
+ async function waitFor(predicate, maxTimes, interval) {
92
+ const result = await predicate();
93
+ if (!result && maxTimes > 0) {
94
+ return new Promise((resolve) => {
95
+ setTimeout(async () => {
96
+ resolve(waitFor(predicate, maxTimes - 1, interval));
97
+ }, interval);
98
+ });
99
+ }
100
+ return Promise.resolve(result);
101
+ }
102
+ function isElementVisible(elem) {
103
+ if (!elem) {
104
+ return false;
105
+ }
106
+ if (elem.offsetParent !== null) {
107
+ return true;
108
+ } else {
109
+ const css = window.getComputedStyle(elem);
110
+ if (css.position === "fixed" && css.display !== "none") {
111
+ return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ function copyObject(data) {
117
+ if (globalThis.structuredClone) {
118
+ return structuredClone(data);
119
+ }
120
+ return JSON.parse(JSON.stringify(data));
121
+ }
122
+ function normalizeConfig(providedConfig) {
123
+ const defaultConfig = {
124
+ enabled: true,
125
+ autoAction: "optOut",
126
+ // if falsy, the extension will wait for an explicit user signal before opting in/out
127
+ disabledCmps: [],
128
+ enablePrehide: true,
129
+ enableCosmeticRules: true,
130
+ enableGeneratedRules: true,
131
+ enableHeuristicDetection: false,
132
+ enablePopupMutationObserver: false,
133
+ detectRetries: 20,
134
+ isMainWorld: false,
135
+ prehideTimeout: 2e3,
136
+ visualTest: false,
137
+ logs: {
138
+ lifecycle: false,
139
+ rulesteps: false,
140
+ detectionsteps: false,
141
+ evals: false,
142
+ errors: true,
143
+ messages: false,
144
+ waits: false
145
+ },
146
+ performanceLoggingEnabled: false,
147
+ heuristicPopupSearchTimeout: 100,
148
+ heuristicMode: "off"
149
+ // heuristic disabled by default
150
+ };
151
+ const updatedConfig = copyObject(defaultConfig);
152
+ for (const key of Object.keys(defaultConfig)) {
153
+ if (typeof providedConfig[key] !== "undefined") {
154
+ updatedConfig[key] = providedConfig[key];
155
+ }
156
+ }
157
+ return updatedConfig;
158
+ }
159
+ function scheduleWhenIdle(callback, timeout = 500) {
160
+ if (globalThis.requestIdleCallback) {
161
+ requestIdleCallback(callback, { timeout });
162
+ } else {
163
+ setTimeout(callback, 0);
164
+ }
165
+ }
166
+ function highlightNode(node) {
167
+ const highlightedNode = node;
168
+ if (!node.style) return;
169
+ if (highlightedNode.__oldStyles !== void 0) {
170
+ return;
171
+ }
172
+ if (node.hasAttribute("style")) {
173
+ highlightedNode.__oldStyles = node.style.cssText;
174
+ }
175
+ node.style.animation = "pulsate .5s infinite";
176
+ node.style.outline = "solid red";
177
+ let styleTag = document.querySelector("style#autoconsent-debug-styles");
178
+ if (!styleTag) {
179
+ styleTag = document.createElement("style");
180
+ styleTag.id = "autoconsent-debug-styles";
181
+ }
182
+ styleTag.textContent = `
183
+ @keyframes pulsate {
184
+ 0% {
185
+ outline-width: 8px;
186
+ outline-offset: -4px;
187
+ }
188
+ 50% {
189
+ outline-width: 4px;
190
+ outline-offset: -2px;
191
+ }
192
+ 100% {
193
+ outline-width: 8px;
194
+ outline-offset: -4px;
195
+ }
196
+ }
197
+ `;
198
+ document.head.appendChild(styleTag);
199
+ }
200
+ function unhighlightNode(node) {
201
+ const highlightedNode = node;
202
+ if (!node.style || !node.hasAttribute("style")) return;
203
+ if (highlightedNode.__oldStyles !== void 0) {
204
+ node.style.cssText = highlightedNode.__oldStyles;
205
+ delete highlightedNode.__oldStyles;
206
+ } else {
207
+ node.removeAttribute("style");
208
+ }
209
+ }
210
+ function isTopFrame() {
211
+ return window.top === window && (!globalThis.location.ancestorOrigins || globalThis.location.ancestorOrigins.length === 0);
212
+ }
213
+
466
214
  // lib/eval-snippets.ts
467
215
  var snippets = {
468
216
  // code-based rules
@@ -640,154 +388,6 @@
640
388
  return `(${snippetStr})()`;
641
389
  }
642
390
 
643
- // lib/utils.ts
644
- function getStyleElement(styleOverrideElementId = "autoconsent-css-rules") {
645
- const styleSelector = `style#${styleOverrideElementId}`;
646
- const existingElement = document.querySelector(styleSelector);
647
- if (existingElement && existingElement instanceof HTMLStyleElement) {
648
- return existingElement;
649
- } else {
650
- const parent = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
651
- const css = document.createElement("style");
652
- css.id = styleOverrideElementId;
653
- parent.appendChild(css);
654
- return css;
655
- }
656
- }
657
- function getHidingStyle(method) {
658
- const hidingSnippet = method === "opacity" ? `opacity: 0` : `display: none`;
659
- return `${hidingSnippet} !important; z-index: -1 !important; pointer-events: none !important;`;
660
- }
661
- function hideElements(styleEl, selector, method = "display") {
662
- const rule = `${selector} { ${getHidingStyle(method)} } `;
663
- if (styleEl instanceof HTMLStyleElement) {
664
- styleEl.innerText += rule;
665
- return selector.length > 0;
666
- }
667
- return false;
668
- }
669
- async function waitFor(predicate, maxTimes, interval) {
670
- const result = await predicate();
671
- if (!result && maxTimes > 0) {
672
- return new Promise((resolve) => {
673
- setTimeout(async () => {
674
- resolve(waitFor(predicate, maxTimes - 1, interval));
675
- }, interval);
676
- });
677
- }
678
- return Promise.resolve(result);
679
- }
680
- function isElementVisible(elem) {
681
- if (!elem) {
682
- return false;
683
- }
684
- if (elem.offsetParent !== null) {
685
- return true;
686
- } else {
687
- const css = window.getComputedStyle(elem);
688
- if (css.position === "fixed" && css.display !== "none") {
689
- return true;
690
- }
691
- }
692
- return false;
693
- }
694
- function copyObject(data) {
695
- if (globalThis.structuredClone) {
696
- return structuredClone(data);
697
- }
698
- return JSON.parse(JSON.stringify(data));
699
- }
700
- function normalizeConfig(providedConfig) {
701
- const defaultConfig = {
702
- enabled: true,
703
- autoAction: "optOut",
704
- // if falsy, the extension will wait for an explicit user signal before opting in/out
705
- disabledCmps: [],
706
- enablePrehide: true,
707
- enableCosmeticRules: true,
708
- enableGeneratedRules: true,
709
- enableHeuristicDetection: false,
710
- enableHeuristicAction: false,
711
- enablePopupMutationObserver: false,
712
- detectRetries: 20,
713
- isMainWorld: false,
714
- prehideTimeout: 2e3,
715
- enableFilterList: false,
716
- visualTest: false,
717
- logs: {
718
- lifecycle: false,
719
- rulesteps: false,
720
- detectionsteps: false,
721
- evals: false,
722
- errors: true,
723
- messages: false,
724
- waits: false
725
- },
726
- performanceLoggingEnabled: false,
727
- heuristicPopupSearchTimeout: 100,
728
- heuristicMode: PopupHandlingModes.Reject
729
- };
730
- const updatedConfig = copyObject(defaultConfig);
731
- for (const key of Object.keys(defaultConfig)) {
732
- if (typeof providedConfig[key] !== "undefined") {
733
- updatedConfig[key] = providedConfig[key];
734
- }
735
- }
736
- return updatedConfig;
737
- }
738
- function scheduleWhenIdle(callback, timeout = 500) {
739
- if (globalThis.requestIdleCallback) {
740
- requestIdleCallback(callback, { timeout });
741
- } else {
742
- setTimeout(callback, 0);
743
- }
744
- }
745
- function highlightNode(node) {
746
- if (!node.style) return;
747
- if (node.__oldStyles !== void 0) {
748
- return;
749
- }
750
- if (node.hasAttribute("style")) {
751
- node.__oldStyles = node.style.cssText;
752
- }
753
- node.style.animation = "pulsate .5s infinite";
754
- node.style.outline = "solid red";
755
- let styleTag = document.querySelector("style#autoconsent-debug-styles");
756
- if (!styleTag) {
757
- styleTag = document.createElement("style");
758
- styleTag.id = "autoconsent-debug-styles";
759
- }
760
- styleTag.textContent = `
761
- @keyframes pulsate {
762
- 0% {
763
- outline-width: 8px;
764
- outline-offset: -4px;
765
- }
766
- 50% {
767
- outline-width: 4px;
768
- outline-offset: -2px;
769
- }
770
- 100% {
771
- outline-width: 8px;
772
- outline-offset: -4px;
773
- }
774
- }
775
- `;
776
- document.head.appendChild(styleTag);
777
- }
778
- function unhighlightNode(node) {
779
- if (!node.style || !node.hasAttribute("style")) return;
780
- if (node.__oldStyles !== void 0) {
781
- node.style.cssText = node.__oldStyles;
782
- delete node.__oldStyles;
783
- } else {
784
- node.removeAttribute("style");
785
- }
786
- }
787
- function isTopFrame() {
788
- return window.top === window && (!globalThis.location.ancestorOrigins || globalThis.location.ancestorOrigins.length === 0);
789
- }
790
-
791
391
  // lib/heuristic-patterns.ts
792
392
  var DETECT_PATTERNS = [
793
393
  /accept cookies/gi,
@@ -1546,15 +1146,19 @@
1546
1146
  const patterns = [];
1547
1147
  const snippets2 = [];
1548
1148
  for (const p of detectPatterns) {
1549
- const matches2 = allText?.match(p);
1550
- if (matches2) {
1149
+ const matches = allText?.match(p);
1150
+ if (matches) {
1551
1151
  patterns.push(p.toString());
1552
- snippets2.push(...matches2.map((m) => m.substring(0, 200)));
1152
+ snippets2.push(...matches.map((m) => m.substring(0, 200)));
1553
1153
  }
1554
1154
  }
1555
1155
  return { patterns, snippets: snippets2 };
1556
1156
  }
1557
- function getActionablePopups(mode = PopupHandlingModes.Reject, timeout = POPUP_SEARCH_MAX_TIME) {
1157
+ function getActionablePopups(mode = "reject", timeout = POPUP_SEARCH_MAX_TIME) {
1158
+ const acceptedLevels = mode === "tier2" ? ["reject", "tier1", "tier2"] : mode === "tier1" ? ["reject", "tier1"] : ["reject"];
1159
+ if (acceptedLevels.length === 0) {
1160
+ return [];
1161
+ }
1558
1162
  const popups = getPotentialPopups(timeout);
1559
1163
  const result = popups.reduce((acc, popup) => {
1560
1164
  const popupText = popup.text?.trim();
@@ -1570,9 +1174,7 @@
1570
1174
  }
1571
1175
  return acc;
1572
1176
  }, []);
1573
- return result.filter(
1574
- (popup) => popup.regexClassification !== void 0 && popup.regexClassification !== PopupHandlingModes.None && popup.regexClassification <= mode
1575
- ).sort((a, b) => (a.regexClassification ?? 0) - (b.regexClassification ?? 0));
1177
+ return result.filter((popup) => popup.regexClassification !== void 0 && acceptedLevels.includes(popup.regexClassification)).sort((a, b) => (a.regexClassification ?? "") > (b.regexClassification ?? "") ? 1 : -1);
1576
1178
  }
1577
1179
  function classifyButtons(buttons) {
1578
1180
  for (const button of buttons) {
@@ -1590,18 +1192,18 @@
1590
1192
  { reject: 0, settings: 0, accept: 0, acknowledge: 0 }
1591
1193
  );
1592
1194
  if (reject > 0) {
1593
- return PopupHandlingModes.Reject;
1195
+ return "reject";
1594
1196
  }
1595
1197
  if (settings > 0) {
1596
- return PopupHandlingModes.None;
1198
+ return "none";
1597
1199
  }
1598
1200
  if (acknowledge > 0) {
1599
- return PopupHandlingModes.Tier1;
1201
+ return "tier1";
1600
1202
  }
1601
1203
  if (accept > 0) {
1602
- return accept === 1 ? PopupHandlingModes.Tier2 : PopupHandlingModes.None;
1204
+ return accept === 1 ? "tier2" : "none";
1603
1205
  }
1604
- return PopupHandlingModes.None;
1206
+ return "none";
1605
1207
  }
1606
1208
  function testButtonMatches(buttonText, matchPatterns, neverMatchPatterns) {
1607
1209
  if (!buttonText) {
@@ -2082,7 +1684,7 @@
2082
1684
  }
2083
1685
  };
2084
1686
  var AutoConsentHeuristicCMP = class extends AutoConsentCMPBase {
2085
- constructor(autoconsentInstance, mode = PopupHandlingModes.Reject) {
1687
+ constructor(autoconsentInstance, mode = "reject") {
2086
1688
  super(autoconsentInstance);
2087
1689
  this.popups = [];
2088
1690
  this.name = "HEURISTIC";
@@ -2109,7 +1711,7 @@
2109
1711
  this.autoconsent.config.performanceLoggingEnabled && performance.mark("heuristicDetectorEnd");
2110
1712
  this.autoconsent.config.performanceLoggingEnabled && performance.measure("heuristicDetector", "heuristicDetectorStart", "heuristicDetectorEnd");
2111
1713
  if (this.popups.length > 0) {
2112
- this.name = `HEURISTIC-TIER${this.popups[0].regexClassification}`;
1714
+ this.name = `HEURISTIC-${this.popups[0].regexClassification?.toUpperCase()}`;
2113
1715
  return Promise.resolve(true);
2114
1716
  }
2115
1717
  return Promise.resolve(false);
@@ -2127,7 +1729,7 @@
2127
1729
  const popup = this.popups[0];
2128
1730
  const level = popup.regexClassification;
2129
1731
  const buttons = popup.buttons;
2130
- const targetButtonType = level === PopupHandlingModes.Reject ? "reject" : level === PopupHandlingModes.Tier1 ? "acknowledge" : "accept";
1732
+ const targetButtonType = level === "reject" ? "reject" : level === "tier1" ? "acknowledge" : "accept";
2131
1733
  return buttons.find((button) => button.regexClassification === targetButtonType);
2132
1734
  }
2133
1735
  optOut() {
@@ -2153,76 +1755,6 @@
2153
1755
  }
2154
1756
  };
2155
1757
 
2156
- // lib/cmps/consentomatic.ts
2157
- var ConsentOMaticCMP = class {
2158
- constructor(name, config) {
2159
- this.name = name;
2160
- this.config = config;
2161
- this.methods = /* @__PURE__ */ new Map();
2162
- this.runContext = defaultRunContext;
2163
- this.isCosmetic = false;
2164
- config.methods.forEach((methodConfig) => {
2165
- if (methodConfig.action) {
2166
- this.methods.set(methodConfig.name, methodConfig.action);
2167
- }
2168
- });
2169
- this.hasSelfTest = false;
2170
- }
2171
- get isIntermediate() {
2172
- return false;
2173
- }
2174
- checkRunContext() {
2175
- return true;
2176
- }
2177
- checkFrameContext(isTop) {
2178
- return true;
2179
- }
2180
- hasMatchingUrlPattern() {
2181
- return false;
2182
- }
2183
- async detectCmp() {
2184
- const matchResults = this.config.detectors.map((detectorConfig) => matches(detectorConfig.presentMatcher));
2185
- return matchResults.some((r) => !!r);
2186
- }
2187
- async detectPopup() {
2188
- const matchResults = this.config.detectors.map((detectorConfig) => matches(detectorConfig.showingMatcher));
2189
- return matchResults.some((r) => !!r);
2190
- }
2191
- async executeAction(method, param) {
2192
- if (this.methods.has(method)) {
2193
- return executeAction(this.methods.get(method), param);
2194
- }
2195
- return true;
2196
- }
2197
- async optOut() {
2198
- await this.executeAction("HIDE_CMP");
2199
- await this.executeAction("OPEN_OPTIONS");
2200
- await this.executeAction("HIDE_CMP");
2201
- await this.executeAction("DO_CONSENT", []);
2202
- await this.executeAction("SAVE_CONSENT");
2203
- return true;
2204
- }
2205
- async optIn() {
2206
- await this.executeAction("HIDE_CMP");
2207
- await this.executeAction("OPEN_OPTIONS");
2208
- await this.executeAction("HIDE_CMP");
2209
- await this.executeAction("DO_CONSENT", ["D", "A", "B", "E", "F", "X"]);
2210
- await this.executeAction("SAVE_CONSENT");
2211
- return true;
2212
- }
2213
- async openCmp() {
2214
- await this.executeAction("HIDE_CMP");
2215
- await this.executeAction("OPEN_OPTIONS");
2216
- return true;
2217
- }
2218
- async test() {
2219
- return true;
2220
- }
2221
- };
2222
-
2223
- // lib/rules.ts
2224
- var SUPPORTED_RULE_STEP_VERSION = 2;
2225
-
2226
1758
  // lib/cmps/trustarc-top.ts
2227
1759
  var cookieSettingsButton = "#truste-show-consent";
2228
1760
  var shortcutOptOut = "#truste-consent-required";
@@ -2825,7 +2357,7 @@
2825
2357
  async optOut() {
2826
2358
  await this.waitForElement(".unic button", 1e3);
2827
2359
  document.querySelectorAll(".unic button").forEach((button) => {
2828
- const text = button.textContent;
2360
+ const text = button.textContent || "";
2829
2361
  if (text.includes("Manage Options") || text.includes("Optionen verwalten")) {
2830
2362
  button.click();
2831
2363
  }
@@ -2838,7 +2370,7 @@
2838
2370
  }
2839
2371
  });
2840
2372
  for (const b of document.querySelectorAll(".unic button")) {
2841
- const text = b.textContent;
2373
+ const text = b.textContent || "";
2842
2374
  for (const pattern of ["Confirm Choices", "Save Choices", "Auswahl speichern"]) {
2843
2375
  if (text.includes(pattern)) {
2844
2376
  b.click();
@@ -2895,6 +2427,9 @@
2895
2427
  item.querySelector(".cmp-accordion-item-title").click();
2896
2428
  await waitFor(() => !!item.querySelector(".cmp-accordion-item-content.cmp-active"), 10, 50);
2897
2429
  const content = item.querySelector(".cmp-accordion-item-content.cmp-active");
2430
+ if (!content) {
2431
+ return false;
2432
+ }
2898
2433
  content.querySelectorAll(".cmp-toggle-actions .cmp-toggle-deny:not(.cmp-toggle-deny--active)").forEach((e) => e.click());
2899
2434
  content.querySelectorAll(".cmp-toggle-actions .cmp-toggle-checkbox:not(.cmp-toggle-checkbox--active)").forEach((e) => e.click());
2900
2435
  }
@@ -3247,15 +2782,15 @@
3247
2782
  }
3248
2783
  querySelectorChain(selectors) {
3249
2784
  let parent = document;
3250
- let matches2 = [];
2785
+ let matches = [];
3251
2786
  for (const selector of selectors) {
3252
- matches2 = this.querySingleReplySelector(selector, parent);
3253
- if (matches2.length === 0) {
2787
+ matches = this.querySingleReplySelector(selector, parent);
2788
+ if (matches.length === 0) {
3254
2789
  return [];
3255
2790
  }
3256
- parent = matches2[0];
2791
+ parent = matches[0];
3257
2792
  }
3258
- return matches2;
2793
+ return matches;
3259
2794
  }
3260
2795
  elementSelector(selector) {
3261
2796
  if (typeof selector === "string") {
@@ -3402,8 +2937,6 @@
3402
2937
  this.rules = [];
3403
2938
  __privateAdd(this, _config);
3404
2939
  this.state = {
3405
- cosmeticFiltersOn: false,
3406
- filterListReported: false,
3407
2940
  lifecycle: "loading",
3408
2941
  prehideOn: false,
3409
2942
  findCmpAttempts: 0,
@@ -3453,9 +2986,6 @@
3453
2986
  if (declarativeRules) {
3454
2987
  this.parseDeclarativeRules(declarativeRules);
3455
2988
  }
3456
- if (config.enableFilterList) {
3457
- this.initializeFilterList();
3458
- }
3459
2989
  this.rules = filterCMPs(this.rules, normalizedConfig);
3460
2990
  if (this.shouldPrehide) {
3461
2991
  if (document.documentElement) {
@@ -3479,8 +3009,6 @@
3479
3009
  }
3480
3010
  this.updateState({ lifecycle: "initialized" });
3481
3011
  }
3482
- initializeFilterList() {
3483
- }
3484
3012
  get shouldPrehide() {
3485
3013
  return this.config.enablePrehide && !this.config.visualTest;
3486
3014
  }
@@ -3509,11 +3037,6 @@
3509
3037
  parseDeclarativeRules(declarativeRules) {
3510
3038
  const perfEnabled = __privateGet(this, _config)?.performanceLoggingEnabled;
3511
3039
  perfEnabled && performance.mark("parseDeclarativeRulesStart");
3512
- if (declarativeRules.consentomatic) {
3513
- for (const [name, rule] of Object.entries(declarativeRules.consentomatic)) {
3514
- this.addConsentomaticCMP(name, rule);
3515
- }
3516
- }
3517
3040
  if (declarativeRules.autoconsent) {
3518
3041
  declarativeRules.autoconsent.forEach((ruleset) => {
3519
3042
  this.addDeclarativeCMP(ruleset);
@@ -3535,9 +3058,6 @@
3535
3058
  this.rules.push(new AutoConsentCMP(ruleset, this));
3536
3059
  }
3537
3060
  }
3538
- addConsentomaticCMP(name, config) {
3539
- this.rules.push(new ConsentOMaticCMP(`com_${name}`, config));
3540
- }
3541
3061
  // start the detection process, possibly with a delay
3542
3062
  start() {
3543
3063
  scheduleWhenIdle(() => this._start());
@@ -3556,7 +3076,8 @@
3556
3076
  if (this.shouldPrehide) {
3557
3077
  this.undoPrehide();
3558
3078
  }
3559
- return this.filterListFallback();
3079
+ this.updateState({ lifecycle: "nothingDetected" });
3080
+ return false;
3560
3081
  }
3561
3082
  this.updateState({ lifecycle: "cmpDetected" });
3562
3083
  const staticCmps = [];
@@ -3614,7 +3135,7 @@
3614
3135
  }
3615
3136
  }
3616
3137
  });
3617
- const heuristicRules = isTop && this.config.enableHeuristicAction && this.state.findCmpAttempts % 2 === 0 ? [new AutoConsentHeuristicCMP(this, this.config.heuristicMode)] : [];
3138
+ const heuristicRules = isTop && this.config.heuristicMode !== "off" && this.state.findCmpAttempts % 2 === 0 ? [new AutoConsentHeuristicCMP(this, this.config.heuristicMode)] : [];
3618
3139
  const rulesPriorityStages = [
3619
3140
  ["site-specific", siteSpecificRules],
3620
3141
  ["generic", genericRules],
@@ -3722,9 +3243,6 @@
3722
3243
  if (this.shouldPrehide && !this.state.prehideOn) {
3723
3244
  this.prehideElements();
3724
3245
  }
3725
- if (this.state.cosmeticFiltersOn) {
3726
- this.undoCosmetics();
3727
- }
3728
3246
  this.foundCmp = cmp;
3729
3247
  if (this.config.autoAction === "optOut") {
3730
3248
  return await this.doOptOut();
@@ -3888,25 +3406,6 @@
3888
3406
  this.updateState({ prehideOn: false });
3889
3407
  this.domActions.undoPrehide();
3890
3408
  }
3891
- undoCosmetics() {
3892
- }
3893
- reportFilterlist() {
3894
- this.sendContentMessage({
3895
- type: "cmpDetected",
3896
- url: location.href,
3897
- cmp: "filterList"
3898
- });
3899
- this.sendContentMessage({
3900
- type: "popupFound",
3901
- cmp: "filterList",
3902
- url: location.href
3903
- });
3904
- this.updateState({ filterListReported: true });
3905
- }
3906
- filterListFallback() {
3907
- this.updateState({ lifecycle: "nothingDetected" });
3908
- return false;
3909
- }
3910
3409
  updateState(change) {
3911
3410
  Object.assign(this.state, change);
3912
3411
  this.sendContentMessage({
@@ -3957,12 +3456,9 @@
3957
3456
  };
3958
3457
  _config = new WeakMap();
3959
3458
 
3960
- // rules/consentomatic.json
3961
- var consentomatic = { oil: { detectors: [{ presentMatcher: { target: { selector: ".as-oil-content-overlay" }, type: "css" }, showingMatcher: { target: { selector: ".as-oil-content-overlay" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".as-js-advanced-settings" }, type: "click" }, { retries: "10", target: { selector: ".as-oil-cpc__purpose-container" }, type: "waitcss", waitTime: "250" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ consents: [{ matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Information storage and access", "Opbevaring af og adgang til oplysninger p\xE5 din enhed"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Information storage and access", "Opbevaring af og adgang til oplysninger p\xE5 din enhed"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "D" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personlige annoncer", "Personalisation"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personlige annoncer", "Personalisation"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Annoncevalg, levering og rapportering", "Ad selection, delivery, reporting"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Annoncevalg, levering og rapportering", "Ad selection, delivery, reporting"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personalisering af indhold", "Content selection, delivery, reporting"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personalisering af indhold", "Content selection, delivery, reporting"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "E" }, { matcher: { parent: { childFilter: { target: { selector: ".as-oil-cpc__purpose-header", textFilter: ["M\xE5ling", "Measurement"] } }, selector: ".as-oil-cpc__purpose-container" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { childFilter: { target: { selector: ".as-oil-cpc__purpose-header", textFilter: ["M\xE5ling", "Measurement"] } }, selector: ".as-oil-cpc__purpose-container" }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: "Google" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: "Google" }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, name: "DO_CONSENT" }, { action: { target: { selector: ".as-oil__btn-optin" }, type: "click" }, name: "SAVE_CONSENT" }, { action: { target: { selector: "div.as-oil" }, type: "hide" }, name: "HIDE_CMP" }] }, optanon: { detectors: [{ presentMatcher: { target: { selector: "#optanon-menu, .optanon-alert-box-wrapper" }, type: "css" }, showingMatcher: { target: { displayFilter: true, selector: ".optanon-alert-box-wrapper" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".optanon-alert-box-wrapper .optanon-toggle-display, a[onclick*='OneTrust.ToggleInfoDisplay()'], a[onclick*='Optanon.ToggleInfoDisplay()']" }, type: "click" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ target: { selector: ".preference-menu-item #Your-privacy" }, type: "click" }, { target: { selector: "#optanon-vendor-consent-text" }, type: "click" }, { action: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, target: { selector: "#optanon-vendor-consent-list .vendor-item" }, type: "foreach" }, { target: { selector: ".vendor-consent-back-link" }, type: "click" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-performance" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-performance" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-functional" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-functional" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-advertising" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-advertising" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-social" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-social" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Social Media Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Social Media Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalisation" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalisation" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Site monitoring cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Site monitoring cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Third party privacy-enhanced content" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Third party privacy-enhanced content" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Performance & Advertising Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Performance & Advertising Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Information storage and access" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Information storage and access" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "D" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad selection, delivery, reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad selection, delivery, reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content selection, delivery, reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content selection, delivery, reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Measurement" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Measurement" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Recommended Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Recommended Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Unclassified Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Unclassified Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Analytical Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Analytical Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Marketing Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Marketing Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalization" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalization" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad Selection, Delivery & Reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad Selection, Delivery & Reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content Selection, Delivery & Reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content Selection, Delivery & Reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }], type: "list" }, name: "DO_CONSENT" }, { action: { parent: { selector: ".optanon-save-settings-button" }, target: { selector: ".optanon-white-button-middle" }, type: "click" }, name: "SAVE_CONSENT" }, { action: { actions: [{ target: { selector: "#optanon-popup-wrapper" }, type: "hide" }, { target: { selector: "#optanon-popup-bg" }, type: "hide" }, { target: { selector: ".optanon-alert-box-wrapper" }, type: "hide" }], type: "list" }, name: "HIDE_CMP" }] }, quantcast2: { detectors: [{ presentMatcher: { target: { selector: "[data-tracking-opt-in-overlay]" }, type: "css" }, showingMatcher: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-learn-more]" }, type: "css" } }], methods: [{ action: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-learn-more]" }, type: "click" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ type: "wait", waitTime: 500 }, { action: { actions: [{ target: { selector: "div", textFilter: ["Information storage and access"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "D" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Personalization"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Ad selection, delivery, reporting"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Content selection, delivery, reporting"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "E" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Measurement"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "B" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Other Partners"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, type: "ifcss" }], type: "list" }, parent: { childFilter: { target: { selector: "input" } }, selector: "[data-tracking-opt-in-overlay] > div > div" }, target: { childFilter: { target: { selector: "input" } }, selector: ":scope > div" }, type: "foreach" }], type: "list" }, name: "DO_CONSENT" }, { action: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-save]" }, type: "click" }, name: "SAVE_CONSENT" }] }, springer: { detectors: [{ presentMatcher: { parent: null, target: { selector: ".cmp-app_gdpr" }, type: "css" }, showingMatcher: { parent: null, target: { displayFilter: true, selector: ".cmp-popup_popup" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".cmp-intro_rejectAll" }, type: "click" }, { type: "wait", waitTime: 250 }, { target: { selector: ".cmp-purposes_purposeItem:not(.cmp-purposes_selectedPurpose)" }, type: "click" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { consents: [{ matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Przechowywanie informacji na urz\u0105dzeniu lub dost\u0119p do nich", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Przechowywanie informacji na urz\u0105dzeniu lub dost\u0119p do nich", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "D" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r podstawowych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r podstawowych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Stosowanie bada\u0144 rynkowych w celu generowania opinii odbiorc\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Stosowanie bada\u0144 rynkowych w celu generowania opinii odbiorc\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "X" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Opracowywanie i ulepszanie produkt\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Opracowywanie i ulepszanie produkt\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "X" }], type: "consent" }, name: "DO_CONSENT" }, { action: { target: { selector: ".cmp-details_save" }, type: "click" }, name: "SAVE_CONSENT" }] }, wordpressgdpr: { detectors: [{ presentMatcher: { parent: null, target: { selector: ".wpgdprc-consent-bar" }, type: "css" }, showingMatcher: { parent: null, target: { displayFilter: true, selector: ".wpgdprc-consent-bar" }, type: "css" } }], methods: [{ action: { parent: null, target: { selector: ".wpgdprc-consent-bar .wpgdprc-consent-bar__settings", textFilter: null }, type: "click" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ target: { selector: ".wpgdprc-consent-modal .wpgdprc-button", textFilter: "Eyeota" }, type: "click" }, { consents: [{ description: "Eyeota Cookies", matcher: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Eyeota" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Eyeota" }, target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, { target: { selector: ".wpgdprc-consent-modal .wpgdprc-button", textFilter: "Advertising" }, type: "click" }, { consents: [{ description: "Advertising Cookies", matcher: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Advertising" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Advertising" }, target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, name: "DO_CONSENT" }, { action: { parent: null, target: { selector: ".wpgdprc-button", textFilter: "Save my settings" }, type: "click" }, name: "SAVE_CONSENT" }] } };
3962
-
3963
3459
  // playwright/content.ts
3964
3460
  if (!window.autoconsentReceiveMessage) {
3965
- const consent = new AutoConsent(window.autoconsentSendMessage, null, { autoconsent: [], consentomatic });
3461
+ const consent = new AutoConsent(window.autoconsentSendMessage, null, { autoconsent: [] });
3966
3462
  window.autoconsentReceiveMessage = (message) => {
3967
3463
  return Promise.resolve(consent.receiveMessageCallback(message));
3968
3464
  };