@react-lgpd-consent/core 0.6.3 → 0.7.1
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 +346 -2
- package/README.md +62 -1
- package/dist/index.cjs +816 -195
- package/dist/index.d.cts +283 -16
- package/dist/index.d.ts +283 -16
- package/dist/index.js +809 -196
- package/package.json +3 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,335 @@
|
|
|
1
1
|
# Changelog - @react-lgpd-consent/core
|
|
2
2
|
|
|
3
|
+
## 0.7.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#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
|
|
8
|
+
|
|
9
|
+
**Persistência + Loader + Consent Mode v2**
|
|
10
|
+
|
|
11
|
+
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.
|
|
12
|
+
|
|
13
|
+
***
|
|
14
|
+
|
|
15
|
+
## 🔹 Bloco A — Persistência de Consentimento por Cookie
|
|
16
|
+
|
|
17
|
+
### ✨ API Consolidada de Persistência
|
|
18
|
+
|
|
19
|
+
Nova API completa no `ConsentProvider`:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
<ConsentProvider
|
|
23
|
+
cookie={{
|
|
24
|
+
name: 'lgpd-consent',
|
|
25
|
+
domain: '.example.com', // Compartilha entre subdomínios
|
|
26
|
+
path: '/',
|
|
27
|
+
sameSite: 'Lax', // Default seguro
|
|
28
|
+
secure: true, // Auto em HTTPS
|
|
29
|
+
maxAge: 31536000, // Segundos (substitui maxAgeDays)
|
|
30
|
+
}}
|
|
31
|
+
>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Regras Implementadas:**
|
|
35
|
+
- ✅ Defaults seguros: `SameSite=Lax`, `Secure=true` em HTTPS
|
|
36
|
+
- ✅ Categoria `necessary` **sempre forçada como true**
|
|
37
|
+
- ✅ Nenhuma gravação de cookie durante SSR
|
|
38
|
+
- ✅ Suporte completo a subdomínios via `domain`
|
|
39
|
+
- ✅ Nova opção `maxAge` (segundos, padrão moderno)
|
|
40
|
+
- ✅ Opção `maxAgeDays` deprecated mas mantida para compatibilidade
|
|
41
|
+
|
|
42
|
+
**Ambientes Suportados:**
|
|
43
|
+
- ✅ `localhost` (desenvolvimento)
|
|
44
|
+
- ✅ `dev` / `staging` (domínios customizados)
|
|
45
|
+
- ✅ `production` (HTTPS obrigatório)
|
|
46
|
+
- ✅ Comportamento **independente de NODE_ENV**
|
|
47
|
+
|
|
48
|
+
***
|
|
49
|
+
|
|
50
|
+
## 🔹 Bloco B — ConsentScriptLoader com Bloqueio Real
|
|
51
|
+
|
|
52
|
+
### 🚫 Contrato de Bloqueio Garantido
|
|
53
|
+
|
|
54
|
+
> **Nenhum script não necessário executa antes do consentimento correspondente.**
|
|
55
|
+
|
|
56
|
+
### ✨ Sistema de Fila e Priorização
|
|
57
|
+
|
|
58
|
+
Implementado `ConsentScriptLoader` com:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
registerScript({
|
|
62
|
+
id: 'google-analytics',
|
|
63
|
+
category: 'analytics',
|
|
64
|
+
priority: 1, // Ordem de execução
|
|
65
|
+
execute: () => {
|
|
66
|
+
// Seu script aqui
|
|
67
|
+
},
|
|
68
|
+
onConsentUpdate: (granted) => {
|
|
69
|
+
// Reagir a mudanças de consentimento
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Recursos Implementados:**
|
|
75
|
+
- ✅ **Fila interna de execução** com ordenação por:
|
|
76
|
+
- 1. Categoria (`necessary` → `analytics` → `marketing`, etc.)
|
|
77
|
+
- 2. Prioridade (numérica)
|
|
78
|
+
- 3. Timestamp (ordem de registro)
|
|
79
|
+
- ✅ Scripts `necessary` executam **imediatamente**
|
|
80
|
+
- ✅ Scripts de outras categorias aguardam **consentimento explícito**
|
|
81
|
+
- ✅ Suporte a `onConsentUpdate` para reconfiguração dinâmica
|
|
82
|
+
- ✅ Snapshot de consentimento para scripts que precisam do estado atual
|
|
83
|
+
- ✅ **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.
|
|
84
|
+
|
|
85
|
+
**Observabilidade em DEV:**
|
|
86
|
+
- ✅ Logs detalhados de ordem de execução
|
|
87
|
+
- ✅ Indicação clara de categoria liberada
|
|
88
|
+
- ✅ Rastreamento de status de cada script
|
|
89
|
+
- ⚠️ **Silencioso em produção** (performance otimizada)
|
|
90
|
+
|
|
91
|
+
***
|
|
92
|
+
|
|
93
|
+
## 🔹 Bloco C — Integração Nativa Google Consent Mode v2
|
|
94
|
+
|
|
95
|
+
### 🎯 Implementação Automática
|
|
96
|
+
|
|
97
|
+
**Zero configuração manual necessária!**
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { createGoogleAnalyticsIntegration } from '@react-lgpd-consent/core'
|
|
101
|
+
|
|
102
|
+
const ga4 = createGoogleAnalyticsIntegration({
|
|
103
|
+
measurementId: 'G-XXXXXXXXXX'
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
<ConsentScriptLoader integrations={[ga4]} />
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**O que a biblioteca faz automaticamente:**
|
|
110
|
+
1. ✅ Inicializa `dataLayer` se não existir
|
|
111
|
+
2. ✅ Define `gtag('consent', 'default', denied)` **antes** de qualquer tag
|
|
112
|
+
3. ✅ Mapeia categorias corretamente:
|
|
113
|
+
- `analytics` → `analytics_storage`
|
|
114
|
+
- `marketing` → `ad_storage`, `ad_user_data`, `ad_personalization`
|
|
115
|
+
4. ✅ Envia `gtag('consent', 'update')` quando usuário escolhe preferências
|
|
116
|
+
5. ✅ Dispara eventos de ciclo de vida:
|
|
117
|
+
```javascript
|
|
118
|
+
{ event: 'consent_initialized' }
|
|
119
|
+
{ event: 'consent_updated', preferences: {...} }
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Factories Implementadas:**
|
|
123
|
+
- ✅ `createGoogleAnalyticsIntegration` (GA4)
|
|
124
|
+
- ✅ `createGoogleTagManagerIntegration` (GTM)
|
|
125
|
+
- ✅ Suporte a `bootstrap()` para inicialização pré-consentimento
|
|
126
|
+
- ✅ Suporte a `onConsentUpdate()` para reconfiguração dinâmica
|
|
127
|
+
|
|
128
|
+
### 🔒 Ordem de Inicialização Segura
|
|
129
|
+
|
|
130
|
+
Fluxo garantido pela implementação:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
1. dataLayer criado
|
|
134
|
+
2. gtag('consent', 'default', denied)
|
|
135
|
+
3. Loader bloqueia tags
|
|
136
|
+
4. Usuário consente
|
|
137
|
+
5. gtag('consent', 'update', granted/denied)
|
|
138
|
+
6. Tags disparam conforme consentimento
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### ⚡ Compatibilidade Next.js (SSR)
|
|
142
|
+
- ✅ Nenhum acesso a `window` fora de `useEffect`
|
|
143
|
+
- ✅ App Router (Next.js 13+)
|
|
144
|
+
- ✅ Pages Router (Next.js 12+)
|
|
145
|
+
- ✅ **Zero hydration mismatch**
|
|
146
|
+
- ✅ Estratégia de renderização: `client-only` quando necessário
|
|
147
|
+
|
|
148
|
+
***
|
|
149
|
+
|
|
150
|
+
## 🆕 Novas APIs Públicas
|
|
151
|
+
|
|
152
|
+
### Core Package (`@react-lgpd-consent/core`):
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// Registro de scripts
|
|
156
|
+
registerScript(config: RegisteredScript): void
|
|
157
|
+
|
|
158
|
+
// Factories de integrações
|
|
159
|
+
createGoogleAnalyticsIntegration(config): ScriptIntegration
|
|
160
|
+
createGoogleTagManagerIntegration(config): ScriptIntegration
|
|
161
|
+
|
|
162
|
+
// Utilitários de cookie
|
|
163
|
+
readConsentCookie(name?: string): ConsentState | null
|
|
164
|
+
writeConsentCookie(state: ConsentState, options?: CookieOptions): void
|
|
165
|
+
|
|
166
|
+
// Novos tipos
|
|
167
|
+
type RegisteredScript = { ... }
|
|
168
|
+
type ScriptIntegration = { ... }
|
|
169
|
+
interface LoadScriptOptions = { ... }
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
***
|
|
173
|
+
|
|
174
|
+
## 📚 Documentação Atualizada
|
|
175
|
+
- ✅ **API.md** - Novas APIs de `registerScript` e Consent Mode v2
|
|
176
|
+
- ✅ **INTEGRACOES.md** - Guias completos de GA4, GTM, Facebook Pixel
|
|
177
|
+
- ✅ **MIGRATION.md** - Guia de migração v0.7.0 → v0.7.1
|
|
178
|
+
- ✅ **SUPER_TASK_VALIDATION.md** - Relatório técnico de validação completo
|
|
179
|
+
|
|
180
|
+
***
|
|
181
|
+
|
|
182
|
+
## 🔄 Breaking Changes
|
|
183
|
+
|
|
184
|
+
**Nenhum!** Esta release é 100% backward-compatible:
|
|
185
|
+
- ✅ Opção `maxAgeDays` deprecated mas funcional
|
|
186
|
+
- ✅ Comportamento padrão preservado
|
|
187
|
+
- ✅ APIs antigas continuam funcionando
|
|
188
|
+
- ✅ Migração gradual suportada
|
|
189
|
+
|
|
190
|
+
***
|
|
191
|
+
|
|
192
|
+
## 🎯 Melhorias Complementares
|
|
193
|
+
|
|
194
|
+
### Sistema de i18n para Diagnósticos
|
|
195
|
+
|
|
196
|
+
Sistema básico de internacionalização para mensagens de peer dependencies:
|
|
197
|
+
- ✅ Suporte a pt-BR (padrão) e en
|
|
198
|
+
- ✅ API para customização: `setPeerDepsLocale()`, `setPeerDepsMessages()`
|
|
199
|
+
- ✅ Mensagens extraídas para constantes (melhor manutenibilidade)
|
|
200
|
+
|
|
201
|
+
### Refatorações e Otimizações
|
|
202
|
+
- ✅ Strings de mensagens extraídas para constantes
|
|
203
|
+
- ✅ Separação de concerns (lógica vs conteúdo)
|
|
204
|
+
- ✅ Type safety aprimorado em toda API
|
|
205
|
+
- ✅ Performance otimizada (sem logs em produção)
|
|
206
|
+
- ✅ **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.
|
|
207
|
+
|
|
208
|
+
## 0.7.0
|
|
209
|
+
|
|
210
|
+
### Minor Changes
|
|
211
|
+
|
|
212
|
+
- [#124](https://github.com/lucianoedipo/react-lgpd-consent/pull/124) [`7669c4f`](https://github.com/lucianoedipo/react-lgpd-consent/commit/7669c4fba84b5cfea8f7da8ab65468110d3e77f7) Thanks [@lucianoedipo](https://github.com/lucianoedipo)! - # v0.7.0 - Código Limpo, Testes Aprimorados e Qualidade de Código
|
|
213
|
+
|
|
214
|
+
Esta release é parte do trabalho nas issues: [#60](https://github.com/lucianoedipo/react-lgpd-consent/issues/60), [#63](https://github.com/lucianoedipo/react-lgpd-consent/issues/63), [#64](https://github.com/lucianoedipo/react-lgpd-consent/issues/64), [#65](https://github.com/lucianoedipo/react-lgpd-consent/issues/65), [#68](https://github.com/lucianoedipo/react-lgpd-consent/issues/68), [#70](https://github.com/lucianoedipo/react-lgpd-consent/issues/70), [#71](https://github.com/lucianoedipo/react-lgpd-consent/issues/71), [#72](https://github.com/lucianoedipo/react-lgpd-consent/issues/72)
|
|
215
|
+
|
|
216
|
+
## 🧹 Correções de Lint e Code Quality
|
|
217
|
+
|
|
218
|
+
### Migração para APIs Modernas
|
|
219
|
+
- **globalThis**: Convertidos ~50+ usos de `window` e `global` para `globalThis.window` e `globalThis` (compatibilidade SSR/universal)
|
|
220
|
+
- **String.replaceAll()**: Migrado de `replace()` com regex global para `replaceAll()` (ES2021)
|
|
221
|
+
- **Object.hasOwn()**: Migrado de `Object.prototype.hasOwnProperty.call()` para `Object.hasOwn()` (ES2022)
|
|
222
|
+
- **Number.parseInt()**: Padronizado uso de `Number.parseInt()` em vez de `parseInt()` global
|
|
223
|
+
|
|
224
|
+
### TypeScript Configuration
|
|
225
|
+
- Adicionado `ES2021.String` ao lib do tsconfig para suportar `String.replaceAll()`
|
|
226
|
+
- Adicionado `ES2022.Object` ao lib do tsconfig para suportar `Object.hasOwn()`
|
|
227
|
+
- Mantida compatibilidade com target `ES2020`
|
|
228
|
+
|
|
229
|
+
> **ℹ️ Atenção à Compatibilidade com Browsers**
|
|
230
|
+
>
|
|
231
|
+
> Esta versão faz uso de recursos ES2021/ES2022 (`String.replaceAll()`, `Object.hasOwn()`, etc.), que não estão disponíveis em todos os navegadores (especialmente versões antigas do Safari, Edge ou Firefox). Se você utiliza este pacote em aplicações web que precisam suportar navegadores legados, é recomendado configurar um transpiler (como Babel) e/ou polyfills apropriados para garantir compatibilidade.
|
|
232
|
+
|
|
233
|
+
### Melhorias de Código
|
|
234
|
+
- **cookieDiscovery.ts**: Função `matchPattern` movida para outer scope (evita recriação)
|
|
235
|
+
- **validation.ts**: Adicionado warning quando prop `categories` não é fornecida
|
|
236
|
+
- **Condições**: Invertidas condições negadas para melhor legibilidade
|
|
237
|
+
- **Type Safety**: Correções de type assertions em testes
|
|
238
|
+
|
|
239
|
+
## 🧪 Aumento Significativo de Cobertura de Testes
|
|
240
|
+
|
|
241
|
+
### Cobertura Geral: 94.82% → 95.46% (+0.64%)
|
|
242
|
+
|
|
243
|
+
| Arquivo | Antes | Depois | Melhoria |
|
|
244
|
+
| ---------------------- | ------ | ----------- | -------- |
|
|
245
|
+
| **theme.ts** | 83.33% | **100%** ✅ | +16.67% |
|
|
246
|
+
| **cookieDiscovery.ts** | 88.13% | **96.61%** | +8.48% |
|
|
247
|
+
| **peerDepsCheck.ts** | 74.19% | **80.64%** | +6.45% |
|
|
248
|
+
| **validation.ts** | 96.87% | **98.24%** | +1.37% |
|
|
249
|
+
|
|
250
|
+
### Novos Testes Adicionados (+33 testes: 318 → 351)
|
|
251
|
+
|
|
252
|
+
#### peerDepsCheck.ts
|
|
253
|
+
- Testes para detecção de múltiplas instâncias React via DevTools hook
|
|
254
|
+
- Testes para verificação de versões React no limite inferior/superior do range
|
|
255
|
+
- Testes para logging de erros e warnings quando `logWarnings=true`
|
|
256
|
+
- Cobertura de edge cases de versão semver complexa
|
|
257
|
+
|
|
258
|
+
#### dataLayerEvents.ts
|
|
259
|
+
- Testes para `ensureDataLayer` criar dataLayer quando undefined
|
|
260
|
+
- Testes para preservação de eventos existentes no dataLayer
|
|
261
|
+
- Testes para origins programmatic/reset
|
|
262
|
+
- Testes para previousCategories vazias/undefined
|
|
263
|
+
- Testes de SSR safety (window parcialmente definido)
|
|
264
|
+
- Testes para falha silenciosa de dataLayer.push
|
|
265
|
+
|
|
266
|
+
#### cookieDiscovery.ts
|
|
267
|
+
- Testes para uso de cookies descobertos globalmente (`__LGPD_DISCOVERED_COOKIES__`)
|
|
268
|
+
- Testes para `registerOverrides=true` chamando `setCookieCatalogOverrides`
|
|
269
|
+
- Testes para cookies sem nome ou duplicados
|
|
270
|
+
- Testes para match de padrões wildcard
|
|
271
|
+
|
|
272
|
+
#### cookieUtils.ts
|
|
273
|
+
- Testes para JSON malformado e objetos vazios
|
|
274
|
+
- Testes para `buildConsentStorageKey` com caracteres especiais
|
|
275
|
+
- Testes para `createConsentAuditEntry` com estado mínimo
|
|
276
|
+
- Testes para uso de nomes customizados em `removeConsentCookie`
|
|
277
|
+
|
|
278
|
+
#### theme.ts (100% coverage)
|
|
279
|
+
- Testes completos para palette, typography e component overrides
|
|
280
|
+
- Testes para button contained hover shadows
|
|
281
|
+
- Testes para Paper e Dialog border radius
|
|
282
|
+
- Testes para função deprecada `defaultConsentTheme()`
|
|
283
|
+
- Verificação de novas instâncias a cada chamada
|
|
284
|
+
|
|
285
|
+
## 📚 Documentação
|
|
286
|
+
|
|
287
|
+
### DEVELOPMENT.md
|
|
288
|
+
- Adicionada seção **"Cobertura de Testes"** com tabela de métricas por módulo
|
|
289
|
+
- Comando para rodar testes com cobertura: `pnpm test:coverage`
|
|
290
|
+
- Tabela detalhada mostrando Statements/Branches/Functions/Lines por pacote
|
|
291
|
+
|
|
292
|
+
### TypeDoc
|
|
293
|
+
- Documentação regenerada com todas as APIs atualizadas
|
|
294
|
+
- 15 warnings aceitáveis sobre links relativos para pacotes do monorepo
|
|
295
|
+
|
|
296
|
+
## ✅ Validação
|
|
297
|
+
- ✅ **type-check**: Todos os tipos válidos (ES2021/ES2022 APIs suportadas)
|
|
298
|
+
- ✅ **lint**: Código limpo sem erros
|
|
299
|
+
- ✅ **test**: 351/351 testes passando (100%)
|
|
300
|
+
- ✅ **build**: Build limpo de todos os pacotes
|
|
301
|
+
- ✅ **docs**: TypeDoc gerado com sucesso
|
|
302
|
+
|
|
303
|
+
## 🔧 Arquivos Modificados
|
|
304
|
+
|
|
305
|
+
### Core Package
|
|
306
|
+
- `src/utils/scriptIntegrations.ts`: globalThis, Date.now()
|
|
307
|
+
- `src/utils/peerDepsCheck.ts`: globalThis, Number.parseInt()
|
|
308
|
+
- `src/utils/dataLayerEvents.ts`: globalThis, ??= operator
|
|
309
|
+
- `src/utils/cookieUtils.ts`: replaceAll(), globalThis, condição invertida
|
|
310
|
+
- `src/utils/cookieDiscovery.ts`: matchPattern outer scope
|
|
311
|
+
- `src/utils/validation.ts`: warning categories undefined
|
|
312
|
+
- `src/context/ConsentContext.tsx`: Object.hasOwn(), state deps
|
|
313
|
+
- `src/context/__tests__/CategoriesContext.test.tsx`: globalThis
|
|
314
|
+
- `__tests__/*`: +25 novos testes
|
|
315
|
+
|
|
316
|
+
### MUI Package
|
|
317
|
+
- `src/utils/theme.ts`: 100% coverage
|
|
318
|
+
- `src/utils/__tests__/theme.test.ts`: +8 novos testes
|
|
319
|
+
|
|
320
|
+
### Configuration
|
|
321
|
+
- `tsconfig.base.json`: ES2021.String, ES2022.Object no lib
|
|
322
|
+
|
|
323
|
+
### Documentation
|
|
324
|
+
- `DEVELOPMENT.md`: seção de cobertura de testes
|
|
325
|
+
|
|
326
|
+
***
|
|
327
|
+
|
|
328
|
+
**Breaking Changes:** Nenhuma
|
|
329
|
+
**Migration Required:** Não
|
|
330
|
+
|
|
331
|
+
Esta release foca em qualidade de código, testes robustos e aderência a padrões modernos do JavaScript/TypeScript.
|
|
332
|
+
|
|
3
333
|
## 0.6.3
|
|
4
334
|
|
|
5
335
|
### Patch Changes
|
|
@@ -42,5 +372,19 @@
|
|
|
42
372
|
- 🚀 Configuração de Turborepo para builds otimizados
|
|
43
373
|
- 📦 Configuração de Changesets para versionamento automatizado
|
|
44
374
|
|
|
45
|
-
|
|
46
|
-
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Versões Anteriores (< 0.6.0)
|
|
378
|
+
|
|
379
|
+
Para histórico completo de versões 0.5.x e anteriores, consulte:
|
|
380
|
+
|
|
381
|
+
- [CHANGELOG.md do pacote principal](../react-lgpd-consent/CHANGELOG.md)
|
|
382
|
+
- [Releases no GitHub](https://github.com/lucianoedipo/react-lgpd-consent/releases)
|
|
383
|
+
|
|
384
|
+
**Resumo de marcos importantes:**
|
|
385
|
+
|
|
386
|
+
- **v0.5.0** (25/10/2025): Arquitetura modular - criação dos pacotes `@react-lgpd-consent/core` e `@react-lgpd-consent/mui`
|
|
387
|
+
- **v0.4.5** (25/10/2025): DataLayer events para Google Tag Manager
|
|
388
|
+
- **v0.4.1** (21/09/2025): Expansão de integrações nativas (Hotjar, Mixpanel, Clarity, Intercom, Zendesk)
|
|
389
|
+
- **v0.3.0-v0.4.0**: Sistema de design tokens, categorias customizadas, testes de acessibilidade
|
|
390
|
+
- **v0.1.0-v0.2.x**: Implementação inicial com ConsentProvider, CookieBanner, PreferencesModal
|
package/README.md
CHANGED
|
@@ -62,6 +62,68 @@ 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
|
+
|
|
81
|
+
## 🆕 Novidades v0.7.0
|
|
82
|
+
|
|
83
|
+
### Callbacks de Lifecycle
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { ConsentProvider } from '@react-lgpd-consent/core'
|
|
87
|
+
|
|
88
|
+
<ConsentProvider
|
|
89
|
+
onConsentInit={(state) => console.log('Init:', state)}
|
|
90
|
+
onConsentChange={(current, previous) => {
|
|
91
|
+
console.log('Mudou:', { current, previous })
|
|
92
|
+
}}
|
|
93
|
+
onAuditLog={(entry) => {
|
|
94
|
+
// Enviar para backend
|
|
95
|
+
fetch('/api/audit', { method: 'POST', body: JSON.stringify(entry) })
|
|
96
|
+
}}
|
|
97
|
+
>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Presets ANPD
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
import { createAnpdCategories, ANPD_CATEGORY_PRESETS } from '@react-lgpd-consent/core'
|
|
104
|
+
|
|
105
|
+
// Preset BÁSICO
|
|
106
|
+
const basic = createAnpdCategories({ include: ['analytics'] })
|
|
107
|
+
|
|
108
|
+
// Preset COMPLETO
|
|
109
|
+
const full = createAnpdCategories({
|
|
110
|
+
include: ['analytics', 'marketing', 'functional', 'social', 'personalization']
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Auditoria de Consentimento
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
import { createConsentAuditEntry } from '@react-lgpd-consent/core'
|
|
118
|
+
|
|
119
|
+
const audit = createConsentAuditEntry(
|
|
120
|
+
{ consented: true, preferences: { analytics: true } },
|
|
121
|
+
{ action: 'update', storageKey: 'lgpd-consent__v1' }
|
|
122
|
+
)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
📖 **Saiba mais:** [TROUBLESHOOTING.md](../../TROUBLESHOOTING.md)
|
|
126
|
+
|
|
65
127
|
## 📚 Documentação
|
|
66
128
|
|
|
67
129
|
Para documentação completa, exemplos e API reference:
|
|
@@ -77,4 +139,3 @@ Para documentação completa, exemplos e API reference:
|
|
|
77
139
|
## 📄 Licença
|
|
78
140
|
|
|
79
141
|
MIT © [Luciano Édipo](https://github.com/lucianoedipo)
|
|
80
|
-
|