@react-lgpd-consent/core 0.7.0 → 0.7.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/CHANGELOG.md CHANGED
@@ -1,5 +1,242 @@
1
1
  # Changelog - @react-lgpd-consent/core
2
2
 
3
+ ## 0.7.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#134](https://github.com/lucianoedipo/react-lgpd-consent/pull/134) [`44b885b`](https://github.com/lucianoedipo/react-lgpd-consent/commit/44b885b7c81f1cb5822e2dcfde2975e69e8d4893) Thanks [@github-actions](https://github.com/apps/github-actions)! - ### Correções
8
+ - 1d15920 fix: corrigir formatação da verificação de múltiplas versões do React
9
+
10
+ ### Funcionalidades
11
+ - d641639 feat: adicionar gerenciamento de eventos para categorias obrigatórias no CategoriesProvider
12
+ - b04c00b feat: add tests for CookieBanner, FloatingPreferencesButton, and PreferencesModal components
13
+ - b04c00b Introduce interactive changeset script for easier versioning in monorepos.
14
+
15
+ ### Refactors e compatibilidade
16
+ - ef2968a refactor: replace direct document and window references with globalThis for better compatibility
17
+ - ef2968a Updated scriptLoader, cookieDiscovery, cookieUtils, dataLayerEvents, developerGuidance, peerDepsCheck, scriptIntegrations, and scriptLoader files to use globalThis.document and globalThis.window.
18
+ - ef2968a Improved cookie handling functions to check for document and window availability using globalThis.
19
+ - ef2968a Enhanced tests to reference globalThis for consistency.
20
+ - ef2968a Cleaned up code formatting and comments for clarity.
21
+ - b04c00b Refactor coverage check script to use node imports.
22
+ - b04c00b Adjust TypeDoc script for ESM compatibility.
23
+ - 3af2fcb Fix path resolution in tsconfig for better module imports.
24
+
25
+ ### Testes
26
+ - b04c00b Implement tests for CookieBanner to verify rendering based on consent and debug mode.
27
+ - b04c00b Enhance FloatingPreferencesButton tests to check for localized text via props.
28
+ - b04c00b Extend PreferencesModal tests to cover temporary preference resets, active scripts rendering, and custom text application.
29
+
30
+ ### Documentação
31
+ - d430eef docs: atualizar instruções para agentes com visão geral do projeto e comandos essenciais
32
+ - d430eef Updated documentation to reflect changes in globalThis usage.
33
+ - d430eef Update API documentation to include new integration functions and ESM/CJS testing configurations.
34
+
35
+ ## 0.7.1
36
+
37
+ ### Patch Changes
38
+
39
+ - [#133](https://github.com/lucianoedipo/react-lgpd-consent/pull/133) [`33bc0eb`](https://github.com/lucianoedipo/react-lgpd-consent/commit/33bc0ebcb40ce65c70b02668d3c0a97efb1854f1) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - # 🧩 Fundamento Crítico de Consentimento — SUPER TASK v0.7.1
40
+
41
+ **Persistência + Loader + Consent Mode v2**
42
+
43
+ Esta release estabelece o **núcleo legal, técnico e funcional** da biblioteca react-lgpd-consent, garantindo um contrato sólido, seguro e auditável para uso institucional e governamental.
44
+
45
+ ***
46
+
47
+ ## 🔹 Bloco A — Persistência de Consentimento por Cookie
48
+
49
+ ### ✨ API Consolidada de Persistência
50
+
51
+ Nova API completa no `ConsentProvider`:
52
+
53
+ ```typescript
54
+ <ConsentProvider
55
+ cookie={{
56
+ name: 'lgpd-consent',
57
+ domain: '.example.com', // Compartilha entre subdomínios
58
+ path: '/',
59
+ sameSite: 'Lax', // Default seguro
60
+ secure: true, // Auto em HTTPS
61
+ maxAge: 31536000, // Segundos (substitui maxAgeDays)
62
+ }}
63
+ >
64
+ ```
65
+
66
+ **Regras Implementadas:**
67
+ - ✅ Defaults seguros: `SameSite=Lax`, `Secure=true` em HTTPS
68
+ - ✅ Categoria `necessary` **sempre forçada como true**
69
+ - ✅ Nenhuma gravação de cookie durante SSR
70
+ - ✅ Suporte completo a subdomínios via `domain`
71
+ - ✅ Nova opção `maxAge` (segundos, padrão moderno)
72
+ - ✅ Opção `maxAgeDays` deprecated mas mantida para compatibilidade
73
+
74
+ **Ambientes Suportados:**
75
+ - ✅ `localhost` (desenvolvimento)
76
+ - ✅ `dev` / `staging` (domínios customizados)
77
+ - ✅ `production` (HTTPS obrigatório)
78
+ - ✅ Comportamento **independente de NODE_ENV**
79
+
80
+ ***
81
+
82
+ ## 🔹 Bloco B — ConsentScriptLoader com Bloqueio Real
83
+
84
+ ### 🚫 Contrato de Bloqueio Garantido
85
+
86
+ > **Nenhum script não necessário executa antes do consentimento correspondente.**
87
+
88
+ ### ✨ Sistema de Fila e Priorização
89
+
90
+ Implementado `ConsentScriptLoader` com:
91
+
92
+ ```typescript
93
+ registerScript({
94
+ id: 'google-analytics',
95
+ category: 'analytics',
96
+ priority: 1, // Ordem de execução
97
+ execute: () => {
98
+ // Seu script aqui
99
+ },
100
+ onConsentUpdate: (granted) => {
101
+ // Reagir a mudanças de consentimento
102
+ },
103
+ })
104
+ ```
105
+
106
+ **Recursos Implementados:**
107
+ - ✅ **Fila interna de execução** com ordenação por:
108
+ - 1. Categoria (`necessary` → `analytics` → `marketing`, etc.)
109
+ - 2. Prioridade (numérica)
110
+ - 3. Timestamp (ordem de registro)
111
+ - ✅ Scripts `necessary` executam **imediatamente**
112
+ - ✅ Scripts de outras categorias aguardam **consentimento explícito**
113
+ - ✅ Suporte a `onConsentUpdate` para reconfiguração dinâmica
114
+ - ✅ Snapshot de consentimento para scripts que precisam do estado atual
115
+ - ✅ **Otimização anti-duplicação**: integrações não são reexecutadas a cada render quando criadas inline (ex.: `integrations={[createGoogleAnalyticsIntegration(...)]}`). Sistema mantém hash estrutural para detectar mudanças reais e prevenir múltiplas inicializações do mesmo script.
116
+
117
+ **Observabilidade em DEV:**
118
+ - ✅ Logs detalhados de ordem de execução
119
+ - ✅ Indicação clara de categoria liberada
120
+ - ✅ Rastreamento de status de cada script
121
+ - ⚠️ **Silencioso em produção** (performance otimizada)
122
+
123
+ ***
124
+
125
+ ## 🔹 Bloco C — Integração Nativa Google Consent Mode v2
126
+
127
+ ### 🎯 Implementação Automática
128
+
129
+ **Zero configuração manual necessária!**
130
+
131
+ ```typescript
132
+ import { createGoogleAnalyticsIntegration } from '@react-lgpd-consent/core'
133
+
134
+ const ga4 = createGoogleAnalyticsIntegration({
135
+ measurementId: 'G-XXXXXXXXXX'
136
+ })
137
+
138
+ <ConsentScriptLoader integrations={[ga4]} />
139
+ ```
140
+
141
+ **O que a biblioteca faz automaticamente:**
142
+ 1. ✅ Inicializa `dataLayer` se não existir
143
+ 2. ✅ Define `gtag('consent', 'default', denied)` **antes** de qualquer tag
144
+ 3. ✅ Mapeia categorias corretamente:
145
+ - `analytics` → `analytics_storage`
146
+ - `marketing` → `ad_storage`, `ad_user_data`, `ad_personalization`
147
+ 4. ✅ Envia `gtag('consent', 'update')` quando usuário escolhe preferências
148
+ 5. ✅ Dispara eventos de ciclo de vida:
149
+ ```javascript
150
+ { event: 'consent_initialized' }
151
+ { event: 'consent_updated', preferences: {...} }
152
+ ```
153
+
154
+ **Factories Implementadas:**
155
+ - ✅ `createGoogleAnalyticsIntegration` (GA4)
156
+ - ✅ `createGoogleTagManagerIntegration` (GTM)
157
+ - ✅ Suporte a `bootstrap()` para inicialização pré-consentimento
158
+ - ✅ Suporte a `onConsentUpdate()` para reconfiguração dinâmica
159
+
160
+ ### 🔒 Ordem de Inicialização Segura
161
+
162
+ Fluxo garantido pela implementação:
163
+
164
+ ```
165
+ 1. dataLayer criado
166
+ 2. gtag('consent', 'default', denied)
167
+ 3. Loader bloqueia tags
168
+ 4. Usuário consente
169
+ 5. gtag('consent', 'update', granted/denied)
170
+ 6. Tags disparam conforme consentimento
171
+ ```
172
+
173
+ ### ⚡ Compatibilidade Next.js (SSR)
174
+ - ✅ Nenhum acesso a `window` fora de `useEffect`
175
+ - ✅ App Router (Next.js 13+)
176
+ - ✅ Pages Router (Next.js 12+)
177
+ - ✅ **Zero hydration mismatch**
178
+ - ✅ Estratégia de renderização: `client-only` quando necessário
179
+
180
+ ***
181
+
182
+ ## 🆕 Novas APIs Públicas
183
+
184
+ ### Core Package (`@react-lgpd-consent/core`):
185
+
186
+ ```typescript
187
+ // Registro de scripts
188
+ registerScript(config: RegisteredScript): void
189
+
190
+ // Factories de integrações
191
+ createGoogleAnalyticsIntegration(config): ScriptIntegration
192
+ createGoogleTagManagerIntegration(config): ScriptIntegration
193
+
194
+ // Utilitários de cookie
195
+ readConsentCookie(name?: string): ConsentState | null
196
+ writeConsentCookie(state: ConsentState, options?: CookieOptions): void
197
+
198
+ // Novos tipos
199
+ type RegisteredScript = { ... }
200
+ type ScriptIntegration = { ... }
201
+ interface LoadScriptOptions = { ... }
202
+ ```
203
+
204
+ ***
205
+
206
+ ## 📚 Documentação Atualizada
207
+ - ✅ **API.md** - Novas APIs de `registerScript` e Consent Mode v2
208
+ - ✅ **INTEGRACOES.md** - Guias completos de GA4, GTM, Facebook Pixel
209
+ - ✅ **MIGRATION.md** - Guia de migração v0.7.0 → v0.7.1
210
+ - ✅ **SUPER_TASK_VALIDATION.md** - Relatório técnico de validação completo
211
+
212
+ ***
213
+
214
+ ## 🔄 Breaking Changes
215
+
216
+ **Nenhum!** Esta release é 100% backward-compatible:
217
+ - ✅ Opção `maxAgeDays` deprecated mas funcional
218
+ - ✅ Comportamento padrão preservado
219
+ - ✅ APIs antigas continuam funcionando
220
+ - ✅ Migração gradual suportada
221
+
222
+ ***
223
+
224
+ ## 🎯 Melhorias Complementares
225
+
226
+ ### Sistema de i18n para Diagnósticos
227
+
228
+ Sistema básico de internacionalização para mensagens de peer dependencies:
229
+ - ✅ Suporte a pt-BR (padrão) e en
230
+ - ✅ API para customização: `setPeerDepsLocale()`, `setPeerDepsMessages()`
231
+ - ✅ Mensagens extraídas para constantes (melhor manutenibilidade)
232
+
233
+ ### Refatorações e Otimizações
234
+ - ✅ Strings de mensagens extraídas para constantes
235
+ - ✅ Separação de concerns (lógica vs conteúdo)
236
+ - ✅ Type safety aprimorado em toda API
237
+ - ✅ Performance otimizada (sem logs em produção)
238
+ - ✅ **Fix crítico**: Prevenção de reexecução de integrações a cada render quando `integrations` prop muda referência (inline array). Sistema agora usa hash estrutural para detectar mudanças reais e manter scripts já registrados estáveis.
239
+
3
240
  ## 0.7.0
4
241
 
5
242
  ### Minor Changes
@@ -143,7 +380,7 @@
143
380
  - **Correção crítica**: `loadScript` agora aguarda dinamicamente o consentimento em vez de rejeitar imediatamente, permitindo que scripts carreguem quando preferências mudarem
144
381
  - Cleanup automático do registro ao completar/falhar carregamento
145
382
  - Adicionados testes extensivos: `ConsentScriptLoader.strictmode.test.tsx` e `scriptLoader.strictmode.test.ts`
146
- - Documentação completa em `docs/REACT19-STRICTMODE.md`
383
+ - Documentação completa em `REACT19-STRICTMODE.md`
147
384
  - Todos os 302 testes passando, incluindo 5 novos testes de StrictMode
148
385
 
149
386
  **Breaking Changes:** Nenhuma - totalmente retrocompatível
package/README.md CHANGED
@@ -62,6 +62,22 @@ function MyCustomBanner() {
62
62
  - **Integrações:** Google Analytics, GTM, UserWay, Facebook Pixel, Hotjar, etc.
63
63
  - **Tipos TypeScript:** Tipagem completa para toda a API
64
64
 
65
+ ## 🧩 Scripts, Fila e Consent Mode v2
66
+
67
+ - **ConsentScriptLoader** agora mantém uma fila interna por categoria e prioridade. Scripts `necessary` rodam imediatamente; os demais só executam após consentimento explícito.
68
+ - **API programática `registerScript`**: registre callbacks inline ou integrações que não usam `<script src>` e deixe a fila disparar no momento correto. Estados da fila: `pending` → `running` → `executed` (recarrega apenas se `allowReload=true`).
69
+ ```ts
70
+ const cleanup = registerScript({
71
+ id: 'ga-consent-mode',
72
+ category: 'analytics',
73
+ priority: 10, // maior roda antes dentro da categoria
74
+ execute: bootstrapConsentMode,
75
+ onConsentUpdate: ({ preferences }) => pushConsentSignals(preferences),
76
+ })
77
+ ```
78
+ - **Consent Mode v2 nativo**: `createGoogleAnalyticsIntegration` e `createGoogleTagManagerIntegration` inicializam `consent=default` (denied) e enviam `consent=update` conforme as preferências do usuário, sem snippet manual.
79
+ - **Observabilidade dev-only**: logs ordenados de execução para depurar a fila (silenciados em produção).
80
+
65
81
  ## 🆕 Novidades v0.7.0
66
82
 
67
83
  ### Callbacks de Lifecycle
@@ -123,4 +139,3 @@ Para documentação completa, exemplos e API reference:
123
139
  ## 📄 Licença
124
140
 
125
141
  MIT © [Luciano Édipo](https://github.com/lucianoedipo)
126
-