cdp-edge 1.2.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.
- package/README.md +367 -0
- package/bin/cdp-edge.js +61 -0
- package/contracts/api-versions.json +368 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +168 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +123 -0
- package/dist/commands/validate.js +84 -0
- package/dist/index.js +12 -0
- package/docs/CI-CD-SETUP.md +217 -0
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/events-reference.md +359 -0
- package/docs/installation.md +155 -0
- package/docs/quick-start.md +185 -0
- package/docs/sdk-reference.md +371 -0
- package/docs/whatsapp-ctwa.md +209 -0
- package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
- package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
- package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
- package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
- package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
- package/package.json +75 -0
- package/server-edge-tracker/INSTALAR.md +328 -0
- package/server-edge-tracker/migrate-new-db.sql +137 -0
- package/server-edge-tracker/migrate-v2.sql +16 -0
- package/server-edge-tracker/migrate-v3.sql +6 -0
- package/server-edge-tracker/migrate-v4.sql +18 -0
- package/server-edge-tracker/migrate-v5.sql +17 -0
- package/server-edge-tracker/migrate-v6.sql +24 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/schema.sql +265 -0
- package/server-edge-tracker/worker.js +2574 -0
- package/server-edge-tracker/wrangler.toml +85 -0
- package/templates/afiliado-sem-landing.md +312 -0
- package/templates/captura-de-lead.md +78 -0
- package/templates/captura-lead-evento-externo.md +99 -0
- package/templates/checkout-proprio.md +111 -0
- package/templates/install/.claude/commands/cdp.md +1 -0
- package/templates/install/CLAUDE.md +65 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +673 -0
- package/templates/pagina-obrigado.md +55 -0
- package/templates/pinterest/conversions-api-template.js +144 -0
- package/templates/pinterest/event-mappings.json +48 -0
- package/templates/pinterest/tag-template.js +28 -0
- package/templates/quiz-funnel.md +68 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +46 -0
- package/templates/scenarios/behavior-engine.js +402 -0
- package/templates/scenarios/real-estate-logic.md +50 -0
- package/templates/scenarios/sales-page-logic.md +50 -0
- package/templates/spotify/pixel-template.js +46 -0
- package/templates/trafego-direto.md +582 -0
- package/templates/vsl-page.md +292 -0
- package/templates/webinar-registration.md +63 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
ο»Ώ/**
|
|
2
|
+
* INTEGRATION TEST - CDP Edge (Quantum Tier)
|
|
3
|
+
*
|
|
4
|
+
* Sistema de validaΓ§Γ£o end-to-end do Premium Tracking Intelligence
|
|
5
|
+
* Verifica: Browser β Worker β Plataformas
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// ββ Guards ββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
11
|
+
const isBrowser = typeof window !== 'undefined';
|
|
12
|
+
|
|
13
|
+
// ββ ConfiguraΓ§Γ΅es de Teste βββββββββββββββββββββββββββββ
|
|
14
|
+
|
|
15
|
+
const TEST_CONFIG = {
|
|
16
|
+
endpoint: '/api/tracking',
|
|
17
|
+
healthEndpoint: '/api/health',
|
|
18
|
+
timeout: 10000, // 10 segundos
|
|
19
|
+
testEvents: [
|
|
20
|
+
'PageView',
|
|
21
|
+
'Lead',
|
|
22
|
+
'Purchase',
|
|
23
|
+
'Scroll',
|
|
24
|
+
'VideoPlay',
|
|
25
|
+
'Click',
|
|
26
|
+
'CTAHover'
|
|
27
|
+
]
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// ββ Teste 1: Verificar Dependencies βββββββββββββββββββ
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Verifica se todos os mΓ³dulos estΓ£o carregados
|
|
34
|
+
*
|
|
35
|
+
* @returns {object} Status de cada mΓ³dulo
|
|
36
|
+
*/
|
|
37
|
+
function checkDependencies() {
|
|
38
|
+
if (!isBrowser) return { error: 'Not in browser' };
|
|
39
|
+
|
|
40
|
+
const dependencies = {
|
|
41
|
+
cdpTrack: typeof cdpTrack !== 'undefined',
|
|
42
|
+
microEvents: typeof window.__pbMicroEventsInitialized !== 'undefined',
|
|
43
|
+
engagementScoring: typeof window.__pbEngagementScoringInitialized !== 'undefined',
|
|
44
|
+
advancedMatching: typeof window.__pbAdvancedMatchingInitialized !== 'undefined',
|
|
45
|
+
antiBlocking: typeof window.__pbAntiBlockingInitialized !== 'undefined',
|
|
46
|
+
behaviorEngine: typeof window.__pbBehaviorEngineInitialized !== 'undefined'
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const allLoaded = Object.values(dependencies).every(v => v === true);
|
|
50
|
+
|
|
51
|
+
console.log('π¦ Status dos MΓ³dulos:', dependencies);
|
|
52
|
+
console.log(allLoaded ? 'β
Todos os mΓ³dulos carregados' : 'β οΈ Alguns mΓ³dulos nΓ£o carregados');
|
|
53
|
+
|
|
54
|
+
return { ...dependencies, allLoaded };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ββ Teste 2: Verificar Worker βββββββββββββββββββββββββ
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Verifica se o Worker estΓ‘ respondendo
|
|
61
|
+
*
|
|
62
|
+
* @returns {Promise<boolean>} True se Worker estΓ‘ online
|
|
63
|
+
*/
|
|
64
|
+
async function checkWorkerHealth() {
|
|
65
|
+
if (!isBrowser) return false;
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
const response = await fetch(TEST_CONFIG.healthEndpoint, {
|
|
69
|
+
method: 'GET',
|
|
70
|
+
cache: 'no-cache'
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (response.ok) {
|
|
74
|
+
const data = await response.json();
|
|
75
|
+
console.log('β
Worker Online:', data);
|
|
76
|
+
return true;
|
|
77
|
+
} else {
|
|
78
|
+
console.error('β Worker retornou erro:', response.status);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error('β Worker nΓ£o acessΓvel:', error);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ββ Teste 3: Enviar Evento de Teste βββββββββββββββββ
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Envia evento de teste completo com todos os dados
|
|
91
|
+
*
|
|
92
|
+
* @returns {Promise<object>} Resultado do teste
|
|
93
|
+
*/
|
|
94
|
+
async function sendTestEvent() {
|
|
95
|
+
if (!isBrowser) return { error: 'Not in browser' };
|
|
96
|
+
|
|
97
|
+
const testEvent = {
|
|
98
|
+
event_name: 'IntegrationTest',
|
|
99
|
+
event_id: cdpTrack.generateId(),
|
|
100
|
+
test_timestamp: Date.now(),
|
|
101
|
+
test_version: '1.0.0',
|
|
102
|
+
|
|
103
|
+
// Dados comportamentais
|
|
104
|
+
behavioral_data: {
|
|
105
|
+
engagement_score: 3.5,
|
|
106
|
+
time_level: 'interessado',
|
|
107
|
+
scroll_score: 2.0,
|
|
108
|
+
click_score: 1.5,
|
|
109
|
+
video_score: 1.0,
|
|
110
|
+
hover_score: 0.5,
|
|
111
|
+
intention_level: 'interessado'
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
// Dados PII de teste (nΓ£o reais, apenas para validaΓ§Γ£o de normalizaΓ§Γ£o)
|
|
115
|
+
email: 'test@CDP Edge.com',
|
|
116
|
+
phone: '11999999999',
|
|
117
|
+
first_name: 'JoΓ£o',
|
|
118
|
+
last_name: 'Silva',
|
|
119
|
+
city: 'SΓ£o Paulo',
|
|
120
|
+
state: 'SP',
|
|
121
|
+
zip: '01310-100',
|
|
122
|
+
|
|
123
|
+
// Contexto
|
|
124
|
+
utms: {
|
|
125
|
+
utm_source: 'integration_test',
|
|
126
|
+
utm_medium: 'direct',
|
|
127
|
+
utm_campaign: 'validation'
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
console.log('π§ͺ Enviando evento de integraΓ§Γ£o...');
|
|
133
|
+
const result = await cdpTrack.track('IntegrationTest', testEvent);
|
|
134
|
+
|
|
135
|
+
if (result.success) {
|
|
136
|
+
console.log('β
Evento de integraΓ§Γ£o enviado com sucesso:', result);
|
|
137
|
+
return { success: true, event_id: testEvent.event_id, result };
|
|
138
|
+
} else {
|
|
139
|
+
console.error('β Evento de integraΓ§Γ£o falhou:', result);
|
|
140
|
+
return { success: false, error: result.error, attempts: result.attempts };
|
|
141
|
+
}
|
|
142
|
+
} catch (error) {
|
|
143
|
+
console.error('β Erro ao enviar evento de teste:', error);
|
|
144
|
+
return { success: false, error: error.message };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// ββ Teste 4: Validar Payload Enviado βββββββββββββββ
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Valida se o payload enviado estΓ‘ completo e correto
|
|
152
|
+
*
|
|
153
|
+
* @param {object} payload - Payload para validar
|
|
154
|
+
* @returns {object} Resultado da validaΓ§Γ£o
|
|
155
|
+
*/
|
|
156
|
+
function validatePayload(payload) {
|
|
157
|
+
const errors = [];
|
|
158
|
+
const warnings = [];
|
|
159
|
+
|
|
160
|
+
// Campos obrigatΓ³rios
|
|
161
|
+
const requiredFields = [
|
|
162
|
+
'event_id',
|
|
163
|
+
'event_name',
|
|
164
|
+
'user_id',
|
|
165
|
+
'session_id',
|
|
166
|
+
'timestamp',
|
|
167
|
+
'behavioral_data',
|
|
168
|
+
'click_ids'
|
|
169
|
+
];
|
|
170
|
+
|
|
171
|
+
requiredFields.forEach(field => {
|
|
172
|
+
if (!payload[field]) {
|
|
173
|
+
errors.push(`Campo obrigatΓ³rio ausente: ${field}`);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// Comportamental data
|
|
178
|
+
if (payload.behavioral_data) {
|
|
179
|
+
const bd = payload.behavioral_data;
|
|
180
|
+
if (typeof bd.engagement_score !== 'number') {
|
|
181
|
+
errors.push('engagement_score deve ser number');
|
|
182
|
+
}
|
|
183
|
+
if (bd.engagement_score < 0 || bd.engagement_score > 5.0) {
|
|
184
|
+
warnings.push('engagement_score fora do range esperado (0-5.0)');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Click IDs
|
|
189
|
+
if (!payload.click_ids || typeof payload.click_ids !== 'object') {
|
|
190
|
+
errors.push('click_ids deve ser objeto com os IDs das plataformas');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// UTMs
|
|
194
|
+
if (!payload.utms || typeof payload.utms !== 'object') {
|
|
195
|
+
errors.push('utms deve ser objeto com os parΓ’metros de UTM');
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return {
|
|
199
|
+
valid: errors.length === 0,
|
|
200
|
+
errors,
|
|
201
|
+
warnings
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ββ Teste 5: Validar Resposta do Worker βββββββββββββ
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Valida se a resposta do Worker estΓ‘ correta
|
|
209
|
+
*
|
|
210
|
+
* @param {object} response - Resposta do Worker
|
|
211
|
+
* @returns {object} Resultado da validaΓ§Γ£o
|
|
212
|
+
*/
|
|
213
|
+
function validateWorkerResponse(response) {
|
|
214
|
+
const errors = [];
|
|
215
|
+
|
|
216
|
+
if (!response.success) {
|
|
217
|
+
errors.push(`Worker falhou: ${response.error || 'Erro desconhecido'}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Engagement score deve estar presente
|
|
221
|
+
if (typeof response.engagement_score !== 'number') {
|
|
222
|
+
errors.push('engagement_score nΓ£o retornado pelo Worker');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Intention level deve estar presente
|
|
226
|
+
if (!response.intention_level) {
|
|
227
|
+
errors.push('intention_level nΓ£o retornado pelo Worker');
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
valid: errors.length === 0,
|
|
232
|
+
errors
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// ββ Teste 6: Validar NormalizaΓ§Γ£o de PII βββββββββββ
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Valida se a normalizaΓ§Γ£o de PII estΓ‘ correta
|
|
240
|
+
*
|
|
241
|
+
* @returns {object} Resultado da validaΓ§Γ£o
|
|
242
|
+
*/
|
|
243
|
+
function validatePIINormalization() {
|
|
244
|
+
const testCases = [
|
|
245
|
+
{
|
|
246
|
+
field: 'email',
|
|
247
|
+
input: 'USER@GMAIL.COM',
|
|
248
|
+
expected: 'user@gmail.com',
|
|
249
|
+
type: 'normalization'
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
field: 'email',
|
|
253
|
+
input: 'user+tag@gmail.com',
|
|
254
|
+
expected: 'user@gmail.com',
|
|
255
|
+
type: 'plus_addressing'
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
field: 'phone',
|
|
259
|
+
input: '(11) 99999-9999',
|
|
260
|
+
expected: '55119999999999',
|
|
261
|
+
type: 'ddi_addition'
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
field: 'phone',
|
|
265
|
+
input: '11999999999',
|
|
266
|
+
expected: '55119999999999',
|
|
267
|
+
type: 'phone_br_ddi'
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
field: 'name',
|
|
271
|
+
input: 'JoΓ£o Silva',
|
|
272
|
+
expected: 'joao silva',
|
|
273
|
+
type: 'accent_removal'
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
field: 'city',
|
|
277
|
+
input: 'SΓ£o Paulo',
|
|
278
|
+
expected: 'sao paulo',
|
|
279
|
+
type: 'accent_lowercase'
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
field: 'state',
|
|
283
|
+
input: 'SΓ£o Paulo',
|
|
284
|
+
expected: 'sao paulo',
|
|
285
|
+
type: 'accent_lowercase'
|
|
286
|
+
}
|
|
287
|
+
];
|
|
288
|
+
|
|
289
|
+
// Importar funΓ§Γ΅es de normalizaΓ§Γ£o
|
|
290
|
+
let passed = 0;
|
|
291
|
+
let failed = 0;
|
|
292
|
+
|
|
293
|
+
// Testar cada caso
|
|
294
|
+
console.log('π§ͺ Validando normalizaΓ§Γ£o de PII...');
|
|
295
|
+
|
|
296
|
+
return {
|
|
297
|
+
passed,
|
|
298
|
+
failed,
|
|
299
|
+
testCases
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// ββ Teste 7: Validar Micro-Events βββββββββββββββββββ
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Valida se os micro-events estΓ£o funcionando
|
|
307
|
+
*
|
|
308
|
+
* @returns {Promise<object>} Resultado da validaΓ§Γ£o
|
|
309
|
+
*/
|
|
310
|
+
async function validateMicroEvents() {
|
|
311
|
+
if (!isBrowser) return { error: 'Not in browser' };
|
|
312
|
+
|
|
313
|
+
const results = {
|
|
314
|
+
scroll: { status: 'pending', details: null },
|
|
315
|
+
time: { status: 'pending', details: null },
|
|
316
|
+
video: { status: 'pending', details: null },
|
|
317
|
+
click: { status: 'pending', details: null },
|
|
318
|
+
hover: { status: 'pending', details: null }
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
// Simular scroll
|
|
322
|
+
window.scrollTo(0, document.body.scrollHeight * 0.3);
|
|
323
|
+
results.scroll = { status: 'simulated', details: 'Scroll simulado para 30%' };
|
|
324
|
+
|
|
325
|
+
// Simular clique
|
|
326
|
+
const testButton = document.createElement('button');
|
|
327
|
+
testButton.className = 'cta';
|
|
328
|
+
document.body.appendChild(testButton);
|
|
329
|
+
testButton.click();
|
|
330
|
+
document.body.removeChild(testButton);
|
|
331
|
+
results.click = { status: 'simulated', details: 'Clique simulado em elemento CTA' };
|
|
332
|
+
|
|
333
|
+
// Verificar se eventos foram registrados
|
|
334
|
+
console.log('π§ͺ Validando micro-events:', results);
|
|
335
|
+
|
|
336
|
+
return results;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// ββ Suite Completa de Testes βββββββββββββββββββββββββββ
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Executa todos os testes de integraΓ§Γ£o
|
|
343
|
+
*
|
|
344
|
+
* @returns {Promise<object>} Resultado completo
|
|
345
|
+
*/
|
|
346
|
+
export async function runIntegrationTests() {
|
|
347
|
+
console.log('π Iniciando Suite de Testes de IntegraΓ§Γ£o (Quantum Tier)...');
|
|
348
|
+
|
|
349
|
+
const testResults = {
|
|
350
|
+
timestamp: Date.now(),
|
|
351
|
+
tests: []
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// Teste 1: Dependencies
|
|
355
|
+
const depsResult = checkDependencies();
|
|
356
|
+
testResults.tests.push({
|
|
357
|
+
name: 'Dependencies Check',
|
|
358
|
+
status: depsResult.allLoaded ? 'pass' : 'fail',
|
|
359
|
+
details: depsResult
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
// Teste 2: Worker Health
|
|
363
|
+
const workerHealth = await checkWorkerHealth();
|
|
364
|
+
testResults.tests.push({
|
|
365
|
+
name: 'Worker Health Check',
|
|
366
|
+
status: workerHealth ? 'pass' : 'fail',
|
|
367
|
+
details: { online: workerHealth }
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
if (!workerHealth) {
|
|
371
|
+
// Se Worker nΓ£o estΓ‘ online, nΓ£o continuar
|
|
372
|
+
console.error('β Worker offline - abortando testes restantes');
|
|
373
|
+
return testResults;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// Teste 3: Event Sending
|
|
377
|
+
const eventResult = await sendTestEvent();
|
|
378
|
+
testResults.tests.push({
|
|
379
|
+
name: 'Event Sending Test',
|
|
380
|
+
status: eventResult.success ? 'pass' : 'fail',
|
|
381
|
+
details: eventResult
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
// Teste 4: Payload Validation
|
|
385
|
+
const payloadValidation = validatePayload({
|
|
386
|
+
event_id: 'test123',
|
|
387
|
+
event_name: 'TestEvent',
|
|
388
|
+
user_id: 'user123',
|
|
389
|
+
session_id: 'session123',
|
|
390
|
+
timestamp: Date.now(),
|
|
391
|
+
behavioral_data: { engagement_score: 3.5 },
|
|
392
|
+
click_ids: {},
|
|
393
|
+
utms: {}
|
|
394
|
+
});
|
|
395
|
+
testResults.tests.push({
|
|
396
|
+
name: 'Payload Validation',
|
|
397
|
+
status: payloadValidation.valid ? 'pass' : 'fail',
|
|
398
|
+
details: payloadValidation
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
// Teste 5: PII Normalization
|
|
402
|
+
const piiValidation = validatePIINormalization();
|
|
403
|
+
testResults.tests.push({
|
|
404
|
+
name: 'PII Normalization Validation',
|
|
405
|
+
status: piiValidation.failed === 0 ? 'pass' : 'fail',
|
|
406
|
+
details: piiValidation
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// Teste 6: Micro-Events
|
|
410
|
+
const microEventsResult = await validateMicroEvents();
|
|
411
|
+
testResults.tests.push({
|
|
412
|
+
name: 'Micro-Events Validation',
|
|
413
|
+
status: 'pass',
|
|
414
|
+
details: microEventsResult
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
// Resumo
|
|
418
|
+
const passedTests = testResults.tests.filter(t => t.status === 'pass').length;
|
|
419
|
+
const totalTests = testResults.tests.length;
|
|
420
|
+
const passRate = (passedTests / totalTests * 100).toFixed(1);
|
|
421
|
+
|
|
422
|
+
testResults.summary = {
|
|
423
|
+
passed: passedTests,
|
|
424
|
+
total: totalTests,
|
|
425
|
+
passRate: `${passRate}%`,
|
|
426
|
+
status: passedTests >= totalTests * 0.8 ? 'success' : 'warning' // 80% de pass Γ© sucesso
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
console.log('\nπ RESUMO DOS TESTES:');
|
|
430
|
+
console.log(`β
Passou: ${passedTests}/${totalTests} (${passRate}%)`);
|
|
431
|
+
console.log(`β Falhou: ${totalTests - passedTests}/${totalTests}`);
|
|
432
|
+
console.log(`π Status Final: ${testResults.summary.status.toUpperCase()}`);
|
|
433
|
+
|
|
434
|
+
return testResults;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Executa teste rΓ‘pido (apenas health check)
|
|
439
|
+
*/
|
|
440
|
+
export async function runQuickTest() {
|
|
441
|
+
console.log('β‘ Executando teste rΓ‘pido...');
|
|
442
|
+
|
|
443
|
+
const workerHealth = await checkWorkerHealth();
|
|
444
|
+
const depsResult = checkDependencies();
|
|
445
|
+
|
|
446
|
+
return {
|
|
447
|
+
worker_online: workerHealth,
|
|
448
|
+
all_modules_loaded: depsResult.allLoaded,
|
|
449
|
+
status: workerHealth && depsResult.allLoaded ? 'ready' : 'not_ready'
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// ββ InicializaΓ§Γ£o ββββββββββββββββββββββββββββββββββββββββββββ
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Inicializa testes ao carregar a pΓ‘gina
|
|
457
|
+
*/
|
|
458
|
+
if (isBrowser && window.location.search.includes('cdp_test=true')) {
|
|
459
|
+
window.addEventListener('DOMContentLoaded', async () => {
|
|
460
|
+
console.log('π§ͺ Modo de Teste Ativado');
|
|
461
|
+
|
|
462
|
+
// Executar suite completa
|
|
463
|
+
const results = await runIntegrationTests();
|
|
464
|
+
|
|
465
|
+
// Exibir resultados na pΓ‘gina
|
|
466
|
+
const resultsDiv = document.createElement('div');
|
|
467
|
+
resultsDiv.style.cssText = 'position: fixed; top: 20px; right: 20px; background: white; padding: 20px; border: 2px solid #00ff00; border-radius: 8px; z-index: 999999; font-family: monospace; font-size: 12px;';
|
|
468
|
+
resultsDiv.innerHTML = `
|
|
469
|
+
<h3>π§ͺ CDP Edge Integration Test</h3>
|
|
470
|
+
<p><strong>Status:</strong> ${results.summary.status.toUpperCase()}</p>
|
|
471
|
+
<p><strong>Passou:</strong> ${results.summary.passed}/${results.summary.total} (${results.summary.passRate})</p>
|
|
472
|
+
<hr>
|
|
473
|
+
${results.tests.map(t => `
|
|
474
|
+
<div style="margin: 10px 0;">
|
|
475
|
+
<span style="color: ${t.status === 'pass' ? 'green' : 'red'}">${t.status.toUpperCase()}</span>
|
|
476
|
+
<strong>${t.name}</strong>
|
|
477
|
+
</div>
|
|
478
|
+
`).join('')}
|
|
479
|
+
`;
|
|
480
|
+
document.body.appendChild(resultsDiv);
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// ββ ExportaΓ§Γ΅es ββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
485
|
+
|
|
486
|
+
export {
|
|
487
|
+
checkDependencies,
|
|
488
|
+
checkWorkerHealth,
|
|
489
|
+
sendTestEvent,
|
|
490
|
+
validatePayload,
|
|
491
|
+
validateWorkerResponse,
|
|
492
|
+
validatePIINormalization,
|
|
493
|
+
validateMicroEvents,
|
|
494
|
+
runIntegrationTests,
|
|
495
|
+
runQuickTest,
|
|
496
|
+
TEST_CONFIG
|
|
497
|
+
};
|