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.
- package/NOTICE +25 -0
- package/README.de.md +26 -15
- package/README.md +34 -25
- package/dist/assessment.d.ts +1 -1
- package/dist/assessment.js +49 -21
- package/dist/assessment.js.map +1 -1
- package/dist/capture.d.ts +6 -1
- package/dist/capture.js +28 -6
- package/dist/capture.js.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/consent.d.ts +7 -1
- package/dist/consent.js +224 -5
- package/dist/consent.js.map +1 -1
- package/dist/coverage.js +8 -1
- package/dist/coverage.js.map +1 -1
- package/dist/data/open-cookie-database.d.ts +10 -0
- package/dist/data/open-cookie-database.js +1498 -0
- package/dist/data/open-cookie-database.js.map +1 -0
- package/dist/data/third-parties.js +8 -0
- package/dist/data/third-parties.js.map +1 -1
- package/dist/data/trackers.d.ts +9 -2
- package/dist/data/trackers.js +32 -1
- package/dist/data/trackers.js.map +1 -1
- package/dist/diagnostics.d.ts +10 -1
- package/dist/diagnostics.js +62 -13
- package/dist/diagnostics.js.map +1 -1
- package/dist/legal.d.ts +1 -1
- package/dist/legal.js +21 -3
- package/dist/legal.js.map +1 -1
- package/dist/network.d.ts +13 -1
- package/dist/network.js +72 -10
- package/dist/network.js.map +1 -1
- package/dist/observations.d.ts +2 -2
- package/dist/observations.js +3 -2
- package/dist/observations.js.map +1 -1
- package/dist/report-contract.d.ts +2 -2
- package/dist/report-contract.js +2 -2
- package/dist/report-contract.js.map +1 -1
- package/dist/reporters/capture.js +20 -0
- package/dist/reporters/capture.js.map +1 -1
- package/dist/rules/impressum-link.js +1 -1
- package/dist/rules/impressum-link.js.map +1 -1
- package/dist/rules/index.d.ts +2 -1
- package/dist/rules/index.js +3 -1
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/privacy-policy-link.js +1 -1
- package/dist/rules/privacy-policy-link.js.map +1 -1
- package/dist/rules/tracker-hits.d.ts +3 -2
- package/dist/rules/tracker-hits.js +1 -2
- package/dist/rules/tracker-hits.js.map +1 -1
- package/dist/rules/trackers-after-settings.d.ts +2 -0
- package/dist/rules/trackers-after-settings.js +42 -0
- package/dist/rules/trackers-after-settings.js.map +1 -0
- package/dist/scan-options.d.ts +5 -0
- package/dist/scan-options.js.map +1 -1
- package/dist/scanner.js +42 -7
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +40 -6
- package/dist/url.d.ts +7 -3
- package/dist/url.js +18 -5
- package/dist/url.js.map +1 -1
- package/package.json +6 -3
- package/schemas/report-1.2.0.schema.json +857 -0
- package/schemas/report-1.3.0.schema.json +912 -0
- package/schemas/sarif-properties-1.2.0.schema.json +834 -0
- package/schemas/sarif-properties-1.3.0.schema.json +888 -0
package/NOTICE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
privalint
|
|
2
|
+
Copyright (c) 2026 JExcellence
|
|
3
|
+
|
|
4
|
+
privalint is licensed under the MIT License (see LICENSE). It includes data from the following
|
|
5
|
+
third-party source, which keeps its own licence.
|
|
6
|
+
|
|
7
|
+
-------------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
Open Cookie Database
|
|
10
|
+
https://github.com/jkwakman/Open-Cookie-Database
|
|
11
|
+
Author: Jack Kwakman and contributors
|
|
12
|
+
Licence: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
|
13
|
+
Commit used: 81813835edc9682113a4d95989358da5256d30c1
|
|
14
|
+
|
|
15
|
+
src/data/open-cookie-database.ts (and its compiled form in dist/data/) is derived from
|
|
16
|
+
open-cookie-database.csv at the commit above. It was generated by
|
|
17
|
+
scripts/build-cookie-trackers.mjs, which keeps only the Analytics and Marketing rows, keeps only
|
|
18
|
+
the cookie name, platform, category and wildcard flag of each row, drops short, generic and
|
|
19
|
+
consent-related names, and groups the rest by platform.
|
|
20
|
+
|
|
21
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this data except
|
|
22
|
+
in compliance with the License. Unless required by applicable law or agreed to in writing, the
|
|
23
|
+
data is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
|
24
|
+
express or implied. See the License for the specific language governing permissions and
|
|
25
|
+
limitations under the License.
|
package/README.de.md
CHANGED
|
@@ -31,6 +31,7 @@ nicht, welches Recht für eine Website anwendbar ist. Befunde sind keine rechtli
|
|
|
31
31
|
| `de` (Standard) | Opt-in, § 25 TDDDG | § 5 DDG | – |
|
|
32
32
|
| `at` | Opt-in, § 165 Abs. 3 TKG 2021 | § 5 ECG, § 25 MedienG | – |
|
|
33
33
|
| `ch` | Opt-out, Art. 45c FMG | Art. 3 Abs. 1 lit. s UWG (bei Online-Angeboten) | Tracker, Einbindungen und Impressum eine Stufe milder |
|
|
34
|
+
| `hu` | Opt-in, Eht. 155. § (4) | Ekertv. 4. § | – |
|
|
34
35
|
| `eu` | Opt-in, Art. 5 Abs. 3 ePrivacy-Richtlinie | Art. 5 E-Commerce-Richtlinie | – |
|
|
35
36
|
|
|
36
37
|
Tracker, die nach einem ausdrücklichen „Ablehnen“ weiterlaufen, bleiben überall ein Fehler, auch in
|
|
@@ -43,20 +44,21 @@ npx privalint https://ihre-seite.at --region at --lang de --max-pages 20
|
|
|
43
44
|
|
|
44
45
|
## Was geprüft wird
|
|
45
46
|
|
|
46
|
-
| Regel
|
|
47
|
-
|
|
|
48
|
-
| `pre-consent-trackers`
|
|
49
|
-
| `trackers-after-reject`
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `third-party-
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
| Regel | Was sie findet |
|
|
48
|
+
| --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| [`pre-consent-trackers`](docs/rules/pre-consent-trackers.de.md) | Analyse-, Werbe- und Session-Replay-Tools, die vor der Einwilligung Anfragen senden oder Cookies setzen |
|
|
50
|
+
| [`trackers-after-reject`](docs/rules/trackers-after-reject.de.md) | Tracker, die nach Klick auf „Ablehnen“ und Neuladen weiterlaufen |
|
|
51
|
+
| [`trackers-after-settings`](docs/rules/trackers-after-settings.de.md) | Optional (`--check-settings`): Tracker, die laufen, obwohl in den Banner-Einstellungen alles abgewählt und gespeichert wurde |
|
|
52
|
+
| [`reject-option`](docs/rules/reject-option.de.md) | Cookie-Banner mit „Zustimmen“, aber ohne „Ablehnen“ auf der ersten Ebene; Pur-Abo-Modelle als Hinweis |
|
|
53
|
+
| [`consent-settings-link`](docs/rules/consent-settings-link.de.md) | Kein sichtbarer Link oder Button, um die Cookie-Einstellungen nach dem Ablehnen wieder zu öffnen |
|
|
54
|
+
| [`google-fonts`](docs/rules/google-fonts.de.md) | Schriften von `fonts.googleapis.com` / `fonts.gstatic.com` |
|
|
55
|
+
| [`adobe-fonts`](docs/rules/adobe-fonts.de.md) | Schriften von Adobe Fonts (`use.typekit.net` / `p.typekit.net`) |
|
|
56
|
+
| [`third-party-embeds`](docs/rules/third-party-embeds.de.md) | YouTube, Vimeo, Google Maps, reCAPTCHA, Gravatar und Social-Media-Einbindungen vor der Einwilligung |
|
|
57
|
+
| [`third-party-cdns`](docs/rules/third-party-cdns.de.md) | Skripte und Styles von jsDelivr, unpkg, cdnjs und anderen öffentlichen CDNs (Hinweis) |
|
|
58
|
+
| [`impressum-link`](docs/rules/impressum-link.de.md) | Seiten ohne Link zum Impressum |
|
|
59
|
+
| [`privacy-policy-link`](docs/rules/privacy-policy-link.de.md) | Seiten ohne Link zur Datenschutzerklärung |
|
|
60
|
+
|
|
61
|
+
Details, Hintergründe und Lösungen stehen auf den verlinkten Regelseiten in [`docs/rules`](docs/rules).
|
|
60
62
|
|
|
61
63
|
## GitHub Action
|
|
62
64
|
|
|
@@ -115,9 +117,17 @@ Weiterführend:
|
|
|
115
117
|
Banner gefunden“. Lokal hilft `--headed --channel msedge` (oder `chrome`).
|
|
116
118
|
- Viele Consent-Tools entscheiden anhand der IP-Adresse, ob sie ein Banner zeigen. GitHub-Runner
|
|
117
119
|
haben US-Adressen und sehen deshalb unter Umständen etwas anderes als Besucher aus der EU.
|
|
120
|
+
- Tracker erkennt privalint über eine handgepflegte Liste
|
|
121
|
+
([`src/data/trackers.ts`](src/data/trackers.ts)). Cookies, die dort fehlen, werden zusätzlich
|
|
122
|
+
mit den Analyse- und Marketing-Cookies der
|
|
123
|
+
[Open Cookie Database](https://github.com/jkwakman/Open-Cookie-Database) abgeglichen
|
|
124
|
+
(Apache-2.0, siehe [NOTICE](NOTICE)), nur über den Cookie-Namen und ohne kurze, generische oder
|
|
125
|
+
Einwilligungs-Cookies.
|
|
118
126
|
- Serverseitiges Tracking ist im Browser nicht sichtbar.
|
|
119
127
|
- Chromium läuft standardmäßig ohne seine Sandbox, weil sie in vielen Containern nicht startet.
|
|
120
128
|
Wer fremde Seiten auf einem Rechner mit Zugangsdaten prüft, sollte `--sandbox` setzen.
|
|
129
|
+
Die Sandbox braucht unprivilegierte User-Namespaces. In Docker-Containern blockiert sie das
|
|
130
|
+
Standard-Seccomp-Profil, unter Ubuntu ab 23.10 schränkt AppArmor sie ein.
|
|
121
131
|
|
|
122
132
|
## Mitmachen
|
|
123
133
|
|
|
@@ -142,4 +152,5 @@ anderen, es zu finden.
|
|
|
142
152
|
|
|
143
153
|
## Lizenz
|
|
144
154
|
|
|
145
|
-
[MIT](LICENSE)
|
|
155
|
+
[MIT](LICENSE). Die Cookie-Daten in `src/data/open-cookie-database.ts` stammen aus der Open
|
|
156
|
+
Cookie Database unter Apache-2.0; siehe [NOTICE](NOTICE).
|
package/README.md
CHANGED
|
@@ -33,18 +33,19 @@ shortened. Regenerate it with <code>npm run demo</code>.</sub>
|
|
|
33
33
|
|
|
34
34
|
## What it checks
|
|
35
35
|
|
|
36
|
-
| Rule
|
|
37
|
-
|
|
|
38
|
-
| [`pre-consent-trackers`](docs/rules/pre-consent-trackers.md)
|
|
39
|
-
| [`trackers-after-reject`](docs/rules/trackers-after-reject.md)
|
|
40
|
-
| [`
|
|
41
|
-
| [`
|
|
42
|
-
| [`
|
|
43
|
-
| [`
|
|
44
|
-
| [`
|
|
45
|
-
| [`third-party-
|
|
46
|
-
| [`
|
|
47
|
-
| [`
|
|
36
|
+
| Rule | Severity | What it finds |
|
|
37
|
+
| ------------------------------------------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| [`pre-consent-trackers`](docs/rules/pre-consent-trackers.md) | error | Analytics, ads and session-replay tools that send requests or set cookies before consent. A bare tag manager is a warning. |
|
|
39
|
+
| [`trackers-after-reject`](docs/rules/trackers-after-reject.md) | error | Trackers that still load after clicking "reject" on the consent banner and reloading. |
|
|
40
|
+
| [`trackers-after-settings`](docs/rules/trackers-after-settings.md) | error | Opt-in (`--check-settings`): trackers that still load after switching off every category in the banner settings and saving. |
|
|
41
|
+
| [`reject-option`](docs/rules/reject-option.md) | warning | A banner with "accept" but no "reject" on its first layer. Pay-or-OK banners are noted as info. |
|
|
42
|
+
| [`consent-settings-link`](docs/rules/consent-settings-link.md) | warning | No visible link or button to reopen the cookie settings after rejecting. |
|
|
43
|
+
| [`google-fonts`](docs/rules/google-fonts.md) | error | Fonts fetched from `fonts.googleapis.com` / `fonts.gstatic.com`. Leftover preconnects are a warning. |
|
|
44
|
+
| [`adobe-fonts`](docs/rules/adobe-fonts.md) | error | Fonts fetched from Adobe Fonts (`use.typekit.net` / `p.typekit.net`). Leftover preconnects are a warning. |
|
|
45
|
+
| [`third-party-embeds`](docs/rules/third-party-embeds.md) | warning | YouTube, Vimeo, Google Maps, reCAPTCHA, Gravatar and social embeds loading before consent. |
|
|
46
|
+
| [`third-party-cdns`](docs/rules/third-party-cdns.md) | info | Scripts and styles from jsDelivr, unpkg, cdnjs and other public CDNs. |
|
|
47
|
+
| [`impressum-link`](docs/rules/impressum-link.md) | warning | Pages without a link to an Impressum. A contact link alone is noted as info. |
|
|
48
|
+
| [`privacy-policy-link`](docs/rules/privacy-policy-link.md) | warning | Pages without a link to a privacy policy. |
|
|
48
49
|
|
|
49
50
|
Each rule is a small file with tests. Missing a check? See [Contributing](#contributing).
|
|
50
51
|
|
|
@@ -98,7 +99,7 @@ preview URL from your hosting provider's deployment event or action output as `u
|
|
|
98
99
|
| `fail-on-incomplete` | `false` | Fail separately for incomplete required observations. |
|
|
99
100
|
| `disable` | | Comma-separated rule ids to skip. |
|
|
100
101
|
| `lang` | `en` | Language of the report: `en` or `de`. |
|
|
101
|
-
| `region` | `de` | Whose law to cite: `de`, `at`, `ch`, `eu`.
|
|
102
|
+
| `region` | `de` | Whose law to cite: `de`, `at`, `ch`, `hu`, `eu`. |
|
|
102
103
|
| `sarif-file` | `privalint.sarif` | Where to write SARIF. Empty to skip. |
|
|
103
104
|
| `job-summary` | `true` | Add the Markdown report to the job summary. |
|
|
104
105
|
| `pr-comment` | `false` | Create/update a same-repository PR report comment. |
|
|
@@ -135,8 +136,10 @@ privalint <url> [options]
|
|
|
135
136
|
--timeout <ms> Navigation timeout per page (default 30000)
|
|
136
137
|
--locale <locale> Browser locale (default de-DE)
|
|
137
138
|
--lang <lang> Language of the report: en | de (default en)
|
|
138
|
-
--region <region> Whose law to cite: de | at | ch | eu (default de)
|
|
139
|
+
--region <region> Whose law to cite: de | at | ch | hu | eu (default de)
|
|
139
140
|
--skip-consent Don't click "reject" on the consent banner
|
|
141
|
+
--check-settings Also open the banner's settings, switch everything off and
|
|
142
|
+
save, then check what still loads (loads the start page again)
|
|
140
143
|
--headed Open a visible browser window instead of running headless
|
|
141
144
|
--channel <name> Use an installed browser: chrome or msedge
|
|
142
145
|
--sandbox Run Chromium with its sandbox (recommended for untrusted
|
|
@@ -164,6 +167,7 @@ which law applies to a website, and findings are not legal determinations:
|
|
|
164
167
|
| `de` (default) | Opt-in, § 25 TDDDG | § 5 DDG | none |
|
|
165
168
|
| `at` | Opt-in, § 165 Abs. 3 TKG 2021 | § 5 ECG, § 25 MedienG | none |
|
|
166
169
|
| `ch` | Opt-out, Art. 45c FMG | Art. 3 Abs. 1 lit. s UWG (e-commerce) | `pre-consent-trackers`, `third-party-embeds` and `impressum-link` drop one level |
|
|
170
|
+
| `hu` | Opt-in, Eht. 155. § (4) | Ekertv. 4. § | none |
|
|
167
171
|
| `eu` | Opt-in, Art. 5(3) ePrivacy Directive | Art. 5 Directive 2000/31/EC | none |
|
|
168
172
|
|
|
169
173
|
Every finding lists its legal basis for the chosen country. Trackers that run after an explicit
|
|
@@ -227,6 +231,12 @@ Going further:
|
|
|
227
231
|
6. With `--max-pages`, links to the same site are followed breadth-first. Query strings are
|
|
228
232
|
dropped, pages are deduplicated after redirects, and pages that fail to load (downloads,
|
|
229
233
|
timeouts) are listed but don't stop the crawl.
|
|
234
|
+
"Same site" means the same registrable domain from the
|
|
235
|
+
[public suffix list](https://publicsuffix.org/), so `shop.example.co.uk` belongs to
|
|
236
|
+
`example.co.uk`, but `a.github.io` and `b.github.io` are different sites. IP addresses and
|
|
237
|
+
`localhost` only match themselves. The list ships with the
|
|
238
|
+
[tldts](https://github.com/remusao/tldts) dependency, so nothing is looked up during a scan,
|
|
239
|
+
and it is updated by updating that dependency.
|
|
230
240
|
|
|
231
241
|
### Limitations
|
|
232
242
|
|
|
@@ -239,9 +249,11 @@ Going further:
|
|
|
239
249
|
- Only "reject" is tested. Whether "accept" works, and whether rejecting is as easy as accepting
|
|
240
250
|
beyond the presence of a button, is not judged.
|
|
241
251
|
- Tracker detection uses a hand-maintained list ([`src/data/trackers.ts`](src/data/trackers.ts)).
|
|
242
|
-
A vendor missing from the list goes unnoticed. Additions are very welcome.
|
|
243
|
-
|
|
244
|
-
|
|
252
|
+
A vendor missing from the list goes unnoticed. Additions are very welcome. Cookies the list
|
|
253
|
+
doesn't know are also looked up in analytics and marketing cookies from the
|
|
254
|
+
[Open Cookie Database](https://github.com/jkwakman/Open-Cookie-Database) (Apache-2.0, see
|
|
255
|
+
[NOTICE](NOTICE)). That data only matches cookie names, never request hosts, and leaves out
|
|
256
|
+
short, generic and consent-related names.
|
|
245
257
|
- Server-side tracking can't be seen from the browser.
|
|
246
258
|
- Many consent managers decide by IP address whether to show a banner. GitHub-hosted runners
|
|
247
259
|
have US addresses, so some sites load trackers there that EU visitors never get, and the
|
|
@@ -249,16 +261,12 @@ Going further:
|
|
|
249
261
|
want to rely on.
|
|
250
262
|
- Chromium runs without its sandbox by default, like Playwright's own default, because the
|
|
251
263
|
sandbox often can't start in containers. Pass `--sandbox` when you scan sites you don't trust
|
|
252
|
-
on a machine that holds secrets.
|
|
253
|
-
|
|
264
|
+
on a machine that holds secrets. The sandbox needs unprivileged user namespaces. Docker's
|
|
265
|
+
default seccomp profile blocks them inside containers, and on Ubuntu 23.10 and later AppArmor
|
|
266
|
+
restricts them unless Chromium is allowed to use them.
|
|
254
267
|
|
|
255
268
|
## Roadmap
|
|
256
269
|
|
|
257
|
-
- Test the settings layer of banners, not only "reject" ([#38](https://github.com/jexcellence/privalint/issues/38))
|
|
258
|
-
- Don't count banner rules as incomplete when a site needs no banner ([#35](https://github.com/jexcellence/privalint/issues/35))
|
|
259
|
-
- First-party detection with the public suffix list ([#36](https://github.com/jexcellence/privalint/issues/36))
|
|
260
|
-
- Cookie trackers generated from the Apache-licensed
|
|
261
|
-
[Open Cookie Database](https://github.com/jkwakman/Open-Cookie-Database) ([#39](https://github.com/jexcellence/privalint/issues/39))
|
|
262
270
|
- Report comparison between two scans
|
|
263
271
|
|
|
264
272
|
## Contributing
|
|
@@ -284,4 +292,5 @@ If privalint saved you a warning letter or a review round, a star helps others f
|
|
|
284
292
|
|
|
285
293
|
## License
|
|
286
294
|
|
|
287
|
-
[MIT](LICENSE)
|
|
295
|
+
[MIT](LICENSE). The cookie data in `src/data/open-cookie-database.ts` comes from the Open Cookie
|
|
296
|
+
Database under Apache-2.0; see [NOTICE](NOTICE).
|
package/dist/assessment.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Lang } from './i18n.js';
|
|
2
2
|
import type { Finding, PageSnapshot, Rule, RuleEvaluation } from './types.js';
|
|
3
|
-
export declare function assessPage(page: PageSnapshot, rules: readonly Rule[], siteUrl: URL, lang: Lang, isStart: boolean, consentEnabled: boolean, catalog?: readonly Rule[]): {
|
|
3
|
+
export declare function assessPage(page: PageSnapshot, rules: readonly Rule[], siteUrl: URL, lang: Lang, isStart: boolean, consentEnabled: boolean, catalog?: readonly Rule[], settingsEnabled?: boolean): {
|
|
4
4
|
findings: Finding[];
|
|
5
5
|
evaluations: RuleEvaluation[];
|
|
6
6
|
};
|
package/dist/assessment.js
CHANGED
|
@@ -17,8 +17,9 @@ const REQUIREMENTS = {
|
|
|
17
17
|
'reject-option': ['consent'],
|
|
18
18
|
'trackers-after-reject': ['after-reject'],
|
|
19
19
|
'consent-settings-link': ['after-reject'],
|
|
20
|
+
'trackers-after-settings': ['after-settings'],
|
|
20
21
|
};
|
|
21
|
-
export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled, catalog = rules) {
|
|
22
|
+
export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled, catalog = rules, settingsEnabled = false) {
|
|
22
23
|
const findings = [];
|
|
23
24
|
const allRules = new Map([...defaultRules, ...catalog].map((rule) => [rule.id, rule]));
|
|
24
25
|
const selected = new Set(rules.map((rule) => rule.id));
|
|
@@ -32,26 +33,17 @@ export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled,
|
|
|
32
33
|
network: validPage,
|
|
33
34
|
consent: validPage && page.consent?.bannerFound === true && page.consent.acceptLabel !== undefined,
|
|
34
35
|
'after-reject': validPage && page.consent?.rejected === true,
|
|
36
|
+
'after-settings': validPage && page.consent?.settings?.afterSave !== undefined,
|
|
35
37
|
};
|
|
36
38
|
const input = {
|
|
37
39
|
...page,
|
|
38
40
|
requests: observedRequests(page.requests),
|
|
39
41
|
// A preconnect hint is not evidence of an actual connection in an offline adapter context.
|
|
40
42
|
resourceHints: complete ? page.resourceHints : [],
|
|
41
|
-
...(page.consent
|
|
42
|
-
? {}
|
|
43
|
-
: {
|
|
44
|
-
consent: {
|
|
45
|
-
...page.consent,
|
|
46
|
-
afterReject: {
|
|
47
|
-
...page.consent.afterReject,
|
|
48
|
-
requests: observedRequests(page.consent.afterReject.requests),
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
}),
|
|
43
|
+
...(page.consent === undefined ? {} : { consent: observedConsent(page.consent) }),
|
|
52
44
|
};
|
|
53
45
|
const requirementsOf = (rule) => rule.requires ?? REQUIREMENTS[rule.id] ?? ['document'];
|
|
54
|
-
const needsConsent = (rule) => requirementsOf(rule).some((kind) => kind === 'consent' || kind === 'after-reject');
|
|
46
|
+
const needsConsent = (rule) => requirementsOf(rule).some((kind) => kind === 'consent' || kind === 'after-reject' || kind === 'after-settings');
|
|
55
47
|
const detectedBy = new Map();
|
|
56
48
|
const evaluate = (rule, noConsentNeeded) => {
|
|
57
49
|
const requirements = requirementsOf(rule);
|
|
@@ -78,6 +70,17 @@ export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled,
|
|
|
78
70
|
findingCount: 0,
|
|
79
71
|
};
|
|
80
72
|
}
|
|
73
|
+
if (requirements.includes('after-settings') && !settingsEnabled) {
|
|
74
|
+
return {
|
|
75
|
+
ruleId: rule.id,
|
|
76
|
+
status: 'skipped',
|
|
77
|
+
reason: 'settings-check-disabled',
|
|
78
|
+
partial: false,
|
|
79
|
+
outcome: 'not-evaluable',
|
|
80
|
+
explanation: 'settings-check-disabled',
|
|
81
|
+
findingCount: 0,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
81
84
|
if (noConsentNeeded && !requirements.every((kind) => available[kind])) {
|
|
82
85
|
return {
|
|
83
86
|
ruleId: rule.id,
|
|
@@ -96,19 +99,23 @@ export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled,
|
|
|
96
99
|
reason: 'missing-observation',
|
|
97
100
|
partial: true,
|
|
98
101
|
outcome: 'not-evaluable',
|
|
99
|
-
explanation: requirements.includes('after-
|
|
100
|
-
? (page.consent?.reason ?? 'missing-
|
|
101
|
-
: requirements.includes('
|
|
102
|
-
? (page.consent?.reason ?? 'missing-
|
|
103
|
-
: '
|
|
102
|
+
explanation: requirements.includes('after-settings')
|
|
103
|
+
? (page.consent?.settings?.reason ?? 'missing-settings-observation')
|
|
104
|
+
: requirements.includes('after-reject')
|
|
105
|
+
? (page.consent?.reason ?? 'missing-reject-observation')
|
|
106
|
+
: requirements.includes('consent')
|
|
107
|
+
? (page.consent?.reason ?? 'missing-consent-observation')
|
|
108
|
+
: 'incomplete-document',
|
|
104
109
|
findingCount: 0,
|
|
105
110
|
};
|
|
106
111
|
}
|
|
107
112
|
const detected = rule.check({ page: input, siteUrl, lang });
|
|
108
113
|
detectedBy.set(rule.id, detected);
|
|
109
|
-
const partial = requirements.includes('after-
|
|
110
|
-
? page.consent?.
|
|
111
|
-
:
|
|
114
|
+
const partial = requirements.includes('after-settings')
|
|
115
|
+
? page.consent?.settings?.afterSaveComplete === false
|
|
116
|
+
: requirements.includes('after-reject')
|
|
117
|
+
? page.consent?.afterRejectComplete === false
|
|
118
|
+
: !complete;
|
|
112
119
|
return {
|
|
113
120
|
ruleId: rule.id,
|
|
114
121
|
status: 'executed',
|
|
@@ -154,4 +161,25 @@ export function assessPage(page, rules, siteUrl, lang, isStart, consentEnabled,
|
|
|
154
161
|
})),
|
|
155
162
|
};
|
|
156
163
|
}
|
|
164
|
+
/** Keeps only requests that got a response, in both after-choice windows. */
|
|
165
|
+
function observedConsent(consent) {
|
|
166
|
+
const { afterReject, settings } = consent;
|
|
167
|
+
return {
|
|
168
|
+
...consent,
|
|
169
|
+
...(afterReject === undefined
|
|
170
|
+
? {}
|
|
171
|
+
: { afterReject: { ...afterReject, requests: observedRequests(afterReject.requests) } }),
|
|
172
|
+
...(settings?.afterSave === undefined
|
|
173
|
+
? {}
|
|
174
|
+
: {
|
|
175
|
+
settings: {
|
|
176
|
+
...settings,
|
|
177
|
+
afterSave: {
|
|
178
|
+
...settings.afterSave,
|
|
179
|
+
requests: observedRequests(settings.afterSave.requests),
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
157
185
|
//# sourceMappingURL=assessment.js.map
|
package/dist/assessment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assessment.js","sourceRoot":"","sources":["../src/assessment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"assessment.js","sourceRoot":"","sources":["../src/assessment.ts"],"names":[],"mappings":"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"}
|
package/dist/capture.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { Browser } from 'playwright';
|
|
2
2
|
import { type ScanOptions } from './scan-options.js';
|
|
3
3
|
import type { PageSnapshot } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Which consent path to test on the page: none, the reject button, or the settings layer.
|
|
6
|
+
* Settings runs in its own capture because a stored reject would hide the banner.
|
|
7
|
+
*/
|
|
8
|
+
export type ConsentPath = 'none' | 'reject' | 'settings';
|
|
4
9
|
/** Always owns and closes its context. Each crawl page starts without cookies/storage. */
|
|
5
|
-
export declare function capturePage(browser: Browser, url: string, siteUrl: URL, options: ScanOptions,
|
|
10
|
+
export declare function capturePage(browser: Browser, url: string, siteUrl: URL, options: ScanOptions, consentPath: ConsentPath): Promise<PageSnapshot>;
|
package/dist/capture.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { observeConsent } from './consent.js';
|
|
1
|
+
import { observeConsent, observeSettings } from './consent.js';
|
|
2
2
|
import { classifyLoadError, Diagnostics, diagnosticUrl } from './diagnostics.js';
|
|
3
|
-
import { ControlledNetwork, networkLimits } from './network.js';
|
|
3
|
+
import { ControlledNetwork, networkLimits, watchPageCancellations } from './network.js';
|
|
4
4
|
import { DEFAULTS } from './scan-options.js';
|
|
5
5
|
import { isFirstParty } from './url.js';
|
|
6
6
|
/** Always owns and closes its context. Each crawl page starts without cookies/storage. */
|
|
7
|
-
export async function capturePage(browser, url, siteUrl, options,
|
|
7
|
+
export async function capturePage(browser, url, siteUrl, options, consentPath) {
|
|
8
|
+
const checkConsent = consentPath !== 'none';
|
|
8
9
|
const controlled = options.networkAdapter !== undefined;
|
|
9
10
|
const context = await browser.newContext({
|
|
10
11
|
locale: options.locale ?? DEFAULTS.locale,
|
|
@@ -52,7 +53,13 @@ export async function capturePage(browser, url, siteUrl, options, checkConsent)
|
|
|
52
53
|
: route.fulfill({ status: 200, body: '' }));
|
|
53
54
|
}
|
|
54
55
|
const page = await context.newPage();
|
|
55
|
-
|
|
56
|
+
if (network)
|
|
57
|
+
await network.attachPage(page);
|
|
58
|
+
else {
|
|
59
|
+
// Without an adapter nothing else listens to CDP; page cancels need their own session.
|
|
60
|
+
const session = await context.newCDPSession(page);
|
|
61
|
+
await watchPageCancellations(session, (_, cancelled) => diagnostics.cancelledByPage(cancelled));
|
|
62
|
+
}
|
|
56
63
|
const response = await page.goto(url, {
|
|
57
64
|
waitUntil: 'load',
|
|
58
65
|
timeout: options.timeoutMs ?? DEFAULTS.timeoutMs,
|
|
@@ -97,7 +104,7 @@ export async function capturePage(browser, url, siteUrl, options, checkConsent)
|
|
|
97
104
|
elapsedMs: 0,
|
|
98
105
|
pageUrl: diagnosticUrl(url),
|
|
99
106
|
});
|
|
100
|
-
|
|
107
|
+
const consentOptions = {
|
|
101
108
|
settleMs: options.settleMs ?? DEFAULTS.settleMs,
|
|
102
109
|
timeoutMs: options.timeoutMs ?? DEFAULTS.timeoutMs,
|
|
103
110
|
signal,
|
|
@@ -105,7 +112,18 @@ export async function capturePage(browser, url, siteUrl, options, checkConsent)
|
|
|
105
112
|
diagnostics.phase = 'after-reject';
|
|
106
113
|
},
|
|
107
114
|
onTimeout: () => diagnostics.add('timeout', page.url()),
|
|
108
|
-
}
|
|
115
|
+
};
|
|
116
|
+
if (consentPath === 'settings') {
|
|
117
|
+
const settings = await observeSettings(page, context, requests, consentOptions);
|
|
118
|
+
snapshot.consent = {
|
|
119
|
+
bannerFound: settings !== undefined,
|
|
120
|
+
rejected: false,
|
|
121
|
+
...(settings === undefined ? {} : { settings }),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
snapshot.consent = await observeConsent(page, context, requests, consentOptions);
|
|
126
|
+
}
|
|
109
127
|
if (signal.aborted)
|
|
110
128
|
throw new DOMException('Capture ended', 'AbortError');
|
|
111
129
|
if (snapshot.consent.error && !diagnostics.hasIssues('after-reject')) {
|
|
@@ -151,6 +169,10 @@ export async function capturePage(browser, url, siteUrl, options, checkConsent)
|
|
|
151
169
|
if (snapshot.consent?.rejected) {
|
|
152
170
|
snapshot.consent.afterRejectComplete = !diagnostics.hasIssues('after-reject');
|
|
153
171
|
}
|
|
172
|
+
// The settings path reuses the after-reject phase for what loads after saving.
|
|
173
|
+
if (snapshot.consent?.settings?.afterSave !== undefined) {
|
|
174
|
+
snapshot.consent.settings.afterSaveComplete = !diagnostics.hasIssues('after-reject');
|
|
175
|
+
}
|
|
154
176
|
snapshot.capture = {
|
|
155
177
|
complete: beforeComplete && diagnostics.restrictingIssues === 0,
|
|
156
178
|
beforeConsentComplete: beforeComplete,
|
package/dist/capture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAoB,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQxC,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAgB,EAChB,GAAW,EACX,OAAY,EACZ,OAAoB,EACpB,WAAwB;IAExB,MAAM,YAAY,GAAG,WAAW,KAAK,MAAM,CAAC;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QACzC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAC9C,mFAAmF;QACnF,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;QAC7B,UAAU,CAAC,MAAM;QACjB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,WAAW,CACjC,OAAO,CAAC,cAAc,IAAI,GAAG,EAC7B,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CACtE,CAAC;IACF,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc;QACpC,CAAC,CAAC,IAAI,iBAAiB,CACnB,OAAO,CAAC,cAAc,EACtB,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,EACpC,WAAW,EACX,MAAM,CACP;QACH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,OAAkC,CAAC;IACvC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAiB;QAC7B,GAAG;QACH,QAAQ,EAAE,GAAG;QACb,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,EAAE;KAClB,CAAC;IACF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,OAAO;YAAE,YAAY,EAAE,CAAC;QACnC,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CACpC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;gBAC1C,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAClB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAC7C,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvC,CAAC;YACJ,uFAAuF;YACvF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,sBAAsB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CACrD,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CACvC,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;SACjD,CAAC,CAAC;QACH,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC;QAC7C,MAAM,IAAI;aACP,gBAAgB,CAAC,aAAa,EAAE;YAC/B,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;SACjD,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjE,QAAQ,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CACxD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,IAAI,EAAG,CAAuB,CAAC,IAAI;YACnC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;iBACzE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;iBACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,IAAI,EAAE;iBACN,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACjB,CAAC,CAAC,CACJ,CAAC;QACF,QAAQ,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,CACzE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YACnD,IAAI,EAAG,IAAwB,CAAC,IAAI;SACrC,CAAC,CAAC,CACJ,CAAC;QACF,mFAAmF;QACnF,IAAI,UAAU;YAAE,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;QAC5C,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACrF,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,OAAO;SACR,CAAC,CAAC,CAAC;QACJ,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClD,QAAQ,GAAG,IAAI,CAAC;QAChB,cAAc,GAAG,WAAW,CAAC,iBAAiB,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC;QACrF,IAAI,YAAY,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;YACnD,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnB,KAAK,EAAE,kBAAkB;gBACzB,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC;aAC5B,CAAC,CAAC;YACH,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;gBAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;gBAClD,MAAM;gBACN,QAAQ,EAAE,GAAG,EAAE;oBACb,WAAW,CAAC,KAAK,GAAG,cAAc,CAAC;gBACrC,CAAC;gBACD,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;aACxD,CAAC;YACF,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAChF,QAAQ,CAAC,OAAO,GAAG;oBACjB,WAAW,EAAE,QAAQ,KAAK,SAAS;oBACnC,QAAQ,EAAE,KAAK;oBACf,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;iBAChD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAC1E,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBACrE,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtE,QAAQ,CAAC,YAAY,KAAK,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;YACzB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO;gBACvB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClE,IACE,YAAY;YACZ,OAAO,CAAC,YAAY,KAAK,KAAK;YAC9B,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,EAClD,CAAC;YACD,QAAQ,CAAC,OAAO,GAAG;gBACjB,GAAG,QAAQ,CAAC,OAAO;gBACnB,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,IAAI,KAAK;gBACnD,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,oBAAoB;gBAC3B,OAAO,EAAE,oBAAoB;gBAC7B,MAAM,EAAE,4BAA4B;gBACpC,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;QAAE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAClF,cAAc,GAAG,cAAc,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAChF,CAAC;IACD,+EAA+E;IAC/E,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;QACxD,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACvF,CAAC;IACD,QAAQ,CAAC,OAAO,GAAG;QACjB,QAAQ,EAAE,cAAc,IAAI,WAAW,CAAC,iBAAiB,KAAK,CAAC;QAC/D,qBAAqB,EAAE,cAAc;QACrC,QAAQ;QACR,WAAW,EAAE,WAAW,CAAC,IAAI;KAC9B,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -41,9 +41,11 @@ Options
|
|
|
41
41
|
--timeout <ms> Navigation timeout per page (default 30000)
|
|
42
42
|
--locale <locale> Browser locale (default de-DE)
|
|
43
43
|
--lang <lang> Language of the report: en | de (default en)
|
|
44
|
-
--region <region> Whose law to cite: de | at | ch | eu (default de)
|
|
44
|
+
--region <region> Whose law to cite: de | at | ch | hu | eu (default de)
|
|
45
45
|
--skip-consent Don't click "reject" on the consent banner
|
|
46
46
|
--consent Enable consent checking even if the JSON config disables it
|
|
47
|
+
--check-settings Also open the banner's settings, switch everything off and
|
|
48
|
+
save, then check what still loads (loads the start page again)
|
|
47
49
|
--headed Open a visible browser window instead of running headless
|
|
48
50
|
--channel <name> Use an installed browser: chrome or msedge
|
|
49
51
|
--sandbox Run Chromium with its sandbox (recommended for untrusted
|
|
@@ -84,6 +86,7 @@ async function main(argv) {
|
|
|
84
86
|
region: { type: 'string' },
|
|
85
87
|
'skip-consent': { type: 'boolean' },
|
|
86
88
|
consent: { type: 'boolean' },
|
|
89
|
+
'check-settings': { type: 'boolean' },
|
|
87
90
|
headed: { type: 'boolean' },
|
|
88
91
|
channel: { type: 'string' },
|
|
89
92
|
sandbox: { type: 'boolean' },
|
|
@@ -135,6 +138,7 @@ async function main(argv) {
|
|
|
135
138
|
: values['skip-consent'] === true
|
|
136
139
|
? false
|
|
137
140
|
: (config.consentCheck ?? true),
|
|
141
|
+
settingsCheck: values['check-settings'] === true || config.settingsCheck === true,
|
|
138
142
|
headed: values.headed === true,
|
|
139
143
|
channel: values.channel === undefined ? undefined : oneOf(values.channel, CHANNELS, '--channel'),
|
|
140
144
|
sandbox: values.sandbox === true,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAe,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAC3D,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG/C,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,IAAI,GAAG,aAAa,OAAO;;;;;;;;;;;4BAWL,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
|
@@ -14,6 +14,7 @@ const KEYS = [
|
|
|
14
14
|
'lang',
|
|
15
15
|
'region',
|
|
16
16
|
'consentCheck',
|
|
17
|
+
'settingsCheck',
|
|
17
18
|
'failOnIncomplete',
|
|
18
19
|
'rules',
|
|
19
20
|
'allow',
|
|
@@ -57,6 +58,8 @@ export function parseConfig(value) {
|
|
|
57
58
|
invalid();
|
|
58
59
|
if (value.consentCheck !== undefined && typeof value.consentCheck !== 'boolean')
|
|
59
60
|
invalid();
|
|
61
|
+
if (value.settingsCheck !== undefined && typeof value.settingsCheck !== 'boolean')
|
|
62
|
+
invalid();
|
|
60
63
|
if (value.failOnIncomplete !== undefined && typeof value.failOnIncomplete !== 'boolean')
|
|
61
64
|
invalid();
|
|
62
65
|
if (value.rules !== undefined) {
|