cdp-edge 1.2.2 → 1.4.0

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 (141) hide show
  1. package/README.md +153 -306
  2. package/bin/cdp-edge.js +71 -61
  3. package/contracts/agent-versions.json +682 -0
  4. package/contracts/api-versions.json +372 -368
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -52
  7. package/dist/commands/infra.js +54 -54
  8. package/dist/commands/install.js +26 -3
  9. package/dist/commands/server.js +174 -174
  10. package/dist/commands/setup.js +332 -100
  11. package/dist/commands/validate.js +248 -84
  12. package/dist/index.js +12 -12
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/whatsapp-ctwa.md +5 -4
  17. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
  18. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
  19. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -364
  20. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  21. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +1 -1
  22. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +41 -41
  23. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  24. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +40 -50
  25. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +174 -74
  26. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +1 -1
  27. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +25 -5
  28. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +10 -10
  29. package/extracted-skill/tracking-events-generator/agents/database-agent.md +43 -42
  30. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +22 -22
  31. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  32. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +23 -9
  33. package/extracted-skill/tracking-events-generator/agents/email-agent.md +28 -1
  34. package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +253 -0
  35. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +206 -1
  36. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  37. package/extracted-skill/tracking-events-generator/agents/google-agent.md +128 -2
  38. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +191 -31
  39. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  40. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +145 -34
  41. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +1 -1
  42. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +24 -5
  43. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
  44. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +588 -93
  45. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
  47. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
  48. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +769 -0
  49. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
  50. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
  51. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
  52. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
  53. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
  54. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
  55. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
  56. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
  57. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
  58. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
  59. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
  60. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
  61. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  62. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
  63. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
  64. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
  65. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
  66. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
  67. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
  68. package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
  69. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
  70. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
  71. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
  72. package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
  73. package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
  74. package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
  75. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  76. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
  77. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
  78. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
  79. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
  80. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
  81. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
  82. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
  83. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
  84. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  85. package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
  86. package/package.json +89 -75
  87. package/scripts/build-sdk.js +106 -0
  88. package/server-edge-tracker/.client.env.example +14 -0
  89. package/server-edge-tracker/INSTALAR.md +222 -23
  90. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  91. package/server-edge-tracker/config/utm-mapping.json +64 -0
  92. package/server-edge-tracker/deploy-client.cjs +76 -0
  93. package/server-edge-tracker/index.ts +1230 -0
  94. package/server-edge-tracker/migrate-v7.sql +64 -0
  95. package/server-edge-tracker/modules/db.ts +710 -0
  96. package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
  97. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  98. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  99. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  100. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  101. package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
  102. package/server-edge-tracker/modules/intelligence.ts +589 -0
  103. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  104. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  105. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  106. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  107. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  108. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  109. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  110. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  111. package/server-edge-tracker/modules/nurture.ts +257 -0
  112. package/server-edge-tracker/modules/utils.ts +311 -0
  113. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  114. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  115. package/server-edge-tracker/schema-bidding.sql +86 -0
  116. package/server-edge-tracker/schema-fraud.sql +90 -0
  117. package/server-edge-tracker/schema-indexes.sql +67 -0
  118. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  119. package/server-edge-tracker/schema-quiz.sql +52 -0
  120. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  121. package/server-edge-tracker/schema-segmentation.sql +219 -0
  122. package/server-edge-tracker/schema-utm.sql +82 -0
  123. package/server-edge-tracker/schema.sql +281 -265
  124. package/server-edge-tracker/types.ts +275 -0
  125. package/server-edge-tracker/wrangler.toml +140 -85
  126. package/templates/lancamento-imobiliario.md +344 -0
  127. package/templates/multi-step-checkout.md +3 -4
  128. package/templates/pinterest/conversions-api-template.js +144 -144
  129. package/templates/pinterest/event-mappings.json +48 -48
  130. package/templates/pinterest/tag-template.js +28 -28
  131. package/templates/quiz-funnel.md +83 -19
  132. package/templates/reddit/conversions-api-template.js +205 -205
  133. package/templates/reddit/event-mappings.json +56 -56
  134. package/templates/reddit/pixel-template.js +12 -39
  135. package/templates/scenarios/behavior-engine.js +45 -22
  136. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  137. package/docs/installation.md +0 -155
  138. package/docs/quick-start.md +0 -185
  139. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
  140. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
  141. package/server-edge-tracker/worker.js +0 -2574
@@ -33,7 +33,7 @@ Database: Cloudflare D1 (Persistência)
33
33
  ## 📊 FUNCIONALIDADES DO SDK
34
34
 
35
35
  ### 1. Direct Fetch
36
- O rastreamento utiliza chamadas diretas via `fetch()` para o endpoint `/api/tracking` no mesmo domínio.
36
+ O rastreamento utiliza chamadas diretas via `fetch()` para o endpoint `/track` no mesmo domínio.
37
37
 
38
38
  ### 2. Deduplicação
39
39
  Gera um `event_id` único para cada evento disparado no browser para que o Worker possa bater com a CAPI.
@@ -109,99 +109,199 @@ Implementado via `anti-blocking.js`:
109
109
 
110
110
  ## 💻 EXEMPLO DE CÓDIGO GERADO
111
111
 
112
- ### `cdpTrack.js` (SDK Principal)
112
+ ### `cdpTrack.js` (SDK Principal — Padrão Multi-Plataforma)
113
+
114
+ > Este é o padrão canônico do cdpTrack SDK para Meta, TikTok e GA4.
115
+ > Cada agente de plataforma injeta seus eventos neste SDK via Browser Tracking Agent.
113
116
 
114
117
  ```javascript
115
118
  /**
116
119
  * cdpTrack SDK - CDP Edge Quantum Tier
117
120
  * Browser Tracking SDK Principal
121
+ * Suporta: Meta Pixel, TikTok Pixel, GA4, Pinterest Tag, Reddit Pixel, Spotify Pixel
118
122
  */
119
123
 
120
- (function(w, d, s, l) {
121
- w._pbq = w._pbq || [];
122
- w._pbq.push = w._pbq.push || [];
123
- w._spotify = w._spotify || {};
124
-
125
- // Carregar configuração
126
- const config = window.cdpTrack?.config || {};
124
+ (function(w) {
125
+ 'use strict';
127
126
 
128
- // Inicializar Spotify Pixel (se configurado)
129
- if (config.spotifyPixelId) {
130
- w._spotify.pixelId = config.spotifyPixelId;
131
- w._spotify.currency = config.currency || 'USD';
127
+ // ──────────────────────────────────────────────
128
+ // CORE: Geração de event_id único (deduplicação)
129
+ // O mesmo event_id deve ser usado no browser E no servidor (CAPI)
130
+ // ──────────────────────────────────────────────
131
+ function generateEventId() {
132
+ return 'evt_' + Date.now() + '_' + Math.random().toString(36).substring(2, 11);
132
133
  }
133
134
 
134
- // Função principal de envio
135
- w._spotify.trackEvent = function(eventName, params) {
136
- const eventId = cdpTrack.generateEventId();
137
-
138
- // Track localmente
139
- w._spq.push({
140
- e: eventName,
141
- params: params,
142
- eventId: eventId,
143
- platform: 'spotify'
144
- });
145
-
146
- // Enviar para servidor (via cdpTrack)
147
- if (window.cdpTrack && window.cdpTrack.submit) {
148
- window.cdpTrack.submit('spotify', {
149
- event: eventName,
150
- event_id: eventId,
151
- ...params
135
+ // ──────────────────────────────────────────────
136
+ // CORE: Envio para Cloudflare Worker (same-domain)
137
+ // Usa /track no mesmo domínio — imune a ad-blockers
138
+ // ──────────────────────────────────────────────
139
+ async function sendToWorker(eventName, payload) {
140
+ const eventId = generateEventId();
141
+
142
+ const body = {
143
+ event: eventName,
144
+ event_id: eventId, // CRÍTICO: mesmo ID usado nas CAPIs
145
+ url: window.location.href,
146
+ referrer: document.referrer,
147
+ timestamp: Date.now(),
148
+ ...payload
149
+ };
150
+
151
+ try {
152
+ // Tentativa primária: fetch
153
+ await fetch('/track', {
154
+ method: 'POST',
155
+ headers: { 'Content-Type': 'application/json' },
156
+ body: JSON.stringify(body),
157
+ keepalive: true
152
158
  });
159
+ } catch (_) {
160
+ // Fallback: Beacon API (funciona mesmo no unload da página)
161
+ navigator.sendBeacon('/track', JSON.stringify(body));
153
162
  }
154
- };
155
163
 
156
- // Eventos Padrão Spotify
157
- w._spotify.Content = function(contentName, contentId, params) {
158
- w._spotify.trackEvent('ViewContent', {
159
- content_name: contentName,
160
- content_id: contentId,
161
- ...params
162
- });
163
- };
164
+ return eventId;
165
+ }
164
166
 
165
- w._spotify.AddToCart = function(contentName, contentId, cartId, params) {
166
- w._spotify.trackEvent('AddToCart', {
167
- content_name: contentName,
168
- content_id: contentId,
169
- cart_id: cartId,
170
- ...params
171
- });
172
- };
167
+ // ──────────────────────────────────────────────
168
+ // CORE: Captura de cookies first-party
169
+ // ──────────────────────────────────────────────
170
+ function getCookie(name) {
171
+ const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
172
+ return match ? decodeURIComponent(match[2]) : null;
173
+ }
173
174
 
174
- w._spotify.Purchase = function(contentName, contentId, value, currency, params) {
175
- w._spotify.trackEvent('Purchase', {
176
- content_name: contentName,
177
- content_id: contentId,
178
- value: value,
179
- currency: currency,
180
- ...params
181
- });
182
- };
175
+ // ──────────────────────────────────────────────
176
+ // CORE: Captura de click IDs da URL (Meta, TikTok, Google)
177
+ // ──────────────────────────────────────────────
178
+ function getClickIds() {
179
+ const params = new URLSearchParams(window.location.search);
180
+ return {
181
+ fbclid: params.get('fbclid') || getCookie('fbclid') || null,
182
+ ttclid: params.get('ttclid') || getCookie('ttclid') || null,
183
+ gclid: params.get('gclid') || null,
184
+ gbraid: params.get('gbraid') || null,
185
+ wbraid: params.get('wbraid') || null,
186
+ fbp: getCookie('_fbp') || null,
187
+ fbc: getCookie('_fbc') || null,
188
+ ttp: getCookie('_ttp') || null,
189
+ uid: getCookie('_cdp_uid') || null // Identity Graph first-party cookie
190
+ };
191
+ }
183
192
 
184
- w._spotify.Lead = function(contentName, contentId, leadType, params) {
185
- w._spotify.trackEvent('Lead', {
186
- content_name: contentName,
187
- content_id: contentId,
188
- lead_type: leadType,
189
- ...params
190
- });
191
- };
193
+ // ──────────────────────────────────────────────
194
+ // API PÚBLICA
195
+ // ──────────────────────────────────────────────
196
+ const cdpTrack = {
197
+ generateEventId,
198
+
199
+ /**
200
+ * Rastrear evento genérico — enviado para o Worker
201
+ * O Worker despacha para Meta CAPI, GA4 MP, TikTok Events API etc.
202
+ *
203
+ * @param {string} eventName - Nome do evento (ex: 'Lead', 'Purchase', 'PageView')
204
+ * @param {Object} params - Parâmetros adicionais do evento
205
+ */
206
+ track(eventName, params = {}) {
207
+ const clickIds = getClickIds();
208
+ return sendToWorker(eventName, { ...clickIds, ...params });
209
+ },
210
+
211
+ /**
212
+ * Rastrear Lead (captura de formulário)
213
+ * Enviar dados PII crus — o Worker faz SHA-256 no servidor
214
+ */
215
+ trackLead(userData = {}) {
216
+ const clickIds = getClickIds();
217
+ return sendToWorker('Lead', {
218
+ ...clickIds,
219
+ email: userData.email || null, // Worker aplica SHA-256
220
+ phone: userData.phone || null, // Worker aplica E.164 + SHA-256
221
+ first_name: userData.first_name || null,
222
+ last_name: userData.last_name || null,
223
+ city: userData.city || null,
224
+ state: userData.state || null,
225
+ zip: userData.zip || null,
226
+ country: userData.country || 'BR'
227
+ });
228
+ },
192
229
 
193
- w._spotify.Signup = function(contentName, contentId, signupType, params) {
194
- w._spotify.trackEvent('Signup', {
195
- content_name: contentName,
196
- content_id: contentId,
197
- signup_type: signupType,
198
- ...params
199
- });
230
+ /**
231
+ * Rastrear Purchase (confirmação de compra)
232
+ */
233
+ trackPurchase(orderData = {}) {
234
+ const clickIds = getClickIds();
235
+ return sendToWorker('Purchase', {
236
+ ...clickIds,
237
+ value: orderData.value || 0,
238
+ currency: orderData.currency || 'BRL',
239
+ order_id: orderData.order_id || null,
240
+ content_name: orderData.product || null
241
+ });
242
+ },
243
+
244
+ /**
245
+ * Rastrear PageView — chamar no load da página
246
+ */
247
+ trackPageView() {
248
+ const clickIds = getClickIds();
249
+ return sendToWorker('PageView', { ...clickIds });
250
+ },
251
+
252
+ /**
253
+ * Rastrear InitiateCheckout
254
+ */
255
+ trackInitiateCheckout(checkoutData = {}) {
256
+ const clickIds = getClickIds();
257
+ return sendToWorker('InitiateCheckout', {
258
+ ...clickIds,
259
+ value: checkoutData.value || 0,
260
+ currency: checkoutData.currency || 'BRL'
261
+ });
262
+ }
200
263
  };
201
264
 
202
- })(window, document, 'script', 'location');
265
+ // Expor no window
266
+ w.cdpTrack = cdpTrack;
267
+
268
+ // Auto page_view no load
269
+ if (document.readyState === 'loading') {
270
+ document.addEventListener('DOMContentLoaded', () => cdpTrack.trackPageView());
271
+ } else {
272
+ cdpTrack.trackPageView();
273
+ }
274
+
275
+ })(window);
203
276
  ```
204
277
 
278
+ ### Uso típico no HTML do cliente
279
+
280
+ ```html
281
+ <!-- 1. Carregar o SDK -->
282
+ <script src="/tracking/cdpTrack.js"></script>
283
+
284
+ <!-- 2. Rastrear lead ao submeter formulário -->
285
+ <script>
286
+ document.getElementById('lead-form').addEventListener('submit', function(e) {
287
+ cdpTrack.trackLead({
288
+ email: document.getElementById('email').value,
289
+ phone: document.getElementById('phone').value,
290
+ first_name: document.getElementById('name').value
291
+ });
292
+ });
293
+ </script>
294
+
295
+ <!-- 3. Rastrear checkout (botão de compra) -->
296
+ <script>
297
+ document.getElementById('buy-btn').addEventListener('click', function() {
298
+ cdpTrack.trackInitiateCheckout({ value: 97.00, currency: 'BRL' });
299
+ });
300
+ </script>
301
+ ```
302
+
303
+ > **Nota:** O Worker recebe os dados crus, aplica SHA-256, e despacha para Meta CAPI v22.0, GA4 MP, TikTok Events API v1.3 e demais plataformas configuradas — tudo em paralelo via `Promise.allSettled`.
304
+
205
305
  ---
206
306
 
207
307
  ## 🔧 INTEGRAÇÃO COM OUTROS AGENTES
@@ -211,7 +311,7 @@ Implementado via `anti-blocking.js`:
211
311
  | Depende de | Input Esperado | O que faz com isso |
212
312
  |-------------|----------------|------------------|
213
313
  | **Page Analyzer** | Lista de elementos HTML | Mapeia `content_name` e `content_id` |
214
- | **Server Tracking Agent** | Lista de plataformas | Adiciona endpoint Spotify `/api/wh/spotify` |
314
+ | **Server Tracking Agent** | Lista de plataformas | Adiciona endpoint Spotify `/webhook/spotify` |
215
315
  | **Premium Tracking Intelligence** | Estratégia de tracking | Define eventos prioritários para Spotify |
216
316
  | **Validator Agent** | Código gerado | Valida conformidade com Spotify API v1 |
217
317
 
@@ -137,7 +137,7 @@ Regras que nunca podem ser violadas, independente do contexto:
137
137
  ## ESCOPO
138
138
 
139
139
  Este agente monitora:
140
- - `server-edge-tracker/worker.js` — código crítico de produção
140
+ - `server-edge-tracker/index.ts` — código crítico de produção
141
141
  - `extracted-skill/tracking-events-generator/cdpTrack.js` — SDK browser
142
142
  - `extracted-skill/tracking-events-generator/agents/*.md` — definições de agentes
143
143
  - `server-edge-tracker/wrangler.toml` — configuração de infraestrutura
@@ -183,7 +183,7 @@ CREATE INDEX IF NOT EXISTS idx_consent_policy_version
183
183
 
184
184
  ### Consent Collection & Storage
185
185
 
186
- ```javascript
186
+ ```typescript
187
187
  /**
188
188
  * Consent Manager
189
189
  * Manages user consent collection, storage, and tracking
@@ -559,7 +559,7 @@ let consentManager = null;
559
559
 
560
560
  ### GDPR/LGPD/CCPA Data Rights Implementation
561
561
 
562
- ```javascript
562
+ ```typescript
563
563
  /**
564
564
  * Data Rights Manager
565
565
  * Handles GDPR/LGPD/CCPA data rights: access, deletion, portability, rectification
@@ -1110,7 +1110,7 @@ let dataRightsManager = null;
1110
1110
 
1111
1111
  ### Automated Data Retention Policies
1112
1112
 
1113
- ```javascript
1113
+ ```typescript
1114
1114
  /**
1115
1115
  * Data Retention Manager
1116
1116
  * Manages automated data retention and deletion policies
@@ -1381,7 +1381,7 @@ let dataRetentionManager = null;
1381
1381
 
1382
1382
  ### Comprehensive Audit Logging
1383
1383
 
1384
- ```javascript
1384
+ ```typescript
1385
1385
  /**
1386
1386
  * Compliance Audit Logger
1387
1387
  * Records all compliance-related activities for audit purposes
@@ -1533,7 +1533,7 @@ let complianceAuditLogger = null;
1533
1533
 
1534
1534
  ### Compliance Management Endpoints
1535
1535
 
1536
- ```javascript
1536
+ ```typescript
1537
1537
  /**
1538
1538
  * Compliance Management Endpoints
1539
1539
  */
@@ -2044,6 +2044,26 @@ async function handleGetCurrentPolicy(request, env) {
2044
2044
  - **security-enterprise-agent.md**: Usa encryption de PII para LGPD/GDPR
2045
2045
  - **attribution-agent.md**: Respeita consentimento para analytics e marketing
2046
2046
  - **master-orchestrator.md**: Implementa middleware de consentimento antes de tracking
2047
+ - **validator-agent.md**: O Compliance Agent DEVE ser consultado pelo Validator Agent para verificar conformidade de PII. Fluxo:
2048
+
2049
+ ```
2050
+ validator-agent (auditoria do código gerado)
2051
+ └─► checkComplianceCompliance(generatedCode)
2052
+ ├─ Verificar: SHA-256 aplicado em todos os campos PII (em, ph, fn, ln)?
2053
+ ├─ Verificar: Google Consent Mode v2 implementado (ad_storage, analytics_storage)?
2054
+ ├─ Verificar: url_passthrough: true ativo?
2055
+ ├─ Verificar: PII nunca logada em plaintext?
2056
+ └─ Verificar: opt-in explícito antes de tracking de marketing?
2057
+
2058
+ // No validator-agent, chamar:
2059
+ const complianceCheck = await validateComplianceRequirements(generatedBrowserCode, generatedWorkerCode);
2060
+ if (!complianceCheck.passed) {
2061
+ // Bloquear entrega e reportar issues ao Master Orchestrator
2062
+ return { status: 'BLOCKED', issues: complianceCheck.issues };
2063
+ }
2064
+ ```
2065
+
2066
+ - **google-agent.md**: Consent Mode v2 gerado por este agente valida conformidade detectada pelo Compliance Agent
2047
2067
 
2048
2068
  ---
2049
2069
 
@@ -94,18 +94,18 @@ Definir o Dashboard como um **Centro de Comando de Dados** que equilibra:
94
94
  - Dados de evento: 15 minutos
95
95
 
96
96
  **Implementação:**
97
- ```javascript
97
+ ```typescript
98
98
  // Carregar dados do cache
99
- const fetchMetrics = async (forceRefresh = false) => {
99
+ const fetchMetrics = async (env, forceRefresh = false) => {
100
100
  const cacheKey = 'dashboard_metrics';
101
- const cached = await KV.get(cacheKey);
101
+ const cached = await env.GEO_CACHE.get(cacheKey);
102
102
 
103
103
  if (cached && !forceRefresh) {
104
104
  return JSON.parse(cached);
105
105
  }
106
106
 
107
107
  // Cache miss ou refresh forçado — consultar D1
108
- const metrics = await DB.prepare(`
108
+ const metrics = await env.DB.prepare(`
109
109
  SELECT
110
110
  AVG(heat_score) as avg_heat,
111
111
  COUNT(DISTINCT fingerprint) as total_users,
@@ -115,7 +115,7 @@ const fetchMetrics = async (forceRefresh = false) => {
115
115
  `).all();
116
116
 
117
117
  // Salvar no KV com TTL de 1 hora
118
- await KV.put(cacheKey, JSON.stringify(metrics), { expirationTtl: 3600 });
118
+ await env.GEO_CACHE.put(cacheKey, JSON.stringify(metrics), { expirationTtl: 3600 });
119
119
 
120
120
  return metrics;
121
121
  };
@@ -129,7 +129,7 @@ const fetchMetrics = async (forceRefresh = false) => {
129
129
  - Desativação manual ou timeout de inatividade
130
130
 
131
131
  **Implementação:**
132
- ```javascript
132
+ ```typescript
133
133
  const useRealTime = async () => {
134
134
  // WebSockets ou Server-Sent Events (SSE)
135
135
  const eventSource = new EventSource('/api/metrics/stream');
@@ -187,7 +187,7 @@ Invalidação:
187
187
 
188
188
  ### Para Cloudflare Worker
189
189
 
190
- ```javascript
190
+ ```typescript
191
191
  // ENDPOINTS DE CONSULTA (otimizados)
192
192
  export const DASHBOARD_API = {
193
193
  // Métricas globais (cache no KV)
@@ -217,13 +217,13 @@ export const DASHBOARD_API = {
217
217
  };
218
218
 
219
219
  // HANDLER DE SINCronizaÇÃO (atualização de cache)
220
- export async function invalidateCache(domain, pattern) {
220
+ export async function invalidateCache(domain, pattern, env) {
221
221
  const deletePattern = `${domain}:${pattern}`;
222
222
 
223
223
  // Deletar do KV
224
- const keys = await KV.list({ prefix: deletePattern });
224
+ const keys = await env.GEO_CACHE.list({ prefix: deletePattern });
225
225
  for (const key of keys.keys) {
226
- await KV.delete(key);
226
+ await env.GEO_CACHE.delete(key);
227
227
  }
228
228
 
229
229
  // Retornar contagem
@@ -6,6 +6,14 @@ Enquanto o `server-tracking-agent` define **o que o Worker FAZ**, você define *
6
6
 
7
7
  ---
8
8
 
9
+ ## ✅ REGRAS CRÍTICAS
10
+
11
+ 0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia os IDs de Recursos Cloudflare (`D1_DATABASE_ID`, `KV_ID`, `R2_BUCKET_NAME`, `ZONE_ID`) e configurações de bindings consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute configurações de infraestrutura exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
12
+ 1. Cloudflare-Only: Sem dependências externas.
13
+ 2. Same-Domain: Worker no domínio do site (anti-adblock).
14
+
15
+ ---
16
+
9
17
  ## 🏛️ RESPONSABILIDADES EXCLUSIVAS
10
18
 
11
19
  | Domínio | Você é dono de |
@@ -27,16 +35,16 @@ Enquanto o `server-tracking-agent` define **o que o Worker FAZ**, você define *
27
35
  ### Worker Ativo
28
36
  ```
29
37
  Nome: server-edge-tracker
30
- URL: https://server-edge-tracker.suporte-ed9.workers.dev
31
- Account: suporte@kadoshmkt.com.br
32
- ID: ed96c1aa212ab5ab2e97e522b9a0b49b
33
- Deploy: 2026-03-29 (último)
38
+ URL: https://SEU_WORKER.SEU_USUARIO.workers.dev
39
+ Account: SEU_EMAIL@SEUDOMINIO.com.br
40
+ ID: SEU_CLOUDFLARE_ACCOUNT_ID
41
+ Deploy: (data do último deploy)
34
42
  ```
35
43
 
36
44
  ### `wrangler.toml` — Estado Real
37
45
  ```toml
38
46
  name = "server-edge-tracker"
39
- main = "worker.js"
47
+ main = "index.ts"
40
48
  compatibility_date = "2025-01-01"
41
49
  compatibility_flags = ["nodejs_compat"]
42
50
 
@@ -45,13 +53,13 @@ compatibility_flags = ["nodejs_compat"]
45
53
  META_PIXEL_ID = "SEU_PIXEL_ID"
46
54
  GA4_MEASUREMENT_ID = "G-XXXXXXXXXX"
47
55
  TIKTOK_PIXEL_ID = "CXXXXXXXXXXXXXXX"
48
- SITE_DOMAIN = "server-edge-tracker.suporte-ed9.workers.dev"
56
+ SITE_DOMAIN = "SEU_DOMINIO"
49
57
 
50
58
  # ── D1 Database ───────────────────────────────────────────────────────────────
51
59
  [[d1_databases]]
52
60
  binding = "DB"
53
61
  database_name = "cdp-edge-db"
54
- database_id = "7867d38f-5fa8-4c17-b465-386211422c09"
62
+ database_id = "SEU_D1_DATABASE_ID"
55
63
 
56
64
  # ── Workers AI ────────────────────────────────────────────────────────────────
57
65
  [ai]
@@ -67,10 +75,10 @@ crons = ["0 2 * * 7", "0 3 1 * *"]
67
75
  ## 🗄️ BINDING 1 — D1 DATABASE (`env.DB`)
68
76
 
69
77
  ### Banco: `cdp-edge-db`
70
- - **ID:** `7867d38f-5fa8-4c17-b465-386211422c09`
78
+ - **ID:** `SEU_D1_DATABASE_ID`
71
79
  - **Região:** ENAM (US East)
72
80
  - **Engine:** SQLite (Cloudflare D1)
73
- - **Tabelas ativas:** 8
81
+ - **Tabelas ativas:** 31 (core: 13, migrate-v6: 1, migrate-v7: 2, Fases 1-4: 10, schema-ltv-feedback: +3 colunas, schema-utm: 1, schema-quiz: 1, schema-sales-engine: 3)
74
82
 
75
83
  ### Schema Completo (Produção)
76
84
 
@@ -251,7 +259,7 @@ CREATE INDEX IF NOT EXISTS idx_wa_ctwa_clid ON whatsapp_contacts(ctwa_clid);
251
259
  CREATE INDEX IF NOT EXISTS idx_wa_created_at ON whatsapp_contacts(created_at);
252
260
  ```
253
261
  > **Migration:** `migrate-v6.sql` — aplicar com `wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote`
254
- > **Tabelas ativas após v6:** 9
262
+ > **Tabelas ativas após v6:** 14 (core: 13 + whatsapp_contacts). Total final após todos os schemas: 31 tabelas.
255
263
 
256
264
  ---
257
265
 
@@ -272,7 +280,7 @@ CREATE TABLE intelligence_logs (
272
280
  ```
273
281
 
274
282
  ### Padrões de Acesso D1 no Worker
275
- ```javascript
283
+ ```typescript
276
284
  // SELECT com bind (previne SQL injection)
277
285
  const { results } = await env.DB
278
286
  .prepare('SELECT * FROM leads WHERE email = ? ORDER BY created_at DESC LIMIT 1')
@@ -305,9 +313,9 @@ ctx.waitUntil(
305
313
 
306
314
  ---
307
315
 
308
- ## 📬 BINDING 2 — QUEUES (`env.QUEUE`) — *A Adicionar*
316
+ ## 📬 BINDING 2 — QUEUES (`env.RETRY_QUEUE`) — Configurado
309
317
 
310
- > **Status:** Arquitetado, ainda não configurado no `wrangler.toml`. Adicionar para habilitar retry assíncrono robusto.
318
+ > **Status:** Ativo em produção `wrangler.toml` com `RETRY_QUEUE` binding e consumer configurados.
311
319
 
312
320
  ### Configuração no `wrangler.toml`
313
321
  ```toml
@@ -331,7 +339,7 @@ wrangler queues create cdp-edge-dlq
331
339
  ```
332
340
 
333
341
  ### Uso no Worker (Produtor)
334
- ```javascript
342
+ ```typescript
335
343
  // Enfileirar evento com falha para retry
336
344
  await env.RETRY_QUEUE.send({
337
345
  platform: 'meta',
@@ -343,7 +351,7 @@ await env.RETRY_QUEUE.send({
343
351
  ```
344
352
 
345
353
  ### Handler do Consumidor
346
- ```javascript
354
+ ```typescript
347
355
  export default {
348
356
  async queue(batch, env) {
349
357
  for (const msg of batch.messages) {
@@ -379,9 +387,9 @@ Queue Consumer (assíncrono)
379
387
 
380
388
  ---
381
389
 
382
- ## 🗂️ BINDING 3 — KV NAMESPACE (`env.GEO_CACHE`) — *A Adicionar*
390
+ ## 🗂️ BINDING 3 — KV NAMESPACE (`env.GEO_CACHE`) — Configurado
383
391
 
384
- > **Status:** Arquitetado para cache de geo/IP. Ainda não configurado.
392
+ > **Status:** Ativo em produção — usado para geo cache, fraud blocklist, fraud velocity counters e A/B test cache.
385
393
 
386
394
  ### Configuração no `wrangler.toml`
387
395
  ```toml
@@ -398,7 +406,7 @@ wrangler kv namespace create GEO_CACHE
398
406
  ```
399
407
 
400
408
  ### Uso no Worker
401
- ```javascript
409
+ ```typescript
402
410
  // Cache de geolocalização por IP (TTL: 1 hora)
403
411
  const cacheKey = `geo:${clientIp}`;
404
412
  let geoData = await env.GEO_CACHE.get(cacheKey, { type: 'json' });
@@ -440,7 +448,7 @@ wrangler r2 bucket create cdp-edge-logs
440
448
  ```
441
449
 
442
450
  ### Uso no Worker
443
- ```javascript
451
+ ```typescript
444
452
  // Armazenar evento bruto para auditoria (LGPD)
445
453
  const logKey = `events/${year}/${month}/${day}/${eventId}.json`;
446
454
  await env.AUDIT_LOGS.put(logKey, JSON.stringify({
@@ -459,13 +467,14 @@ await env.AUDIT_LOGS.put(logKey, JSON.stringify({
459
467
 
460
468
  ### Modelo em Uso
461
469
  ```
462
- @cf/meta/llama-3.1-8b-instruct
463
- Custo: ~10.000 neurônios/requisição
464
- Limite Free: 10.000 neurônios/dia (~1.000 predições/dia)
470
+ @cf/ibm-granite/granite-4.0-h-micro ← LTV Prediction + Naming de Clusters
471
+ @cf/baai/bge-m3 ← Embeddings para K-means vetorial (ML Clustering)
472
+ Custo Granite: ~20-35 neurônios/requisição (3x mais eficiente que Llama 3.1 8B)
473
+ Limite Free: 10.000 neurônios/dia (~350 predições/dia com Granite)
465
474
  ```
466
475
 
467
476
  ### Uso no Worker (LTV Prediction)
468
- ```javascript
477
+ ```typescript
469
478
  async function predictLtv(leadData, env) {
470
479
  if (!env.AI) return { ltv_class: 'unknown', ltv_value: 0 };
471
480
 
@@ -477,7 +486,7 @@ async function predictLtv(leadData, env) {
477
486
  Responda apenas: {"class": "high|medium|low", "value": 0-1000}
478
487
  `;
479
488
 
480
- const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
489
+ const response = await env.AI.run('@cf/ibm-granite/granite-4.0-h-micro', {
481
490
  messages: [{ role: 'user', content: prompt }],
482
491
  max_tokens: 50
483
492
  });
@@ -501,7 +510,7 @@ async function predictLtv(leadData, env) {
501
510
  | `0 3 1 * *` | Dia 1 03:00 | Intelligence Agent — auditoria mensal de erros |
502
511
 
503
512
  ### Handler no Worker
504
- ```javascript
513
+ ```typescript
505
514
  export default {
506
515
  async scheduled(event, env, ctx) {
507
516
  ctx.waitUntil(runIntelligenceAgent(event.cron, env));
@@ -540,7 +549,7 @@ async function runIntelligenceAgent(cron, env) {
540
549
  | `META_TEST_CODE` | ⚠️ Reconfigurar | Só testes | meta-agent |
541
550
  | `META_AD_ACCOUNT_ID` | ⚠️ Reconfigurar | Customer Match | meta-agent |
542
551
  | `META_AUDIENCE_ID` | ⚠️ Reconfigurar | Customer Match | meta-agent |
543
- | `WHATSAPP_TOKEN` | ⚠️ Reconfigurar | WhatsApp | whatsapp-agent |
552
+ | `WHATSAPP_ACCESS_TOKEN` | ⚠️ Reconfigurar | WhatsApp | whatsapp-agent |
544
553
  | `WHATSAPP_PHONE_NUMBER_ID` | ⚠️ Reconfigurar | WhatsApp | whatsapp-agent |
545
554
  | `RESEND_API_KEY` | ⚠️ Reconfigurar | Email | email-agent |
546
555
  | `RESEND_FROM_EMAIL` | ⚠️ Reconfigurar | Email | email-agent |
@@ -552,7 +561,7 @@ async function runIntelligenceAgent(cron, env) {
552
561
  wrangler secret put META_ACCESS_TOKEN
553
562
  wrangler secret put GA4_API_SECRET
554
563
  wrangler secret put TIKTOK_ACCESS_TOKEN
555
- wrangler secret put WHATSAPP_TOKEN
564
+ wrangler secret put WHATSAPP_ACCESS_TOKEN
556
565
  wrangler secret put WHATSAPP_PHONE_NUMBER_ID
557
566
  wrangler secret put RESEND_API_KEY
558
567
  wrangler secret put RESEND_FROM_EMAIL
@@ -564,7 +573,7 @@ wrangler secret put RESEND_FROM_EMAIL
564
573
 
565
574
  Todo I/O que não bloqueia a resposta ao browser **DEVE** usar `ctx.waitUntil`:
566
575
 
567
- ```javascript
576
+ ```typescript
568
577
  export default {
569
578
  async fetch(request, env, ctx) {
570
579
 
@@ -592,20 +601,12 @@ export default {
592
601
 
593
602
  ## 🗺️ ROADMAP DE INFRAESTRUTURA
594
603
 
595
- ### Fase Atual (✅ Implementado)
596
- - D1 com 8 tabelas em produção
597
- - Workers AI para LTV Prediction
598
- - 2 Cron Triggers ativos
599
- - Secrets básicos (a reconfigurar)
600
-
601
- ### Fase 2 (🔧 Próximos Passos)
602
- - Queues para retry robusto (substituir retry síncrono atual)
603
- - KV para cache de geo/sessão (reduzir latência)
604
-
605
- ### Fase 3 (🚀 Enterprise)
606
- - R2 para logs auditáveis (conformidade LGPD)
607
- - Múltiplos Workers especializados (routing por subdomínio)
608
- - Durable Objects para sessões real-time
604
+ ### Fase Atual (✅ Implementado — v2.5.1)
605
+ - D1 com 31 tabelas em produção (core + Fases 1-7)
606
+ - Workers AI: Granite 4.0 Micro (LTV + Quiz Scoring) + bge-m3 (Clustering)
607
+ - 2 Cron Triggers ativos (semanal + mensal)
608
+ - Rate Limiter, KV, R2 Audit Logs, Queues configurados
609
+ - Quiz Scoring Engine + Nurture Engine + ROAS Feedback Loop ativos
609
610
 
610
611
  ---
611
612