@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.
@@ -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": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
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
+ }