@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.
- package/.github/actions/setup-release-scripts/action.yml +15 -0
- package/.github/workflows/asana.yml +2 -4
- package/.github/workflows/ddg-release.yml +303 -0
- package/CHANGELOG.md +38 -0
- package/ci/asana-create-tasks.js +174 -0
- package/ci/asana-update-tasks.js +57 -0
- package/ci/clients_pr_template.md +12 -0
- package/ci/create-pr-template.js +61 -0
- package/ci/release-utils.js +61 -0
- package/dist/addon-firefox/content.bundle.js +5 -5
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/rules.json +5 -5
- package/dist/addon-mv3/content.bundle.js +5 -5
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/rules.json +5 -5
- package/dist/autoconsent.cjs.js +5 -5
- package/dist/autoconsent.esm.js +5 -5
- package/dist/autoconsent.playwright.js +1 -1
- package/dist/autoconsent.unit.js +10 -10
- package/lib/cmps/onetrust.ts +5 -5
- package/package.json +7 -3
- package/rules/autoconsent/sirdata.json +25 -7
- package/rules/rules.json +5 -5
- package/scripts/get-text-for-xpath.ts +78 -0
- package/tests/onetrust.spec.ts +1 -0
package/dist/autoconsent.unit.js
CHANGED
|
@@ -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", "
|
|
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:
|
|
7511
|
+
cosmetic: false,
|
|
7512
7512
|
prehideSelectors: [
|
|
7513
7513
|
"#sd-cmp"
|
|
7514
7514
|
],
|
|
@@ -7529,10 +7529,10 @@
|
|
|
7529
7529
|
],
|
|
7530
7530
|
optOut: [
|
|
7531
7531
|
{
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
|
|
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
|
},
|
package/lib/cmps/onetrust.ts
CHANGED
|
@@ -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",
|
|
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.
|
|
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.
|
|
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":
|
|
4
|
-
"prehideSelectors": [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
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
|
-
{
|
|
10
|
-
|
|
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":
|
|
5204
|
+
"cosmetic": false,
|
|
5205
5205
|
"prehideSelectors": [
|
|
5206
5206
|
"#sd-cmp"
|
|
5207
5207
|
],
|
|
@@ -5222,10 +5222,10 @@
|
|
|
5222
5222
|
],
|
|
5223
5223
|
"optOut": [
|
|
5224
5224
|
{
|
|
5225
|
-
"
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
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
|
+
})();
|