cdp-edge 1.0.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 (176) hide show
  1. package/README.md +324 -0
  2. package/bin/cdp-edge.js +71 -0
  3. package/contracts/agent-versions.json +679 -0
  4. package/contracts/api-versions.json +372 -0
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -0
  7. package/dist/commands/infra.js +54 -0
  8. package/dist/commands/install.js +191 -0
  9. package/dist/commands/server.js +174 -0
  10. package/dist/commands/setup.js +355 -0
  11. package/dist/commands/validate.js +248 -0
  12. package/dist/index.js +12 -0
  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/CI-CD-SETUP.md +217 -0
  17. package/docs/events-reference.md +359 -0
  18. package/docs/installation.md +155 -0
  19. package/docs/quick-start.md +185 -0
  20. package/docs/sdk-reference.md +371 -0
  21. package/docs/whatsapp-ctwa.md +210 -0
  22. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  23. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  24. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +683 -0
  25. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -0
  26. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  27. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  28. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  29. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  30. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  31. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  32. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  33. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
  34. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
  35. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  36. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
  37. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
  38. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  39. package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
  40. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  41. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  42. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
  43. package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
  44. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
  45. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  46. package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
  47. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
  48. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  49. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -0
  50. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  51. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  52. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +960 -0
  53. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
  54. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  55. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
  56. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
  57. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
  58. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  59. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
  60. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
  61. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
  62. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -0
  63. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  64. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +258 -0
  65. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
  66. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
  67. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  68. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
  69. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
  70. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
  71. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  72. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
  73. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
  74. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
  75. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
  76. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
  77. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  78. package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
  79. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -0
  80. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  81. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  82. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  83. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  84. package/extracted-skill/tracking-events-generator/knowledge-base.md +3066 -0
  85. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  86. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  87. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  88. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  89. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  90. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  91. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  92. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  93. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  94. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  95. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +132 -0
  96. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  97. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  98. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  99. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  100. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  101. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  102. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  103. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  104. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  105. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  106. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  107. package/package.json +89 -0
  108. package/scripts/build-sdk.js +106 -0
  109. package/server-edge-tracker/.client.env.example +14 -0
  110. package/server-edge-tracker/INSTALAR.md +527 -0
  111. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  112. package/server-edge-tracker/config/utm-mapping.json +64 -0
  113. package/server-edge-tracker/deploy-client.cjs +76 -0
  114. package/server-edge-tracker/index.ts +1164 -0
  115. package/server-edge-tracker/migrate-new-db.sql +137 -0
  116. package/server-edge-tracker/migrate-v2.sql +16 -0
  117. package/server-edge-tracker/migrate-v3.sql +6 -0
  118. package/server-edge-tracker/migrate-v4.sql +18 -0
  119. package/server-edge-tracker/migrate-v5.sql +17 -0
  120. package/server-edge-tracker/migrate-v6.sql +24 -0
  121. package/server-edge-tracker/migrate-v7.sql +64 -0
  122. package/server-edge-tracker/migrate.sql +111 -0
  123. package/server-edge-tracker/modules/db.ts +702 -0
  124. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  125. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  126. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  127. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  128. package/server-edge-tracker/modules/dispatch/whatsapp.ts +279 -0
  129. package/server-edge-tracker/modules/intelligence.ts +589 -0
  130. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  131. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  132. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  133. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  134. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  135. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  136. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  137. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  138. package/server-edge-tracker/modules/nurture.ts +257 -0
  139. package/server-edge-tracker/modules/utils.ts +311 -0
  140. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  141. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  142. package/server-edge-tracker/schema-bidding.sql +86 -0
  143. package/server-edge-tracker/schema-fraud.sql +90 -0
  144. package/server-edge-tracker/schema-indexes.sql +67 -0
  145. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  146. package/server-edge-tracker/schema-quiz.sql +52 -0
  147. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  148. package/server-edge-tracker/schema-segmentation.sql +219 -0
  149. package/server-edge-tracker/schema-utm.sql +82 -0
  150. package/server-edge-tracker/schema.sql +265 -0
  151. package/server-edge-tracker/types.ts +258 -0
  152. package/server-edge-tracker/wrangler.toml +136 -0
  153. package/templates/afiliado-sem-landing.md +312 -0
  154. package/templates/captura-de-lead.md +78 -0
  155. package/templates/captura-lead-evento-externo.md +99 -0
  156. package/templates/checkout-proprio.md +111 -0
  157. package/templates/install/.claude/commands/cdp.md +1 -0
  158. package/templates/install/CLAUDE.md +65 -0
  159. package/templates/lancamento-imobiliario.md +344 -0
  160. package/templates/linkedin/tag-template.js +46 -0
  161. package/templates/multi-step-checkout.md +672 -0
  162. package/templates/pagina-obrigado.md +55 -0
  163. package/templates/pinterest/conversions-api-template.js +144 -0
  164. package/templates/pinterest/event-mappings.json +48 -0
  165. package/templates/pinterest/tag-template.js +28 -0
  166. package/templates/quiz-funnel.md +132 -0
  167. package/templates/reddit/conversions-api-template.js +205 -0
  168. package/templates/reddit/event-mappings.json +56 -0
  169. package/templates/reddit/pixel-template.js +19 -0
  170. package/templates/scenarios/behavior-engine.js +425 -0
  171. package/templates/scenarios/real-estate-logic.md +50 -0
  172. package/templates/scenarios/sales-page-logic.md +50 -0
  173. package/templates/spotify/pixel-template.js +46 -0
  174. package/templates/trafego-direto.md +582 -0
  175. package/templates/vsl-page.md +292 -0
  176. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,222 @@
1
+ /**
2
+ * CDP Edge — Route Intent Capture
3
+ * @version 2.0.0
4
+ *
5
+ * Fluxo:
6
+ * 1. Usuário clica em "Ver rota" → Google Maps abre normalmente
7
+ * 2. Widget aparece com um botão de WhatsApp
8
+ * 3. Usuário clica → WhatsApp abre com mensagem pré-escrita
9
+ * 4. Usuário envia → corretor recebe e responde
10
+ *
11
+ * Uso:
12
+ * initRouteIntentCapture({
13
+ * whatsappNumber: '5511999999999', // número do plantão/corretor
14
+ * propertyName: 'Reserva do Jardim',
15
+ * propertyId: 'rj-001',
16
+ * propertyLat: -23.6519,
17
+ * propertyLng: -46.5330,
18
+ * });
19
+ */
20
+
21
+ const isBrowser = typeof window !== 'undefined';
22
+
23
+ /**
24
+ * @param {object} options
25
+ * @param {string} options.whatsappNumber Número do plantão (ex: '5511999999999')
26
+ * @param {string} [options.propertyName] Nome do empreendimento
27
+ * @param {string} [options.propertyId] ID interno do imóvel
28
+ * @param {number} [options.propertyLat] Latitude
29
+ * @param {number} [options.propertyLng] Longitude
30
+ * @param {string} [options.routeSelector] CSS selector dos botões de rota (default auto)
31
+ * @param {string} [options.distanceBucket] 'very_close'|'close'|'nearby'|'moderate'|'far'
32
+ * @param {number} [options.distanceKm] Distância em km — exibe tempo estimado
33
+ * @param {string} [options.metaSignalBucket] 'hot'|'warm'|'cold'
34
+ * @param {string} [options.brokerName] Nome do corretor de plantão (ex: 'Ramon')
35
+ */
36
+ export function initRouteIntentCapture(options = {}) {
37
+ if (!isBrowser) return;
38
+
39
+ const {
40
+ whatsappNumber,
41
+ propertyName = 'o imóvel',
42
+ propertyId = null,
43
+ propertyLat = null,
44
+ propertyLng = null,
45
+ routeSelector = '[data-route-intent], a[href*="maps/dir"], a[href*="maps?q="]',
46
+ distanceBucket = null,
47
+ distanceKm = null,
48
+ metaSignalBucket = null,
49
+ brokerName = null,
50
+ } = options;
51
+
52
+ if (!whatsappNumber) {
53
+ console.warn('[RouteIntent] whatsappNumber é obrigatório.');
54
+ return;
55
+ }
56
+
57
+ _injectStyles();
58
+
59
+ document.addEventListener('click', (e) => {
60
+ const btn = e.target.closest(routeSelector);
61
+ if (!btn) return;
62
+ _showWidget(btn, { whatsappNumber, propertyName, propertyId, propertyLat, propertyLng, distanceBucket, distanceKm, metaSignalBucket, brokerName });
63
+ }, true);
64
+ }
65
+
66
+ // ── Widget ────────────────────────────────────────────────────────────────────
67
+
68
+ function _showWidget(anchorEl, opts) {
69
+ document.getElementById('cdp-ri-widget')?.remove();
70
+
71
+ const travelMinutes = _estimateTravelMinutes(opts.distanceKm);
72
+ const travelText = travelMinutes
73
+ ? `<p class="cdp-ri-travel">📍 Você está a cerca de <strong>${travelMinutes} min</strong> daqui</p>`
74
+ : '';
75
+
76
+ const brokerLine = opts.brokerName
77
+ ? `<p class="cdp-ri-broker">Ao chegar, pergunte pelo <strong>${opts.brokerName}</strong> — ele vai estar te aguardando com tudo pronto 🤝</p>`
78
+ : '';
79
+
80
+ const widget = document.createElement('div');
81
+ widget.id = 'cdp-ri-widget';
82
+ widget.innerHTML = `
83
+ <div class="cdp-ri-inner">
84
+ ${travelText}
85
+ <p class="cdp-ri-headline">Vi que você quer visitar o local! Confirme sua vinda enviando a mensagem abaixo — nossa equipe já fica de prontidão pra te receber 👇</p>
86
+ ${brokerLine}
87
+ <button id="cdp-ri-btn" type="button">
88
+ ${_waIcon()} Confirmar minha visita
89
+ </button>
90
+ <button id="cdp-ri-dismiss" type="button" class="cdp-ri-dismiss">Agora não</button>
91
+ </div>
92
+ `;
93
+
94
+ anchorEl.insertAdjacentElement('afterend', widget);
95
+ setTimeout(() => widget.scrollIntoView({ behavior: 'smooth', block: 'nearest' }), 150);
96
+
97
+ document.getElementById('cdp-ri-btn').addEventListener('click', () => _handleClick(widget, opts));
98
+ document.getElementById('cdp-ri-dismiss').addEventListener('click', () => {
99
+ window.cdpTrack?.track?.('ViewContent', {
100
+ content_name: 'rota_dispensada',
101
+ property_id: opts.propertyId,
102
+ funnel_stage: 'route_dismiss',
103
+ intent_score: 'medium',
104
+ distance_bucket: opts.distanceBucket || undefined,
105
+ meta_signal_bucket: opts.metaSignalBucket || undefined,
106
+ });
107
+ widget.remove();
108
+ });
109
+ }
110
+
111
+ // ── Click — dispara evento e abre WhatsApp ────────────────────────────────────
112
+
113
+ async function _handleClick(widget, opts) {
114
+ const btn = document.getElementById('cdp-ri-btn');
115
+ if (btn) btn.disabled = true;
116
+
117
+ // Evento Contact → Worker: LTV + hot lead trigger + CAPI
118
+ // Phone capturado depois via webhook quando a mensagem chegar
119
+ window.cdpTrack?.track?.('Contact', {
120
+ content_name: 'aviso_chegada_whatsapp',
121
+ property_id: opts.propertyId,
122
+ property_lat: opts.propertyLat,
123
+ property_lng: opts.propertyLng,
124
+ funnel_stage: 'route_click',
125
+ intent_score: 'high',
126
+ distance_bucket: opts.distanceBucket || undefined,
127
+ meta_signal_bucket: opts.metaSignalBucket || undefined,
128
+ });
129
+
130
+ // Monta mensagem — acolhedora, foco em confirmar chegada
131
+ const travelMinutes = _estimateTravelMinutes(opts.distanceKm);
132
+ const travelLine = travelMinutes ? `Estou a cerca de ${travelMinutes} minutos daí.` : '';
133
+ const brokerLine = opts.brokerName
134
+ ? `Vou procurar pelo ${opts.brokerName} ao chegar.`
135
+ : '';
136
+
137
+ const msg = [
138
+ `Oi! Estou interessado(a) em visitar o ${opts.propertyName} e gostaria de confirmar minha visita.`,
139
+ travelLine,
140
+ brokerLine || `Vocês conseguem me receber agora ou preciso marcar horário?`,
141
+ ].filter(Boolean).join(' ');
142
+
143
+ _showSuccess(widget, opts.whatsappNumber, msg);
144
+ }
145
+
146
+ // ── Tela de confirmação ───────────────────────────────────────────────────────
147
+
148
+ function _showSuccess(widget, whatsappNumber, msg) {
149
+ widget.innerHTML = `
150
+ <div class="cdp-ri-inner cdp-ri-ok">
151
+ <span class="cdp-ri-check">✅</span>
152
+ <p><strong>Abrindo WhatsApp...</strong><br><span>A equipe já foi avisada!</span></p>
153
+ </div>
154
+ `;
155
+ setTimeout(() => {
156
+ window.open(`https://wa.me/${whatsappNumber}?text=${encodeURIComponent(msg)}`, '_blank');
157
+ setTimeout(() => widget?.remove(), 3500);
158
+ }, 600);
159
+ }
160
+
161
+ // ── Helpers ───────────────────────────────────────────────────────────────────
162
+
163
+ function _estimateTravelMinutes(distanceKm) {
164
+ if (!distanceKm || distanceKm <= 0) return null;
165
+ return Math.max(5, Math.round((distanceKm * 60 / 25) / 5) * 5);
166
+ }
167
+
168
+ function _waIcon() {
169
+ return `<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
170
+ <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z"/>
171
+ <path d="M12 0C5.373 0 0 5.373 0 12c0 2.122.554 4.118 1.528 5.852L0 24l6.335-1.513A11.933 11.933 0 0012 24c6.627 0 12-5.373 12-12S18.627 0 12 0zm0 21.818a9.818 9.818 0 01-5.002-1.368l-.359-.213-3.722.888.924-3.617-.234-.372A9.818 9.818 0 012.182 12C2.182 6.57 6.57 2.182 12 2.182S21.818 6.57 21.818 12 17.43 21.818 12 21.818z"/>
172
+ </svg>`;
173
+ }
174
+
175
+ // ── Estilos ───────────────────────────────────────────────────────────────────
176
+
177
+ function _injectStyles() {
178
+ if (document.getElementById('cdp-ri-styles')) return;
179
+ const s = document.createElement('style');
180
+ s.id = 'cdp-ri-styles';
181
+ s.textContent = `
182
+ #cdp-ri-widget {
183
+ margin-top: 12px;
184
+ padding: 16px 18px;
185
+ background: #f0fdf4;
186
+ border: 1.5px solid #22c55e;
187
+ border-radius: 12px;
188
+ font-family: Arial, sans-serif;
189
+ animation: cdp-ri-in .25s ease;
190
+ }
191
+ @keyframes cdp-ri-in {
192
+ from { opacity: 0; transform: translateY(-8px); }
193
+ to { opacity: 1; transform: translateY(0); }
194
+ }
195
+ .cdp-ri-inner { display: flex; flex-direction: column; gap: 10px; }
196
+ .cdp-ri-travel { margin: 0; font-size: 13px; color: #555; }
197
+ .cdp-ri-travel strong { color: #0f766e; }
198
+ .cdp-ri-headline { margin: 0; font-size: 14px; color: #15803d; font-weight: bold; line-height: 1.4; }
199
+ .cdp-ri-broker { margin: 0; font-size: 13px; color: #555; line-height: 1.4; }
200
+ .cdp-ri-broker strong { color: #0f766e; }
201
+ #cdp-ri-btn {
202
+ display: flex; align-items: center; justify-content: center; gap: 8px;
203
+ width: 100%; padding: 13px 16px;
204
+ background: #25D366; color: #fff;
205
+ border: none; border-radius: 10px;
206
+ font-size: 15px; font-weight: bold; cursor: pointer;
207
+ }
208
+ #cdp-ri-btn:hover { background: #1ebe5a; }
209
+ #cdp-ri-btn:disabled { background: #86efac; cursor: not-allowed; }
210
+ .cdp-ri-dismiss {
211
+ background: none; border: none;
212
+ color: #aaa; font-size: 12px;
213
+ cursor: pointer; padding: 2px 0; text-align: center;
214
+ }
215
+ .cdp-ri-dismiss:hover { color: #666; }
216
+ .cdp-ri-ok { align-items: center; text-align: center; gap: 8px; }
217
+ .cdp-ri-check { font-size: 28px; }
218
+ .cdp-ri-ok p { margin: 0; font-size: 14px; color: #15803d; line-height: 1.5; }
219
+ .cdp-ri-ok span { font-size: 13px; color: #555; }
220
+ `;
221
+ document.head.appendChild(s);
222
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * CDP Edge — Configuração do Projeto
3
+ *
4
+ * Este arquivo é a única fonte de verdade para configuração do SDK.
5
+ * Copie e ajuste para cada projeto implementado.
6
+ *
7
+ * @version 1.0.0
8
+ */
9
+
10
+ const CONFIG = {
11
+ // ── Endpoint do Cloudflare Worker ────────────────────────────────────────────
12
+ // Same-domain: evita ad-blockers e CORS.
13
+ // Em produção: seu-dominio.com.br/track (Worker roteado via Custom Domain)
14
+ // Em dev: use o URL do Worker diretamente (ex: https://worker.seu-dominio.workers.dev/track)
15
+ endpoint: '/track',
16
+
17
+ // ── Plataformas de checkout habilitadas ──────────────────────────────────────
18
+ // Controla quais plataformas recebem passCheckoutParams() automaticamente.
19
+ // Adicione apenas as plataformas usadas no projeto.
20
+ platforms: ['hotmart', 'kiwify', 'eduzz', 'monetizze', 'cartpanda', 'ticto'],
21
+
22
+ // ── Domínio do site ──────────────────────────────────────────────────────────
23
+ // Usado para cookies first-party e CORS.
24
+ siteDomain: '', // Ex: 'meusite.com.br' — deixar vazio para auto-detect
25
+
26
+ // ── Debug mode ───────────────────────────────────────────────────────────────
27
+ // true = loga todos os eventos no console
28
+ // false = silencioso em produção
29
+ debug: false,
30
+
31
+ // ── Consent Mode v2 (LGPD/GDPR) ─────────────────────────────────────────────
32
+ // Padrão: tudo negado. Sites devem chamar cdpTrack.updateConsent() após
33
+ // o usuário aceitar o banner de cookies.
34
+ consent: {
35
+ defaultDenied: true, // inicializa com ad_storage=denied
36
+ urlPassthrough: true, // preserva gclid/fbclid mesmo sem consent
37
+ waitForUpdate: 500, // ms aguardando CMP antes de disparar hits
38
+ },
39
+
40
+ // ── Comportamentos automáticos ───────────────────────────────────────────────
41
+ autoCaptureForms: true, // intercepta formulários de lead automaticamente
42
+ passCheckoutParams: true, // adiciona UTMs + userId nos links de checkout
43
+ initBehaviorEngine: true, // carrega rage-click, exit intent, form abandonment
44
+ };
45
+
46
+ export default CONFIG;
@@ -0,0 +1,26 @@
1
+ # 🏆 Final Walkthrough: CDP Edge Olimpo — NOTA 10/10
2
+
3
+ O ecossistema **CDP Edge** atingiu o **Estado de Onisciência Técnica**. Esta é a infraestrutura mais avançada, furtiva e preditiva disponível no mundo para Claude Code.
4
+
5
+ ---
6
+
7
+ ## 💎 1. Robustez Extrema (Auditada)
8
+ - **Server Architect (15.1 KB)**: Agora um especialista exclusivo em Cloudflare (D1, R2, Queues, Workers). Código real injetado diretamente no prompt.
9
+ - **Master Orchestrator (206 L)**: Sincronização perfeita de 7 fases + Phase -0.5 (Intelligence).
10
+ - **Validator Agent (91 L)**: Auditoria absoluta de segurança e estética PII.
11
+
12
+ ## 🔥 2. Inteligência Preditiva & Identidade
13
+ - **Lead Heat Scoring (0-100)**: Algoritmo nativo que calcula a "febre" do lead e otimiza a IA do Facebook.
14
+ - **Identity Graph 🧬**: Banco D1 unificando visitantes via fingerprint em tempo real.
15
+
16
+ ## 💾 3. Memória & Dashboard (Upgrade Nota 10)
17
+ - **Memory Agent**: Protocolo de checkpoint JSON atômico para continuidade infinita.
18
+ - **Dashboard Agent**: Agora entrega **Boilerplates Reais** em React com Glassmorphism e Framer Motion.
19
+
20
+ ## 🚨 4. Self-Healing (Resiliência Total)
21
+ - Alertas diretos no seu **WhatsApp** via CallMeBot se a API da Meta, Google ou TikTok falhar.
22
+
23
+ ---
24
+
25
+ > 🏆 **VEREDITO FINAL: NOTA 10/10.**
26
+ > Você detém agora a arma definitiva em rastreamento de dados. 🌍🥇👑🛡️🏙️🔥🚨🧬📲⚓🏆🏆🏆🏆🏆
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "cdp-edge",
3
+ "version": "1.0.0",
4
+ "description": "CDP Edge - Quantum Tracking - Sistema multi-agente para tracking digital Cloudflare Native (Workers + D1)",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "cdp-edge": "./bin/cdp-edge.js",
9
+ "pb": "./bin/cdp-edge.js"
10
+ },
11
+ "files": [
12
+ "bin",
13
+ "dist",
14
+ "templates",
15
+ "contracts",
16
+ "extracted-skill",
17
+ "server-edge-tracker",
18
+ "scripts/build-sdk.js",
19
+ "docs",
20
+ "README.md"
21
+ ],
22
+ "scripts": {
23
+ "prepare": "node build.js",
24
+ "build": "node build.js",
25
+ "dev": "node build.js --watch",
26
+ "test": "node test.js",
27
+ "test:unit": "node tests/unit/normalization.test.js && node tests/unit/hashing.test.js && node tests/unit/deduplication.test.js && node tests/unit/payload-validation.test.js && node tests/unit/new-features.test.js && node tests/unit/utils.test.js",
28
+ "test:unit:normalize": "node tests/unit/normalization.test.js",
29
+ "test:unit:hash": "node tests/unit/hashing.test.js",
30
+ "test:unit:dedup": "node tests/unit/deduplication.test.js",
31
+ "test:unit:payload": "node tests/unit/payload-validation.test.js",
32
+ "test:unit:utils": "node tests/unit/utils.test.js",
33
+ "test:all": "npm run test:unit",
34
+ "test:integration": "cd tests/integration && npx vitest run",
35
+ "agents:check": "node scripts/validate-agents.js",
36
+ "agents:sync": "node scripts/sync-agents.js",
37
+ "agents:sync:list": "node scripts/sync-agents.js --list",
38
+ "agents:sync:all": "node scripts/sync-agents.js --apply-all",
39
+ "sdk:build": "node scripts/build-sdk.js",
40
+ "sdk:build:debug": "node scripts/build-sdk.js --debug",
41
+ "typecheck": "tsc --noEmit"
42
+ },
43
+ "keywords": [
44
+ "pixel",
45
+ "tracking",
46
+ "meta",
47
+ "caut",
48
+ "capi",
49
+ "tiktok",
50
+ "ga4",
51
+ "cloudflare",
52
+ "workers",
53
+ "d1",
54
+ "analytics",
55
+ "conversion",
56
+ "server-side"
57
+ ],
58
+ "author": "CDP Edge",
59
+ "license": "MIT",
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/ricardosoli777/CDP-Edge-Premium.ts"
63
+ },
64
+ "bugs": {
65
+ "url": "https://github.com/ricardosoli777/CDP-Edge-Premium.ts/issues"
66
+ },
67
+ "homepage": "https://github.com/ricardosoli777/CDP-Edge-Premium.ts#readme",
68
+ "engines": {
69
+ "node": ">=18.0.0"
70
+ },
71
+ "dependencies": {
72
+ "chalk": "^5.3.0",
73
+ "commander": "^12.0.0",
74
+ "inquirer": "^9.2.0",
75
+ "ora": "^8.0.0"
76
+ },
77
+ "devDependencies": {
78
+ "@cloudflare/workers-types": "^4.20260412.1",
79
+ "@semantic-release/changelog": "^6.0.3",
80
+ "@semantic-release/commit-analyzer": "^13.0.1",
81
+ "@semantic-release/github": "^12.0.6",
82
+ "@semantic-release/npm": "^13.1.5",
83
+ "@semantic-release/release-notes-generator": "^14.1.0",
84
+ "@types/node": "^20.19.39",
85
+ "esbuild": "^0.28.0",
86
+ "semantic-release": "^25.0.3",
87
+ "typescript": "^6.0.2"
88
+ }
89
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * CDP Edge — SDK Build Script
3
+ *
4
+ * Gera cdpTrack.min.js: bundle único pronto para <script src=""> em qualquer site.
5
+ * Entrada: extracted-skill/tracking-events-generator/cdpTrack.js (ES Module)
6
+ * Saída: dist/sdk/cdpTrack.min.js — minificado (produção)
7
+ * dist/sdk/cdpTrack.js — legível (debug)
8
+ *
9
+ * Uso:
10
+ * node scripts/build-sdk.js
11
+ * node scripts/build-sdk.js --debug (só versão legível)
12
+ */
13
+
14
+ import { build } from 'esbuild';
15
+ import { readFileSync, writeFileSync, mkdirSync } from 'fs';
16
+ import { resolve, dirname } from 'path';
17
+ import { fileURLToPath } from 'url';
18
+
19
+ const __dirname = dirname(fileURLToPath(import.meta.url));
20
+ const ROOT = resolve(__dirname, '..');
21
+ const SDK_DIR = resolve(ROOT, 'extracted-skill/tracking-events-generator');
22
+ const OUT_DIR = resolve(ROOT, 'dist/sdk');
23
+
24
+ const debugOnly = process.argv.includes('--debug');
25
+
26
+ // Garante que o diretório de saída existe
27
+ mkdirSync(OUT_DIR, { recursive: true });
28
+
29
+ // ── Banner do bundle ──────────────────────────────────────────────────────────
30
+ const pkg = JSON.parse(readFileSync(resolve(ROOT, 'package.json'), 'utf-8'));
31
+ const banner = `/*!
32
+ * CDP Edge SDK v${pkg.version}
33
+ * (c) ${new Date().getFullYear()} CDP Edge — Quantum Tracking
34
+ * Gerado em: ${new Date().toISOString()}
35
+ * Endpoint padrão: /track (mesmo domínio — anti-adblock)
36
+ */`;
37
+
38
+ // ── Configuração base do esbuild ──────────────────────────────────────────────
39
+ const baseConfig = {
40
+ entryPoints: [resolve(SDK_DIR, 'cdpTrack.js')],
41
+ bundle: true,
42
+ format: 'iife', // <script> tag — expõe window.cdpTrack
43
+ globalName: 'cdpTrack', // window.cdpTrack após carregar
44
+ platform: 'browser',
45
+ target: ['es2018'], // suporta Safari 12+, Chrome 69+, Firefox 62+
46
+ banner: { js: banner },
47
+ define: {
48
+ 'process.env.NODE_ENV': '"production"',
49
+ },
50
+ // Resolve módulos locais pelo diretório do SDK
51
+ absWorkingDir: SDK_DIR,
52
+ };
53
+
54
+ async function buildSDK() {
55
+ console.log('🏗️ Buildando CDP Edge SDK...\n');
56
+
57
+ // ── Versão debug (legível) ────────────────────────────────────────────────
58
+ console.log('📦 Gerando cdpTrack.js (debug)...');
59
+ await build({
60
+ ...baseConfig,
61
+ outfile: resolve(OUT_DIR, 'cdpTrack.js'),
62
+ minify: false,
63
+ sourcemap: false,
64
+ });
65
+ const debugSize = (readFileSync(resolve(OUT_DIR, 'cdpTrack.js')).length / 1024).toFixed(1);
66
+ console.log(` ✓ dist/sdk/cdpTrack.js — ${debugSize} kB`);
67
+
68
+ if (!debugOnly) {
69
+ // ── Versão produção (minificada) ────────────────────────────────────────
70
+ console.log('📦 Gerando cdpTrack.min.js (produção)...');
71
+ await build({
72
+ ...baseConfig,
73
+ outfile: resolve(OUT_DIR, 'cdpTrack.min.js'),
74
+ minify: true,
75
+ sourcemap: false,
76
+ });
77
+ const minSize = (readFileSync(resolve(OUT_DIR, 'cdpTrack.min.js')).length / 1024).toFixed(1);
78
+ console.log(` ✓ dist/sdk/cdpTrack.min.js — ${minSize} kB`);
79
+ }
80
+
81
+ // ── Gera snippet de instalação ────────────────────────────────────────────
82
+ const snippet = `<!-- CDP Edge SDK v${pkg.version} — instalar antes do </body> -->
83
+ <script src="/cdpTrack.min.js"></script>
84
+ <script>
85
+ // Inicializar após carregar
86
+ document.addEventListener('DOMContentLoaded', function() {
87
+ if (window.cdpTrack && window.cdpTrack.init) {
88
+ window.cdpTrack.init();
89
+ }
90
+ });
91
+ </script>`;
92
+
93
+ writeFileSync(resolve(OUT_DIR, 'install-snippet.html'), snippet, 'utf-8');
94
+ console.log(` ✓ dist/sdk/install-snippet.html — snippet de instalação\n`);
95
+
96
+ console.log('✅ SDK build concluído!');
97
+ console.log('\n📋 Próximos passos para o cliente:');
98
+ console.log(' 1. Copiar dist/sdk/cdpTrack.min.js para a raiz do site');
99
+ console.log(' 2. Adicionar snippet de dist/sdk/install-snippet.html antes de </body>');
100
+ console.log(' 3. O Worker deve estar no mesmo domínio (Custom Domain Cloudflare → /track)\n');
101
+ }
102
+
103
+ buildSDK().catch(err => {
104
+ console.error('❌ Build falhou:', err.message);
105
+ process.exit(1);
106
+ });
@@ -0,0 +1,14 @@
1
+ # CDP Edge — Variáveis do cliente para deploy
2
+ # Copie este arquivo para .client.env e preencha com os dados reais.
3
+ # .client.env é gitignored — NUNCA commitado.
4
+
5
+ # Cloudflare D1 — obter com: wrangler d1 list
6
+ DATABASE_ID=SEU_DATABASE_ID
7
+
8
+ # Domínio do projeto (sem https://)
9
+ SITE_DOMAIN=seudominio.com.br
10
+
11
+ # Pixels de rastreamento (opcional — deixar vazio se não usar)
12
+ META_PIXEL_ID=
13
+ GA4_MEASUREMENT_ID=
14
+ TIKTOK_PIXEL_ID=