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.
Files changed (128) hide show
  1. package/README.md +367 -0
  2. package/bin/cdp-edge.js +61 -0
  3. package/contracts/api-versions.json +368 -0
  4. package/dist/commands/analyze.js +52 -0
  5. package/dist/commands/infra.js +54 -0
  6. package/dist/commands/install.js +168 -0
  7. package/dist/commands/server.js +174 -0
  8. package/dist/commands/setup.js +123 -0
  9. package/dist/commands/validate.js +84 -0
  10. package/dist/index.js +12 -0
  11. package/docs/CI-CD-SETUP.md +217 -0
  12. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  13. package/docs/events-reference.md +359 -0
  14. package/docs/installation.md +155 -0
  15. package/docs/quick-start.md +185 -0
  16. package/docs/sdk-reference.md +371 -0
  17. package/docs/whatsapp-ctwa.md +209 -0
  18. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  19. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  20. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
  21. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
  22. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  23. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  24. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  25. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  26. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  27. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
  28. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
  29. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  30. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
  31. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
  32. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  33. package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
  34. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  35. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
  36. package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
  37. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
  38. package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
  39. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
  40. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
  41. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
  42. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  43. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  44. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
  45. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
  47. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
  48. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
  49. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
  50. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
  51. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
  52. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
  53. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  54. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
  55. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
  56. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
  57. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  58. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
  59. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
  60. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
  61. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
  62. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
  63. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
  64. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
  65. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
  66. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  67. package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
  68. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
  69. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  70. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  71. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  72. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  73. package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
  74. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  75. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  76. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  77. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  78. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  79. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  80. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  81. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  82. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  83. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
  84. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  85. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  86. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  87. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  88. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  89. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  90. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  91. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  92. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  93. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  94. package/package.json +75 -0
  95. package/server-edge-tracker/INSTALAR.md +328 -0
  96. package/server-edge-tracker/migrate-new-db.sql +137 -0
  97. package/server-edge-tracker/migrate-v2.sql +16 -0
  98. package/server-edge-tracker/migrate-v3.sql +6 -0
  99. package/server-edge-tracker/migrate-v4.sql +18 -0
  100. package/server-edge-tracker/migrate-v5.sql +17 -0
  101. package/server-edge-tracker/migrate-v6.sql +24 -0
  102. package/server-edge-tracker/migrate.sql +111 -0
  103. package/server-edge-tracker/schema.sql +265 -0
  104. package/server-edge-tracker/worker.js +2574 -0
  105. package/server-edge-tracker/wrangler.toml +85 -0
  106. package/templates/afiliado-sem-landing.md +312 -0
  107. package/templates/captura-de-lead.md +78 -0
  108. package/templates/captura-lead-evento-externo.md +99 -0
  109. package/templates/checkout-proprio.md +111 -0
  110. package/templates/install/.claude/commands/cdp.md +1 -0
  111. package/templates/install/CLAUDE.md +65 -0
  112. package/templates/linkedin/tag-template.js +46 -0
  113. package/templates/multi-step-checkout.md +673 -0
  114. package/templates/pagina-obrigado.md +55 -0
  115. package/templates/pinterest/conversions-api-template.js +144 -0
  116. package/templates/pinterest/event-mappings.json +48 -0
  117. package/templates/pinterest/tag-template.js +28 -0
  118. package/templates/quiz-funnel.md +68 -0
  119. package/templates/reddit/conversions-api-template.js +205 -0
  120. package/templates/reddit/event-mappings.json +56 -0
  121. package/templates/reddit/pixel-template.js +46 -0
  122. package/templates/scenarios/behavior-engine.js +402 -0
  123. package/templates/scenarios/real-estate-logic.md +50 -0
  124. package/templates/scenarios/sales-page-logic.md +50 -0
  125. package/templates/spotify/pixel-template.js +46 -0
  126. package/templates/trafego-direto.md +582 -0
  127. package/templates/vsl-page.md +292 -0
  128. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,402 @@
1
+ /**
2
+ * CDP Edge Human-Behavior Engine (Quantum Tier)
3
+ * Responsável por capturar micro-interações e intenção real.
4
+ */
5
+
6
+ const BehaviorEngine = {
7
+ config: {
8
+ rageClickThreshold: 3,
9
+ rageClickTime: 700, // ms
10
+ idleThreshold: 60000, // 60s
11
+ scoreThresholds: {
12
+ engaged: 40,
13
+ highIntent: 80
14
+ }
15
+ },
16
+
17
+ state: {
18
+ clickHistory: [],
19
+ startTime: Date.now(),
20
+ lastActivity: Date.now(),
21
+ lastPulse: Date.now(),
22
+ isIdle: false,
23
+ formStartTime: {},
24
+ userScore: 0,
25
+ firedScoreEvents: new Set(),
26
+ abVariant: null,
27
+ },
28
+
29
+ init() {
30
+ this.setupRageClicks();
31
+ this.setupVisibility();
32
+ this.setupHeartbeat();
33
+ this.setupScroll();
34
+ this.setupVideoTracking();
35
+ this.setupFormAnalytics();
36
+ this.setupFormAbandonment();
37
+ this.setupCopyPaste();
38
+ this.setupExitIntent();
39
+ this.setupOutboundLinks();
40
+ this.setupErrorTracking();
41
+ this.setupIdleDetection();
42
+ this.setupScoring();
43
+ this.setupABTesting();
44
+ console.log('[CDP Edge] Enterprise Behavior Engine Initialized');
45
+ },
46
+
47
+ // 0.1 A/B Testing (Mode 1 - Edge Sync)
48
+ setupABTesting() {
49
+ const getCookie = (name) => {
50
+ const value = `; ${document.cookie}`;
51
+ const parts = value.split(`; ${name}=`);
52
+ if (parts.length === 2) return parts.pop().split(';').shift();
53
+ };
54
+
55
+ const urlParams = new URLSearchParams(window.location.search);
56
+ this.state.abVariant = urlParams.get('cdp_variant') || getCookie('cdp_ab_variant') || 'original';
57
+
58
+ console.log(`[CDP Edge] A/B Variant Detected: ${this.state.abVariant}`);
59
+
60
+ const originalTrack = cdpTrack.track;
61
+ cdpTrack.track = (eventName, eventParams = {}) => {
62
+ const enrichedParams = {
63
+ ...eventParams,
64
+ ab_test_variant: this.state.abVariant,
65
+ user_score: this.state.userScore
66
+ };
67
+ return originalTrack.apply(cdpTrack, [eventName, enrichedParams]);
68
+ };
69
+ },
70
+
71
+ // 0. Scoring Engine (Internal)
72
+ setupScoring() {
73
+ console.log('[CDP Edge] Scoring Engine Online');
74
+ },
75
+
76
+ addScore(points, reason) {
77
+ this.state.userScore = Math.min(100, Math.max(0, this.state.userScore + points));
78
+ console.log(`[CDP Edge] Score Update: +${points} (${reason}) | Total: ${this.state.userScore}`);
79
+
80
+ if (this.state.userScore >= this.config.scoreThresholds.highIntent && !this.state.firedScoreEvents.has('highIntent')) {
81
+ this.state.firedScoreEvents.add('highIntent');
82
+ cdpTrack.track('High_Intent_Lead', { score: this.state.userScore, meta_intensity: 'high' });
83
+ } else if (this.state.userScore >= this.config.scoreThresholds.engaged && !this.state.firedScoreEvents.has('engaged')) {
84
+ this.state.firedScoreEvents.add('engaged');
85
+ cdpTrack.track('Engaged_User', { score: this.state.userScore, meta_intensity: 'medium' });
86
+ }
87
+ },
88
+
89
+ // 1. Rage Click Detector
90
+ setupRageClicks() {
91
+ document.addEventListener('click', (e) => {
92
+ const now = Date.now();
93
+ this.state.clickHistory.push(now);
94
+ this.state.clickHistory = this.state.clickHistory.filter(t => now - t < this.config.rageClickTime);
95
+
96
+ if (this.state.clickHistory.length >= this.config.rageClickThreshold) {
97
+ cdpTrack.track('rage_click', {
98
+ element_id: e.target.id || '',
99
+ element_class: e.target.className || '',
100
+ x: e.pageX,
101
+ y: e.pageY,
102
+ meta_intensity: 'low'
103
+ });
104
+ this.addScore(-10, 'rage_click');
105
+ this.state.clickHistory = [];
106
+ }
107
+ });
108
+ },
109
+
110
+ // 1.2 Scroll Depth (Quantum Tier)
111
+ setupScroll() {
112
+ const markers = [25, 50, 75, 90];
113
+ const fired = new Set();
114
+
115
+ window.addEventListener('scroll', () => {
116
+ const scrollPct = Math.round((window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100);
117
+
118
+ markers.forEach(m => {
119
+ if (scrollPct >= m && !fired.has(m)) {
120
+ fired.add(m);
121
+ this.addScore(m === 25 ? 5 : (m === 50 ? 5 : 10), `scroll_${m}%`);
122
+ cdpTrack.track('scroll_depth', {
123
+ percent: m,
124
+ meta_intensity: m >= 50 ? 'medium' : 'low'
125
+ });
126
+ }
127
+ });
128
+ }, { passive: true });
129
+ },
130
+
131
+ // 2. Tab Visibility (VSL Focus)
132
+ setupVisibility() {
133
+ document.addEventListener('visibilitychange', () => {
134
+ const status = document.visibilityState;
135
+ cdpTrack.track('tab_visibility_change', {
136
+ status: status,
137
+ time_since_start: Math.floor((Date.now() - this.state.startTime) / 1000),
138
+ meta_intensity: status === 'visible' ? 'high' : 'low'
139
+ });
140
+ });
141
+ },
142
+
143
+ // 3. Click Heatmap (D1 Only)
144
+ setupHeatmap() {
145
+ document.addEventListener('click', (e) => {
146
+ if (typeof cdpTrack.sendServerEvent === 'function') {
147
+ cdpTrack.sendServerEvent('click_heatmap', null, {
148
+ x: e.pageX,
149
+ y: e.pageY,
150
+ element: e.target.tagName.toLowerCase(),
151
+ id: e.target.id || '',
152
+ classes: e.target.className || ''
153
+ });
154
+ }
155
+ });
156
+ },
157
+
158
+ // 4. Retention Pulse (Heartbeat)
159
+ setupHeartbeat() {
160
+ setInterval(() => {
161
+ const activeTime = Math.floor((Date.now() - this.state.startTime) / 1000);
162
+ cdpTrack.track('pulse_heartbeat', {
163
+ duration_seconds: activeTime,
164
+ is_visible: document.visibilityState === 'visible'
165
+ });
166
+ }, this.config.heartbeatInterval);
167
+ },
168
+
169
+ // 5. VSL / Video Tracking (YouTube & Vimeo)
170
+ setupVideoTracking() {
171
+ const iframes = document.querySelectorAll('iframe');
172
+ const fired = new Set();
173
+
174
+ iframes.forEach(iframe => {
175
+ const src = iframe.src || '';
176
+ const isYT = src.includes('youtube.com/embed');
177
+ const isVimeo = src.includes('vimeo.com/video');
178
+
179
+ if (isYT || isVimeo) {
180
+ window.addEventListener('message', (event) => {
181
+ try {
182
+ const data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;
183
+ if (isYT && data.event === 'infoDelivery' && data.info && data.info.currentTime) {
184
+ this.handleVideoProgress(iframe, data.info.currentTime, data.info.duration, fired, 'YouTube');
185
+ }
186
+ if (isVimeo && data.event === 'timeupdate') {
187
+ this.handleVideoProgress(iframe, data.data.seconds, data.data.duration, fired, 'Vimeo');
188
+ }
189
+ } catch (e) { /* ignore non-json messages */ }
190
+ });
191
+
192
+ if (isYT && !src.includes('enablejsapi=1')) {
193
+ const url = new URL(src);
194
+ url.searchParams.set('enablejsapi', '1');
195
+ iframe.src = url.toString();
196
+ }
197
+ }
198
+ });
199
+ },
200
+
201
+ handleVideoProgress(iframe, current, total, firedSet, platform) {
202
+ if (!total) return;
203
+ const pct = Math.floor((current / total) * 100);
204
+ const milestones = [25, 50, 75, 100];
205
+ const videoId = iframe.id || iframe.src.split('/').pop().split('?')[0];
206
+
207
+ milestones.forEach(m => {
208
+ const key = `${videoId}_${m}`;
209
+ if (pct >= m && !firedSet.has(key)) {
210
+ firedSet.add(key);
211
+ this.addScore(m === 25 ? 10 : (m === 50 ? 15 : 25), `vsl_${m}%`);
212
+ cdpTrack.track('video_milestone', {
213
+ video_id: videoId,
214
+ platform: platform,
215
+ percent: m,
216
+ meta_intensity: m >= 50 ? 'high' : 'medium'
217
+ });
218
+ }
219
+ });
220
+ },
221
+
222
+ // 6. Form Analytics (Friction & Abandonment)
223
+ setupFormAnalytics() {
224
+ const inputs = document.querySelectorAll('input, select, textarea');
225
+ inputs.forEach(input => {
226
+ input.addEventListener('focus', () => {
227
+ const name = input.name || input.id;
228
+ if (!this.state.formStartTime[name]) {
229
+ this.state.formStartTime[name] = Date.now();
230
+ this.addScore(10, `form_interaction_${name}`);
231
+ cdpTrack.track('form_field_focus', { field: name });
232
+ }
233
+ });
234
+
235
+ input.addEventListener('blur', () => {
236
+ const name = input.name || input.id;
237
+ const duration = Math.round((Date.now() - this.state.formStartTime[name]) / 1000);
238
+ if (duration > 0) {
239
+ cdpTrack.track('form_field_blur', { field: name, duration_sec: duration });
240
+ }
241
+ });
242
+ });
243
+ },
244
+
245
+ // 6.1 Form Abandonment — saiu da página após interagir com formulário sem submeter
246
+ setupFormAbandonment() {
247
+ const formInteracted = new Set();
248
+ let formSubmitted = false;
249
+
250
+ document.addEventListener('focusin', (e) => {
251
+ const el = e.target;
252
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT') {
253
+ const name = el.name || el.id || el.type;
254
+ if (name) formInteracted.add(name);
255
+ }
256
+ }, true);
257
+
258
+ document.addEventListener('submit', () => {
259
+ formSubmitted = true;
260
+ }, true);
261
+
262
+ document.addEventListener('visibilitychange', () => {
263
+ if (document.visibilityState === 'hidden' && formInteracted.size > 0 && !formSubmitted) {
264
+ this.addScore(-5, 'form_abandonment');
265
+ cdpTrack.track('form_abandonment', {
266
+ fields_interacted: Array.from(formInteracted),
267
+ fields_count: formInteracted.size,
268
+ meta_intensity: 'medium',
269
+ time_on_page: Math.floor((Date.now() - this.state.startTime) / 1000),
270
+ });
271
+ }
272
+ });
273
+
274
+ window.addEventListener('beforeunload', () => {
275
+ if (formInteracted.size > 0 && !formSubmitted) {
276
+ if (navigator.sendBeacon && typeof cdpTrack !== 'undefined') {
277
+ const data = JSON.stringify({
278
+ eventName: 'form_abandonment',
279
+ behavioral_data: { user_score: this.state.userScore },
280
+ fields_interacted: Array.from(formInteracted),
281
+ fields_count: formInteracted.size,
282
+ meta_intensity: 'medium',
283
+ });
284
+ navigator.sendBeacon('/api/tracking', new Blob([data], { type: 'application/json' }));
285
+ }
286
+ }
287
+ });
288
+ },
289
+
290
+ // 6.2 Exit Intent — mouse saindo pelo topo da viewport
291
+ setupExitIntent() {
292
+ let exitFired = false;
293
+
294
+ document.addEventListener('mousemove', (e) => {
295
+ if (e.clientY < 20 && !exitFired) {
296
+ exitFired = true;
297
+ this.addScore(15, 'exit_intent');
298
+ cdpTrack.track('exit_intent', {
299
+ mouse_y: e.clientY,
300
+ time_on_page: Math.floor((Date.now() - this.state.startTime) / 1000),
301
+ user_score: this.state.userScore,
302
+ meta_intensity: 'high',
303
+ });
304
+ setTimeout(() => { exitFired = false; }, 30000);
305
+ }
306
+ }, { passive: true });
307
+
308
+ let mobileExitFired = false;
309
+ document.addEventListener('visibilitychange', () => {
310
+ if (document.visibilityState === 'hidden' && !mobileExitFired) {
311
+ const timeOnPage = Math.floor((Date.now() - this.state.startTime) / 1000);
312
+ if (timeOnPage > 5) {
313
+ mobileExitFired = true;
314
+ cdpTrack.track('exit_intent_mobile', {
315
+ time_on_page: timeOnPage,
316
+ user_score: this.state.userScore,
317
+ meta_intensity: 'medium',
318
+ });
319
+ }
320
+ }
321
+ });
322
+ },
323
+
324
+ // 7. Copy-Paste Intent (High Conv.)
325
+ setupCopyPaste() {
326
+ document.addEventListener('copy', () => {
327
+ const selectedText = window.getSelection().toString();
328
+ if (selectedText.length > 0) {
329
+ this.addScore(20, 'text_copy');
330
+ cdpTrack.track('content_copy', {
331
+ text_length: selectedText.length,
332
+ meta_intensity: 'medium'
333
+ });
334
+ }
335
+ });
336
+ },
337
+
338
+ // 8. Outbound Link Tracking (Whitelist: WhatsApp/Checkouts)
339
+ setupOutboundLinks() {
340
+ document.addEventListener('click', (e) => {
341
+ const link = e.target.closest('a');
342
+ if (link && link.href) {
343
+ const url = link.href;
344
+ const isExternal = !url.includes(window.location.hostname);
345
+ const isWhitelisted = url.includes('wa.me') ||
346
+ url.includes('hotmart.com') ||
347
+ url.includes('kiwify.com') ||
348
+ url.includes('checkout');
349
+
350
+ if (isExternal && isWhitelisted) {
351
+ this.addScore(100, 'outbound_conversion_intent');
352
+ cdpTrack.track('outbound_click', {
353
+ destination: url,
354
+ meta_intensity: 'high'
355
+ });
356
+ }
357
+ }
358
+ });
359
+ },
360
+
361
+ // 9. JS Error Tracking (D1 Only)
362
+ setupErrorTracking() {
363
+ window.addEventListener('error', (event) => {
364
+ if (typeof cdpTrack.sendServerEvent === 'function') {
365
+ cdpTrack.sendServerEvent('js_error', null, {
366
+ message: event.message,
367
+ source: event.filename,
368
+ lineno: event.lineno,
369
+ colno: event.colno
370
+ });
371
+ }
372
+ });
373
+ },
374
+
375
+ // 10. Idle Detection (Active Time)
376
+ setupIdleDetection() {
377
+ const activityEvents = ['mousedown', 'mousemove', 'keydown', 'scroll', 'touchstart'];
378
+ activityEvents.forEach(evt => {
379
+ document.addEventListener(evt, () => {
380
+ this.state.lastActivity = Date.now();
381
+ if (this.state.isIdle) {
382
+ this.state.isIdle = false;
383
+ cdpTrack.track('user_active', { status: 'back_online' });
384
+ }
385
+ }, { passive: true });
386
+ });
387
+
388
+ setInterval(() => {
389
+ if (Date.now() - this.state.lastActivity > this.config.idleThreshold && !this.state.isIdle) {
390
+ this.state.isIdle = true;
391
+ cdpTrack.track('user_idle', { idle_duration: this.config.idleThreshold / 1000 });
392
+ }
393
+ }, 10000);
394
+ }
395
+ };
396
+
397
+ // Auto-inicialização se o cdpTrack estiver presente
398
+ if (typeof cdpTrack !== 'undefined') {
399
+ BehaviorEngine.init();
400
+ }
401
+
402
+ export default BehaviorEngine;
@@ -0,0 +1,50 @@
1
+ # Blueprint: Real Estate (Lançamento Imobiliário) - Quantum Tier
2
+
3
+ Este blueprint define a inteligência técnica para capturar e atribuir leads do mercado imobiliário com alta fidelidade.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA
8
+
9
+ ### 1. Geolocalização Nativa (Edge Sync)
10
+ Para negócios locais, a geolocalização é o sinal mais rico para a Meta encontrar compradores próximos ao empreendimento.
11
+ * **Captura**: Ativar via `getCidade()` no browser.
12
+ * **Envio**: Incluir campos `ct` (city) e `st` (state) no Advanced Matching da Meta (CAPI).
13
+
14
+ ### 2. WhatsApp Lead Lock (D1 Persistence)
15
+ O maior vazamento de dados no mercado imobiliário é o clique no botão de WhatsApp sem que o lead seja salvo no CRM.
16
+ * **Ação**: No momento do clique (`Contact`), o CDP Edge salva o `fbclid`, `gclid` e `ttclid` no D1 vinculado ao contexto da página.
17
+ * **Offline Match**: Quando a venda ocorre (offline), os IDs de rastro são recuperados do D1 para disparo do evento `Purchase`.
18
+
19
+ ### 3. CTWA Support (Click-to-WhatsApp)
20
+ Anúncios de mensagem são o padrão. O parâmetro `ctwa_clid` é monitorado e persistido para o Worker.
21
+
22
+ ---
23
+
24
+ ## 🛠️ MAPEAMENTO DO PAGE ANALYZER
25
+
26
+ O Page Analyzer deve buscar os seguintes sinais:
27
+ * **Seletores**: `a[href*='wa.me']`, `a[href*='api.whatsapp.com']`, `#form-visita`.
28
+ * **Sinais Gráficos**: Palavras-chave como "Plantão", "Decorado", "Financiamento", "Quartos", "Suítes".
29
+
30
+ ---
31
+
32
+ ## 📜 EXEMPLO DE INJEÇÃO (cdpTrack)
33
+
34
+ ```javascript
35
+ // Exemplo de captura de visita a imóvel com geolocalização ativa
36
+ cdpTrack.track('ViewContent', {
37
+ content_category: 'imovel',
38
+ content_name: 'Residencial Aurora', // Capturado do H1
39
+ city: await cdpTrack.getCidade(), // Capturado nativamente
40
+ meta_intensity: 'high'
41
+ });
42
+
43
+ // Lead Lock no clique do WhatsApp
44
+ document.querySelector('.btn-whatsapp').addEventListener('click', () => {
45
+ cdpTrack.track('Contact', {
46
+ method: 'whatsapp',
47
+ lead_lock: true // Sinaliza para o D1 persistir os IDs de clique e a geolocalização
48
+ });
49
+ });
50
+ ```
@@ -0,0 +1,50 @@
1
+ # Blueprint: Sales Page & Checkout (Páginas de Vendas) - Quantum Tier
2
+
3
+ Este blueprint define a inteligência técnica para rastrear e atribuir vendas em infoprodutos com alta precisão e 100% de dedução de ROI.
4
+
5
+ ---
6
+
7
+ ## 🏗️ ARQUITETURA TÉCNICA
8
+
9
+ ### 1. Checkout Passthrough (UTM & UID Injection)
10
+ Indispensável para Hotmart, Kiwify, Eduzz, CartPanda.
11
+ * **Captura**: O CDP Edge captura as UTMs no carregamento da página.
12
+ * **Injeção**: Ao clicar no botão de compra, o CDP Edge injeta automaticamente os parâmetros `xcod`, `sck` (Hotmart), `src` (Kiwify) ou parâmetros customizados no URL do checkout.
13
+ * **D1 Lock**: Salva o `_cdp_uid` persistente para atribuição server-side posterior (no recebimento do Webhook de venda).
14
+
15
+ ### 2. VSL Retention Engine (Video Milestone)
16
+ Mede a eficácia do vídeo de vendas antes do botão de compra aparecer.
17
+ * **Milestones**: 25%, 50%, 75%, 100%.
18
+ * **Visibility Sync**: Pausa a contagem de retenção se a aba for escondida, mas registra o status do áudio separadamente.
19
+ * **Ação**: Disparar `ViewContent` (25/50/75) e `AddToCart` (100% ou clique no botão).
20
+
21
+ ### 3. Adblock Immunity (Stealth Tracking)
22
+ Utiliza rotas no mesmo domínio (ex: `/api/tracking`) para garantir que o script de rastreamento não seja bloqueado por uBlock ou Ghostery.
23
+
24
+ ---
25
+
26
+ ## 🛠️ MAPEAMENTO DO PAGE ANALYZER
27
+
28
+ O Page Analyzer deve buscar os seguintes sinais:
29
+ * **Checkouts**: Qualquer `<a>` com links contendo `pay.hotmart.com`, `kiwify.com.br`, `eduzz.com`, `monetizze.com.br`.
30
+ * **Vídeos**: Tags `<iframe>` de YouTube ou Vimeo, ou players customizados.
31
+ * **Sinais Gráficos**: Headlines de promessa, Garantia de X dias, Botão de "Quero Garantir Minha Vaga".
32
+
33
+ ---
34
+
35
+ ## 📜 EXEMPLO DE INJEÇÃO (cdpTrack)
36
+
37
+ ```javascript
38
+ // Exemplo de injeção automática de Checkout
39
+ cdpTrack.passCheckoutParams({
40
+ platforms: ['hotmart', 'kiwify'],
41
+ extra: { source: 'facebook_ads' }
42
+ });
43
+
44
+ // Exemplo de retenção de VSL
45
+ cdpTrack.track('ViewContent', {
46
+ vsl_name: 'VSL_Lote_1',
47
+ watch_time: 120, // segundos
48
+ meta_intensity: 'high'
49
+ });
50
+ ```
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Spotify Pixel — Browser Template — CDP Edge Quantum Tier
3
+ *
4
+ * Inclui no <head> do projeto. Inicializa o Spotify Pixel SDK
5
+ * e captura eventos de conversão browser-side.
6
+ */
7
+
8
+ // ── Inicialização do Spotify Pixel ───────────────────────────────────────────
9
+ !function(e){
10
+ if (!window.SpotifyPixel) {
11
+ var n = window.SpotifyPixel = function() {
12
+ n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments)
13
+ };
14
+ n.push = n;
15
+ n.loaded = !0;
16
+ n.version = "1.0";
17
+ n.queue = [];
18
+ var t = document.createElement("script");
19
+ t.async = !0;
20
+ t.src = "https://pixel.byspotify.com/ping.min.js";
21
+ var r = document.getElementsByTagName("script")[0];
22
+ r.parentNode.insertBefore(t, r);
23
+ }
24
+ }();
25
+
26
+ window.SpotifyPixel('init', '{{SPOTIFY_PIXEL_ID}}');
27
+ window.SpotifyPixel('track', 'PAGE_VIEW');
28
+
29
+ // ── Mapeamento de Eventos CDP Edge → Spotify ──────────────────────────────────
30
+ // PageView → PAGE_VIEW
31
+ // ViewContent → VIEW_CONTENT
32
+ // Lead → LEAD
33
+ // Purchase → PURCHASE
34
+ // AddToCart → ADD_TO_CART
35
+ // InitiateCheckout → INITIATE_CHECKOUT
36
+ // CompleteRegistration → SIGN_UP
37
+
38
+ function trackSpotifyEvent(eventType, params) {
39
+ if (typeof window.SpotifyPixel === 'function') {
40
+ window.SpotifyPixel('track', eventType, params || {});
41
+ }
42
+ }
43
+
44
+ // ── Integração com cdpTrack.js ────────────────────────────────────────────────
45
+ // O cdpTrack.js envia o evento para o Worker server-side via sendSpotifyCapi()
46
+ // O browser dispara via trackSpotifyEvent() em paralelo para deduplicação