@slashgear/gdpr-cookie-scanner 3.3.0 → 3.5.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 (46) hide show
  1. package/.github/workflows/ci.yml +20 -1
  2. package/.github/workflows/update-cookie-db.yml +94 -0
  3. package/CHANGELOG.md +130 -0
  4. package/CLAUDE.md +18 -0
  5. package/NEXT_STEPS.md +0 -25
  6. package/README.md +25 -24
  7. package/dist/classifiers/cookie-lookup.d.ts +8 -0
  8. package/dist/classifiers/cookie-lookup.d.ts.map +1 -0
  9. package/dist/classifiers/cookie-lookup.js +50 -0
  10. package/dist/classifiers/cookie-lookup.js.map +1 -0
  11. package/dist/cli.js +6 -5
  12. package/dist/cli.js.map +1 -1
  13. package/dist/data/open-cookie-database.json +25614 -0
  14. package/dist/index.d.ts +3 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/report/generator.d.ts +1 -0
  18. package/dist/report/generator.d.ts.map +1 -1
  19. package/dist/report/generator.js +100 -4
  20. package/dist/report/generator.js.map +1 -1
  21. package/dist/report/html.d.ts.map +1 -1
  22. package/dist/report/html.js +16 -2
  23. package/dist/report/html.js.map +1 -1
  24. package/dist/scanner/consent-modal.d.ts +14 -1
  25. package/dist/scanner/consent-modal.d.ts.map +1 -1
  26. package/dist/scanner/consent-modal.js +148 -32
  27. package/dist/scanner/consent-modal.js.map +1 -1
  28. package/dist/scanner/index.d.ts.map +1 -1
  29. package/dist/scanner/index.js +11 -2
  30. package/dist/scanner/index.js.map +1 -1
  31. package/dist/types.d.ts +4 -1
  32. package/dist/types.d.ts.map +1 -1
  33. package/package.json +4 -3
  34. package/scripts/copy-data.mjs +4 -0
  35. package/scripts/update-cookie-db.mjs +15 -0
  36. package/src/classifiers/cookie-lookup.ts +72 -0
  37. package/src/cli.ts +13 -5
  38. package/src/data/open-cookie-database.json +25614 -0
  39. package/src/index.ts +3 -1
  40. package/src/report/generator.ts +119 -6
  41. package/src/report/html.ts +16 -2
  42. package/src/scanner/consent-modal.ts +169 -32
  43. package/src/scanner/index.ts +11 -2
  44. package/src/types.ts +4 -1
  45. package/tests/scanner/button-classification.test.ts +241 -0
  46. package/tests/scanner/contrast-ratio.test.ts +172 -0
@@ -1,9 +1,11 @@
1
1
  /**
2
- * Ordered list of CSS selectors to try for detecting a consent modal/banner.
3
- * Covers major CMP platforms (Axeptio, Cookiebot, OneTrust, Didomi, Tarteaucitron, etc.)
2
+ * Selectors for well-known CMP platforms.
3
+ * These are precise enough that DOM presence alone is a reliable signal —
4
+ * no visibility check required. Some CMPs (e.g. Axeptio) inject their
5
+ * container as display:none and reveal it after JS initialisation, so
6
+ * isVisible() would incorrectly skip them.
4
7
  */
5
- const MODAL_SELECTORS = [
6
- // Well-known CMPs
8
+ const CMP_SELECTORS = [
7
9
  "#axeptio_overlay",
8
10
  "#axeptio-root",
9
11
  "#CybotCookiebotDialog",
@@ -24,7 +26,13 @@ const MODAL_SELECTORS = [
24
26
  "#cookie-banner",
25
27
  "#cookie-notice",
26
28
  "#cookie-law-info-bar",
27
- // Generic heuristics
29
+ ];
30
+ /**
31
+ * Generic heuristic selectors.
32
+ * These are broad enough to match unrelated elements, so a visibility
33
+ * check is required to avoid false positives.
34
+ */
35
+ const HEURISTIC_SELECTORS = [
28
36
  "[class*='cookie'][class*='banner']",
29
37
  "[class*='cookie'][class*='modal']",
30
38
  "[class*='cookie'][class*='popup']",
@@ -97,33 +105,137 @@ export async function findPrivacyPolicyUrl(page, scopeSelector) {
97
105
  })
98
106
  .catch(() => null);
99
107
  }
100
- const ACCEPT_PATTERNS = [
101
- /\b(accept|accepter|acceptez|tout accepter|accept all|j'accepte|i accept|agree|ok\b|d'accord|continuer|continue|valider|confirmer)\b/i,
102
- ];
103
- const REJECT_PATTERNS = [
104
- /\b(refus|refuse|refuser|tout refuser|rejet|rejeter|tout rejeter|reject|reject all|deny|decline|non merci|no thanks|continuer sans accepter|skip)\b/i,
105
- ];
106
- const PREFERENCES_PATTERNS = [
107
- /\b(param[eè]tres|pr[eé]f[eé]rences|personnaliser|customise|customize|manage|g[eé]rer|options|choose|choisir|configure)\b/i,
108
- ];
108
+ /**
109
+ * Button label patterns keyed by BCP 47 primary-language subtag.
110
+ * English is always included as a fallback when the page language is known.
111
+ * When the language is unknown all locales are tested.
112
+ */
113
+ const PATTERNS_BY_LOCALE = {
114
+ en: {
115
+ accept: /\b(accept|accept all|agree|ok|i accept|i agree|continue)\b/i,
116
+ reject: /\b(refuse|reject|reject all|deny|decline|no thanks|skip|opt[- ]out|continue without)\b/i,
117
+ preferences: /\b(manage|customize|customise|settings|options|choose|configure)\b/i,
118
+ },
119
+ fr: {
120
+ accept: /\b(accepter|acceptez|tout accepter|j'accepte|d'accord|continuer|valider|confirmer)\b/i,
121
+ reject: /\b(refus|refuser|tout refuser|rejeter|tout rejeter|non merci|continuer sans accepter)\b/i,
122
+ preferences: /\b(param[eè]tres|pr[eé]f[eé]rences|personnaliser|g[eé]rer|choisir)\b/i,
123
+ },
124
+ de: {
125
+ accept: /\b(akzeptieren|alle akzeptieren|zustimmen|einverstanden|annehmen|alle annehmen|ich stimme zu)\b/i,
126
+ reject: /\b(ablehnen|alle ablehnen|abweisen|nicht zustimmen|nein danke)\b/i,
127
+ preferences: /\b(einstellungen|anpassen|verwalten|konfigurieren|ausw[äa]hlen|mehr optionen)\b/i,
128
+ },
129
+ es: {
130
+ accept: /\b(aceptar|aceptar todo|acepto|estoy de acuerdo)\b/i,
131
+ reject: /\b(rechazar|rechazar todo|denegar|no gracias|continuar sin aceptar)\b/i,
132
+ preferences: /\b(ajustes|configurar|gestionar|opciones|personalizar|preferencias)\b/i,
133
+ },
134
+ it: {
135
+ accept: /\b(accetta|accetta tutto|accetto|acconsento|acconsento a tutto)\b/i,
136
+ reject: /\b(rifiuta|rifiuta tutto|nega|no grazie)\b/i,
137
+ preferences: /\b(impostazioni|personalizza|gestisci|opzioni|configura|preferenze)\b/i,
138
+ },
139
+ nl: {
140
+ accept: /\b(accepteren|alles accepteren|akkoord|ik ga akkoord)\b/i,
141
+ reject: /\b(weigeren|alles weigeren|afwijzen|nee bedankt)\b/i,
142
+ preferences: /\b(instellingen|aanpassen|beheren|instellen|voorkeuren)\b/i,
143
+ },
144
+ pl: {
145
+ // No \b anchors: Polish words often end in non-ASCII characters (ć, ę, ó)
146
+ // which are outside JS \w, so \b would not match at the word end.
147
+ // Negative lookbehind prevents "zgadzam się" from matching inside "nie zgadzam się".
148
+ accept: /zaakceptuj( wszystkie)?|(?<!nie\s)zgadzam si[eę]|akceptuj[eę]/i,
149
+ reject: /odrzuć( wszystkie)?|nie zgadzam si[eę]|odm[oó]w/i,
150
+ preferences: /ustawienia|dostosuj|zarz[aą]dzaj|opcje|skonfiguruj|preferencje/i,
151
+ },
152
+ pt: {
153
+ accept: /\b(aceitar|aceitar tudo|aceito|concordo)\b/i,
154
+ reject: /\b(rejeitar|rejeitar tudo|recusar|n[aã]o obrigado)\b/i,
155
+ preferences: /\b(configura[çc][oõ]es|personalizar|gerir|op[çc][oõ]es|defini[çc][oõ]es|prefer[eê]ncias)\b/i,
156
+ },
157
+ };
158
+ /**
159
+ * Build the applicable accept/reject/preferences pattern lists for a given
160
+ * primary-language tag detected from the page's <html lang> attribute.
161
+ *
162
+ * - Known language → locale patterns + English fallback
163
+ * - Unknown / missing → all available patterns (most robust)
164
+ */
165
+ function resolveButtonPatterns(lang) {
166
+ if (!lang || !(lang in PATTERNS_BY_LOCALE)) {
167
+ const all = Object.values(PATTERNS_BY_LOCALE);
168
+ return {
169
+ accept: all.map((p) => p.accept),
170
+ reject: all.map((p) => p.reject),
171
+ preferences: all.map((p) => p.preferences),
172
+ };
173
+ }
174
+ const locale = PATTERNS_BY_LOCALE[lang];
175
+ const en = PATTERNS_BY_LOCALE.en;
176
+ const sets = lang === "en" ? [locale] : [locale, en];
177
+ return {
178
+ accept: sets.map((p) => p.accept),
179
+ reject: sets.map((p) => p.reject),
180
+ preferences: sets.map((p) => p.preferences),
181
+ };
182
+ }
183
+ /**
184
+ * Collapse any whitespace sequence (including &nbsp; / \u00A0, \n, \t, …)
185
+ * into a single ASCII space and strip leading/trailing whitespace.
186
+ * In JS, \s already covers \u00A0 and other Unicode spaces.
187
+ */
188
+ function normalizeText(raw) {
189
+ return raw.replace(/\s+/g, " ").trim();
190
+ }
191
+ /**
192
+ * Classify a consent button label for a given page language.
193
+ * `lang` should be the BCP 47 primary subtag (e.g. "de", "fr") read from
194
+ * <html lang>, or null when the language is undetermined.
195
+ */
196
+ export function classifyButtonText(text, lang) {
197
+ const { accept, reject, preferences } = resolveButtonPatterns(lang);
198
+ return classifyButtonType(normalizeText(text), accept, reject, preferences);
199
+ }
109
200
  export async function detectConsentModal(page, options) {
110
- // Try each selector until we find a visible modal
111
201
  let foundSelector = null;
112
- for (const selector of MODAL_SELECTORS) {
202
+ // Step 1 specific CMP selectors: presence in DOM is sufficient.
203
+ // Some CMPs (e.g. Axeptio) insert their container as display:none and
204
+ // animate it in after JS initialisation. Requiring isVisible() would
205
+ // skip them and fall through to a wrong generic selector.
206
+ // Once the element is found we wait briefly (up to 3 s) for it to
207
+ // become visible so button extraction sees an interactive state.
208
+ for (const selector of CMP_SELECTORS) {
113
209
  try {
114
210
  const element = await page.$(selector);
115
211
  if (!element)
116
212
  continue;
117
- const isVisible = await element.isVisible();
118
- if (isVisible) {
119
- foundSelector = selector;
120
- break;
121
- }
213
+ await page.waitForSelector(selector, { state: "visible", timeout: 3000 }).catch(() => { });
214
+ foundSelector = selector;
215
+ break;
122
216
  }
123
217
  catch {
124
218
  continue;
125
219
  }
126
220
  }
221
+ // Step 2 — generic heuristics: require visibility to avoid false positives.
222
+ if (!foundSelector) {
223
+ for (const selector of HEURISTIC_SELECTORS) {
224
+ try {
225
+ const element = await page.$(selector);
226
+ if (!element)
227
+ continue;
228
+ const isVisible = await element.isVisible();
229
+ if (isVisible) {
230
+ foundSelector = selector;
231
+ break;
232
+ }
233
+ }
234
+ catch {
235
+ continue;
236
+ }
237
+ }
238
+ }
127
239
  // Fallback: look for any large fixed/sticky element with cookie-related text
128
240
  if (!foundSelector) {
129
241
  foundSelector = await page.evaluate(() => {
@@ -160,10 +272,13 @@ export async function detectConsentModal(page, options) {
160
272
  privacyPolicyUrl: null,
161
273
  };
162
274
  }
275
+ // Detect the page's declared language for locale-aware button classification
276
+ const rawLang = await page.$eval("html", (el) => el.lang ?? "").catch(() => "");
277
+ const pageLang = rawLang.split("-")[0].toLowerCase() || null;
163
278
  // Extract modal text
164
279
  const modalText = await page.$eval(foundSelector, (el) => el.textContent ?? "").catch(() => "");
165
280
  // Find all buttons and interactive elements within the modal
166
- const buttons = await extractButtons(page, foundSelector);
281
+ const buttons = await extractButtons(page, foundSelector, pageLang);
167
282
  // Find checkboxes / toggles
168
283
  const checkboxes = await extractCheckboxes(page, foundSelector);
169
284
  // Detect if there are nested layers (e.g., "more options" behind a click)
@@ -182,12 +297,13 @@ export async function detectConsentModal(page, options) {
182
297
  privacyPolicyUrl,
183
298
  };
184
299
  }
185
- async function extractButtons(page, modalSelector) {
300
+ async function extractButtons(page, modalSelector, lang) {
301
+ const { accept, reject, preferences } = resolveButtonPatterns(lang);
186
302
  const buttonEls = await page.$$(`${modalSelector} button, ${modalSelector} [role="button"], ${modalSelector} a[href="#"]`);
187
303
  const buttons = [];
188
304
  for (const el of buttonEls) {
189
305
  try {
190
- const text = ((await el.textContent()) ?? "").trim();
306
+ const text = normalizeText((await el.textContent()) ?? "");
191
307
  if (!text)
192
308
  continue;
193
309
  const isVisible = await el.isVisible();
@@ -200,7 +316,7 @@ async function extractButtons(page, modalSelector) {
200
316
  color: style.color,
201
317
  };
202
318
  });
203
- const type = classifyButtonType(text);
319
+ const type = classifyButtonType(text, accept, reject, preferences);
204
320
  // Build a unique selector for this button
205
321
  const selector = await el.evaluate((node) => {
206
322
  const el = node;
@@ -264,12 +380,12 @@ async function extractCheckboxes(page, modalSelector) {
264
380
  }, modalSelector)
265
381
  .catch(() => []);
266
382
  }
267
- function classifyButtonType(text) {
268
- if (ACCEPT_PATTERNS.some((p) => p.test(text)))
383
+ function classifyButtonType(text, accept, reject, preferences) {
384
+ if (accept.some((p) => p.test(text)))
269
385
  return "accept";
270
- if (REJECT_PATTERNS.some((p) => p.test(text)))
386
+ if (reject.some((p) => p.test(text)))
271
387
  return "reject";
272
- if (PREFERENCES_PATTERNS.some((p) => p.test(text)))
388
+ if (preferences.some((p) => p.test(text)))
273
389
  return "preferences";
274
390
  if (/\b(ferm|close|×|✕)\b/i.test(text))
275
391
  return "close";
@@ -279,7 +395,7 @@ function classifyButtonType(text) {
279
395
  * Basic contrast ratio computation from RGB strings.
280
396
  * Returns null if colors cannot be parsed.
281
397
  */
282
- function computeContrastRatio(fg, bg) {
398
+ export function computeContrastRatio(fg, bg) {
283
399
  const fgRgb = parseRgb(fg);
284
400
  const bgRgb = parseRgb(bg);
285
401
  if (!fgRgb || !bgRgb)
@@ -290,13 +406,13 @@ function computeContrastRatio(fg, bg) {
290
406
  const darker = Math.min(fgL, bgL);
291
407
  return parseFloat(((lighter + 0.05) / (darker + 0.05)).toFixed(2));
292
408
  }
293
- function parseRgb(color) {
409
+ export function parseRgb(color) {
294
410
  const match = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
295
411
  if (!match)
296
412
  return null;
297
413
  return [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10)];
298
414
  }
299
- function relativeLuminance([r, g, b]) {
415
+ export function relativeLuminance([r, g, b]) {
300
416
  const toLinear = (c) => {
301
417
  const s = c / 255;
302
418
  return s <= 0.04045 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
@@ -1 +1 @@
1
- {"version":3,"file":"consent-modal.js","sourceRoot":"","sources":["../../src/scanner/consent-modal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consent-modal.js","sourceRoot":"","sources":["../../src/scanner/consent-modal.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO3D,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE/C,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAE3C,GAAG,CAAC,OAAO,GAAE,aAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;CAuLlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO3D,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE/C,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAE3C,GAAG,CAAC,OAAO,GAAE,aAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;CAgMlE"}
@@ -44,9 +44,18 @@ export class Scanner {
44
44
  // ────────────────────────────────────────────────────────────
45
45
  onPhase("Phase 2/4 — Analyzing consent modal...");
46
46
  const modal = await detectConsentModal(session1.page, this.options);
47
- if (this.options.screenshots && this.options.outputDir && modal.detected) {
47
+ if (this.options.outputDir && modal.detected && modal.selector) {
48
48
  const screenshotPath = join(this.options.outputDir, "modal-initial.png");
49
- await session1.page.screenshot({ path: screenshotPath, fullPage: false });
49
+ const box = await session1.page
50
+ .locator(modal.selector)
51
+ .first()
52
+ .boundingBox()
53
+ .catch(() => null);
54
+ const clip = box && box.width > 0 && box.height > 0 ? box : null;
55
+ await session1.page.screenshot({
56
+ path: screenshotPath,
57
+ ...(clip ? { clip } : { fullPage: false }),
58
+ });
50
59
  screenshotPaths.push(screenshotPath);
51
60
  modal.screenshotPath = screenshotPath;
52
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,OAAO,OAAO;IACW;IAA7B,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAErD,KAAK,CAAC,GAAG,CAAC,UAAyB,GAAG,EAAE,GAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,+DAA+D;QAC/D,4DAA4D;QAC5D,+DAA+D;QAC/D,OAAO,CAAC,8CAA8C,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,wBAAwB,CAC3C,QAAQ,CAAC,IAAI,EACb,oBAAoB,EACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACzC,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,yCAAyC;QACzC,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,wBAAwB,GAAG,MAAM,cAAc,CACnD,QAAQ,CAAC,OAAO,EAChB,oBAAoB,EACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QACF,MAAM,wBAAwB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC5D,YAAY,CAAC,IAAI,EAAE,CAAC;QAEpB,6EAA6E;QAC7E,MAAM,gBAAgB,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEnE,+DAA+D;QAC/D,iDAAiD;QACjD,+DAA+D;QAC/D,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI;iBAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;iBACvB,KAAK,EAAE;iBACP,WAAW,EAAE;iBACb,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC7B,IAAI,EAAE,cAAc;gBACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrC,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;QACxC,CAAC;QAED,+DAA+D;QAC/D,8CAA8C;QAC9C,+DAA+D;QAC/D,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,wBAAwB,CAC3C,QAAQ,CAAC,IAAI,EACb,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QAEF,IAAI,kBAAkB,GAAG,wBAAwB,CAAC;QAClD,IAAI,kBAAkB,GAAoC,EAAE,CAAC;QAE7D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACpE,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACzC,kBAAkB,GAAG,MAAM,cAAc,CACvC,QAAQ,CAAC,OAAO,EAChB,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;gBACF,kBAAkB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACxE,CAAC;QACD,YAAY,CAAC,IAAI,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YACxE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE7B,+DAA+D;QAC/D,6DAA6D;QAC7D,+DAA+D;QAC/D,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,wBAAwB,CAC3C,QAAQ,CAAC,IAAI,EACb,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QAEF,IAAI,kBAAkB,GAAoC,EAAE,CAAC;QAC7D,IAAI,kBAAkB,GAAoC,EAAE,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACzC,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,uEAAuE;QACvE,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAErE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACzC,kBAAkB,GAAG,MAAM,cAAc,CACvC,QAAQ,CAAC,OAAO,EAChB,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;gBACF,kBAAkB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,YAAY,CAAC,IAAI,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;YACxE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE7B,+DAA+D;QAC/D,qBAAqB;QACrB,+DAA+D;QAC/D,MAAM,UAAU,GAAG,iBAAiB,CAAC;YACnC,KAAK;YACL,gBAAgB;YAChB,wBAAwB;YACxB,kBAAkB;YAClB,kBAAkB;YAClB,wBAAwB;YACxB,kBAAkB;YAClB,kBAAkB;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;YACrB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAChC,KAAK;YACL,gBAAgB;YAChB,wBAAwB;YACxB,kBAAkB;YAClB,kBAAkB;YAClB,wBAAwB;YACxB,kBAAkB;YAClB,kBAAkB;YAClB,UAAU;YACV,eAAe;YACf,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -80,12 +80,15 @@ export interface ComplianceScore {
80
80
  issues: DarkPatternIssue[];
81
81
  grade: "A" | "B" | "C" | "D" | "F";
82
82
  }
83
- export type ReportFormat = "md" | "html" | "json" | "pdf";
83
+ export type ReportFormat = "md" | "html" | "json" | "pdf" | "csv";
84
84
  export type ViewportPreset = "desktop" | "tablet" | "mobile";
85
85
  export interface ScanOptions {
86
86
  url: string;
87
87
  outputDir?: string;
88
88
  timeout: number;
89
+ /** When true, also capture full-page screenshots after reject and accept interactions.
90
+ * The consent modal is always screenshotted (cropped to the element) when detected,
91
+ * regardless of this flag. Requires outputDir. */
89
92
  screenshots: boolean;
90
93
  locale: string;
91
94
  verbose: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slashgear/gdpr-cookie-scanner",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "description": "CLI tool to scan websites for GDPR cookie consent compliance",
5
5
  "keywords": [
6
6
  "compliance",
@@ -56,7 +56,7 @@
56
56
  "node": ">=24.0.0"
57
57
  },
58
58
  "scripts": {
59
- "build": "tsc",
59
+ "build": "tsc && node scripts/copy-data.mjs",
60
60
  "dev": "tsc --watch",
61
61
  "start": "node dist/cli.js",
62
62
  "lint": "oxlint .",
@@ -68,6 +68,7 @@
68
68
  "test:watch": "vitest",
69
69
  "changeset": "changeset",
70
70
  "update-trackers": "node --experimental-strip-types scripts/update-trackers.ts",
71
- "update-trackers:dry": "node --experimental-strip-types scripts/update-trackers.ts --dry-run"
71
+ "update-trackers:dry": "node --experimental-strip-types scripts/update-trackers.ts --dry-run",
72
+ "update:ocd": "node scripts/update-cookie-db.mjs"
72
73
  }
73
74
  }
@@ -0,0 +1,4 @@
1
+ import { cpSync } from "node:fs";
2
+
3
+ cpSync("src/data", "dist/data", { recursive: true });
4
+ console.log("✔ src/data → dist/data");
@@ -0,0 +1,15 @@
1
+ import { writeFileSync } from "node:fs";
2
+
3
+ const url =
4
+ "https://raw.githubusercontent.com/jkwakman/Open-Cookie-Database/master/open-cookie-database.json";
5
+
6
+ const data = await fetch(url).then((r) => {
7
+ if (!r.ok) throw new Error(`HTTP ${r.status} ${r.statusText}`);
8
+ return r.text();
9
+ });
10
+
11
+ const parsed = JSON.parse(data);
12
+ const count = Object.values(parsed).flat().length;
13
+
14
+ writeFileSync("src/data/open-cookie-database.json", data, "utf-8");
15
+ console.log(`✔ Open Cookie Database updated — ${count} entries`);
@@ -0,0 +1,72 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ export interface OcdEntry {
6
+ description: string;
7
+ platform: string;
8
+ retentionPeriod: string;
9
+ privacyLink: string;
10
+ }
11
+
12
+ interface RawOcdEntry {
13
+ id: string;
14
+ category: string;
15
+ cookie: string;
16
+ domain: string;
17
+ description: string;
18
+ retentionPeriod: string;
19
+ dataController: string;
20
+ privacyLink: string;
21
+ wildcardMatch: string;
22
+ }
23
+
24
+ // Build indexes once at module load time
25
+ const exactIndex = new Map<string, OcdEntry>();
26
+ const wildcardEntries: Array<{ prefix: string; entry: OcdEntry }> = [];
27
+
28
+ function buildIndexes(): void {
29
+ const dbPath = join(dirname(fileURLToPath(import.meta.url)), "../data/open-cookie-database.json");
30
+ const raw = JSON.parse(readFileSync(dbPath, "utf-8")) as Record<string, RawOcdEntry[]>;
31
+
32
+ for (const entries of Object.values(raw)) {
33
+ for (const e of entries) {
34
+ if (!e.cookie) continue;
35
+ const ocdEntry: OcdEntry = {
36
+ description: e.description,
37
+ platform: e.dataController,
38
+ retentionPeriod: e.retentionPeriod,
39
+ privacyLink: e.privacyLink,
40
+ };
41
+ if (e.wildcardMatch === "1") {
42
+ wildcardEntries.push({ prefix: e.cookie.toLowerCase(), entry: ocdEntry });
43
+ } else {
44
+ const key = e.cookie.toLowerCase();
45
+ if (!exactIndex.has(key)) {
46
+ exactIndex.set(key, ocdEntry);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ buildIndexes();
54
+
55
+ export function lookupCookie(name: string): OcdEntry | null {
56
+ const lower = name.toLowerCase();
57
+
58
+ // 1. Exact match
59
+ const exact = exactIndex.get(lower);
60
+ if (exact) return exact;
61
+
62
+ // 2. Wildcard prefix match (longest prefix wins)
63
+ let best: OcdEntry | null = null;
64
+ let bestLen = 0;
65
+ for (const { prefix, entry } of wildcardEntries) {
66
+ if (lower.startsWith(prefix) && prefix.length > bestLen) {
67
+ best = entry;
68
+ bestLen = prefix.length;
69
+ }
70
+ }
71
+ return best;
72
+ }
package/src/cli.ts CHANGED
@@ -20,10 +20,17 @@ program
20
20
  .argument("<url>", "URL of the website to scan")
21
21
  .option("-o, --output <dir>", "Output directory for the report", "./gdpr-reports")
22
22
  .option("-t, --timeout <ms>", "Navigation timeout in milliseconds", "30000")
23
- .option("--no-screenshots", "Disable screenshot capture")
23
+ .option(
24
+ "--screenshots",
25
+ "Capture full-page screenshots after reject and accept interactions (the consent modal is always screenshotted when detected)",
26
+ )
24
27
  .option("-l, --locale <locale>", "Browser locale for language detection", "fr-FR")
25
28
  .option("-v, --verbose", "Show detailed output", false)
26
- .option("-f, --format <formats>", "Output formats: md, html, json, pdf (comma-separated)", "html")
29
+ .option(
30
+ "-f, --format <formats>",
31
+ "Output formats: md, html, json, pdf, csv (comma-separated)",
32
+ "html",
33
+ )
27
34
  .option(
28
35
  "--viewport <preset>",
29
36
  "Viewport preset: desktop (1280×900), tablet (768×1024), mobile (390×844)",
@@ -66,7 +73,7 @@ program
66
73
  console.log(styleText("gray", ` Viewport : ${viewport}`));
67
74
  console.log();
68
75
 
69
- const validFormats = new Set<ReportFormat>(["md", "html", "json", "pdf"]);
76
+ const validFormats = new Set<ReportFormat>(["md", "html", "json", "pdf", "csv"]);
70
77
  const formats = (opts.format as string)
71
78
  .split(",")
72
79
  .map((f) => f.trim().toLowerCase())
@@ -74,7 +81,7 @@ program
74
81
 
75
82
  if (formats.length === 0) {
76
83
  console.error(
77
- styleText("red", " Invalid --format value. Valid options: md, html, json, pdf"),
84
+ styleText("red", " Invalid --format value. Valid options: md, html, json, pdf, csv"),
78
85
  );
79
86
  process.exit(2);
80
87
  }
@@ -83,7 +90,7 @@ program
83
90
  url: normalizedUrl,
84
91
  outputDir,
85
92
  timeout: parseInt(opts.timeout, 10),
86
- screenshots: opts.screenshots !== false,
93
+ screenshots: Boolean(opts.screenshots),
87
94
  locale: opts.locale,
88
95
  verbose: opts.verbose,
89
96
  formats,
@@ -138,6 +145,7 @@ program
138
145
  html: "HTML",
139
146
  json: "JSON",
140
147
  pdf: "PDF",
148
+ csv: "CSV",
141
149
  };
142
150
  for (const [fmt, path] of Object.entries(paths)) {
143
151
  console.log(styleText("green", ` ${(labels[fmt] ?? fmt).padEnd(8)} ${path}`));