privalint 0.4.0 → 0.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.
- package/README.de.md +4 -0
- package/README.md +10 -3
- package/dist/assessment.js +2 -0
- package/dist/assessment.js.map +1 -1
- package/dist/capture.js +2 -2
- package/dist/capture.js.map +1 -1
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/consent.js +65 -1
- package/dist/consent.js.map +1 -1
- package/dist/data/trackers.js +30 -0
- package/dist/data/trackers.js.map +1 -1
- package/dist/diagnostics.d.ts +3 -0
- package/dist/diagnostics.js +14 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legal.js +13 -0
- package/dist/legal.js.map +1 -1
- package/dist/observations.d.ts +5 -1
- package/dist/observations.js +6 -1
- package/dist/observations.js.map +1 -1
- package/dist/rules/adobe-fonts.d.ts +2 -0
- package/dist/rules/adobe-fonts.js +71 -0
- package/dist/rules/adobe-fonts.js.map +1 -0
- package/dist/rules/consent-settings-link.d.ts +2 -0
- package/dist/rules/consent-settings-link.js +50 -0
- package/dist/rules/consent-settings-link.js.map +1 -0
- package/dist/rules/index.d.ts +3 -1
- package/dist/rules/index.js +5 -1
- package/dist/rules/index.js.map +1 -1
- package/dist/scan-options.d.ts +8 -0
- package/dist/scan-options.js +7 -1
- package/dist/scan-options.js.map +1 -1
- package/dist/scanner.js +58 -14
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/package.json +1 -1
- package/schemas/report-1.1.0.schema.json +21 -0
- package/schemas/sarif-properties-1.1.0.schema.json +21 -0
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,6 @@ export { LANGS, type Lang, type Text } from './i18n.js';
|
|
|
7
7
|
export { legalReferences, REGIONS, type Region } from './legal.js';
|
|
8
8
|
export { type NetworkAdapter, NetworkError, type NetworkLimits, type NetworkRequest, type NetworkResponse, } from './network.js';
|
|
9
9
|
export { identifyReportSchema, REPORT_SCHEMA_VERSION, type ReportSchemaIdentity, SUPPORTED_REPORT_SCHEMAS, } from './report-contract.js';
|
|
10
|
-
export { defaultRules, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, } from './rules/index.js';
|
|
10
|
+
export { adobeFonts, consentSettingsLink, defaultRules, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, } from './rules/index.js';
|
|
11
11
|
export { type ScanOptions, scan } from './scanner.js';
|
|
12
12
|
export type * from './types.js';
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,6 @@ export { LANGS } from './i18n.js';
|
|
|
7
7
|
export { legalReferences, REGIONS } from './legal.js';
|
|
8
8
|
export { NetworkError, } from './network.js';
|
|
9
9
|
export { identifyReportSchema, REPORT_SCHEMA_VERSION, SUPPORTED_REPORT_SCHEMAS, } from './report-contract.js';
|
|
10
|
-
export { defaultRules, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, } from './rules/index.js';
|
|
10
|
+
export { adobeFonts, consentSettingsLink, defaultRules, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, } from './rules/index.js';
|
|
11
11
|
export { scan } from './scanner.js';
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAA4B,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,cAAc,EAA+C,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAsC,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAwB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AACnE,OAAO,EAEL,YAAY,GAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAErB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAoB,IAAI,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAA4B,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,cAAc,EAA+C,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAsC,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAwB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AACnE,OAAO,EAEL,YAAY,GAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAErB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAoB,IAAI,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/legal.js
CHANGED
|
@@ -32,12 +32,24 @@ const LEGAL = {
|
|
|
32
32
|
ch: ['Art. 45c FMG', 'EDÖB, Leitfaden zu Cookies (2025)'],
|
|
33
33
|
eu: ['Art. 4(11) GDPR', 'Art. 7(3) GDPR', 'EDPB Cookie Banner Taskforce report, 17.01.2023'],
|
|
34
34
|
},
|
|
35
|
+
'consent-settings-link': {
|
|
36
|
+
de: ['Art. 7 Abs. 3 DSGVO', '§ 25 Abs. 1 TDDDG'],
|
|
37
|
+
at: ['Art. 7 Abs. 3 DSGVO', '§ 165 Abs. 3 TKG 2021'],
|
|
38
|
+
ch: ['Art. 45c FMG'],
|
|
39
|
+
eu: ['Art. 7(3) GDPR', 'Art. 5(3) ePrivacy Directive'],
|
|
40
|
+
},
|
|
35
41
|
'google-fonts': {
|
|
36
42
|
de: ['Art. 6 Abs. 1 DSGVO', 'LG München I, 20.01.2022, Az. 3 O 17493/20'],
|
|
37
43
|
at: ['Art. 6 Abs. 1 DSGVO'],
|
|
38
44
|
ch: ['Art. 6 DSG'],
|
|
39
45
|
eu: ['Art. 6(1) GDPR'],
|
|
40
46
|
},
|
|
47
|
+
'adobe-fonts': {
|
|
48
|
+
de: ['Art. 6 Abs. 1 DSGVO', 'LG München I, 20.01.2022, Az. 3 O 17493/20 (entsprechend)'],
|
|
49
|
+
at: ['Art. 6 Abs. 1 DSGVO'],
|
|
50
|
+
ch: ['Art. 6 DSG'],
|
|
51
|
+
eu: ['Art. 6(1) GDPR'],
|
|
52
|
+
},
|
|
41
53
|
'third-party-embeds': {
|
|
42
54
|
de: ['Art. 6 Abs. 1 DSGVO', '§ 25 Abs. 1 TDDDG'],
|
|
43
55
|
at: ['Art. 6 Abs. 1 DSGVO', '§ 165 Abs. 3 TKG 2021'],
|
|
@@ -86,6 +98,7 @@ export function applyRegion(findings, region) {
|
|
|
86
98
|
*/
|
|
87
99
|
const SOFTER_IN_SWITZERLAND = new Set([
|
|
88
100
|
'pre-consent-trackers',
|
|
101
|
+
'consent-settings-link',
|
|
89
102
|
'third-party-embeds',
|
|
90
103
|
'impressum-link',
|
|
91
104
|
]);
|
package/dist/legal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal.js","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"legal.js","sourceRoot":"","sources":["../src/legal.ts"],"names":[],"mappings":"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"}
|
package/dist/observations.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import type { RecordedRequest } from './types.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
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.
|
|
6
|
+
*/
|
|
3
7
|
export declare const observedRequests: (requests: readonly RecordedRequest[]) => RecordedRequest[];
|
package/dist/observations.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
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.
|
|
5
|
+
*/
|
|
2
6
|
export const observedRequests = (requests) => requests.filter((request) => request.outcome === undefined ||
|
|
7
|
+
request.skippedReason === 'beacon' ||
|
|
3
8
|
(request.outcome === 'response' && (request.status ?? 200) < 400));
|
|
4
9
|
//# sourceMappingURL=observations.js.map
|
package/dist/observations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observations.js","sourceRoot":"","sources":["../src/observations.ts"],"names":[],"mappings":"AAEA
|
|
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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { say } from '../i18n.js';
|
|
2
|
+
import { observedRequests } from '../observations.js';
|
|
3
|
+
import { hostMatches, safeHost } from '../url.js';
|
|
4
|
+
const ID = 'adobe-fonts';
|
|
5
|
+
/** use.typekit.net serves the kit CSS and fonts, p.typekit.net counts page views for licensing. */
|
|
6
|
+
const ADOBE_FONT_HOSTS = ['use.typekit.net', 'p.typekit.net'];
|
|
7
|
+
/** dns-prefetch only resolves the name; these hints open a real connection. */
|
|
8
|
+
const CONNECTING_HINTS = new Set(['preconnect', 'preload', 'prefetch', 'stylesheet']);
|
|
9
|
+
const FIX = {
|
|
10
|
+
en: 'Adobe Fonts are licensed for web use through Adobe’s servers only, so they cannot simply be ' +
|
|
11
|
+
'self-hosted. Either license the font for self-hosting from its foundry or ask Adobe Sales ' +
|
|
12
|
+
'about local hosting, or switch to an open-licensed font (e.g. from Fontsource) and serve it ' +
|
|
13
|
+
'from your own domain. Then remove every reference to use.typekit.net and p.typekit.net.',
|
|
14
|
+
de: 'Adobe Fonts sind für das Web nur über Adobes Server lizenziert und lassen sich nicht einfach ' +
|
|
15
|
+
'selbst hosten. Entweder die Schrift beim Hersteller für Self-Hosting lizenzieren oder bei Adobe ' +
|
|
16
|
+
'nach lokalem Hosting fragen, oder auf eine Schrift mit offener Lizenz (z. B. über Fontsource) ' +
|
|
17
|
+
'wechseln und sie von der eigenen Domain ausliefern. Danach alle Verweise auf use.typekit.net ' +
|
|
18
|
+
'und p.typekit.net entfernen.',
|
|
19
|
+
};
|
|
20
|
+
const isAdobeFontUrl = (url) => {
|
|
21
|
+
const host = safeHost(url);
|
|
22
|
+
return host !== undefined && ADOBE_FONT_HOSTS.some((domain) => hostMatches(host, domain));
|
|
23
|
+
};
|
|
24
|
+
export const adobeFonts = {
|
|
25
|
+
id: ID,
|
|
26
|
+
title: 'Adobe Fonts loaded from Adobe servers',
|
|
27
|
+
description: "Adobe Fonts (Typekit) are served from Adobe's servers, which receive every visitor's IP " +
|
|
28
|
+
'address and the page’s hostname, and count page views for font licensing. The reasoning ' +
|
|
29
|
+
'that made Google Fonts a problem applies the same way.',
|
|
30
|
+
references: ['Art. 6(1) GDPR', 'LG München I, 20.01.2022, Az. 3 O 17493/20 (by analogy)'],
|
|
31
|
+
check({ page, lang }) {
|
|
32
|
+
const requests = observedRequests(page.requests).filter((request) => isAdobeFontUrl(request.url));
|
|
33
|
+
if (requests.length > 0) {
|
|
34
|
+
const count = requests.length;
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
ruleId: ID,
|
|
38
|
+
severity: 'error',
|
|
39
|
+
message: say(lang, {
|
|
40
|
+
en: `Fonts are loaded from Adobe (${count} request${count === 1 ? '' : 's'}).`,
|
|
41
|
+
de: `Schriften werden von Adobe geladen (${count} ${count === 1 ? 'Anfrage' : 'Anfragen'}).`,
|
|
42
|
+
}),
|
|
43
|
+
pageUrl: page.finalUrl,
|
|
44
|
+
evidence: [...new Set(requests.map((request) => request.url))].slice(0, 5),
|
|
45
|
+
fix: say(lang, FIX),
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
const hints = page.resourceHints.filter((hint) => isAdobeFontUrl(hint.href) && hint.rel.split(/\s+/).some((rel) => CONNECTING_HINTS.has(rel)));
|
|
50
|
+
if (hints.length > 0) {
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
ruleId: ID,
|
|
54
|
+
severity: 'warning',
|
|
55
|
+
message: say(lang, {
|
|
56
|
+
en: 'The page preconnects to Adobe Fonts. No font was fetched, but the browser still opens a connection and transmits the IP address.',
|
|
57
|
+
de: 'Die Seite baut vorab eine Verbindung zu Adobe Fonts auf. Es wurde keine Schrift geladen, aber der Browser öffnet trotzdem eine Verbindung und überträgt die IP-Adresse.',
|
|
58
|
+
}),
|
|
59
|
+
pageUrl: page.finalUrl,
|
|
60
|
+
evidence: hints.map((hint) => `<link rel="${hint.rel}" href="${hint.href}">`),
|
|
61
|
+
fix: say(lang, {
|
|
62
|
+
en: 'Remove the leftover <link> tags pointing to Adobe Fonts.',
|
|
63
|
+
de: 'Die übrig gebliebenen <link>-Tags zu Adobe Fonts entfernen.',
|
|
64
|
+
}),
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
return [];
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=adobe-fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adobe-fonts.js","sourceRoot":"","sources":["../../src/rules/adobe-fonts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { say } from '../i18n.js';
|
|
2
|
+
const ID = 'consent-settings-link';
|
|
3
|
+
export const consentSettingsLink = {
|
|
4
|
+
id: ID,
|
|
5
|
+
title: 'No way to reopen the cookie settings',
|
|
6
|
+
description: 'After the visitor rejected and the page reloaded, privalint looks for a visible link or ' +
|
|
7
|
+
'button that reopens the consent settings, such as a "Cookie-Einstellungen" footer link or ' +
|
|
8
|
+
'the floating button of the consent manager. Without one, a choice cannot be changed or ' +
|
|
9
|
+
'withdrawn as easily as it was made.',
|
|
10
|
+
references: ['Art. 7(3) GDPR'],
|
|
11
|
+
check({ page, lang }) {
|
|
12
|
+
const consent = page.consent;
|
|
13
|
+
if (consent?.rejected !== true || consent.settingsControl?.found !== false) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const button = consent.rejectLabel ?? say(lang, { en: 'reject', de: 'Ablehnen' });
|
|
17
|
+
const evidence = [
|
|
18
|
+
say(lang, {
|
|
19
|
+
en: `Checked after clicking "${button}" and reloading`,
|
|
20
|
+
de: `Geprüft nach Klick auf „${button}“ und Neuladen`,
|
|
21
|
+
}),
|
|
22
|
+
];
|
|
23
|
+
if (consent.cmp !== undefined) {
|
|
24
|
+
evidence.push(say(lang, { en: 'Consent manager: ', de: 'Consent-Tool: ' }) + consent.cmp);
|
|
25
|
+
}
|
|
26
|
+
return [
|
|
27
|
+
{
|
|
28
|
+
ruleId: ID,
|
|
29
|
+
severity: 'warning',
|
|
30
|
+
message: say(lang, {
|
|
31
|
+
en: 'No link or button to reopen the cookie settings was found after rejecting.',
|
|
32
|
+
de: 'Nach dem Ablehnen wurde kein Link und kein Button gefunden, der die Cookie-Einstellungen wieder öffnet.',
|
|
33
|
+
}),
|
|
34
|
+
pageUrl: page.finalUrl,
|
|
35
|
+
evidence,
|
|
36
|
+
fix: say(lang, {
|
|
37
|
+
en: 'Add a "Cookie settings" link to the footer of every page, or enable the floating ' +
|
|
38
|
+
'button of your consent manager. Most offer a call for it, e.g. Cookiebot.renew(), ' +
|
|
39
|
+
'UC_UI.showSecondLayer() (Usercentrics), Didomi.preferences.show() or the ' +
|
|
40
|
+
'ot-sdk-show-settings class (OneTrust).',
|
|
41
|
+
de: 'Einen Link „Cookie-Einstellungen“ in den Footer jeder Seite setzen oder den ' +
|
|
42
|
+
'schwebenden Button des Consent-Tools aktivieren. Die meisten bieten dafür einen ' +
|
|
43
|
+
'Aufruf, z. B. Cookiebot.renew(), UC_UI.showSecondLayer() (Usercentrics), ' +
|
|
44
|
+
'Didomi.preferences.show() oder die Klasse ot-sdk-show-settings (OneTrust).',
|
|
45
|
+
}),
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=consent-settings-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-settings-link.js","sourceRoot":"","sources":["../../src/rules/consent-settings-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGjC,MAAM,EAAE,GAAG,uBAAuB,CAAC;AAEnC,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,0FAA0F;QAC1F,4FAA4F;QAC5F,yFAAyF;QACzF,qCAAqC;IACvC,UAAU,EAAE,CAAC,gBAAgB,CAAC;IAC9B,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG;YACf,GAAG,CAAC,IAAI,EAAE;gBACR,EAAE,EAAE,2BAA2B,MAAM,iBAAiB;gBACtD,EAAE,EAAE,2BAA2B,MAAM,gBAAgB;aACtD,CAAC;SACH,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;oBACjB,EAAE,EAAE,4EAA4E;oBAChF,EAAE,EAAE,yGAAyG;iBAC9G,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,QAAQ;gBACR,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;oBACb,EAAE,EACA,mFAAmF;wBACnF,oFAAoF;wBACpF,2EAA2E;wBAC3E,wCAAwC;oBAC1C,EAAE,EACA,8EAA8E;wBAC9E,kFAAkF;wBAClF,2EAA2E;wBAC3E,4EAA4E;iBAC/E,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Rule } from '../types.js';
|
|
2
|
+
import { adobeFonts } from './adobe-fonts.js';
|
|
3
|
+
import { consentSettingsLink } from './consent-settings-link.js';
|
|
2
4
|
import { googleFonts } from './google-fonts.js';
|
|
3
5
|
import { impressumLink } from './impressum-link.js';
|
|
4
6
|
import { preConsentTrackers } from './pre-consent-trackers.js';
|
|
@@ -8,4 +10,4 @@ import { thirdPartyCdns } from './third-party-cdns.js';
|
|
|
8
10
|
import { thirdPartyEmbeds } from './third-party-embeds.js';
|
|
9
11
|
import { trackersAfterReject } from './trackers-after-reject.js';
|
|
10
12
|
export declare const defaultRules: readonly Rule[];
|
|
11
|
-
export { googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
|
|
13
|
+
export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
|
package/dist/rules/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { adobeFonts } from './adobe-fonts.js';
|
|
2
|
+
import { consentSettingsLink } from './consent-settings-link.js';
|
|
1
3
|
import { googleFonts } from './google-fonts.js';
|
|
2
4
|
import { impressumLink } from './impressum-link.js';
|
|
3
5
|
import { preConsentTrackers } from './pre-consent-trackers.js';
|
|
@@ -10,11 +12,13 @@ export const defaultRules = [
|
|
|
10
12
|
preConsentTrackers,
|
|
11
13
|
trackersAfterReject,
|
|
12
14
|
rejectOption,
|
|
15
|
+
consentSettingsLink,
|
|
13
16
|
googleFonts,
|
|
17
|
+
adobeFonts,
|
|
14
18
|
thirdPartyEmbeds,
|
|
15
19
|
thirdPartyCdns,
|
|
16
20
|
impressumLink,
|
|
17
21
|
privacyPolicyLink,
|
|
18
22
|
];
|
|
19
|
-
export { googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
|
|
23
|
+
export { adobeFonts, consentSettingsLink, googleFonts, impressumLink, preConsentTrackers, privacyPolicyLink, rejectOption, thirdPartyCdns, thirdPartyEmbeds, trackersAfterReject, };
|
|
20
24
|
//# sourceMappingURL=index.js.map
|
package/dist/rules/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AACA,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,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC;AAEF,OAAO,EACL,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;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"}
|
package/dist/scan-options.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import type { NetworkAdapter, NetworkLimits } from './network.js';
|
|
|
4
4
|
import type { PageSnapshot, Rule, RuleSettings, ScanProgressEvent } from './types.js';
|
|
5
5
|
export interface ScanOptions {
|
|
6
6
|
maxPages?: number | undefined;
|
|
7
|
+
/** Pages captured at the same time. Results are identical to a sequential crawl. Default 1. */
|
|
8
|
+
concurrency?: number | undefined;
|
|
7
9
|
settleMs?: number | undefined;
|
|
8
10
|
/** Navigation/network-idle timeout, distinct from transport and capture deadlines. */
|
|
9
11
|
timeoutMs?: number | undefined;
|
|
@@ -23,6 +25,11 @@ export interface ScanOptions {
|
|
|
23
25
|
consentCheck?: boolean | undefined;
|
|
24
26
|
headed?: boolean | undefined;
|
|
25
27
|
channel?: string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Run Chromium with its sandbox. Off by default like Playwright, because the sandbox
|
|
30
|
+
* often cannot start in containers or on hosts that restrict user namespaces.
|
|
31
|
+
*/
|
|
32
|
+
sandbox?: boolean | undefined;
|
|
26
33
|
/** Trusted hook receiving RAW observations. Do not log/expose without redaction. */
|
|
27
34
|
onPage?: (snapshot: PageSnapshot) => void;
|
|
28
35
|
/** Caller-owned transport; scan owns browser, fresh per-page contexts and request signals. */
|
|
@@ -39,6 +46,7 @@ export interface ScanOptions {
|
|
|
39
46
|
}
|
|
40
47
|
export declare const DEFAULTS: {
|
|
41
48
|
maxPages: number;
|
|
49
|
+
concurrency: number;
|
|
42
50
|
settleMs: number;
|
|
43
51
|
timeoutMs: number;
|
|
44
52
|
locale: string;
|
package/dist/scan-options.js
CHANGED
package/dist/scan-options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-options.js","sourceRoot":"","sources":["../src/scan-options.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/scanner.js
CHANGED
|
@@ -16,6 +16,25 @@ function integer(value, name, minimum) {
|
|
|
16
16
|
throw new RangeError(`${name} must be a safe integer of at least ${minimum}`);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
async function launchBrowser(options) {
|
|
20
|
+
const sandbox = options.sandbox === true;
|
|
21
|
+
try {
|
|
22
|
+
return await chromium.launch({
|
|
23
|
+
headless: options.headed !== true,
|
|
24
|
+
chromiumSandbox: sandbox,
|
|
25
|
+
...(options.channel === undefined ? {} : { channel: options.channel }),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (!sandbox)
|
|
30
|
+
throw error;
|
|
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 ' +
|
|
35
|
+
'https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md', { cause: error });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
19
38
|
export function throwIfAborted(signal) {
|
|
20
39
|
if (signal?.aborted)
|
|
21
40
|
throw new DOMException('Scan aborted', 'AbortError');
|
|
@@ -36,6 +55,8 @@ export async function scan(target, options = {}) {
|
|
|
36
55
|
const rules = configuredRules.filter((rule) => ruleSetting(options.ruleSettings, rule.id) !== 'off');
|
|
37
56
|
const maxPages = options.maxPages ?? DEFAULTS.maxPages;
|
|
38
57
|
integer(maxPages, 'maxPages', 1);
|
|
58
|
+
const concurrency = options.concurrency ?? DEFAULTS.concurrency;
|
|
59
|
+
integer(concurrency, 'concurrency', 1);
|
|
39
60
|
integer(options.settleMs ?? DEFAULTS.settleMs, 'settleMs', 0);
|
|
40
61
|
integer(options.timeoutMs ?? DEFAULTS.timeoutMs, 'timeoutMs', 1);
|
|
41
62
|
integer(options.maxDiagnostics ?? 100, 'maxDiagnostics', 0);
|
|
@@ -54,21 +75,22 @@ export async function scan(target, options = {}) {
|
|
|
54
75
|
let siteUrl = new URL(target);
|
|
55
76
|
if (!/^https?:$/.test(siteUrl.protocol))
|
|
56
77
|
throw new TypeError('Expected an HTTP(S) target');
|
|
57
|
-
const browser = await
|
|
58
|
-
headless: options.headed !== true,
|
|
59
|
-
...(options.channel === undefined ? {} : { channel: options.channel }),
|
|
60
|
-
});
|
|
78
|
+
const browser = await launchBrowser(options);
|
|
61
79
|
try {
|
|
62
80
|
throwIfAborted(options.signal);
|
|
63
81
|
const snapshots = [];
|
|
64
82
|
const queue = [siteUrl.href];
|
|
65
83
|
const seen = new Set(queue);
|
|
66
84
|
const pageIds = new Map();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
// Captures run ahead of the queue head, but their results are committed strictly in queue
|
|
86
|
+
// order. Pages, their order and the queue therefore match a sequential crawl exactly.
|
|
87
|
+
const pending = new Map();
|
|
88
|
+
let head = 0;
|
|
89
|
+
let launched = 0;
|
|
90
|
+
const launch = (index) => {
|
|
91
|
+
const url = queue[index];
|
|
92
|
+
const isStart = index === 0;
|
|
93
|
+
const pageIndex = snapshots.length + (index - head);
|
|
72
94
|
const captureId = randomUUID();
|
|
73
95
|
emit({
|
|
74
96
|
stage: 'loading-page',
|
|
@@ -78,7 +100,7 @@ export async function scan(target, options = {}) {
|
|
|
78
100
|
captureId,
|
|
79
101
|
});
|
|
80
102
|
let progressFailure;
|
|
81
|
-
const
|
|
103
|
+
const task = capturePage(browser, url, siteUrl, {
|
|
82
104
|
...options,
|
|
83
105
|
onProgress: (event) => {
|
|
84
106
|
try {
|
|
@@ -89,9 +111,30 @@ export async function scan(target, options = {}) {
|
|
|
89
111
|
throw error;
|
|
90
112
|
}
|
|
91
113
|
},
|
|
92
|
-
}, isStart)
|
|
93
|
-
|
|
94
|
-
|
|
114
|
+
}, isStart).then((snapshot) => {
|
|
115
|
+
if (progressFailure)
|
|
116
|
+
throw progressFailure.error;
|
|
117
|
+
return { url, snapshot, isStart, pageIndex, captureId };
|
|
118
|
+
});
|
|
119
|
+
// Awaited in queue order below; this only keeps a page that fails while an earlier one is
|
|
120
|
+
// still loading from becoming an unhandled rejection.
|
|
121
|
+
task.catch(() => undefined);
|
|
122
|
+
return task;
|
|
123
|
+
};
|
|
124
|
+
// The start page decides the site URL that later links are resolved against, so it runs alone.
|
|
125
|
+
const canLaunch = () => launched < queue.length &&
|
|
126
|
+
(launched === 0 || head > 0) &&
|
|
127
|
+
launched - head < concurrency &&
|
|
128
|
+
snapshots.length + (launched - head) < maxPages;
|
|
129
|
+
while (head < queue.length && snapshots.length < maxPages) {
|
|
130
|
+
throwIfAborted(options.signal);
|
|
131
|
+
while (canLaunch()) {
|
|
132
|
+
pending.set(launched, launch(launched));
|
|
133
|
+
launched += 1;
|
|
134
|
+
}
|
|
135
|
+
const { url, snapshot, isStart, pageIndex, captureId } = await pending.get(head);
|
|
136
|
+
pending.delete(head);
|
|
137
|
+
head += 1;
|
|
95
138
|
if (isStart) {
|
|
96
139
|
const failureMode = options.failureMode ?? (options.networkAdapter ? 'report' : 'throw');
|
|
97
140
|
if (snapshot.error !== undefined && failureMode === 'throw') {
|
|
@@ -127,7 +170,6 @@ export async function scan(target, options = {}) {
|
|
|
127
170
|
}
|
|
128
171
|
}
|
|
129
172
|
}
|
|
130
|
-
url = queue.shift();
|
|
131
173
|
}
|
|
132
174
|
throwIfAborted(options.signal);
|
|
133
175
|
const assessments = snapshots.map((page, index) => {
|
|
@@ -147,6 +189,7 @@ export async function scan(target, options = {}) {
|
|
|
147
189
|
scannerVersion: VERSION,
|
|
148
190
|
options: {
|
|
149
191
|
maxPages,
|
|
192
|
+
concurrency,
|
|
150
193
|
settleMs: options.settleMs ?? DEFAULTS.settleMs,
|
|
151
194
|
timeoutMs: options.timeoutMs ?? DEFAULTS.timeoutMs,
|
|
152
195
|
locale: options.locale ?? DEFAULTS.locale,
|
|
@@ -155,6 +198,7 @@ export async function scan(target, options = {}) {
|
|
|
155
198
|
consentCheck: options.consentCheck !== false,
|
|
156
199
|
headed: options.headed === true,
|
|
157
200
|
channel: options.channel ?? 'chromium',
|
|
201
|
+
sandbox: options.sandbox === true,
|
|
158
202
|
captureTimeoutMs: options.captureTimeoutMs ?? (options.networkAdapter ? 60_000 : null),
|
|
159
203
|
maxDiagnostics: options.maxDiagnostics ?? 100,
|
|
160
204
|
failureMode: options.failureMode ?? (options.networkAdapter ? 'report' : 'throw'),
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface RecordedRequest {
|
|
|
7
7
|
/** Absent on legacy snapshots. Only received responses count as network evidence. */
|
|
8
8
|
outcome?: 'pending' | 'response' | 'failed';
|
|
9
9
|
status?: number;
|
|
10
|
+
/** Set when the network adapter deliberately did not send the request. */
|
|
11
|
+
skippedReason?: SkipReason;
|
|
10
12
|
}
|
|
11
13
|
export type LoadIssueKind = 'security-blocked' | 'unsupported-method' | 'unsupported-protocol' | 'dns' | 'tls' | 'connection' | 'timeout' | 'resource-limit' | 'http-error' | 'browser-failure' | 'skipped' | 'aborted';
|
|
12
14
|
export type CapturePhase = 'before-consent' | 'after-reject';
|
|
@@ -103,6 +105,14 @@ export interface ConsentObservation {
|
|
|
103
105
|
};
|
|
104
106
|
/** True only if the reject observation window completed without load issues. */
|
|
105
107
|
afterRejectComplete?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* After rejecting and reloading: whether a link or button to reopen the consent settings was
|
|
110
|
+
* visible, and its label. Absent if the reject path was not tested, and in reports before 0.5.0.
|
|
111
|
+
*/
|
|
112
|
+
settingsControl?: {
|
|
113
|
+
found: boolean;
|
|
114
|
+
label?: string;
|
|
115
|
+
};
|
|
106
116
|
error?: string;
|
|
107
117
|
}
|
|
108
118
|
/**
|
|
@@ -205,6 +215,8 @@ export interface ScanProgressEvent {
|
|
|
205
215
|
}
|
|
206
216
|
export interface ReportOptions {
|
|
207
217
|
maxPages: number;
|
|
218
|
+
/** Absent in reports from scanners before 0.5.0. */
|
|
219
|
+
concurrency?: number;
|
|
208
220
|
settleMs: number;
|
|
209
221
|
timeoutMs: number;
|
|
210
222
|
locale: string;
|
|
@@ -213,6 +225,8 @@ export interface ReportOptions {
|
|
|
213
225
|
consentCheck: boolean;
|
|
214
226
|
headed: boolean;
|
|
215
227
|
channel: string;
|
|
228
|
+
/** Absent in reports from scanners before 0.5.0. */
|
|
229
|
+
sandbox?: boolean;
|
|
216
230
|
captureTimeoutMs: number | null;
|
|
217
231
|
maxDiagnostics: number;
|
|
218
232
|
failureMode: 'throw' | 'report';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "privalint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Lint your website for GDPR problems: trackers before consent and after reject, Google Fonts, embeds, missing Impressum. Real browser, CLI and GitHub Action.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -613,6 +613,20 @@
|
|
|
613
613
|
"afterRejectComplete": {
|
|
614
614
|
"type": "boolean"
|
|
615
615
|
},
|
|
616
|
+
"settingsControl": {
|
|
617
|
+
"type": "object",
|
|
618
|
+
"properties": {
|
|
619
|
+
"found": {
|
|
620
|
+
"type": "boolean"
|
|
621
|
+
},
|
|
622
|
+
"label": {
|
|
623
|
+
"type": "string"
|
|
624
|
+
}
|
|
625
|
+
},
|
|
626
|
+
"required": [
|
|
627
|
+
"found"
|
|
628
|
+
]
|
|
629
|
+
},
|
|
616
630
|
"error": {
|
|
617
631
|
"type": "string"
|
|
618
632
|
}
|
|
@@ -807,6 +821,13 @@
|
|
|
807
821
|
"items": {
|
|
808
822
|
"type": "string"
|
|
809
823
|
}
|
|
824
|
+
},
|
|
825
|
+
"sandbox": {
|
|
826
|
+
"type": "boolean"
|
|
827
|
+
},
|
|
828
|
+
"concurrency": {
|
|
829
|
+
"type": "integer",
|
|
830
|
+
"minimum": 1
|
|
810
831
|
}
|
|
811
832
|
},
|
|
812
833
|
"required": [
|