@duckduckgo/autoconsent 10.8.0 → 10.10.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 (37) hide show
  1. package/.github/workflows/ddg-release.yml +5 -9
  2. package/CHANGELOG.md +44 -0
  3. package/ci/asana-create-tasks.js +2 -2
  4. package/ci/clients_pr_template.md +3 -0
  5. package/dist/addon-firefox/background.bundle.js +3 -0
  6. package/dist/addon-firefox/content.bundle.js +7 -3
  7. package/dist/addon-firefox/manifest.json +1 -1
  8. package/dist/addon-firefox/rules.json +182 -19
  9. package/dist/addon-mv3/background.bundle.js +3 -0
  10. package/dist/addon-mv3/content.bundle.js +7 -3
  11. package/dist/addon-mv3/manifest.json +1 -1
  12. package/dist/addon-mv3/rules.json +182 -19
  13. package/dist/autoconsent.cjs.js +7 -3
  14. package/dist/autoconsent.esm.js +7 -3
  15. package/dist/autoconsent.playwright.js +1 -1
  16. package/dist/autoconsent.unit.js +189 -22
  17. package/lib/cmps/evidon.ts +4 -3
  18. package/lib/eval-snippets.ts +3 -0
  19. package/package.json +1 -1
  20. package/readme.md +2 -4
  21. package/rules/autoconsent/aquasana-com.json +12 -3
  22. package/rules/autoconsent/complianz-opt-out.json +12 -1
  23. package/rules/autoconsent/cookiecuttr.json +37 -0
  24. package/rules/autoconsent/ebay.json +31 -0
  25. package/rules/autoconsent/ens-modal.json +3 -1
  26. package/rules/autoconsent/ens-notify-banner.json +4 -2
  27. package/rules/autoconsent/fides.json +5 -2
  28. package/rules/autoconsent/ketch.json +8 -5
  29. package/rules/autoconsent/roblox.json +36 -0
  30. package/rules/autoconsent/uswitch.json +10 -5
  31. package/rules/rules.json +182 -19
  32. package/tests/aquasana-com.spec.ts +4 -1
  33. package/tests/cookiecuttr.spec.ts +7 -0
  34. package/tests/ebay.spec.ts +7 -0
  35. package/tests/fides.spec.ts +1 -0
  36. package/tests/ketch.spec.ts +6 -0
  37. package/tests/roblox.spec.ts +5 -0
@@ -544,6 +544,7 @@
544
544
  EVAL_EU_COOKIE_LAW_0: () => !document.cookie.includes("euCookie"),
545
545
  EVAL_EZOIC_0: () => ezCMP.handleAcceptAllClick(),
546
546
  EVAL_EZOIC_1: () => !!document.cookie.match(/ez-consent-tcf/),
547
+ EVAL_FIDES_DETECT_POPUP: () => window.Fides?.initialized,
547
548
  EVAL_GOOGLE_0: () => !!document.cookie.match(/SOCS=CAE/),
548
549
  EVAL_HEMA_TEST_0: () => document.cookie.includes("cookies_rejected=1"),
549
550
  EVAL_IUBENDA_0: () => document.querySelectorAll(".purposes-item input[type=checkbox]:not([disabled])").forEach((x) => {
@@ -553,6 +554,7 @@
553
554
  EVAL_IUBENDA_1: () => !!document.cookie.match(/_iub_cs-\d+=/),
554
555
  EVAL_IWINK_TEST: () => document.cookie.includes("cookie_permission_granted=no"),
555
556
  EVAL_JQUERY_COOKIEBAR_0: () => !document.cookie.includes("cookies-state=accepted"),
557
+ EVAL_KETCH_TEST: () => document.cookie.includes("_ketch_consent_v1_"),
556
558
  EVAL_MEDIAVINE_0: () => document.querySelectorAll('[data-name="mediavine-gdpr-cmp"] input[type=checkbox]').forEach((x) => x.checked && x.click()) || true,
557
559
  EVAL_MICROSOFT_0: () => Array.from(document.querySelectorAll("div > button")).filter((el) => el.innerText.match("Reject|Ablehnen"))[0].click() || true,
558
560
  EVAL_MICROSOFT_1: () => Array.from(document.querySelectorAll("div > button")).filter((el) => el.innerText.match("Accept|Annehmen"))[0].click() || true,
@@ -567,6 +569,7 @@
567
569
  EVAL_PRIMEBOX_0: () => !document.cookie.includes("cb-enabled=accepted"),
568
570
  EVAL_PUBTECH_0: () => document.cookie.includes("euconsent-v2") && (document.cookie.match(/.YAAAAAAAAAAA/) || document.cookie.match(/.aAAAAAAAAAAA/) || document.cookie.match(/.YAAACFgAAAAA/)),
569
571
  EVAL_REDDIT_0: () => document.cookie.includes("eu_cookie={%22opted%22:true%2C%22nonessential%22:false}"),
572
+ EVAL_ROBLOX_TEST: () => document.cookie.includes("RBXcb"),
570
573
  EVAL_SIRDATA_UNBLOCK_SCROLL: () => {
571
574
  document.documentElement.classList.forEach((cls) => {
572
575
  if (cls.startsWith("sd-cmp-"))
@@ -1439,10 +1442,11 @@
1439
1442
  if (this.click("#_evidon-decline-button")) {
1440
1443
  return true;
1441
1444
  }
1442
- hideElements(getStyleElement(), "#evidon-prefdiag-overlay,#evidon-prefdiag-background");
1443
- this.click("#_evidon-option-button");
1445
+ hideElements(getStyleElement(), "#evidon-prefdiag-overlay,#evidon-prefdiag-background,#_evidon-background");
1446
+ await this.waitForThenClick("#_evidon-option-button");
1444
1447
  await this.waitForElement("#evidon-prefdiag-overlay", 5e3);
1445
- this.click("#evidon-prefdiag-decline");
1448
+ await this.wait(500);
1449
+ await this.waitForThenClick("#evidon-prefdiag-decline");
1446
1450
  return true;
1447
1451
  }
1448
1452
  async optIn() {
@@ -2763,7 +2767,6 @@
2763
2767
  },
2764
2768
  {
2765
2769
  name: "aquasana.com",
2766
- cosmetic: true,
2767
2770
  prehideSelectors: [
2768
2771
  "#consent-tracking"
2769
2772
  ],
@@ -2779,12 +2782,24 @@
2779
2782
  ],
2780
2783
  optIn: [
2781
2784
  {
2782
- click: "#accept_consent"
2785
+ waitForThenClick: "#consent-tracking .affirm.btn"
2783
2786
  }
2784
2787
  ],
2785
2788
  optOut: [
2786
2789
  {
2787
- hide: "#consent-tracking"
2790
+ if: {
2791
+ exists: "#consent-tracking .decline.btn"
2792
+ },
2793
+ then: [
2794
+ {
2795
+ click: "#consent-tracking .decline.btn"
2796
+ }
2797
+ ],
2798
+ else: [
2799
+ {
2800
+ hide: "#consent-tracking"
2801
+ }
2802
+ ]
2788
2803
  }
2789
2804
  ]
2790
2805
  },
@@ -3960,7 +3975,20 @@
3960
3975
  ],
3961
3976
  else: [
3962
3977
  {
3963
- hide: '[aria-describedby="cookieconsent:desc"]'
3978
+ if: {
3979
+ exists: ".cmp-pref-link"
3980
+ },
3981
+ then: [
3982
+ {
3983
+ click: ".cmp-pref-link"
3984
+ },
3985
+ {
3986
+ waitForThenClick: ".cmp-body [id*=rejectAll]"
3987
+ },
3988
+ {
3989
+ waitForThenClick: ".cmp-body .cmp-save-btn"
3990
+ }
3991
+ ]
3964
3992
  }
3965
3993
  ]
3966
3994
  }
@@ -4354,6 +4382,51 @@
4354
4382
  }
4355
4383
  ]
4356
4384
  },
4385
+ {
4386
+ name: "cookiecuttr",
4387
+ vendorUrl: "https://github.com/cdwharton/cookieCuttr",
4388
+ cosmetic: false,
4389
+ runContext: {
4390
+ main: true,
4391
+ frame: false,
4392
+ urlPattern: ""
4393
+ },
4394
+ prehideSelectors: [
4395
+ ".cc-cookies"
4396
+ ],
4397
+ detectCmp: [
4398
+ {
4399
+ exists: ".cc-cookies .cc-cookie-accept"
4400
+ }
4401
+ ],
4402
+ detectPopup: [
4403
+ {
4404
+ visible: ".cc-cookies .cc-cookie-accept"
4405
+ }
4406
+ ],
4407
+ optIn: [
4408
+ {
4409
+ waitForThenClick: ".cc-cookies .cc-cookie-accept"
4410
+ }
4411
+ ],
4412
+ optOut: [
4413
+ {
4414
+ if: {
4415
+ exists: ".cc-cookies .cc-cookie-decline"
4416
+ },
4417
+ then: [
4418
+ {
4419
+ click: ".cc-cookies .cc-cookie-decline"
4420
+ }
4421
+ ],
4422
+ else: [
4423
+ {
4424
+ hide: ".cc-cookies"
4425
+ }
4426
+ ]
4427
+ }
4428
+ ]
4429
+ },
4357
4430
  {
4358
4431
  name: "cookiefirst.com",
4359
4432
  prehideSelectors: [
@@ -4914,6 +4987,39 @@
4914
4987
  }
4915
4988
  ]
4916
4989
  },
4990
+ {
4991
+ name: "ebay",
4992
+ vendorUrl: "https://ebay.com",
4993
+ cosmetic: false,
4994
+ runContext: {
4995
+ main: true,
4996
+ frame: false,
4997
+ urlPattern: "^https://(www\\.)?ebay\\.([.a-z]+)/"
4998
+ },
4999
+ prehideSelectors: [
5000
+ "#gdpr-banner"
5001
+ ],
5002
+ detectCmp: [
5003
+ {
5004
+ exists: "#gdpr-banner"
5005
+ }
5006
+ ],
5007
+ detectPopup: [
5008
+ {
5009
+ visible: "#gdpr-banner"
5010
+ }
5011
+ ],
5012
+ optIn: [
5013
+ {
5014
+ waitForThenClick: "#gdpr-banner-accept"
5015
+ }
5016
+ ],
5017
+ optOut: [
5018
+ {
5019
+ waitForThenClick: "#gdpr-banner-decline"
5020
+ }
5021
+ ]
5022
+ },
4917
5023
  {
4918
5024
  name: "ecosia",
4919
5025
  vendorUrl: "https://www.ecosia.org/",
@@ -4956,7 +5062,7 @@
4956
5062
  ],
4957
5063
  detectPopup: [
4958
5064
  {
4959
- visible: ".ensModal"
5065
+ visible: "#ensModalWrapper[style*=block]"
4960
5066
  }
4961
5067
  ],
4962
5068
  optIn: [
@@ -4965,6 +5071,12 @@
4965
5071
  }
4966
5072
  ],
4967
5073
  optOut: [
5074
+ {
5075
+ wait: 500
5076
+ },
5077
+ {
5078
+ visible: "#ensModalWrapper[style*=block]"
5079
+ },
4968
5080
  {
4969
5081
  waitForThenClick: ".ensCheckbox:checked",
4970
5082
  all: true
@@ -4986,7 +5098,7 @@
4986
5098
  ],
4987
5099
  detectPopup: [
4988
5100
  {
4989
- visible: "#ensNotifyBanner"
5101
+ visible: "#ensNotifyBanner[style*=block]"
4990
5102
  }
4991
5103
  ],
4992
5104
  optIn: [
@@ -4996,7 +5108,13 @@
4996
5108
  ],
4997
5109
  optOut: [
4998
5110
  {
4999
- waitForThenClick: "#ensRejectAll,#rejectAll,#ensRejectBanner"
5111
+ wait: 500
5112
+ },
5113
+ {
5114
+ visible: "#ensNotifyBanner[style*=block]"
5115
+ },
5116
+ {
5117
+ waitForThenClick: "#ensRejectAll,#rejectAll,#ensRejectBanner,.rejectAll"
5000
5118
  }
5001
5119
  ]
5002
5120
  },
@@ -5273,16 +5391,19 @@
5273
5391
  detectPopup: [
5274
5392
  {
5275
5393
  visible: "#fides-overlay #fides-banner"
5394
+ },
5395
+ {
5396
+ eval: "EVAL_FIDES_DETECT_POPUP"
5276
5397
  }
5277
5398
  ],
5278
5399
  optIn: [
5279
5400
  {
5280
- waitForThenClick: '#fides-banner [data-testid="Accept all-btn"]'
5401
+ waitForThenClick: "#fides-banner .fides-accept-all-button"
5281
5402
  }
5282
5403
  ],
5283
5404
  optOut: [
5284
5405
  {
5285
- waitForThenClick: '#fides-banner [data-testid="Reject all-btn"]'
5406
+ waitForThenClick: "#fides-banner .fides-reject-all-button"
5286
5407
  }
5287
5408
  ]
5288
5409
  },
@@ -6127,29 +6248,34 @@
6127
6248
  },
6128
6249
  then: [
6129
6250
  {
6130
- waitForThenClick: "#lanyard_root div[class*=buttons] > button[class*=secondaryButton]",
6251
+ waitForThenClick: "#lanyard_root div[class*=buttons] > button[class*=secondaryButton], #lanyard_root button[class*=buttons-secondary]",
6131
6252
  comment: "can be either settings or reject button"
6132
6253
  }
6133
6254
  ]
6134
6255
  },
6135
6256
  {
6136
- waitFor: "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description]",
6257
+ waitFor: "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description], #ketch-preferences",
6137
6258
  timeout: 1e3,
6138
6259
  optional: true
6139
6260
  },
6140
6261
  {
6141
6262
  if: {
6142
- exists: "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description]"
6263
+ exists: "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description], #ketch-preferences"
6143
6264
  },
6144
6265
  then: [
6145
6266
  {
6146
- waitForThenClick: "#lanyard_root button[class*=rejectButton]"
6267
+ waitForThenClick: "#lanyard_root button[class*=rejectButton], #lanyard_root button[class*=rejectAllButton]"
6147
6268
  },
6148
6269
  {
6149
- click: "#lanyard_root button[class*=confirmButton],#lanyard_root div[class*=actions_] > button:nth-child(1)"
6270
+ click: "#lanyard_root button[class*=confirmButton],#lanyard_root div[class*=actions_] > button:nth-child(1), #lanyard_root button[class*=actionButton]"
6150
6271
  }
6151
6272
  ]
6152
6273
  }
6274
+ ],
6275
+ test: [
6276
+ {
6277
+ eval: "EVAL_KETCH_TEST"
6278
+ }
6153
6279
  ]
6154
6280
  },
6155
6281
  {
@@ -7551,6 +7677,42 @@
7551
7677
  }
7552
7678
  ]
7553
7679
  },
7680
+ {
7681
+ name: "roblox",
7682
+ vendorUrl: "https://roblox.com",
7683
+ cosmetic: false,
7684
+ runContext: {
7685
+ main: true,
7686
+ frame: false,
7687
+ urlPattern: "^https://(www\\.)?roblox\\.com/"
7688
+ },
7689
+ prehideSelectors: [],
7690
+ detectCmp: [
7691
+ {
7692
+ exists: ".cookie-banner-wrapper"
7693
+ }
7694
+ ],
7695
+ detectPopup: [
7696
+ {
7697
+ visible: ".cookie-banner-wrapper .cookie-banner"
7698
+ }
7699
+ ],
7700
+ optIn: [
7701
+ {
7702
+ waitForThenClick: ".cookie-banner-wrapper button.btn-cta-lg"
7703
+ }
7704
+ ],
7705
+ optOut: [
7706
+ {
7707
+ waitForThenClick: ".cookie-banner-wrapper button.btn-secondary-lg"
7708
+ }
7709
+ ],
7710
+ test: [
7711
+ {
7712
+ eval: "EVAL_ROBLOX_TEST"
7713
+ }
7714
+ ]
7715
+ },
7554
7716
  {
7555
7717
  name: "rog-forum.asus.com",
7556
7718
  runContext: {
@@ -8972,27 +9134,32 @@
8972
9134
  },
8973
9135
  {
8974
9136
  name: "uswitch.com",
9137
+ runContext: {
9138
+ main: true,
9139
+ frame: false,
9140
+ urlPattern: "^https://(www\\.)?uswitch\\.com/"
9141
+ },
8975
9142
  prehideSelectors: [
8976
- "#cookie-banner-wrapper"
9143
+ ".ucb"
8977
9144
  ],
8978
9145
  detectCmp: [
8979
9146
  {
8980
- exists: "#cookie-banner-wrapper"
9147
+ exists: ".ucb-banner"
8981
9148
  }
8982
9149
  ],
8983
9150
  detectPopup: [
8984
9151
  {
8985
- visible: "#cookie-banner-wrapper"
9152
+ visible: ".ucb-banner"
8986
9153
  }
8987
9154
  ],
8988
9155
  optIn: [
8989
9156
  {
8990
- click: "#cookie_banner_accept_mobile"
9157
+ waitForThenClick: ".ucb-banner .ucb-btn-accept"
8991
9158
  }
8992
9159
  ],
8993
9160
  optOut: [
8994
9161
  {
8995
- click: "#cookie_banner_save"
9162
+ waitForThenClick: ".ucb-banner .ucb-btn-save"
8996
9163
  }
8997
9164
  ]
8998
9165
  },
@@ -29,12 +29,13 @@ export default class Evidon extends AutoConsentCMPBase {
29
29
  return true;
30
30
  }
31
31
 
32
- hideElements(getStyleElement(), "#evidon-prefdiag-overlay,#evidon-prefdiag-background");
33
- this.click("#_evidon-option-button");
32
+ hideElements(getStyleElement(), "#evidon-prefdiag-overlay,#evidon-prefdiag-background,#_evidon-background");
33
+ await this.waitForThenClick("#_evidon-option-button");
34
34
 
35
35
  await this.waitForElement("#evidon-prefdiag-overlay", 5000);
36
36
 
37
- this.click("#evidon-prefdiag-decline");
37
+ await this.wait(500);
38
+ await this.waitForThenClick("#evidon-prefdiag-decline");
38
39
  return true;
39
40
  }
40
41
 
@@ -94,12 +94,14 @@ export const snippets = {
94
94
  EVAL_EU_COOKIE_LAW_0: () => !document.cookie.includes('euCookie'),
95
95
  EVAL_EZOIC_0: () => ezCMP.handleAcceptAllClick(),
96
96
  EVAL_EZOIC_1: () => !!document.cookie.match(/ez-consent-tcf/),
97
+ EVAL_FIDES_DETECT_POPUP: () => window.Fides?.initialized,
97
98
  EVAL_GOOGLE_0: () => !!document.cookie.match(/SOCS=CAE/),
98
99
  EVAL_HEMA_TEST_0: () => document.cookie.includes('cookies_rejected=1'),
99
100
  EVAL_IUBENDA_0: () => document.querySelectorAll('.purposes-item input[type=checkbox]:not([disabled])').forEach(x => {if(x.checked) x.click()}) || true,
100
101
  EVAL_IUBENDA_1: () => !!document.cookie.match(/_iub_cs-\d+=/),
101
102
  EVAL_IWINK_TEST: () => document.cookie.includes('cookie_permission_granted=no'),
102
103
  EVAL_JQUERY_COOKIEBAR_0: () => !document.cookie.includes('cookies-state=accepted'),
104
+ EVAL_KETCH_TEST: () => document.cookie.includes('_ketch_consent_v1_'),
103
105
  EVAL_MEDIAVINE_0: () => document.querySelectorAll("[data-name=\"mediavine-gdpr-cmp\"] input[type=checkbox]").forEach(x => x.checked && x.click()) || true,
104
106
  EVAL_MICROSOFT_0: () => Array.from(document.querySelectorAll('div > button')).filter(el => el.innerText.match('Reject|Ablehnen'))[0].click() || true,
105
107
  EVAL_MICROSOFT_1: () => Array.from(document.querySelectorAll('div > button')).filter(el => el.innerText.match('Accept|Annehmen'))[0].click() || true,
@@ -111,6 +113,7 @@ export const snippets = {
111
113
  EVAL_PRIMEBOX_0: () => !document.cookie.includes('cb-enabled=accepted'),
112
114
  EVAL_PUBTECH_0: () => document.cookie.includes('euconsent-v2') && (document.cookie.match(/.YAAAAAAAAAAA/) || document.cookie.match(/.aAAAAAAAAAAA/) || document.cookie.match(/.YAAACFgAAAAA/)) ,
113
115
  EVAL_REDDIT_0: () => document.cookie.includes('eu_cookie={%22opted%22:true%2C%22nonessential%22:false}'),
116
+ EVAL_ROBLOX_TEST: () => document.cookie.includes('RBXcb'),
114
117
  EVAL_SIRDATA_UNBLOCK_SCROLL: () => {
115
118
  document.documentElement.classList.forEach(cls => {
116
119
  if (cls.startsWith('sd-cmp-')) document.documentElement.classList.remove(cls)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckduckgo/autoconsent",
3
- "version": "10.8.0",
3
+ "version": "10.10.0",
4
4
  "description": "",
5
5
  "main": "dist/autoconsent.cjs.js",
6
6
  "module": "dist/autoconsent.esm.js",
package/readme.md CHANGED
@@ -12,10 +12,8 @@ The web extension can be built with the following steps:
12
12
  ```bash
13
13
  # Download dependencies
14
14
  npm ci
15
- # Build consent ruleset
16
- npm run build-rules
17
- # Build JS bundles (rules must be built first)
18
- npm run bundle
15
+ # Build the extension
16
+ npm run prepublish
19
17
  ```
20
18
 
21
19
  The extension-specific code can be found in the `addon` directory. There are two versions of the
@@ -1,9 +1,18 @@
1
1
  {
2
2
  "name": "aquasana.com",
3
- "cosmetic": true,
4
3
  "prehideSelectors": ["#consent-tracking"],
5
4
  "detectCmp": [{ "exists": "#consent-tracking" }],
6
5
  "detectPopup": [{ "exists": "#consent-tracking" }],
7
- "optIn": [{ "click": "#accept_consent" }],
8
- "optOut": [{ "hide": "#consent-tracking" }]
6
+ "optIn": [
7
+ {
8
+ "waitForThenClick": "#consent-tracking .affirm.btn"
9
+ }
10
+ ],
11
+ "optOut": [
12
+ {
13
+ "if": { "exists": "#consent-tracking .decline.btn" },
14
+ "then": [{ "click": "#consent-tracking .decline.btn" }],
15
+ "else": [{ "hide": "#consent-tracking" }]
16
+ }
17
+ ]
9
18
  }
@@ -39,7 +39,18 @@
39
39
  ],
40
40
  "else": [
41
41
  {
42
- "hide": "[aria-describedby=\"cookieconsent:desc\"]"
42
+ "if": { "exists": ".cmp-pref-link" },
43
+ "then": [
44
+ {
45
+ "click": ".cmp-pref-link"
46
+ },
47
+ {
48
+ "waitForThenClick": ".cmp-body [id*=rejectAll]"
49
+ },
50
+ {
51
+ "waitForThenClick": ".cmp-body .cmp-save-btn"
52
+ }
53
+ ]
43
54
  }
44
55
  ]
45
56
  }
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "cookiecuttr",
3
+ "vendorUrl": "https://github.com/cdwharton/cookieCuttr",
4
+ "cosmetic": false,
5
+ "runContext": {
6
+ "main": true,
7
+ "frame": false,
8
+ "urlPattern": ""
9
+ },
10
+ "prehideSelectors": [".cc-cookies"],
11
+ "detectCmp": [
12
+ {
13
+ "exists": ".cc-cookies .cc-cookie-accept"
14
+ }
15
+ ],
16
+ "detectPopup": [
17
+ {
18
+ "visible": ".cc-cookies .cc-cookie-accept"
19
+ }
20
+ ],
21
+ "optIn": [
22
+ {
23
+ "waitForThenClick": ".cc-cookies .cc-cookie-accept"
24
+ }
25
+ ],
26
+ "optOut": [
27
+ {
28
+ "if": { "exists": ".cc-cookies .cc-cookie-decline" },
29
+ "then": [{
30
+ "click": ".cc-cookies .cc-cookie-decline"
31
+ }],
32
+ "else": [{
33
+ "hide": ".cc-cookies"
34
+ }]
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "ebay",
3
+ "vendorUrl": "https://ebay.com",
4
+ "cosmetic": false,
5
+ "runContext": {
6
+ "main": true,
7
+ "frame": false,
8
+ "urlPattern": "^https://(www\\.)?ebay\\.([.a-z]+)/"
9
+ },
10
+ "prehideSelectors": ["#gdpr-banner"],
11
+ "detectCmp": [
12
+ {
13
+ "exists": "#gdpr-banner"
14
+ }
15
+ ],
16
+ "detectPopup": [
17
+ {
18
+ "visible": "#gdpr-banner"
19
+ }
20
+ ],
21
+ "optIn": [
22
+ {
23
+ "waitForThenClick": "#gdpr-banner-accept"
24
+ }
25
+ ],
26
+ "optOut": [
27
+ {
28
+ "waitForThenClick": "#gdpr-banner-decline"
29
+ }
30
+ ]
31
+ }
@@ -2,11 +2,13 @@
2
2
  "name": "Ensighten ensModal",
3
3
  "prehideSelectors": [".ensModal"],
4
4
  "detectCmp": [{ "exists": ".ensModal" }],
5
- "detectPopup": [{ "visible": ".ensModal" }],
5
+ "detectPopup": [{ "visible": "#ensModalWrapper[style*=block]" }],
6
6
  "optIn": [
7
7
  { "waitForThenClick": "#modalAcceptButton" }
8
8
  ],
9
9
  "optOut": [
10
+ { "wait": 500 },
11
+ { "visible": "#ensModalWrapper[style*=block]" },
10
12
  { "waitForThenClick": ".ensCheckbox:checked", "all": true },
11
13
  { "waitForThenClick": "#ensSave" }
12
14
  ]
@@ -2,11 +2,13 @@
2
2
  "name": "Ensighten ensNotifyBanner",
3
3
  "prehideSelectors": ["#ensNotifyBanner"],
4
4
  "detectCmp": [{ "exists": "#ensNotifyBanner" }],
5
- "detectPopup": [{ "visible": "#ensNotifyBanner" }],
5
+ "detectPopup": [{ "visible": "#ensNotifyBanner[style*=block]" }],
6
6
  "optIn": [
7
7
  { "waitForThenClick": "#ensCloseBanner" }
8
8
  ],
9
9
  "optOut": [
10
- { "waitForThenClick": "#ensRejectAll,#rejectAll,#ensRejectBanner" }
10
+ { "wait": 500 },
11
+ { "visible": "#ensNotifyBanner[style*=block]" },
12
+ { "waitForThenClick": "#ensRejectAll,#rejectAll,#ensRejectBanner,.rejectAll" }
11
13
  ]
12
14
  }
@@ -10,16 +10,19 @@
10
10
  "detectPopup": [
11
11
  {
12
12
  "visible": "#fides-overlay #fides-banner"
13
+ },
14
+ {
15
+ "eval": "EVAL_FIDES_DETECT_POPUP"
13
16
  }
14
17
  ],
15
18
  "optIn": [
16
19
  {
17
- "waitForThenClick": "#fides-banner [data-testid=\"Accept all-btn\"]"
20
+ "waitForThenClick": "#fides-banner .fides-accept-all-button"
18
21
  }
19
22
  ],
20
23
  "optOut": [
21
24
  {
22
- "waitForThenClick": "#fides-banner [data-testid=\"Reject all-btn\"]"
25
+ "waitForThenClick": "#fides-banner .fides-reject-all-button"
23
26
  }
24
27
  ]
25
28
  }
@@ -40,24 +40,27 @@
40
40
  },
41
41
  "then": [
42
42
  {
43
- "waitForThenClick":"#lanyard_root div[class*=buttons] > button[class*=secondaryButton]",
43
+ "waitForThenClick": "#lanyard_root div[class*=buttons] > button[class*=secondaryButton], #lanyard_root button[class*=buttons-secondary]",
44
44
  "comment": "can be either settings or reject button"
45
45
  }
46
46
  ]
47
47
  },
48
48
  {
49
- "waitFor": "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description]",
49
+ "waitFor": "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description], #ketch-preferences",
50
50
  "timeout": 1000,
51
51
  "optional": true
52
52
  },
53
53
  {
54
54
  "if": {
55
- "exists": "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description]"
55
+ "exists": "#lanyard_root [aria-describedby=preference-description],#lanyard_root [aria-describedby=modal-description], #ketch-preferences"
56
56
  },
57
57
  "then": [
58
- { "waitForThenClick": "#lanyard_root button[class*=rejectButton]" },
59
- { "click": "#lanyard_root button[class*=confirmButton],#lanyard_root div[class*=actions_] > button:nth-child(1)" }
58
+ { "waitForThenClick": "#lanyard_root button[class*=rejectButton], #lanyard_root button[class*=rejectAllButton]" },
59
+ { "click": "#lanyard_root button[class*=confirmButton],#lanyard_root div[class*=actions_] > button:nth-child(1), #lanyard_root button[class*=actionButton]" }
60
60
  ]
61
61
  }
62
+ ],
63
+ "test": [
64
+ { "eval": "EVAL_KETCH_TEST" }
62
65
  ]
63
66
  }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "roblox",
3
+ "vendorUrl": "https://roblox.com",
4
+ "cosmetic": false,
5
+ "runContext": {
6
+ "main": true,
7
+ "frame": false,
8
+ "urlPattern": "^https://(www\\.)?roblox\\.com/"
9
+ },
10
+ "prehideSelectors": [],
11
+ "detectCmp": [
12
+ {
13
+ "exists": ".cookie-banner-wrapper"
14
+ }
15
+ ],
16
+ "detectPopup": [
17
+ {
18
+ "visible": ".cookie-banner-wrapper .cookie-banner"
19
+ }
20
+ ],
21
+ "optIn": [
22
+ {
23
+ "waitForThenClick": ".cookie-banner-wrapper button.btn-cta-lg"
24
+ }
25
+ ],
26
+ "optOut": [
27
+ {
28
+ "waitForThenClick": ".cookie-banner-wrapper button.btn-secondary-lg"
29
+ }
30
+ ],
31
+ "test": [
32
+ {
33
+ "eval": "EVAL_ROBLOX_TEST"
34
+ }
35
+ ]
36
+ }