privalint 0.6.0 → 0.7.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 (70) hide show
  1. package/NOTICE +25 -0
  2. package/README.de.md +26 -15
  3. package/README.md +34 -25
  4. package/dist/assessment.d.ts +1 -1
  5. package/dist/assessment.js +49 -21
  6. package/dist/assessment.js.map +1 -1
  7. package/dist/capture.d.ts +6 -1
  8. package/dist/capture.js +28 -6
  9. package/dist/capture.js.map +1 -1
  10. package/dist/cli.js +5 -1
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +1 -0
  13. package/dist/config.js +3 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/consent.d.ts +7 -1
  16. package/dist/consent.js +224 -5
  17. package/dist/consent.js.map +1 -1
  18. package/dist/coverage.js +8 -1
  19. package/dist/coverage.js.map +1 -1
  20. package/dist/data/open-cookie-database.d.ts +10 -0
  21. package/dist/data/open-cookie-database.js +1498 -0
  22. package/dist/data/open-cookie-database.js.map +1 -0
  23. package/dist/data/third-parties.js +8 -0
  24. package/dist/data/third-parties.js.map +1 -1
  25. package/dist/data/trackers.d.ts +9 -2
  26. package/dist/data/trackers.js +32 -1
  27. package/dist/data/trackers.js.map +1 -1
  28. package/dist/diagnostics.d.ts +10 -1
  29. package/dist/diagnostics.js +62 -13
  30. package/dist/diagnostics.js.map +1 -1
  31. package/dist/legal.d.ts +1 -1
  32. package/dist/legal.js +21 -3
  33. package/dist/legal.js.map +1 -1
  34. package/dist/network.d.ts +13 -1
  35. package/dist/network.js +72 -10
  36. package/dist/network.js.map +1 -1
  37. package/dist/observations.d.ts +2 -2
  38. package/dist/observations.js +3 -2
  39. package/dist/observations.js.map +1 -1
  40. package/dist/report-contract.d.ts +2 -2
  41. package/dist/report-contract.js +2 -2
  42. package/dist/report-contract.js.map +1 -1
  43. package/dist/reporters/capture.js +20 -0
  44. package/dist/reporters/capture.js.map +1 -1
  45. package/dist/rules/impressum-link.js +1 -1
  46. package/dist/rules/impressum-link.js.map +1 -1
  47. package/dist/rules/index.d.ts +2 -1
  48. package/dist/rules/index.js +3 -1
  49. package/dist/rules/index.js.map +1 -1
  50. package/dist/rules/privacy-policy-link.js +1 -1
  51. package/dist/rules/privacy-policy-link.js.map +1 -1
  52. package/dist/rules/tracker-hits.d.ts +3 -2
  53. package/dist/rules/tracker-hits.js +1 -2
  54. package/dist/rules/tracker-hits.js.map +1 -1
  55. package/dist/rules/trackers-after-settings.d.ts +2 -0
  56. package/dist/rules/trackers-after-settings.js +42 -0
  57. package/dist/rules/trackers-after-settings.js.map +1 -0
  58. package/dist/scan-options.d.ts +5 -0
  59. package/dist/scan-options.js.map +1 -1
  60. package/dist/scanner.js +42 -7
  61. package/dist/scanner.js.map +1 -1
  62. package/dist/types.d.ts +40 -6
  63. package/dist/url.d.ts +7 -3
  64. package/dist/url.js +18 -5
  65. package/dist/url.js.map +1 -1
  66. package/package.json +6 -3
  67. package/schemas/report-1.2.0.schema.json +857 -0
  68. package/schemas/report-1.3.0.schema.json +912 -0
  69. package/schemas/sarif-properties-1.2.0.schema.json +834 -0
  70. package/schemas/sarif-properties-1.3.0.schema.json +888 -0
package/dist/network.js CHANGED
@@ -51,6 +51,22 @@ function failureKind(error, signal, timeout) {
51
51
  return 'timeout';
52
52
  return error instanceof NetworkError ? error.kind : classifyLoadError(error);
53
53
  }
54
+ /**
55
+ * Reports requests the page cancelled itself, from CDP Network.loadingFailed with canceled.
56
+ * The id is the Network request id, which Fetch.requestPaused also carries as networkId.
57
+ */
58
+ export async function watchPageCancellations(session, onCancel) {
59
+ const urls = new Map();
60
+ session.on('Network.requestWillBeSent', (event) => urls.set(event.requestId, event.request.url));
61
+ session.on('Network.loadingFinished', (event) => urls.delete(event.requestId));
62
+ session.on('Network.loadingFailed', (event) => {
63
+ const url = urls.get(event.requestId);
64
+ urls.delete(event.requestId);
65
+ if (event.canceled === true && url !== undefined)
66
+ onCancel(event.requestId, url);
67
+ });
68
+ await session.send('Network.enable');
69
+ }
54
70
  /** Chromium Fetch interception includes redirect hops that Playwright route() auto-continues. */
55
71
  export class ControlledNetwork {
56
72
  adapter;
@@ -60,6 +76,8 @@ export class ControlledNetwork {
60
76
  queue = [];
61
77
  tasks = new Set();
62
78
  sessions = new Map();
79
+ /** Adapter work in progress by Network request id, so a page cancel can stop it. */
80
+ inflight = new Map();
63
81
  active = 0;
64
82
  admitted = 0;
65
83
  closed = false;
@@ -108,6 +126,20 @@ export class ControlledNetwork {
108
126
  this.queue.push(request);
109
127
  this.pump();
110
128
  });
129
+ await watchPageCancellations(session, (networkId, url) => {
130
+ this.diagnostics.cancelledByPage(url);
131
+ const work = this.inflight.get(networkId);
132
+ if (work !== undefined) {
133
+ work.cancelled = true;
134
+ work.controller.abort();
135
+ return;
136
+ }
137
+ // Still waiting for a slot: drop it so the adapter is never asked for it.
138
+ const index = this.queue.findIndex((queued) => queued.event.networkId === networkId);
139
+ const [queued] = index === -1 ? [] : this.queue.splice(index, 1);
140
+ if (queued !== undefined)
141
+ void this.release(queued);
142
+ });
111
143
  await session.send('Fetch.enable', {
112
144
  patterns: [{ urlPattern: '*', requestStage: 'Request' }],
113
145
  });
@@ -130,8 +162,13 @@ export class ControlledNetwork {
130
162
  const { event, session, redirects, redirectCounts } = intercepted;
131
163
  const { request } = event;
132
164
  const controller = new AbortController();
165
+ const work = { controller, cancelled: false };
166
+ if (event.networkId !== undefined)
167
+ this.inflight.set(event.networkId, work);
133
168
  const timeout = AbortSignal.timeout(this.limits.requestTimeoutMs);
134
169
  const signal = AbortSignal.any([this.signal, timeout, controller.signal]);
170
+ let response;
171
+ let body;
135
172
  try {
136
173
  if (!/^https?:$/.test(new URL(request.url).protocol))
137
174
  throw new NetworkError('unsupported-protocol');
@@ -139,7 +176,7 @@ export class ControlledNetwork {
139
176
  throw new NetworkError('resource-limit', 'redirects');
140
177
  if (this.diagnostics.data.bytes >= this.limits.maxTotalBytes)
141
178
  throw new NetworkError('resource-limit', 'total-bytes');
142
- const response = await withSignal(this.adapter({
179
+ response = await withSignal(this.adapter({
143
180
  url: request.url,
144
181
  method: request.method,
145
182
  headers: request.headers,
@@ -147,12 +184,29 @@ export class ControlledNetwork {
147
184
  resourceType: event.resourceType.toLowerCase(),
148
185
  signal,
149
186
  }), signal);
150
- const body = await this.readBody(response.body, signal);
187
+ body = await this.readBody(response.body, signal);
151
188
  signal.throwIfAborted();
152
189
  if (!Number.isInteger(response.status) || response.status < 200 || response.status > 599)
153
190
  throw new NetworkError('browser-failure');
154
- if ([301, 302, 303, 307, 308].includes(response.status))
155
- redirectCounts.set(event.requestId, redirects);
191
+ }
192
+ catch (error) {
193
+ // The page cancelled it: Diagnostics already has the reason, only release the request.
194
+ if (work.cancelled)
195
+ await this.release(intercepted);
196
+ else {
197
+ const kind = failureKind(error, this.signal, timeout);
198
+ await this.abort(intercepted, kind, error instanceof NetworkError ? error.limit : undefined, error instanceof NetworkError ? error.skippedReason : undefined);
199
+ }
200
+ return;
201
+ }
202
+ finally {
203
+ controller.abort();
204
+ if (event.networkId !== undefined)
205
+ this.inflight.delete(event.networkId);
206
+ }
207
+ if ([301, 302, 303, 307, 308].includes(response.status))
208
+ redirectCounts.set(event.requestId, redirects);
209
+ try {
156
210
  await session.send('Fetch.fulfillRequest', {
157
211
  requestId: event.requestId,
158
212
  responseCode: response.status,
@@ -160,14 +214,22 @@ export class ControlledNetwork {
160
214
  body: body.toString('base64'),
161
215
  });
162
216
  }
163
- catch (error) {
164
- const kind = failureKind(error, this.signal, timeout);
165
- await this.abort(intercepted, kind, error instanceof NetworkError ? error.limit : undefined, error instanceof NetworkError ? error.skippedReason : undefined);
166
- }
167
- finally {
168
- controller.abort();
217
+ catch {
218
+ // Fulfilling fails when Chromium no longer holds the request: the page cancelled it, it
219
+ // navigated, or the context is closing. Playwright reports that request as failed, and
220
+ // Diagnostics classifies it there, so recording a reason here would count it twice.
221
+ await this.release(intercepted);
169
222
  }
170
223
  }
224
+ /**
225
+ * Lets a paused request go without a diagnostic of its own. `Failed`, not `Aborted`: Chromium
226
+ * marks ERR_ABORTED as canceled, which would look like the page cancelling it.
227
+ */
228
+ async release(request) {
229
+ await request.session
230
+ .send('Fetch.failRequest', { requestId: request.event.requestId, errorReason: 'Failed' })
231
+ .catch(() => { });
232
+ }
171
233
  async readBody(body, signal) {
172
234
  const chunks = [];
173
235
  let size = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { RecordedRequest } from './types.js';
2
2
  /**
3
3
  * Legacy records remain valid; failed, pending and HTTP-error responses are not loaded vendors.
4
- * An omitted beacon still counts: the page tried to send data to that host, which is what the
5
- * tracker rules look for.
4
+ * An omitted beacon or a request the page cancelled itself still counts: the page tried to
5
+ * contact that host, which is what the tracker rules look for.
6
6
  */
7
7
  export declare const observedRequests: (requests: readonly RecordedRequest[]) => RecordedRequest[];
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Legacy records remain valid; failed, pending and HTTP-error responses are not loaded vendors.
3
- * An omitted beacon still counts: the page tried to send data to that host, which is what the
4
- * tracker rules look for.
3
+ * An omitted beacon or a request the page cancelled itself still counts: the page tried to
4
+ * contact that host, which is what the tracker rules look for.
5
5
  */
6
6
  export const observedRequests = (requests) => requests.filter((request) => request.outcome === undefined ||
7
7
  request.skippedReason === 'beacon' ||
8
+ request.skippedReason === 'cancelled-by-page' ||
8
9
  (request.outcome === 'response' && (request.status ?? 200) < 400));
9
10
  //# sourceMappingURL=observations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observations.js","sourceRoot":"","sources":["../src/observations.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAqB,EAAE,CAC1F,QAAQ,CAAC,MAAM,CACb,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,OAAO,KAAK,SAAS;IAC7B,OAAO,CAAC,aAAa,KAAK,QAAQ;IAClC,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CACpE,CAAC"}
1
+ {"version":3,"file":"observations.js","sourceRoot":"","sources":["../src/observations.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAqB,EAAE,CAC1F,QAAQ,CAAC,MAAM,CACb,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,OAAO,KAAK,SAAS;IAC7B,OAAO,CAAC,aAAa,KAAK,QAAQ;IAClC,OAAO,CAAC,aAAa,KAAK,mBAAmB;IAC7C,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CACpE,CAAC"}
@@ -1,5 +1,5 @@
1
- export declare const REPORT_SCHEMA_VERSION = "1.1.0";
2
- export declare const SUPPORTED_REPORT_SCHEMAS: readonly ['1.0.0', "1.1.0"];
1
+ export declare const REPORT_SCHEMA_VERSION = "1.3.0";
2
+ export declare const SUPPORTED_REPORT_SCHEMAS: readonly ['1.0.0', '1.1.0', '1.2.0', "1.3.0"];
3
3
  export type ReportSchemaIdentity = {
4
4
  kind: 'legacy';
5
5
  } | {
@@ -1,5 +1,5 @@
1
- export const REPORT_SCHEMA_VERSION = '1.1.0';
2
- export const SUPPORTED_REPORT_SCHEMAS = ['1.0.0', REPORT_SCHEMA_VERSION];
1
+ export const REPORT_SCHEMA_VERSION = '1.3.0';
2
+ export const SUPPORTED_REPORT_SCHEMAS = ['1.0.0', '1.1.0', '1.2.0', REPORT_SCHEMA_VERSION];
3
3
  /** Classification only, not structural validation. Never upgrades legacy data to success. */
4
4
  export function identifyReportSchema(value) {
5
5
  if (typeof value !== 'object' || value === null || Array.isArray(value))
@@ -1 +1 @@
1
- {"version":3,"file":"report-contract.js","sourceRoot":"","sources":["../src/report-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAU,CAAC;AAOlF,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAChE,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC;QACxE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"report-contract.js","sourceRoot":"","sources":["../src/report-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAU,CAAC;AAOpG,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAChE,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC;QACxE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC"}
@@ -57,6 +57,26 @@ const EXPLANATIONS = {
57
57
  'Kein Banner, und nichts Einwilligungspflichtiges geladen',
58
58
  ],
59
59
  'missing-reject-observation': ['Reject path not observed', 'Ablehnen-Pfad nicht beobachtet'],
60
+ 'settings-check-disabled': [
61
+ 'Settings check not enabled (--check-settings)',
62
+ 'Einstellungs-Prüfung nicht eingeschaltet (--check-settings)',
63
+ ],
64
+ 'missing-settings-observation': [
65
+ 'Settings path not observed',
66
+ 'Einstellungs-Pfad nicht beobachtet',
67
+ ],
68
+ 'no-settings-control': [
69
+ 'No control found that opens the settings',
70
+ 'Kein Bedienelement gefunden, das die Einstellungen öffnet',
71
+ ],
72
+ 'no-save-control': [
73
+ 'Settings opened, but no save button found',
74
+ 'Einstellungen geöffnet, aber keine Speichern-Schaltfläche gefunden',
75
+ ],
76
+ 'settings-saved-and-reloaded': [
77
+ 'Settings saved with everything off and reloaded',
78
+ 'Einstellungen ohne Auswahl gespeichert und neu geladen',
79
+ ],
60
80
  'missing-consent-observation': ['Consent not observed', 'Consent nicht beobachtet'],
61
81
  'incomplete-document': [
62
82
  'Document observation incomplete',
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/reporters/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/reporters/capture.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ const ID = 'impressum-link';
6
6
  * Matched against the visible text and the URL path, so `/impressum`
7
7
  * behind an icon-only link is still found.
8
8
  */
9
- const LEGAL_NOTICE = /impressum|imprint|legal[\s_-]?notice|site[\s_-]?notice|anbieterkennzeichnung|mentions[\s_-]?l[eé]gales|aviso[\s_-]?legal|note[\s_-]?legali|colofon|informacje[\s_-]?prawne/i;
9
+ const LEGAL_NOTICE = /impressum|imprint|legal[\s_-]?notice|site[\s_-]?notice|anbieterkennzeichnung|mentions[\s_-]?l[eé]gales|aviso[\s_-]?legal|note[\s_-]?legali|colofon|informacje[\s_-]?prawne|impresszum/i;
10
10
  const CONTACT = /kontakt|contact/i;
11
11
  export const impressumLink = {
12
12
  id: ID,
@@ -1 +1 @@
1
- {"version":3,"file":"impressum-link.js","sourceRoot":"","sources":["../../src/rules/impressum-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,YAAY,GAChB,6KAA6K,CAAC;AAEhL,MAAM,OAAO,GAAG,kBAAkB,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,wFAAwF;QACxF,yFAAyF;QACzF,wEAAwE;IAC1E,UAAU,EAAE,CAAC,SAAS,EAAE,kCAAkC,CAAC;IAC3D,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;gBACL;oBACE,MAAM,EAAE,EAAE;oBACV,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;wBACjB,EAAE,EAAE,gDAAgD;wBACpD,EAAE,EAAE,qDAAqD;qBAC1D,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;oBACpF,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;wBACb,EAAE,EAAE,4JAA4J;wBAChK,EAAE,EAAE,6JAA6J;qBAClK,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,iEAAiE;oBACrE,EAAE,EAAE,+DAA+D;iBACpE,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EAAE,yGAAyG;oBAC7G,EAAE,EAAE,oGAAoG;iBACzG,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"impressum-link.js","sourceRoot":"","sources":["../../src/rules/impressum-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,YAAY,GAChB,wLAAwL,CAAC;AAE3L,MAAM,OAAO,GAAG,kBAAkB,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,wFAAwF;QACxF,yFAAyF;QACzF,wEAAwE;IAC1E,UAAU,EAAE,CAAC,SAAS,EAAE,kCAAkC,CAAC;IAC3D,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;gBACL;oBACE,MAAM,EAAE,EAAE;oBACV,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;wBACjB,EAAE,EAAE,gDAAgD;wBACpD,EAAE,EAAE,qDAAqD;qBAC1D,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;oBACpF,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;wBACb,EAAE,EAAE,4JAA4J;wBAChK,EAAE,EAAE,6JAA6J;qBAClK,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,iEAAiE;oBACrE,EAAE,EAAE,+DAA+D;iBACpE,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EAAE,yGAAyG;oBAC7G,EAAE,EAAE,oGAAoG;iBACzG,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -9,5 +9,6 @@ import { rejectOption } from './reject-option.js';
9
9
  import { thirdPartyCdns } from './third-party-cdns.js';
10
10
  import { thirdPartyEmbeds } from './third-party-embeds.js';
11
11
  import { trackersAfterReject } from './trackers-after-reject.js';
12
+ import { trackersAfterSettings } from './trackers-after-settings.js';
12
13
  export declare const defaultRules: readonly Rule[];
13
- export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
14
+ export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, trackersAfterSettings, };
@@ -8,9 +8,11 @@ import { rejectOption } from './reject-option.js';
8
8
  import { thirdPartyCdns } from './third-party-cdns.js';
9
9
  import { thirdPartyEmbeds } from './third-party-embeds.js';
10
10
  import { trackersAfterReject } from './trackers-after-reject.js';
11
+ import { trackersAfterSettings } from './trackers-after-settings.js';
11
12
  export const defaultRules = [
12
13
  preConsentTrackers,
13
14
  trackersAfterReject,
15
+ trackersAfterSettings,
14
16
  rejectOption,
15
17
  consentSettingsLink,
16
18
  googleFonts,
@@ -20,5 +22,5 @@ export const defaultRules = [
20
22
  impressumLink,
21
23
  privacyPolicyLink,
22
24
  ];
23
- export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
25
+ export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, trackersAfterSettings, };
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,kBAAkB;IAClB,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC;AAEF,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACpB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC;AAEF,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,GACtB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { say } from '../i18n.js';
2
2
  import { linkMatches, linksChecked } from './links.js';
3
3
  const ID = 'privacy-policy-link';
4
- const PRIVACY_POLICY = /datenschutz|privacy|data[\s_-]?protection|confidentialit|privacidad|protezione[\s_-]?dei[\s_-]?dati|privacybeleid|polityka[\s_-]?prywatno/i;
4
+ const PRIVACY_POLICY = /datenschutz|privacy|data[\s_-]?protection|confidentialit|privacidad|protezione[\s_-]?dei[\s_-]?dati|privacybeleid|polityka[\s_-]?prywatno|adatv[eé]del|adatkezel/i;
5
5
  export const privacyPolicyLink = {
6
6
  id: ID,
7
7
  title: 'No link to a privacy policy',
@@ -1 +1 @@
1
- {"version":3,"file":"privacy-policy-link.js","sourceRoot":"","sources":["../../src/rules/privacy-policy-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,EAAE,GAAG,qBAAqB,CAAC;AAEjC,MAAM,cAAc,GAClB,4IAA4I,CAAC;AAE/I,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,6BAA6B;IACpC,WAAW,EACT,6FAA6F;QAC7F,iGAAiG;IACnG,UAAU,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;IAC5C,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,qDAAqD;oBACzD,EAAE,EAAE,qEAAqE;iBAC1E,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EAAE,uGAAuG;oBAC3G,EAAE,EAAE,qGAAqG;iBAC1G,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"privacy-policy-link.js","sourceRoot":"","sources":["../../src/rules/privacy-policy-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,EAAE,GAAG,qBAAqB,CAAC;AAEjC,MAAM,cAAc,GAClB,mKAAmK,CAAC;AAEtK,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,6BAA6B;IACpC,WAAW,EACT,6FAA6F;QAC7F,iGAAiG;IACnG,UAAU,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;IAC5C,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,qDAAqD;oBACzD,EAAE,EAAE,qEAAqE;iBAC1E,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EAAE,uGAAuG;oBAC3G,EAAE,EAAE,qGAAqG;iBAC1G,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,8 +1,9 @@
1
- import { type Tracker, type TrackerCategory } from '../data/trackers.js';
1
+ import { type CookieTracker, type TrackerCategory } from '../data/trackers.js';
2
2
  import { type Lang } from '../i18n.js';
3
3
  import type { RecordedCookie, RecordedRequest } from '../types.js';
4
4
  export interface TrackerHit {
5
- tracker: Tracker;
5
+ /** A full tracker for host matches; cookie matches from the generated list have no hosts. */
6
+ tracker: CookieTracker;
6
7
  /** Up to five request URLs and cookie names, deduplicated. */
7
8
  evidence: string[];
8
9
  }
@@ -18,8 +18,7 @@ export function findTrackerHits(requests, cookies, lang) {
18
18
  }
19
19
  }
20
20
  for (const cookie of cookies) {
21
- const tracker = findTrackerByCookie(cookie.name) ??
22
- findTrackerByUrl(`https://${cookie.domain.replace(/^\./, '')}/`);
21
+ const tracker = findTrackerByCookie(cookie.name, cookie.domain);
23
22
  if (tracker !== undefined) {
24
23
  record(tracker, `cookie ${cookie.name} (${cookie.domain})`);
25
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tracker-hits.js","sourceRoot":"","sources":["../../src/rules/tracker-hits.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAa,GAAG,EAAa,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,YAAY,GAAG,CAAC,CAAC;AAQvB,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAC7B,QAAoC,EACpC,OAAkC,EAClC,IAAU;IAEV,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuD,CAAC;IAC5E,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAE,QAAgB,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC;QACjF,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GACX,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,gBAAgB,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO;QACP,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,eAAe,GAAkC;IACrD,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE;IAC7C,WAAW,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE;IACjD,gBAAgB,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE;IAChE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE;IAC5C,sBAAsB,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,2BAA2B,EAAE;IACvF,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAyB,EAAE,IAAU,EAAE,EAAE,CACrE,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"tracker-hits.js","sourceRoot":"","sources":["../../src/rules/tracker-hits.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAa,GAAG,EAAa,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,YAAY,GAAG,CAAC,CAAC;AASvB,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAC7B,QAAoC,EACpC,OAAkC,EAClC,IAAU;IAEV,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6D,CAAC;IAClF,MAAM,MAAM,GAAG,CAAC,OAAsB,EAAE,QAAgB,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC;QACjF,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO;QACP,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,eAAe,GAAkC;IACrD,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE;IAC7C,WAAW,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE;IACjD,gBAAgB,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE;IAChE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE;IAC5C,sBAAsB,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,2BAA2B,EAAE;IACvF,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAyB,EAAE,IAAU,EAAE,EAAE,CACrE,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from '../types.js';
2
+ export declare const trackersAfterSettings: Rule;
@@ -0,0 +1,42 @@
1
+ import { say } from '../i18n.js';
2
+ import { categoryLabel, findTrackerHits } from './tracker-hits.js';
3
+ const ID = 'trackers-after-settings';
4
+ export const trackersAfterSettings = {
5
+ id: ID,
6
+ title: 'Trackers run after the visitor switched everything off in the settings',
7
+ description: 'Opt-in check. privalint opens the settings layer of the consent banner on the start page ' +
8
+ 'in a fresh browser, switches off every optional category, saves, reloads the page and ' +
9
+ 'records what still loads. Anything on the tracker list that loads or sets new cookies ' +
10
+ 'after that ignores the visitor’s choice.',
11
+ references: ['§ 25 Abs. 1 TDDDG', 'Art. 6(1)(a) GDPR', 'Art. 7(3) GDPR'],
12
+ requires: ['after-settings'],
13
+ check({ page, lang }) {
14
+ const settings = page.consent?.settings;
15
+ const after = settings?.afterSave;
16
+ if (after === undefined) {
17
+ return [];
18
+ }
19
+ const button = settings?.saveLabel ?? say(lang, { en: 'save', de: 'Speichern' });
20
+ return findTrackerHits(after.requests, after.cookies, lang).map(({ tracker, evidence }) => {
21
+ const { vendor } = tracker;
22
+ const category = categoryLabel(tracker.category, lang);
23
+ return {
24
+ ruleId: ID,
25
+ // Same reasoning as trackers-after-reject: the container alone may be configured correctly.
26
+ severity: tracker.category === 'tag-manager' ? 'warning' : 'error',
27
+ message: say(lang, {
28
+ en: `${vendor} (${category}) still runs after switching off all categories and clicking "${button}".`,
29
+ de: `${vendor} (${category}) läuft weiter, obwohl alle Kategorien abgewählt und „${button}“ geklickt wurde.`,
30
+ }),
31
+ pageUrl: page.finalUrl,
32
+ subject: vendor,
33
+ evidence,
34
+ fix: say(lang, {
35
+ en: `Check that ${vendor} belongs to a category the visitor can switch off in your consent manager, and that saving the settings blocks it the same way rejecting does.`,
36
+ de: `Prüfen, ob ${vendor} im Consent-Tool einer abwählbaren Kategorie zugeordnet ist und das Speichern der Einstellungen es genauso blockiert wie das Ablehnen.`,
37
+ }),
38
+ };
39
+ });
40
+ },
41
+ };
42
+ //# sourceMappingURL=trackers-after-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackers-after-settings.js","sourceRoot":"","sources":["../../src/rules/trackers-after-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,EAAE,GAAG,yBAAyB,CAAC;AAErC,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,wEAAwE;IAC/E,WAAW,EACT,2FAA2F;QAC3F,wFAAwF;QACxF,wFAAwF;QACxF,0CAA0C;IAC5C,UAAU,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;IACxE,QAAQ,EAAE,CAAC,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,SAAS,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACjF,OAAO,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAC7D,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAW,EAAE;YACjC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAC3B,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,4FAA4F;gBAC5F,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBAClE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,GAAG,MAAM,KAAK,QAAQ,iEAAiE,MAAM,IAAI;oBACrG,EAAE,EAAE,GAAG,MAAM,KAAK,QAAQ,yDAAyD,MAAM,mBAAmB;iBAC7G,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,OAAO,EAAE,MAAM;gBACf,QAAQ;gBACR,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EAAE,cAAc,MAAM,gJAAgJ;oBACxK,EAAE,EAAE,cAAc,MAAM,wIAAwI;iBACjK,CAAC;aACH,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -23,6 +23,11 @@ export interface ScanOptions {
23
23
  /** Legacy test helper: third-party requests receive synthetic empty responses. */
24
24
  offline?: boolean;
25
25
  consentCheck?: boolean | undefined;
26
+ /**
27
+ * Also open the banner's settings layer, switch off every optional category and save, in a
28
+ * second capture of the start page. Off by default: it loads the start page once more.
29
+ */
30
+ settingsCheck?: boolean | undefined;
26
31
  headed?: boolean | undefined;
27
32
  channel?: string | undefined;
28
33
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scan-options.js","sourceRoot":"","sources":["../src/scan-options.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;CAChB,CAAC"}
1
+ {"version":3,"file":"scan-options.js","sourceRoot":"","sources":["../src/scan-options.ts"],"names":[],"mappings":"AAkDA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;CAChB,CAAC"}
package/dist/scanner.js CHANGED
@@ -29,9 +29,11 @@ async function launchBrowser(options) {
29
29
  if (!sandbox)
30
30
  throw error;
31
31
  // Chromium's own message ("No usable sandbox!") does not say what to change.
32
- throw new Error('Chromium could not start with its sandbox. On Linux this usually means unprivileged user ' +
33
- 'namespaces are restricted (Ubuntu 23.10 and later, many containers). Allow them for ' +
34
- 'Chromium or run without --sandbox; see ' +
32
+ throw new Error('Chromium could not start with its sandbox. It needs unprivileged user namespaces. ' +
33
+ 'In a Docker container the default seccomp profile blocks them: run the container with ' +
34
+ 'a seccomp profile that allows them (see Docker’s seccomp docs) or run privalint ' +
35
+ 'without --sandbox. On Ubuntu 23.10 and later, AppArmor restricts them unless Chromium ' +
36
+ 'is allowed to use them: ' +
35
37
  'https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md', { cause: error });
36
38
  }
37
39
  }
@@ -111,9 +113,15 @@ export async function scan(target, options = {}) {
111
113
  throw error;
112
114
  }
113
115
  },
114
- }, isStart).then((snapshot) => {
116
+ }, isStart ? 'reject' : 'none').then(async (snapshot) => {
115
117
  if (progressFailure)
116
118
  throw progressFailure.error;
119
+ if (isStart &&
120
+ options.settingsCheck === true &&
121
+ options.consentCheck !== false &&
122
+ snapshot.consent?.bannerFound === true) {
123
+ snapshot.consent.settings = await checkSettings(browser, url, siteUrl, options);
124
+ }
117
125
  return { url, snapshot, isStart, pageIndex, captureId };
118
126
  });
119
127
  // Awaited in queue order below; this only keeps a page that fails while an earlier one is
@@ -180,7 +188,7 @@ export async function scan(target, options = {}) {
180
188
  ...(page.pageId === undefined ? {} : { pageId: page.pageId }),
181
189
  pageUrl: diagnosticUrl(page.finalUrl),
182
190
  });
183
- return assessPage(page, rules, siteUrl, lang, index === 0, options.consentCheck !== false, configuredRules);
191
+ return assessPage(page, rules, siteUrl, lang, index === 0, options.consentCheck !== false, configuredRules, options.settingsCheck === true);
184
192
  });
185
193
  const partial = assessments.some((assessment) => assessment.evaluations.some((evaluation) => evaluation.partial || evaluation.reason === 'consent-disabled')) || snapshots.some((page) => !page.capture?.complete);
186
194
  const result = {
@@ -196,6 +204,7 @@ export async function scan(target, options = {}) {
196
204
  lang,
197
205
  region,
198
206
  consentCheck: options.consentCheck !== false,
207
+ settingsCheck: options.settingsCheck === true,
199
208
  headed: options.headed === true,
200
209
  channel: options.channel ?? 'chromium',
201
210
  sandbox: options.sandbox === true,
@@ -240,11 +249,24 @@ export async function scan(target, options = {}) {
240
249
  await browser.close();
241
250
  }
242
251
  }
252
+ /** Runs the settings path on the start page in a fresh context, after the reject path. */
253
+ async function checkSettings(browser, url, siteUrl, options) {
254
+ const capture = await capturePage(browser, url, siteUrl, options, 'settings');
255
+ return (capture.consent?.settings ?? {
256
+ outcome: 'interaction-failed',
257
+ reason: 'browser-interaction-failed',
258
+ // The banner showed in the first context but not in this one.
259
+ error: capture.error ?? 'browser-failure',
260
+ });
261
+ }
243
262
  function consentSummary(start) {
244
263
  if (start?.consent === undefined)
245
264
  return {};
246
- const { afterReject: _afterReject, ...summary } = start.consent;
247
- return { consent: summary };
265
+ const { afterReject: _afterReject, settings, ...summary } = start.consent;
266
+ if (settings === undefined)
267
+ return { consent: summary };
268
+ const { afterSave: _afterSave, ...settingsSummary } = settings;
269
+ return { consent: { ...summary, settings: settingsSummary } };
248
270
  }
249
271
  /** Adapter reports omit URL credentials, paths, queries and fragments by default. */
250
272
  function redactReport(result) {
@@ -263,6 +285,19 @@ function redactReport(result) {
263
285
  ...(result.consent.rejectLabel === undefined
264
286
  ? {}
265
287
  : { rejectLabel: redactText(result.consent.rejectLabel) }),
288
+ ...(result.consent.settings === undefined
289
+ ? {}
290
+ : {
291
+ settings: {
292
+ ...result.consent.settings,
293
+ ...(result.consent.settings.openLabel === undefined
294
+ ? {}
295
+ : { openLabel: redactText(result.consent.settings.openLabel) }),
296
+ ...(result.consent.settings.saveLabel === undefined
297
+ ? {}
298
+ : { saveLabel: redactText(result.consent.settings.saveLabel) }),
299
+ },
300
+ }),
266
301
  },
267
302
  }),
268
303
  pages: result.pages.map((page) => ({