cdp-edge 2.0.0 → 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.
Files changed (34) hide show
  1. package/contracts/api-versions.json +12 -8
  2. package/dist/commands/install.js +1 -2
  3. package/dist/commands/setup.js +1 -2
  4. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +23 -23
  5. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +172 -72
  6. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +20 -0
  7. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +48 -16
  8. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +7 -7
  9. package/extracted-skill/tracking-events-generator/agents/database-agent.md +8 -8
  10. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +13 -13
  11. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +31 -7
  12. package/extracted-skill/tracking-events-generator/agents/email-agent.md +27 -0
  13. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +205 -0
  14. package/extracted-skill/tracking-events-generator/agents/google-agent.md +118 -0
  15. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +90 -4
  16. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +8 -641
  17. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +108 -0
  18. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +1 -1
  19. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +68 -8
  20. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +61 -18
  21. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +98 -0
  22. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +29 -19
  23. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +11 -1
  24. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +137 -28
  25. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +7 -8
  26. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +63 -0
  27. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +100 -5
  28. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +100 -0
  29. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
  30. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +16 -16
  31. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +140 -25
  32. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +12 -8
  33. package/package.json +2 -2
  34. package/server-edge-tracker/worker.js +53 -8
@@ -43,6 +43,124 @@ if (isVersionConflict) {
43
43
 
44
44
  ---
45
45
 
46
+ ## 🛡️ GOOGLE CONSENT MODE V2 — IMPLEMENTAÇÃO OBRIGATÓRIA
47
+
48
+ > **CRÍTICO**: Sem Consent Mode v2, campanhas Google Ads em audiências europeias são rejeitadas.
49
+ > Obrigatório para conformidade com GDPR (UE), LGPD (BR) e CCPA (EUA).
50
+
51
+ ### PASSO 1 — Inicialização (ANTES do gtag.js)
52
+
53
+ Inserir **antes** do snippet do gtag.js no `<head>`:
54
+
55
+ ```html
56
+ <!-- Google Consent Mode v2 — Inicializar NEGADO por padrão -->
57
+ <script>
58
+ window.dataLayer = window.dataLayer || [];
59
+ function gtag() { dataLayer.push(arguments); }
60
+
61
+ // OBRIGATÓRIO: definir consent ANTES de qualquer gtag() de medição
62
+ gtag('consent', 'default', {
63
+ 'ad_storage': 'denied', // cookies de anúncio bloqueados até opt-in
64
+ 'analytics_storage': 'denied', // cookies de analytics bloqueados até opt-in
65
+ 'ad_user_data': 'denied', // envio de dados de usuário para Google Ads
66
+ 'ad_personalization': 'denied', // personalização de anúncios
67
+ 'wait_for_update': 500 // aguardar CMP atualizar consentimento (ms)
68
+ });
69
+
70
+ // url_passthrough: preserva gclid/gbraid/wbraid na URL sem cookie
71
+ // Permite atribuição de cliques mesmo sem consent de analytics_storage
72
+ gtag('set', 'url_passthrough', true);
73
+
74
+ // ads_data_redaction: quando ad_storage=denied, reduz dados de clique enviados
75
+ gtag('set', 'ads_data_redaction', true);
76
+ </script>
77
+
78
+ <!-- Carregar gtag.js normalmente após o bloco acima -->
79
+ <script async src="https://www.googletagmanager.com/gtag/js?id=GA4_MEASUREMENT_ID"></script>
80
+ <script>
81
+ window.dataLayer = window.dataLayer || [];
82
+ function gtag() { dataLayer.push(arguments); }
83
+ gtag('js', new Date());
84
+ gtag('config', 'GA4_MEASUREMENT_ID', {
85
+ 'send_page_view': false // cdpTrack controla page_view manualmente
86
+ });
87
+ </script>
88
+ ```
89
+
90
+ ### PASSO 2 — Atualizar Consent após Opt-in do usuário
91
+
92
+ Integrar com o banner de cookies do site (LGPD/GDPR):
93
+
94
+ ```javascript
95
+ // Chamar quando usuário ACEITAR todos os cookies
96
+ function onConsentAccepted() {
97
+ gtag('consent', 'update', {
98
+ 'ad_storage': 'granted',
99
+ 'analytics_storage': 'granted',
100
+ 'ad_user_data': 'granted',
101
+ 'ad_personalization': 'granted'
102
+ });
103
+
104
+ // Opcional: disparar page_view após consent (se necessário)
105
+ gtag('event', 'page_view');
106
+ }
107
+
108
+ // Chamar quando usuário RECUSAR cookies não essenciais
109
+ function onConsentDeclined() {
110
+ gtag('consent', 'update', {
111
+ 'ad_storage': 'denied',
112
+ 'analytics_storage': 'denied',
113
+ 'ad_user_data': 'denied',
114
+ 'ad_personalization': 'denied'
115
+ });
116
+ }
117
+
118
+ // Aceitar apenas cookies analíticos (sem ads)
119
+ function onConsentAnalyticsOnly() {
120
+ gtag('consent', 'update', {
121
+ 'ad_storage': 'denied',
122
+ 'analytics_storage': 'granted',
123
+ 'ad_user_data': 'denied',
124
+ 'ad_personalization': 'denied'
125
+ });
126
+ }
127
+ ```
128
+
129
+ ### PASSO 3 — Verificação (via Intelligence Agent)
130
+
131
+ O Intelligence Agent verifica mensalmente se o Consent Mode está implementado:
132
+
133
+ ```javascript
134
+ // Checklist mínimo no código gerado (browser tracking):
135
+ // ✅ gtag('consent', 'default', {...}) ANTES do gtag.js
136
+ // ✅ ad_storage: 'denied' no default
137
+ // ✅ analytics_storage: 'denied' no default
138
+ // ✅ ad_user_data: 'denied' no default
139
+ // ✅ ad_personalization: 'denied' no default
140
+ // ✅ url_passthrough: true ativo
141
+ // ✅ gtag('consent', 'update', {...}) no callback do CMP/banner
142
+ ```
143
+
144
+ ### PASSO 4 — Integração com cdpTrack (Preservação de gclid)
145
+
146
+ ```javascript
147
+ // O cdpTrack.js deve capturar gclid/gbraid/wbraid da URL mesmo sem consent
148
+ // url_passthrough: true garante que os parâmetros são passados como parâmetros de URL,
149
+ // não como cookies — respeitando consent de analytics_storage
150
+
151
+ function captureGoogleClickId() {
152
+ const params = new URLSearchParams(window.location.search);
153
+ return {
154
+ gclid: params.get('gclid') || null,
155
+ gbraid: params.get('gbraid') || null,
156
+ wbraid: params.get('wbraid') || null
157
+ };
158
+ }
159
+ // Esses IDs são enviados para o Worker e salvos no D1 para Enhanced Conversions offline
160
+ ```
161
+
162
+ ---
163
+
46
164
  ## 🛠️ O QUE VOCÊ GERA
47
165
 
48
166
  ### 1. Browser (Direct SDK)
@@ -71,7 +71,7 @@ export default {
71
71
  const url = new URL(request.url);
72
72
 
73
73
  // Handler principal
74
- if (url.pathname === '/api/track') {
74
+ if (url.pathname === '/track') {
75
75
  return handleTracking(request, env, ctx);
76
76
  }
77
77
 
@@ -157,12 +157,12 @@ Timestamp: ${new Date().toISOString()}
157
157
  `.trim();
158
158
 
159
159
  // Enviar via WhatsApp Agent
160
- if (env.WA_PHONE_ID && env.ADMIN_PHONE_NUMBER) {
161
- await fetch(`https://graph.facebook.com/v22.0/${env.WA_PHONE_ID}/messages`, {
160
+ if (env.WHATSAPP_PHONE_NUMBER_ID && env.ADMIN_PHONE_NUMBER) {
161
+ await fetch(`https://graph.facebook.com/v22.0/${env.WHATSAPP_PHONE_NUMBER_ID}/messages`, {
162
162
  method: 'POST',
163
163
  headers: {
164
164
  'Content-Type': 'application/json',
165
- 'Authorization': `Bearer ${env.WA_ACCESS_TOKEN}`
165
+ 'Authorization': `Bearer ${env.WHATSAPP_ACCESS_TOKEN}`
166
166
  },
167
167
  body: JSON.stringify({
168
168
  messaging_product: 'whatsapp',
@@ -363,3 +363,89 @@ INTELLIGENCE_SCHEDULE_MONTHLY = "0 3 1 * *"
363
363
  3. **Alerta Pré-ativo**: Antes de uma API ser descontinuada, alertar com 30 dias de antecedência
364
364
  4. **False-Positive Safe**: Se houver dúvida sobre versão de API, marcar como "verificação manual necessária" em vez de alerta
365
365
  5. **Backoff de Check**: Se o check falhar (API indisponível), tentar novamente em 1 hora (não disparar alerta imediato)
366
+ 6. **Anti-Spam**: Não disparar alerta se o mesmo problema já foi reportado nas últimas 24h
367
+ 7. **Prioridade Correta**: CRITICAL (agora), HIGH (até 1h), MEDIUM (no relatório)
368
+ 8. **Log de Falhas de Alerta**: Se WhatsApp falhar 3× consecutivas, registrar no D1 e tentar via CallMeBot fallback
369
+
370
+ ---
371
+
372
+ ## 🗄️ SCHEMA D1 — intelligence_logs
373
+
374
+ Adicionar ao `server-edge-tracker/schema.sql`:
375
+
376
+ ```sql
377
+ -- TABELA DE LOGS DO INTELLIGENCE AGENT
378
+ CREATE TABLE IF NOT EXISTS intelligence_logs (
379
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
380
+ run_type TEXT NOT NULL, -- 'weekly' | 'monthly' | 'on-demand'
381
+ platforms_checked TEXT, -- JSON array de plataformas verificadas
382
+ issues_found TEXT, -- JSON array de issues encontradas
383
+ issues_count INTEGER DEFAULT 0,
384
+ created_at TEXT DEFAULT (datetime('now'))
385
+ );
386
+
387
+ CREATE INDEX IF NOT EXISTS idx_intel_logs_type ON intelligence_logs(run_type);
388
+ CREATE INDEX IF NOT EXISTS idx_intel_logs_created ON intelligence_logs(created_at);
389
+ ```
390
+
391
+ ---
392
+
393
+ ## ✅ CHECKLIST DE IMPLEMENTAÇÃO
394
+
395
+ Antes de considerar o scheduling implementado, verificar:
396
+
397
+ - [ ] Cron triggers adicionados ao `wrangler.toml` (`0 2 * * 7` e `0 3 1 * *`)
398
+ - [ ] Handlers `scheduled()` adicionados ao `worker.js` (Cloudflare usa `scheduled`, não `fetch`)
399
+ - [ ] Schema D1 atualizado com tabela `intelligence_logs`
400
+ - [ ] Funções de check de versão implementadas com endpoints reais
401
+ - [ ] Funções de auditoria de privacidade implementadas
402
+ - [ ] Sistema de alerta (WhatsApp/CallMeBot) integrado com anti-spam 24h
403
+ - [ ] Logs de execução sendo salvos no D1
404
+ - [ ] Memory Agent atualizado após cada check
405
+ - [ ] Backoff implementado para evitar spam de alertas
406
+ - [ ] Teste manual executado (`GET /api/intelligence/check`)
407
+
408
+ ---
409
+
410
+ ## INPUTS RECEBIDOS
411
+
412
+ - `wrangler.toml` do Worker (para injetar Cron Triggers)
413
+ - `worker.js` (para injetar handlers de `scheduled` events)
414
+ - `schema.sql` (para adicionar tabela `intelligence_logs`)
415
+ - Secrets: `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_ACCESS_TOKEN`, `ADMIN_PHONE_NUMBER` (para alertas)
416
+ - `contracts/api-versions.json` (fonte de verdade das versões atuais)
417
+
418
+ ## RESPONSABILIDADE
419
+
420
+ - Configurar Cron Triggers no `wrangler.toml`: semanal (domingo 02:00 UTC) e mensal (1º do mês 03:00 UTC)
421
+ - Implementar handler `scheduled(event, env, ctx)` no Worker
422
+ - Chamar `runIntelligenceWeekly()` quando `event.cron === "0 2 * * 7"`
423
+ - Chamar `runIntelligenceMonthly()` quando `event.cron === "0 3 1 * *"`
424
+ - Adicionar tabela `intelligence_logs` ao schema D1
425
+ - Disparar alertas WhatsApp/CallMeBot ao admin apenas quando houver issues críticos
426
+ - Evitar spam: não repetir alerta do mesmo issue em menos de 24h
427
+ - Registrar resultado de cada execução no D1 (`intelligence_logs`)
428
+
429
+ ## SAÍDA
430
+
431
+ ```json
432
+ {
433
+ "arquivos_modificados": [
434
+ "wrangler.toml (cron triggers adicionados)",
435
+ "worker.js (handler scheduled() adicionado)",
436
+ "schema.sql (tabela intelligence_logs adicionada)"
437
+ ],
438
+ "crons_configurados": {
439
+ "semanal": "0 2 * * 7 (domingo 02:00 UTC — check de versões)",
440
+ "mensal": "0 3 1 * * (dia 1 03:00 UTC — auditoria privacidade)"
441
+ },
442
+ "endpoint_manual": "GET /api/intelligence/check",
443
+ "alertas": {
444
+ "canal_primario": "WhatsApp Meta Cloud API v22.0",
445
+ "canal_fallback": "CallMeBot",
446
+ "anti_spam": "24h cooldown por issue"
447
+ },
448
+ "d1_tabela": "intelligence_logs",
449
+ "secrets_necessarios": ["WHATSAPP_PHONE_NUMBER_ID", "WHATSAPP_ACCESS_TOKEN", "ADMIN_PHONE_NUMBER"]
450
+ }
451
+ ```