@duckduckgo/autoconsent 16.30.0 → 16.32.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/workflows/asana-sync.yml +1 -1
- package/CHANGELOG.md +39 -0
- package/dist/addon-firefox/compact-rules.json +1 -1
- package/dist/addon-firefox/content.bundle.js +47 -10
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/rule-index.json +1 -1
- package/dist/addon-firefox/rules.json +1 -1
- package/dist/addon-mv3/compact-rules.json +1 -1
- package/dist/addon-mv3/content.bundle.js +47 -10
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/rule-index.json +1 -1
- package/dist/addon-mv3/rules.json +1 -1
- package/dist/autoconsent.cjs.js +47 -10
- package/dist/autoconsent.esm.js +47 -10
- package/dist/autoconsent.playwright.js +47 -10
- package/dist/autoconsent.standalone.js +48 -11
- package/lib/cmps/cookiebot.ts +4 -0
- package/lib/heuristic-patterns.ts +45 -8
- package/lib/heuristics.ts +2 -1
- package/package.json +1 -1
- package/rules/autoconsent/doordash-storefront.json +34 -0
- package/rules/autoconsent/walmart-ca.json +44 -0
- package/rules/autoconsent/xnxx-com.json +1 -1
- package/rules/autoconsent/xvideos.json +1 -1
- package/rules/compact-rules.json +1 -1
- package/rules/rule-index.json +1 -1
- package/rules/rules.json +1 -1
- package/tests/cookiebot.spec.ts +4 -0
- package/tests/doordash-storefront.spec.ts +6 -0
- package/tests/walmart-ca.spec.ts +3 -0
- package/tests/xnxx.spec.ts +8 -2
- package/tests/xvideos.spec.ts +3 -3
- package/tests-wtr/heuristics/get-actionable-popups.html +15 -0
- package/tests-wtr/heuristics/get-actionable-popups.ts +20 -0
- package/tests-wtr/heuristics/heuristic-cmp.html +17 -0
- package/tests-wtr/heuristics/heuristic-cmp.ts +34 -0
- package/tests-wtr/heuristics/heuristics-utils.test.ts +135 -0
- package/tests-wtr/rules/cmp-test-urls.json +0 -1
- package/rules/generated/auto_CA_algonquincollege.com_o8v.json +0 -40
- package/tests/generated/auto_CA_algonquincollege.com_o8v.spec.ts +0 -6
|
@@ -421,6 +421,7 @@
|
|
|
421
421
|
/we (?:use|serve)(?: optional)? cookies/gi,
|
|
422
422
|
/we are using cookies/gi,
|
|
423
423
|
/use of cookies/gi,
|
|
424
|
+
/website uses cookies to enhance your browsing experience/gi,
|
|
424
425
|
/(?:this|our) (?:web)?site.{0,100}cookies/gi,
|
|
425
426
|
/cookies (?:and|or) .{0,100} technologies/gi,
|
|
426
427
|
/such as cookies/gi,
|
|
@@ -550,7 +551,16 @@
|
|
|
550
551
|
/^\s*empregamos cookies propias\b/gi,
|
|
551
552
|
/este portal emprega cookies propias ou de terceiros con fins analíticos/gi,
|
|
552
553
|
// Russian (RU)
|
|
553
|
-
|
|
554
|
+
// e.g. "мы используем файлы cookie", "сайт использует куки", "используются технологии cookie"
|
|
555
|
+
// note: \w does not match Cyrillic, so these use explicit character ranges
|
|
556
|
+
/использу[а-яё]*.{0,40}(?:файл[а-яё]*[\s-]+)?(?:cookie|куки)/gi,
|
|
557
|
+
/(?:cookie|куки).{0,40}использу[а-яё]*/gi,
|
|
558
|
+
/(?:использовани[а-яё]*|обработк[а-яё]*|хранени[а-яё]*).{0,20}(?:файл(?:ов|ы)[\s-]+)?(?:cookie|куки)/gi,
|
|
559
|
+
/технологи[а-яё]*\s+(?:cookie|куки)/gi,
|
|
560
|
+
// e.g. "сайт собирает cookie", "мы применяем файлы cookie", "сохраняем куки на вашем устройстве"
|
|
561
|
+
/(?:собира[а-яё]*|сбор|применя[а-яё]*|сохраня[а-яё]*|размеща[а-яё]*|устанавлива[а-яё]*).{0,30}(?:файл[а-яё]*[\s-]+)?(?:cookie|куки)/gi,
|
|
562
|
+
// "файлы cookie" / "cookie-файлы" / "куки-файлы" in any phrasing
|
|
563
|
+
/(?:файл[а-яё]*[\s-]+(?:cookie|куки)|(?:cookie|куки)[\s-]+файл[а-яё]*)/gi,
|
|
554
564
|
// Italian (IT)
|
|
555
565
|
/usiamo.{0,20}cookie/gi
|
|
556
566
|
];
|
|
@@ -565,8 +575,9 @@
|
|
|
565
575
|
/^\s*(continue|proceed|continue\s+browsing)\s+without\s+(accepting|agreeing|consent|cookies|tracking)(\s*→)?\s*$/is,
|
|
566
576
|
// essential/necessary/functional-only, e.g. "essential cookies only", "accept only essential cookies",
|
|
567
577
|
// "allow necessary cookies continue", "use essential cookies only", "functional only", "i confirm necessary"
|
|
568
|
-
|
|
569
|
-
/^\s*(i\s+)?(want\s+to\s+)?
|
|
578
|
+
/^\s*(i\s+)?(want\s+to\s+)?(only\s+)?(use|accept|allow|keep|enable|choose|continue\s+with|i\s+confirm)\s*(only\s+)?(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
579
|
+
/^\s*(i\s+)?(want\s+to\s+)?only\s+(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
580
|
+
/^\s*(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s+only\s*$/is,
|
|
570
581
|
// e.g. "do not sell or share my personal information", "opt out of sale ..." (CCPA)
|
|
571
582
|
/do\s+not\s+sell|opt\s+out\s+of\s+sale/is,
|
|
572
583
|
// e.g. "opt-out of sale/share or targeted advertising", "opt-out of advertising/social media cookies"
|
|
@@ -705,7 +716,14 @@
|
|
|
705
716
|
"niezb\u0119dne pliki cookie",
|
|
706
717
|
/^funkcjonalne pliki cookie \(wymagane\)$/
|
|
707
718
|
];
|
|
708
|
-
var REJECT_PATTERNS_RUSSIAN = [
|
|
719
|
+
var REJECT_PATTERNS_RUSSIAN = [
|
|
720
|
+
// отклонить / отказаться / запретить (reject verbs); \w does not match Cyrillic
|
|
721
|
+
/(^|\s)(отклон[а-яё]*|отказ[а-яё]*|откаж[а-яё]*|запрет[а-яё]*|запрещ[а-яё]*)/is,
|
|
722
|
+
// "только необходимые (файлы cookie)" / "принять только необходимые куки"
|
|
723
|
+
/^\s*(принять\s+|принима[а-яё]+\s+|разрешить\s+|использовать\s+|оставить\s+)?(только|лишь)\s+(строго\s+)?(необходим[а-яё]+|нужн[а-яё]+|обязательн[а-яё]+|техническ[а-яё]+|функциональн[а-яё]+)(\s+файл[а-яё]*)?([\s-]+(cookie|куки)([\s-]+файл[а-яё]*)?)?\s*$/is,
|
|
724
|
+
// refusals: "не принимаю", "не согласен", "не соглашаюсь", "нет, спасибо"
|
|
725
|
+
/^\s*(не\s+(принима[а-яё]+|соглас[а-яё]+|разреша[а-яё]+|хочу)|нет(,?\s+спасибо)?)\s*$/is
|
|
726
|
+
];
|
|
709
727
|
var REJECT_PATTERNS_TURKISH = ["reddet", "\xE7erezleri reddet"];
|
|
710
728
|
var REJECT_PATTERNS_INDONESIAN = ["tolak cookie"];
|
|
711
729
|
var REJECT_PATTERNS = [
|
|
@@ -746,7 +764,9 @@
|
|
|
746
764
|
/suscríbete/,
|
|
747
765
|
/sin cookies .{0,10}euro/s,
|
|
748
766
|
// Polish (PL)
|
|
749
|
-
/subskrybuj
|
|
767
|
+
/subskrybuj/,
|
|
768
|
+
// Russian (RU): paywall/subscription wording, e.g. "отказаться от подписки", "оплатить"
|
|
769
|
+
/подписатьс|подписк|оплатит|оплачива/is
|
|
750
770
|
];
|
|
751
771
|
var DETECT_NEVER_MATCH_PATTERNS = [
|
|
752
772
|
// e.g. "age verification", "age confirmation", "age check", "age gate", "age restriction"
|
|
@@ -911,8 +931,12 @@
|
|
|
911
931
|
"zmie\u0144 zgody",
|
|
912
932
|
"zobacz preferencje",
|
|
913
933
|
// Russian (RU)
|
|
914
|
-
"
|
|
915
|
-
|
|
934
|
+
// e.g. "настроить", "настройки куки", "параметры конфиденциальности"; \w does not match Cyrillic
|
|
935
|
+
/^\s*((мои|моими|свои|своими)\s+)?(настро[а-яё]+|парамет[а-яё]+|предпочтени[а-яё]+)([\s-]+(мои|моими|свои|своими|файл[а-яё]*|cookie|куки[а-яё]*|конфиденциальност[а-яё]*|согласи[а-яё]*|приватност[а-яё]*))*\s*$/is,
|
|
936
|
+
// e.g. "управление файлами cookie", "изменить настройки", "выбрать категории"
|
|
937
|
+
// "подробн" is deliberately excluded: it would also match the "подробнее о cookie" policy link
|
|
938
|
+
/^\s*(управл[а-яё]+|измен[а-яё]+|выбрать|персонализ[а-яё]+|расширенн[а-яё]+|индивидуальн[а-яё]+)[\s-]+.{0,20}(настройк[а-яё]*|парамет[а-яё]*|предпочтени[а-яё]*|категори[а-яё]*|файл[а-яё]*|cookie|куки[а-яё]*|согласи[а-яё]*|конфиденциальност[а-яё]*)\s*$/is,
|
|
939
|
+
"\u043F\u043E\u0434\u0440\u043E\u0431\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
|
|
916
940
|
// Italian (IT)
|
|
917
941
|
"personalizza cookie",
|
|
918
942
|
// English (EN)
|
|
@@ -1045,7 +1069,9 @@
|
|
|
1045
1069
|
"zezw\xF3l na wybrane",
|
|
1046
1070
|
"zgoda na wybrane",
|
|
1047
1071
|
// Russian (RU)
|
|
1048
|
-
"
|
|
1072
|
+
// e.g. "принять всё", "принять все файлы cookie", "разрешить куки", "я согласен"
|
|
1073
|
+
// confirm/save wording (подтвердить, сохранить) is acknowledge, not accept
|
|
1074
|
+
/^\s*(да,?\s+)?(я\s+)?(принять|принима[а-яё]+|соглас[а-яё]+|разрешить|разреша[а-яё]+)(\s+(вс[её]|(все\s+)?(файлы[\s-]+)?(cookie|куки)([\s-]+файл[а-яё]*)?|выбранные|выбор))?\s*$/is,
|
|
1049
1075
|
"\u043F\u0440\u0438\u043D\u044F\u0442\u044C",
|
|
1050
1076
|
// Turkish (TR)
|
|
1051
1077
|
"kabul et",
|
|
@@ -1102,7 +1128,15 @@
|
|
|
1102
1128
|
/^zamknij informację o( plikach)? cookies$/,
|
|
1103
1129
|
"zapisz i zamknij",
|
|
1104
1130
|
// Russian (RU)
|
|
1105
|
-
"\
|
|
1131
|
+
// e.g. "понятно", "всё понятно", "хорошо", "ясно"; \w does not match Cyrillic
|
|
1132
|
+
/^\s*(хорошо|ясно|(вс[её]\s+)?(понятно|понял[аи]?))[!.]*\s*$/is,
|
|
1133
|
+
// e.g. "закрыть", "закрыть уведомление о cookie"
|
|
1134
|
+
/^\s*закрыть([\s-]+(это|эту|баннер|уведомлени[а-яё]*|окно|сообщени[а-яё]*|плашк[а-яё]*|информаци[а-яё]*)){0,2}([\s-]+(о|об)[\s-]+(cookie|куки[а-яё]*|файл[а-яё]*[\s-]+cookie))?\s*$/is,
|
|
1135
|
+
// e.g. "больше не показывать", "не показывать снова"
|
|
1136
|
+
/^\s*(больше\s+не\s+показывать|не\s+показывать(\s+(снова|больше|это\s+сообщение))?)\s*$/is,
|
|
1137
|
+
// e.g. "подтвердить", "подтверждаю выбор", "сохранить настройки", "сохранить и закрыть"
|
|
1138
|
+
/^\s*(подтвер(дить|ждаю|ждени[а-яё]*)|сохран(ить|яю|ение))([\s-]+(мой|мои|моё|свой|свои|своё)?[\s-]*(выбор[а-яё]*|настройк[а-яё]*|парамет[а-яё]*|предпочтени[а-яё]*|согласи[а-яё]*))?([\s-]+и[\s-]+(закрыть|продолжить))?\s*$/is,
|
|
1139
|
+
"\u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C"
|
|
1106
1140
|
];
|
|
1107
1141
|
|
|
1108
1142
|
// lib/heuristics.ts
|
|
@@ -1290,7 +1324,7 @@
|
|
|
1290
1324
|
for (let node = walker.nextNode(); node; node = walker.nextNode()) {
|
|
1291
1325
|
found.push(node);
|
|
1292
1326
|
}
|
|
1293
|
-
return excludeContainers(found);
|
|
1327
|
+
return excludeContainers(found.filter((element) => element.innerText?.trim()));
|
|
1294
1328
|
}
|
|
1295
1329
|
function getButtonData(el) {
|
|
1296
1330
|
const actionableButtons = excludeContainers(getButtonLikeElements(el)).filter(
|
|
@@ -1841,6 +1875,9 @@
|
|
|
1841
1875
|
let res = await this.mainWorldEval("EVAL_COOKIEBOT_3");
|
|
1842
1876
|
await this.wait(1e3);
|
|
1843
1877
|
res = res && await this.mainWorldEval("EVAL_COOKIEBOT_4");
|
|
1878
|
+
if (this.elementVisible("#CybotCookiebotDialogBodyButtonDecline")) {
|
|
1879
|
+
return await this.click("#CybotCookiebotDialogBodyButtonDecline");
|
|
1880
|
+
}
|
|
1844
1881
|
return res;
|
|
1845
1882
|
}
|
|
1846
1883
|
async optIn() {
|