@app4you/cookie-banner 0.0.0-stage → 2.0.2
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.md +92 -2
- package/dist/NOTICE +20 -0
- package/dist/cookie-banner.js +1 -0
- package/dist/core/csp.d.ts +25 -0
- package/dist/core/service-consent.d.ts +4 -0
- package/dist/i18n/locale.d.ts +7 -0
- package/dist/licenses/open-cookie-database-Apache-2.0.txt +201 -0
- package/dist/licenses/third-party-web-MIT.txt +20 -0
- package/dist/native/app-CzgF6XmJ.js +1593 -0
- package/dist/native/native-B9FXlXDp.js +1503 -0
- package/dist/native.d.ts +27 -0
- package/dist/native.js +15 -0
- package/dist/types.d.ts +145 -0
- package/docs/consent-compliance.md +142 -0
- package/docs/consent-integration.md +262 -0
- package/docs/deployment-security.md +28 -0
- package/docs/multilingual.md +100 -0
- package/package.json +66 -4
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Wielojęzyczność npm i WordPress
|
|
2
|
+
|
|
3
|
+
Interfejs bannera, preferencje, komunikaty walidacji i blokery mają wspólny słownik:
|
|
4
|
+
`en`, `pl`, `de`, `fr`, `es`, `it`, `nl`, `da`, `no`, `sv`.
|
|
5
|
+
Kody regionalne i WordPressowe są normalizowane (`de_DE` → `de-de`).
|
|
6
|
+
`nb` i `nn` korzystają z norweskiego `no`. Nieobsługiwany język korzysta z EN;
|
|
7
|
+
można dostarczyć kompletny własny słownik również dla innego języka.
|
|
8
|
+
|
|
9
|
+
## npm / Next.js
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { initializeConsent, resolveLocalizedConfig, consentCspHeaders } from '@app4you/cookie-banner/native';
|
|
13
|
+
|
|
14
|
+
const config = {
|
|
15
|
+
mode: 'standalone' as const,
|
|
16
|
+
lang: 'de-DE', // język bieżącej trasy; po stronie klienta także 'auto' z <html lang>
|
|
17
|
+
noticeVersion: 'privacy-2026-11-07',
|
|
18
|
+
controller: { name: 'Your actual legal controller' },
|
|
19
|
+
purposes: 'Your reviewed source-language purposes',
|
|
20
|
+
privacyPolicyUrl: '/privacy',
|
|
21
|
+
serviceDisclosures: {
|
|
22
|
+
youtube: { description: 'Your reviewed video purpose', privacyUrl: 'https://policies.google.com/privacy', retention: 'Your reviewed retention criteria' },
|
|
23
|
+
},
|
|
24
|
+
localizations: {
|
|
25
|
+
de: {
|
|
26
|
+
purposes: 'Geprüfte Zwecke dieser Website',
|
|
27
|
+
privacyPolicyUrl: '/de/datenschutz',
|
|
28
|
+
customTexts: {
|
|
29
|
+
overlay: { title: 'Ihre Privatsphäre' },
|
|
30
|
+
content: { allowPlay: 'Zustimmen und Video ansehen' },
|
|
31
|
+
},
|
|
32
|
+
serviceDisclosures: {
|
|
33
|
+
youtube: { description: 'YouTube-Videos auf Ihren Wunsch anzeigen.', retention: 'Geprüfte Speicherdauer' },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
'de-DE': { cookiePolicyUrl: '/de/cookies' },
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// SERWER: nigdy nie zgaduj języka trasy na podstawie przeglądarki.
|
|
41
|
+
const resolved = resolveLocalizedConfig(config);
|
|
42
|
+
const headers = consentCspHeaders({
|
|
43
|
+
noticeVersion: resolved.noticeVersion,
|
|
44
|
+
lang: resolved.lang, // odrzuca sieciowy grant z innego języka PRZED parserem
|
|
45
|
+
services: { youtube: { 'frame-src': ['https://www.youtube.com'] } },
|
|
46
|
+
}, request.headers.get('cookie') || '');
|
|
47
|
+
|
|
48
|
+
// KLIENT: przekazuj ten sam config. Skrót pokazuje wyłącznie mechanizm języków;
|
|
49
|
+
// pełne źródła CSP dobierz według docs/consent-integration.md.
|
|
50
|
+
const dispose = await initializeConsent({ ...config, strictCsp: true });
|
|
51
|
+
// Przy zmianie trasy wywołaj dispose(), a następnie initializeConsent z jej językiem.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Kolejność: tekst wbudowany → wspólne `customTexts` → wersja języka (`de`) →
|
|
55
|
+
wersja regionalna (`de-de`). Własne obiekty są scalane głęboko; obsługujemy również
|
|
56
|
+
klucze kropkowe (`content.allowPlay`). Puste tłumaczenie korzysta z fallbacku.
|
|
57
|
+
Tłumaczenia usług są nakładkami na istniejące ID, bez kopiowania reguł URL,
|
|
58
|
+
cleanup lub ustawień CSP. Użyj ich także dla usług własnych.
|
|
59
|
+
|
|
60
|
+
Przy zmianie języka w aplikacji SPA odtwórz klienta. W trybie strict zmiana języka
|
|
61
|
+
wymaga świeżego dokumentu, aby wymienić HTTP CSP. Na serwerze zawsze podawaj `lang`
|
|
62
|
+
w `consentCspHeaders`; samo JS nie cofnie żądania parsera dopuszczonego nagłówkiem.
|
|
63
|
+
Zmiana treści prawnych wymaga nowej `noticeVersion` po stronie serwera i klienta.
|
|
64
|
+
|
|
65
|
+
## WordPress
|
|
66
|
+
|
|
67
|
+
W **Banner & texts → Language versions** wybierz kod języka i wprowadź:
|
|
68
|
+
|
|
69
|
+
- administratora i cele;
|
|
70
|
+
- linki do polityk;
|
|
71
|
+
- teksty bannera, preferencji, blokerów i komunikatów;
|
|
72
|
+
- nazwę, opis celu, retencję i politykę dostawcy dla istniejących usług.
|
|
73
|
+
|
|
74
|
+
Zapisz przyciskiem **Save Settings**. Edytowany język jest widoczny również
|
|
75
|
+
w izolowanym podglądzie. Puste pola korzystają z treści wspólnej.
|
|
76
|
+
|
|
77
|
+
Tryb **Auto** używa: Polylang (`pll_current_language`) → WPML
|
|
78
|
+
(`wpml_current_language`) → język WordPressa. Ręczne ustawienie języka ma pierwszeństwo.
|
|
79
|
+
W WPML potrzebny jest moduł **String Translation** do tłumaczenia własnych ciągów;
|
|
80
|
+
bez niego nadal działają wbudowane słowniki i nasz edytor wersji językowych.
|
|
81
|
+
|
|
82
|
+
Nagłówki tabeli cookies, etykiety kategorii i domyślny link do preferencji
|
|
83
|
+
korzystają z tego samego słownika; generowany plik PHP JSON powstaje podczas builda.
|
|
84
|
+
Tekst cookie ze skanera można przetłumaczyć w tłumaczeniach ciągów WPML/Polylang;
|
|
85
|
+
przejrzane opisy usług z edytora również są stosowane w tabeli.
|
|
86
|
+
|
|
87
|
+
Własne ciągi są rejestrowane w grupie **Cookie Banner** w tłumaczeniach WPML/Polylang.
|
|
88
|
+
Odczyt używa `wpml_translate_single_string` lub `pll_translate_string`.
|
|
89
|
+
Strony polityk mapujemy przez `wpml_object_id` / `pll_get_post`.
|
|
90
|
+
Jawny link wpisany dla języka w naszym edytorze ma pierwszeństwo nad mapowaniem.
|
|
91
|
+
Nie zmieniamy tłumaczeniami technicznych ID, reguł blokowania ani nazw usuwanych cookies.
|
|
92
|
+
|
|
93
|
+
Wyświetlony język, informacje i linki wpływają na wersję dowodu i CSP. Zapis decyzji
|
|
94
|
+
REST przekazuje język strony niezależnie od języka domyślnego endpointu. Grant
|
|
95
|
+
z poprzedniego języka nie uruchamia dostawcy przed zgodą na nowej wersji strony.
|
|
96
|
+
HTML chroniony strict CSP nadal jest `private, no-store`.
|
|
97
|
+
|
|
98
|
+
Nie wykonujemy automatycznego tłumaczenia danych administratora, celów, retencji,
|
|
99
|
+
polityk ani treści strony. Ich poprawne wersje trzeba dostarczyć; brak konkretnego
|
|
100
|
+
wpisu stosuje opisany fallback, zamiast wymyślać informacje prawne.
|
package/package.json
CHANGED
|
@@ -1,6 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@app4you/cookie-banner",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "2.0.2",
|
|
4
|
+
"description": "Framework-independent cookie consent banner with Google Consent Mode v2 support.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/cookie-banner.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"docs/consent-integration.md",
|
|
11
|
+
"docs/consent-compliance.md",
|
|
12
|
+
"docs/multilingual.md",
|
|
13
|
+
"docs/deployment-security.md"
|
|
14
|
+
],
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/Dawidw5219/cookie-banner.git"
|
|
18
|
+
},
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"dev": "vite",
|
|
24
|
+
"build": "bun run build:banner && bun run --cwd plugin build",
|
|
25
|
+
"build:banner": "bun run typecheck && vite build && vite build --config vite.native.config.ts && tsc -p tsconfig.package.json && bun run scripts/package-metadata.ts",
|
|
26
|
+
"deploy": "bun run build && ghdeploy --release 'plugin/builds/cookie-banner-wp-{version}.zip'",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
29
|
+
"build:all": "bun run build",
|
|
30
|
+
"update:databases": "bun run scripts/update-service-databases.ts",
|
|
31
|
+
"test:browser": "node tests/browser/browser.mjs",
|
|
32
|
+
"test:package": "node tests/package/npm-package.mjs",
|
|
33
|
+
"test:privacy": "node tests/browser/consent-hardening.mjs",
|
|
34
|
+
"test:accessibility": "node tests/browser/accessibility.mjs"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"preact": "^10"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@preact/preset-vite": "^2",
|
|
41
|
+
"@tailwindcss/vite": "^4",
|
|
42
|
+
"axe-core": "^4.14.0",
|
|
43
|
+
"jsdom": "^26.0.0",
|
|
44
|
+
"playwright": "1.65.0",
|
|
45
|
+
"tailwindcss": "^4",
|
|
46
|
+
"typescript": "^5",
|
|
47
|
+
"vite": "^6",
|
|
48
|
+
"vitest": "^4.1.2"
|
|
49
|
+
},
|
|
50
|
+
"packageManager": "bun@1.4.4",
|
|
51
|
+
"workspaces": [
|
|
52
|
+
"plugin"
|
|
53
|
+
],
|
|
54
|
+
"trustedDependencies": [
|
|
55
|
+
"@parcel/watcher",
|
|
56
|
+
"@swc/core",
|
|
57
|
+
"esbuild"
|
|
58
|
+
],
|
|
59
|
+
"exports": {
|
|
60
|
+
".": "./dist/cookie-banner.js",
|
|
61
|
+
"./auto": "./dist/cookie-banner.js",
|
|
62
|
+
"./native": {
|
|
63
|
+
"types": "./dist/native.d.ts",
|
|
64
|
+
"import": "./dist/native.js",
|
|
65
|
+
"default": "./dist/native.js"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|