@duckduckgo/autoconsent 10.1.0 → 10.3.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.
@@ -1441,14 +1441,14 @@
1441
1441
  return false;
1442
1442
  }
1443
1443
  async detectCmp() {
1444
- return this.elementExists("#onetrust-banner-sdk");
1444
+ return this.elementExists("#onetrust-banner-sdk,#onetrust-pc-sdk");
1445
1445
  }
1446
1446
  async detectPopup() {
1447
- return this.elementVisible("#onetrust-banner-sdk", "all");
1447
+ return this.elementVisible("#onetrust-banner-sdk,#onetrust-pc-sdk", "any");
1448
1448
  }
1449
1449
  async optOut() {
1450
- if (this.elementVisible("#onetrust-reject-all-handler,.js-reject-cookies", "any")) {
1451
- return this.click("#onetrust-reject-all-handler,.js-reject-cookies");
1450
+ if (this.elementVisible("#onetrust-reject-all-handler,.ot-pc-refuse-all-handler,.js-reject-cookies", "any")) {
1451
+ return this.click("#onetrust-reject-all-handler,.ot-pc-refuse-all-handler,.js-reject-cookies");
1452
1452
  }
1453
1453
  if (this.elementExists("#onetrust-pc-btn-handler")) {
1454
1454
  this.click("#onetrust-pc-btn-handler");
@@ -1465,7 +1465,7 @@
1465
1465
  return true;
1466
1466
  }
1467
1467
  async optIn() {
1468
- return this.click("#onetrust-accept-btn-handler,.js-accept-cookies");
1468
+ return this.click("#onetrust-accept-btn-handler,#accept-recommended-btn-handler,.js-accept-cookies");
1469
1469
  }
1470
1470
  async test() {
1471
1471
  return await waitFor(
@@ -7508,7 +7508,7 @@
7508
7508
  },
7509
7509
  {
7510
7510
  name: "Sirdata",
7511
- cosmetic: true,
7511
+ cosmetic: false,
7512
7512
  prehideSelectors: [
7513
7513
  "#sd-cmp"
7514
7514
  ],
@@ -7529,10 +7529,10 @@
7529
7529
  ],
7530
7530
  optOut: [
7531
7531
  {
7532
- hide: "#sd-cmp"
7533
- },
7534
- {
7535
- eval: "EVAL_SIRDATA_UNBLOCK_SCROLL"
7532
+ waitForThenClick: [
7533
+ "#sd-cmp",
7534
+ "xpath///span[contains(., 'Do not accept') or contains(., 'Acceptera inte') or contains(., 'No aceptar') or contains(., 'Ikke acceptere') or contains(., 'Nicht akzeptieren') or contains(., '\u041D\u0435 \u043F\u0440\u0438\u0435\u043C\u0430\u043C') or contains(., '\u039D\u03B1 \u03BC\u03B7\u03BD \u03B3\u03AF\u03BD\u03B5\u03B9 \u03B1\u03C0\u03BF\u03B4\u03BF\u03C7\u03AE') or contains(., 'Niet accepteren') or contains(., 'Nep\u0159ij\xEDmat') or contains(., 'Nie akceptuj') or contains(., 'Nu accepta\u021Bi') or contains(., 'N\xE3o aceitar') or contains(., 'Continuer sans accepter') or contains(., 'Non accettare') or contains(., 'Nem fogad el')]"
7535
+ ]
7536
7536
  }
7537
7537
  ]
7538
7538
  },
@@ -23,16 +23,16 @@ export default class Onetrust extends AutoConsentCMPBase {
23
23
  }
24
24
 
25
25
  async detectCmp() {
26
- return this.elementExists("#onetrust-banner-sdk");
26
+ return this.elementExists("#onetrust-banner-sdk,#onetrust-pc-sdk");
27
27
  }
28
28
 
29
29
  async detectPopup() {
30
- return this.elementVisible("#onetrust-banner-sdk", 'all');
30
+ return this.elementVisible("#onetrust-banner-sdk,#onetrust-pc-sdk", "any");
31
31
  }
32
32
 
33
33
  async optOut() {
34
- if (this.elementVisible("#onetrust-reject-all-handler,.js-reject-cookies", 'any')) { // 'reject all' shortcut
35
- return this.click("#onetrust-reject-all-handler,.js-reject-cookies");
34
+ if (this.elementVisible("#onetrust-reject-all-handler,.ot-pc-refuse-all-handler,.js-reject-cookies", 'any')) { // 'reject all' shortcut
35
+ return this.click("#onetrust-reject-all-handler,.ot-pc-refuse-all-handler,.js-reject-cookies");
36
36
  }
37
37
 
38
38
  if (this.elementExists("#onetrust-pc-btn-handler")) { // "show purposes" button inside a popup
@@ -55,7 +55,7 @@ export default class Onetrust extends AutoConsentCMPBase {
55
55
  }
56
56
 
57
57
  async optIn() {
58
- return this.click("#onetrust-accept-btn-handler,.js-accept-cookies");
58
+ return this.click("#onetrust-accept-btn-handler,#accept-recommended-btn-handler,.js-accept-cookies");
59
59
  }
60
60
 
61
61
  async test() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckduckgo/autoconsent",
3
- "version": "10.1.0",
3
+ "version": "10.3.0",
4
4
  "description": "",
5
5
  "main": "dist/autoconsent.cjs.js",
6
6
  "module": "dist/autoconsent.esm.js",
@@ -26,7 +26,8 @@
26
26
  "vendor-copy": "mkdir -p addon/vendor && cp node_modules/mocha/mocha.* addon/vendor/ && cp node_modules/chai/chai.js addon/vendor/",
27
27
  "prepublish": "npm run build-rules && npm run bundle",
28
28
  "launch:firefox": "web-ext run -s dist/addon-firefox",
29
- "release": "auto shipit"
29
+ "release": "auto shipit",
30
+ "get-text-for-xpath": "ts-node scripts/get-text-for-xpath.ts"
30
31
  },
31
32
  "author": "Sam Macbeth",
32
33
  "license": "MPL-2.0",
@@ -34,10 +35,11 @@
34
35
  "@playwright/test": "^1.17.1",
35
36
  "@puppeteer/replay": "^3.0.0",
36
37
  "@types/chai": "^4.3.1",
37
- "@types/chrome": "^0.0.261",
38
+ "@types/chrome": "^0.0.263",
38
39
  "@types/mocha": "^10.0.1",
39
40
  "@typescript-eslint/eslint-plugin": "^7.0.1",
40
41
  "@typescript-eslint/parser": "^7.0.1",
42
+ "asana": "^1.0.2",
41
43
  "auto": "^11.0.1",
42
44
  "bulma": "^0.9.4",
43
45
  "chai": "^5.0.0",
@@ -45,7 +47,9 @@
45
47
  "esbuild": "^0.20.0",
46
48
  "eslint": "^8.27.0",
47
49
  "eslint-plugin-json": "^3.1.0",
50
+ "markdown-it": "^14.0.0",
48
51
  "mocha": "^10.0.0",
52
+ "ts-node": "^10.9.2",
49
53
  "tslib": "^2.4.0",
50
54
  "typescript": "^5.1.6",
51
55
  "web-ext": "^7.3.0"
@@ -1,12 +1,30 @@
1
1
  {
2
2
  "name": "Sirdata",
3
- "cosmetic": true,
4
- "prehideSelectors": ["#sd-cmp"],
5
- "detectCmp": [{ "exists": "#sd-cmp" }],
6
- "detectPopup": [{ "visible": "#sd-cmp" }],
7
- "optIn": [ { "waitForThenClick": "#sd-cmp .sd-cmp-3cRQ2" } ],
3
+ "cosmetic": false,
4
+ "prehideSelectors": [
5
+ "#sd-cmp"
6
+ ],
7
+ "detectCmp": [
8
+ {
9
+ "exists": "#sd-cmp"
10
+ }
11
+ ],
12
+ "detectPopup": [
13
+ {
14
+ "visible": "#sd-cmp"
15
+ }
16
+ ],
17
+ "optIn": [
18
+ {
19
+ "waitForThenClick": "#sd-cmp .sd-cmp-3cRQ2"
20
+ }
21
+ ],
8
22
  "optOut": [
9
- { "hide": "#sd-cmp" },
10
- { "eval": "EVAL_SIRDATA_UNBLOCK_SCROLL" }
23
+ {
24
+ "waitForThenClick": [
25
+ "#sd-cmp",
26
+ "xpath///span[contains(., 'Do not accept') or contains(., 'Acceptera inte') or contains(., 'No aceptar') or contains(., 'Ikke acceptere') or contains(., 'Nicht akzeptieren') or contains(., 'Не приемам') or contains(., 'Να μην γίνει αποδοχή') or contains(., 'Niet accepteren') or contains(., 'Nepřijímat') or contains(., 'Nie akceptuj') or contains(., 'Nu acceptați') or contains(., 'Não aceitar') or contains(., 'Continuer sans accepter') or contains(., 'Non accettare') or contains(., 'Nem fogad el')]"
27
+ ]
28
+ }
11
29
  ]
12
30
  }
package/rules/rules.json CHANGED
@@ -5201,7 +5201,7 @@
5201
5201
  },
5202
5202
  {
5203
5203
  "name": "Sirdata",
5204
- "cosmetic": true,
5204
+ "cosmetic": false,
5205
5205
  "prehideSelectors": [
5206
5206
  "#sd-cmp"
5207
5207
  ],
@@ -5222,10 +5222,10 @@
5222
5222
  ],
5223
5223
  "optOut": [
5224
5224
  {
5225
- "hide": "#sd-cmp"
5226
- },
5227
- {
5228
- "eval": "EVAL_SIRDATA_UNBLOCK_SCROLL"
5225
+ "waitForThenClick": [
5226
+ "#sd-cmp",
5227
+ "xpath///span[contains(., 'Do not accept') or contains(., 'Acceptera inte') or contains(., 'No aceptar') or contains(., 'Ikke acceptere') or contains(., 'Nicht akzeptieren') or contains(., 'Не приемам') or contains(., 'Να μην γίνει αποδοχή') or contains(., 'Niet accepteren') or contains(., 'Nepřijímat') or contains(., 'Nie akceptuj') or contains(., 'Nu acceptați') or contains(., 'Não aceitar') or contains(., 'Continuer sans accepter') or contains(., 'Non accettare') or contains(., 'Nem fogad el')]"
5228
+ ]
5229
5229
  }
5230
5230
  ]
5231
5231
  },
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Utility script to get the contents of a specific element for multiple locales
3
+ */
4
+ import { chromium } from "@playwright/test";
5
+
6
+ // list of locales supported by DDG apps and extensions
7
+ const locales = [
8
+ "bg",
9
+ "cs",
10
+ "da",
11
+ "de",
12
+ "el",
13
+ "en",
14
+ "en",
15
+ "es",
16
+ "et",
17
+ "fi",
18
+ "fr",
19
+ "hr",
20
+ "hu",
21
+ "it",
22
+ "lt",
23
+ "lv",
24
+ "nb",
25
+ "nl",
26
+ "pl",
27
+ "pt",
28
+ "ro",
29
+ "ru",
30
+ "sk",
31
+ "sl",
32
+ "sv",
33
+ "tr"
34
+ ];
35
+ if (process.argv.length < 4) {
36
+ console.log('Usage: npm run get-text-for-xpath -- <URL> <XPATH>')
37
+ process.exit(0)
38
+ }
39
+ const url = process.argv[2];
40
+ const xpath = process.argv[3];
41
+ const values = new Set()
42
+ console.log(`Checking contents of ${xpath} on ${url}`);
43
+
44
+
45
+ (async () => {
46
+ const browser = await chromium.launch();
47
+
48
+ async function checkLocale(locale: string) {
49
+ const context = await browser.newContext({ locale });
50
+ const page = await context.newPage();
51
+ await page.goto(url, {
52
+ waitUntil: "networkidle",
53
+ timeout: 30000
54
+ });
55
+ const locator = page.locator(`xpath=${xpath}`);
56
+ const content = await locator.textContent()
57
+ console.log(locale, content);
58
+ values.add(content)
59
+ await page.close();
60
+ await context.close();
61
+ }
62
+
63
+ const crawls = locales.map(async (locale) => {
64
+ try {
65
+ await checkLocale(locale)
66
+ } catch (e) {
67
+ console.warn(`Failed on locale ${locale}, retrying...`, e)
68
+ await checkLocale(locale)
69
+ }
70
+ })
71
+ await Promise.all(crawls)
72
+ await browser.close();
73
+ console.log('Final set of strings:')
74
+ console.log([...values])
75
+ console.log('Example xpath rule:')
76
+ const containsClause = [...values].map(v => `contains(., '${v}')`).join(' or ')
77
+ console.log(`xpath///span[${containsClause}]`)
78
+ })();
@@ -5,6 +5,7 @@ generateCMPTests('Onetrust', [
5
5
  "https://www.lovescout24.de/",
6
6
  "https://www.okcupid.com/",
7
7
  "https://doodle.com/",
8
+ "https://www.coca-cola.com/us/en",
8
9
  ]);
9
10
 
10
11
  generateCMPTests('Onetrust', [