@duckduckgo/autoconsent 16.62.0 → 16.63.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 (74) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/addon-firefox/compact-rules.json +1 -1
  3. package/dist/addon-firefox/content.bundle.js +14 -1
  4. package/dist/addon-firefox/manifest.json +1 -1
  5. package/dist/addon-firefox/rule-index.json +1 -1
  6. package/dist/addon-firefox/rules.json +1 -1
  7. package/dist/addon-mv3/compact-rules.json +1 -1
  8. package/dist/addon-mv3/content.bundle.js +14 -1
  9. package/dist/addon-mv3/manifest.json +1 -1
  10. package/dist/addon-mv3/rule-index.json +1 -1
  11. package/dist/addon-mv3/rules.json +1 -1
  12. package/dist/autoconsent.cjs.js +14 -1
  13. package/dist/autoconsent.esm.js +14 -1
  14. package/dist/autoconsent.playwright.js +14 -1
  15. package/dist/autoconsent.standalone.js +15 -2
  16. package/dist/heuristics.cjs.js +14 -1
  17. package/dist/heuristics.mjs +14 -1
  18. package/lib/heuristic-patterns.ts +17 -1
  19. package/package.json +2 -2
  20. package/rules/autoconsent/appconsent-legacy.json +22 -1
  21. package/rules/autoconsent/beetle-tracking.json +22 -0
  22. package/rules/autoconsent/casier-judiciaire-justice-gouv-fr.json +40 -0
  23. package/rules/autoconsent/civilservicejobs-service-gov-uk.json +38 -0
  24. package/rules/autoconsent/ckies.json +1 -1
  25. package/rules/autoconsent/cookiesinfo-closecookies.json +9 -0
  26. package/rules/autoconsent/dack365.json +35 -0
  27. package/rules/autoconsent/eu-cookie-law-popup.json +33 -0
  28. package/rules/autoconsent/fascicolosanitario-lombardia.json +14 -0
  29. package/rules/autoconsent/fundingchoices.json +12 -2
  30. package/rules/autoconsent/hyrabostad.json +21 -0
  31. package/rules/autoconsent/insided.json +15 -0
  32. package/rules/autoconsent/kartverket.json +46 -0
  33. package/rules/autoconsent/luxmed.json +33 -0
  34. package/rules/autoconsent/meta-cookie-dialog.json +37 -0
  35. package/rules/autoconsent/mittanbud.json +33 -0
  36. package/rules/autoconsent/poki.json +37 -0
  37. package/rules/autoconsent/polisen-se.json +26 -0
  38. package/rules/autoconsent/romeo.json +47 -0
  39. package/rules/autoconsent/stockholm-stad.json +42 -0
  40. package/rules/autoconsent/stright.json +19 -1
  41. package/rules/autoconsent/stripchat.com.json +26 -5
  42. package/rules/autoconsent/tvp.json +27 -0
  43. package/rules/autoconsent/urvaerket.json +33 -0
  44. package/rules/autoconsent/volvocars-com.json +23 -2
  45. package/rules/autoconsent/vue-cookie-accept-decline.json +42 -0
  46. package/rules/compact-rules.json +1 -1
  47. package/rules/rule-index.json +1 -1
  48. package/rules/rules.json +1 -1
  49. package/tests/appconsent-legacy.spec.ts +1 -1
  50. package/tests/beetle-tracking.spec.ts +3 -0
  51. package/tests/casier-judiciaire-justice-gouv-fr.spec.ts +3 -0
  52. package/tests/civilservicejobs-service-gov-uk.spec.ts +3 -0
  53. package/tests/cookiesinfo-closecookies.spec.ts +8 -0
  54. package/tests/dack365.spec.ts +3 -0
  55. package/tests/eu-cookie-law-popup.spec.ts +8 -0
  56. package/tests/fascicolosanitario-lombardia.spec.ts +3 -0
  57. package/tests/fundingchoices.spec.ts +7 -1
  58. package/tests/hyrabostad.spec.ts +3 -0
  59. package/tests/insided.spec.ts +9 -0
  60. package/tests/kartverket.spec.ts +3 -0
  61. package/tests/luxmed.spec.ts +3 -0
  62. package/tests/meta-cookie-dialog.spec.ts +14 -0
  63. package/tests/mittanbud.spec.ts +3 -0
  64. package/tests/poki.spec.ts +6 -0
  65. package/tests/polisen-se.spec.ts +3 -0
  66. package/tests/romeo.spec.ts +3 -0
  67. package/tests/stockholm-stad.spec.ts +7 -0
  68. package/tests/stright.spec.ts +11 -0
  69. package/tests/stripchat.com.spec.ts +4 -1
  70. package/tests/tvp.spec.ts +3 -0
  71. package/tests/urvaerket.spec.ts +13 -0
  72. package/tests/volvocars-com.spec.ts +1 -1
  73. package/tests/vue-cookie-accept-decline.spec.ts +8 -0
  74. package/tests-wtr/heuristics/heuristics-utils.test.ts +49 -0
@@ -1,6 +1,6 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('AppConsent legacy', ['https://www.meteociel.fr/'], {
3
+ generateCMPTests('AppConsent legacy', ['https://www.meteociel.fr/', 'https://www.maxifoot.fr/', 'https://www.voltex.fr/'], {
4
4
  testOptIn: false,
5
5
  testOptOut: true,
6
6
  onlyRegions: ['US', 'FR'],
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('beetle-tracking', ['https://denkorteavis.dk/', 'https://purovitalis.com/', 'https://swimout.dk/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('casier-judiciaire-justice-gouv-fr', ['https://casier-judiciaire.justice.gouv.fr/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('civilservicejobs-service-gov-uk', ['https://www.civilservicejobs.service.gov.uk/csr/index.cgi']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('cookiesinfo-closecookies', ['https://spmzoz-slupsk.pl/', 'https://aktywator.witaj-swiecie.pl/', 'https://poldan.pl/']);
4
+
5
+ // only reachable from Polish IPs
6
+ generateCMPTests('cookiesinfo-closecookies', ['https://edu.gdansk.pl/'], {
7
+ onlyRegions: ['PL'],
8
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('dack365', ['https://www.dack365.se/', 'https://www.dekk365.no/', 'https://www.rengas365.fi/']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('eu-cookie-law-popup', [
4
+ 'https://elearning.unimib.it/',
5
+ 'https://top-akademie.com/',
6
+ 'https://e-tesda.gov.ph/',
7
+ 'https://www.trueplookpanya.com/',
8
+ ]);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('fascicolosanitario-lombardia', ['https://www.fascicolosanitario.regione.lombardia.it/']);
@@ -2,7 +2,13 @@ import generateCMPTests from '../playwright/runner';
2
2
 
3
3
  generateCMPTests(
4
4
  'funding-choices',
5
- ['https://www.bbc.com/', 'https://www.accuweather.com/', 'https://hbr.org/', 'https://www.dinarguru.com/'],
5
+ [
6
+ 'https://www.bbc.com/',
7
+ 'https://www.accuweather.com/',
8
+ 'https://hbr.org/',
9
+ 'https://www.dinarguru.com/',
10
+ 'http://biketrailspfannenstiel.ch/',
11
+ ],
6
12
  {
7
13
  skipRegions: ['US', 'GB'],
8
14
  },
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('hyrabostad.se', ['https://www.hyrabostad.se/']);
@@ -0,0 +1,9 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('insided', [
4
+ 'https://community.odido.nl/',
5
+ 'https://community.fluxx.io/',
6
+ 'https://visioneers.gong.io/',
7
+ 'https://forum.tele2.nl/',
8
+ 'https://community.infoland.nl/',
9
+ ]);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('kartverket', ['https://eiendomsregisteret.kartverket.no/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('luxmed', ['https://portalpacjenta.luxmed.pl/']);
@@ -0,0 +1,14 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests(
4
+ 'meta-cookie-dialog',
5
+ ['https://www.messenger.com/', 'https://developers.facebook.com/', 'https://business.facebook.com/'],
6
+ {
7
+ skipRegions: ['US'],
8
+ },
9
+ );
10
+
11
+ generateCMPTests('meta-cookie-dialog', ['https://www.messenger.com/'], {
12
+ mobile: true,
13
+ skipRegions: ['US'],
14
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('mittanbud', ['https://mittanbud.no/', 'https://servicefinder.se/']);
@@ -0,0 +1,6 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ // "Choose your cookies in the Privacy Center" (CA) and "Privacy & cookies" (NL) notices
4
+ generateCMPTests('poki', ['https://poki.com/'], {
5
+ onlyRegions: ['CA', 'NL'],
6
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('polisen-se', ['https://polisen.se/', 'https://polismuseet.se/', 'https://tidningensvenskpolis.se/'], {});
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('romeo', ['https://www.romeo.com/']);
@@ -0,0 +1,7 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('stockholm-stad', [
4
+ 'https://stockholmskallan.stockholm.se/',
5
+ 'https://start.stockholm/',
6
+ 'https://stadsarkivet.stockholm/',
7
+ ]);
@@ -6,3 +6,14 @@ generateCMPTests('stright', [
6
6
  'https://www.makita.co.jp/',
7
7
  'https://www.yamada-denki.jp/',
8
8
  ]);
9
+
10
+ // settings dialog with category toggles and no reject-all button; mapfan.com is only reachable from Japan
11
+ generateCMPTests('stright', ['https://mapfan.com/'], {
12
+ onlyRegions: ['JP'],
13
+ });
14
+
15
+ // no accept-all button in the first layer
16
+ generateCMPTests('stright', ['https://www.subaru.jp/'], {
17
+ onlyRegions: ['JP'],
18
+ testOptIn: false,
19
+ });
@@ -1,3 +1,6 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('stripchat.com', ['https://xhamsterlive.com/', 'https://stripchat.com/']);
3
+ // Other regions put an 18+ gate in front of the banner, which the test runner cannot pass
4
+ generateCMPTests('stripchat.com', ['https://xhamsterlive.com/', 'https://stripchat.com/', 'https://superchat.live/'], {
5
+ onlyRegions: ['GB'],
6
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('tvp', ['https://vod.tvp.pl/']);
@@ -0,0 +1,13 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests(
4
+ 'urvaerket',
5
+ [
6
+ 'https://www.urvaerket.dk/',
7
+ 'https://www.uret.se/',
8
+ 'https://www.urverket.no/',
9
+ 'https://www.laatukellot.fi/',
10
+ 'https://www.thewatchagency.com/',
11
+ ],
12
+ {},
13
+ );
@@ -1,3 +1,3 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('volvocars-com', ['https://www.volvocars.com/uk/cars/ex60-electric/']);
3
+ generateCMPTests('volvocars-com', ['https://www.volvocars.com/uk/cars/ex60-electric/', 'https://www.volvocars.com/ch/']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('vue-cookie-accept-decline', [
4
+ 'https://loopcv.pro/',
5
+ 'https://www.mennekes.com/',
6
+ 'https://magnaplate.com/',
7
+ 'https://mojo.vision/',
8
+ ]);
@@ -4,6 +4,7 @@ import {
4
4
  cleanButtonText,
5
5
  classifyButtonTextRegex,
6
6
  classifyButtons,
7
+ classifyPopup,
7
8
  isExcludedPopup,
8
9
  } from '../../lib/heuristic-classify';
9
10
  import { getActionablePopups, isDisabled, excludeContainers, getButtonData, isDialogLikeElement } from '../../lib/heuristics';
@@ -387,6 +388,38 @@ describe('classifyButtonTextRegex', () => {
387
388
  expect(classifyButtonTextRegex('Сохранить и закрыть')).to.equal('acknowledge');
388
389
  });
389
390
 
391
+ it('matches Catalan acknowledge buttons', () => {
392
+ expect(classifyButtonTextRegex('Entenc')).to.equal('acknowledge');
393
+ expect(classifyButtonTextRegex('Ho entenc')).to.equal('acknowledge');
394
+ expect(classifyButtonTextRegex('Entès!')).to.equal('acknowledge');
395
+ expect(classifyButtonTextRegex('Entesos')).to.equal('acknowledge');
396
+ });
397
+
398
+ it('matches Catalan necessary-only buttons as reject', () => {
399
+ expect(classifyButtonTextRegex('Només les necessàries')).to.equal('reject');
400
+ expect(classifyButtonTextRegex('Només necessàries')).to.equal('reject');
401
+ expect(classifyButtonTextRegex('Necessàries')).to.equal('reject');
402
+ expect(classifyButtonTextRegex('Acceptar només les galetes necessàries')).to.equal('reject');
403
+ expect(classifyButtonTextRegex('Només galetes tècniques')).to.equal('reject');
404
+ expect(classifyButtonTextRegex('Només les essencials')).to.equal('reject');
405
+ expect(classifyButtonTextRegex('Continuar sense acceptar')).to.equal('reject');
406
+ });
407
+
408
+ it('matches Catalan settings buttons', () => {
409
+ expect(classifyButtonTextRegex('Configuració')).to.equal('settings');
410
+ expect(classifyButtonTextRegex('Personalitzar')).to.equal('settings');
411
+ expect(classifyButtonTextRegex('Preferències')).to.equal('settings');
412
+ expect(classifyButtonTextRegex('Més opcions')).to.equal('settings');
413
+ expect(classifyButtonTextRegex('Configuració de galetes')).to.equal('settings');
414
+ expect(classifyButtonTextRegex('Gestionar les meves preferències')).to.equal('settings');
415
+ expect(classifyButtonTextRegex('Gestiona les galetes')).to.equal('settings');
416
+ });
417
+
418
+ it('does not treat Catalan save or accept buttons as settings or reject', () => {
419
+ expect(classifyButtonTextRegex('Desar preferències')).to.not.equal('settings');
420
+ expect(classifyButtonTextRegex('Acceptar')).to.equal('accept');
421
+ });
422
+
390
423
  it('does not treat Russian subscription buttons as reject', () => {
391
424
  expect(classifyButtonTextRegex('Отказаться от подписки')).to.equal('other');
392
425
  });
@@ -412,6 +445,22 @@ describe('classifyButtonTextRegex', () => {
412
445
  });
413
446
  });
414
447
 
448
+ describe('classifyPopup', () => {
449
+ function classify(texts: string[]) {
450
+ return classifyPopup(texts.map((text) => ({ text, regexClassification: classifyButtonTextRegex(text) })));
451
+ }
452
+
453
+ it('dismisses a Catalan notice-only banner as tier1', () => {
454
+ expect(classify(['Entenc'])).to.equal('tier1');
455
+ });
456
+
457
+ it('does not acknowledge a Catalan banner that offers necessary-only or settings', () => {
458
+ expect(classify(['Entès', 'Només les necessàries'])).to.equal('reject');
459
+ expect(classify(['Entès', 'Preferències'])).to.equal('none');
460
+ expect(classify(['Entès', 'Personalitzar'])).to.equal('none');
461
+ });
462
+ });
463
+
415
464
  describe('classifyButtons', () => {
416
465
  it('separates reject buttons from other buttons', () => {
417
466
  const buttons: ButtonData[] = [