cdp-edge 1.2.0 → 1.3.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 (142) 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 +244 -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 +5 -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 +428 -190
  45. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -109
  47. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
  48. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
  49. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  50. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
  51. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
  52. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
  53. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
  54. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
  55. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
  56. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
  57. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
  58. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
  59. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
  60. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
  61. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
  62. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  63. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
  64. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
  65. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
  66. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
  67. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
  68. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
  69. package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
  70. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
  71. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
  72. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
  73. package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
  74. package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
  75. package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
  76. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  77. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
  78. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
  79. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
  80. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
  81. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
  82. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
  83. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
  84. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
  85. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  86. package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
  87. package/package.json +89 -75
  88. package/scripts/build-sdk.js +106 -0
  89. package/server-edge-tracker/.client.env.example +14 -0
  90. package/server-edge-tracker/INSTALAR.md +222 -23
  91. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  92. package/server-edge-tracker/config/utm-mapping.json +64 -0
  93. package/server-edge-tracker/deploy-client.cjs +76 -0
  94. package/server-edge-tracker/index.ts +1230 -0
  95. package/server-edge-tracker/migrate-v7.sql +64 -0
  96. package/server-edge-tracker/modules/db.ts +710 -0
  97. package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
  98. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  99. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  100. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  101. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  102. package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
  103. package/server-edge-tracker/modules/intelligence.ts +589 -0
  104. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  105. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  106. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  107. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  108. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  109. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  110. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  111. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  112. package/server-edge-tracker/modules/nurture.ts +257 -0
  113. package/server-edge-tracker/modules/utils.ts +311 -0
  114. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  115. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  116. package/server-edge-tracker/schema-bidding.sql +86 -0
  117. package/server-edge-tracker/schema-fraud.sql +90 -0
  118. package/server-edge-tracker/schema-indexes.sql +67 -0
  119. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  120. package/server-edge-tracker/schema-quiz.sql +52 -0
  121. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  122. package/server-edge-tracker/schema-segmentation.sql +219 -0
  123. package/server-edge-tracker/schema-utm.sql +82 -0
  124. package/server-edge-tracker/schema.sql +281 -265
  125. package/server-edge-tracker/types.ts +275 -0
  126. package/server-edge-tracker/wrangler.toml +140 -85
  127. package/templates/lancamento-imobiliario.md +344 -0
  128. package/templates/multi-step-checkout.md +3 -4
  129. package/templates/pinterest/conversions-api-template.js +144 -144
  130. package/templates/pinterest/event-mappings.json +48 -48
  131. package/templates/pinterest/tag-template.js +28 -28
  132. package/templates/quiz-funnel.md +83 -19
  133. package/templates/reddit/conversions-api-template.js +205 -205
  134. package/templates/reddit/event-mappings.json +56 -56
  135. package/templates/reddit/pixel-template.js +12 -39
  136. package/templates/scenarios/behavior-engine.js +45 -22
  137. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  138. package/docs/installation.md +0 -155
  139. package/docs/quick-start.md +0 -185
  140. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
  141. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
  142. package/server-edge-tracker/worker.js +0 -2574
@@ -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
+ }
@@ -10,9 +10,9 @@
10
10
  const CONFIG = {
11
11
  // ── Endpoint do Cloudflare Worker ────────────────────────────────────────────
12
12
  // Same-domain: evita ad-blockers e CORS.
13
- // Em produção: seu-dominio.com.br/api/tracking (Worker roteado)
14
- // Em dev: use o URL do Worker diretamente
15
- endpoint: '/api/tracking',
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
16
 
17
17
  // ── Plataformas de checkout habilitadas ──────────────────────────────────────
18
18
  // Controla quais plataformas recebem passCheckoutParams() automaticamente.
package/package.json CHANGED
@@ -1,75 +1,89 @@
1
- {
2
- "name": "cdp-edge",
3
- "version": "1.2.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
- "docs",
19
- "README.md"
20
- ],
21
- "scripts": {
22
- "build": "node build.js",
23
- "dev": "node build.js --watch",
24
- "test": "node test.js",
25
- "test:unit": "node tests/unit/*.test.js",
26
- "test:unit:normalize": "node tests/unit/normalization.test.js",
27
- "test:unit:hash": "node tests/unit/hashing.test.js",
28
- "test:unit:dedup": "node tests/unit/deduplication.test.js",
29
- "test:unit:payload": "node tests/unit/payload-validation.test.js",
30
- "test:all": "npm run test:unit"
31
- },
32
- "keywords": [
33
- "pixel",
34
- "tracking",
35
- "meta",
36
- "caut",
37
- "capi",
38
- "tiktok",
39
- "ga4",
40
- "cloudflare",
41
- "workers",
42
- "d1",
43
- "analytics",
44
- "conversion",
45
- "server-side"
46
- ],
47
- "author": "CDP Edge",
48
- "license": "MIT",
49
- "repository": {
50
- "type": "git",
51
- "url": "https://github.com/ricardosoli777/CDP-Edge-Premium"
52
- },
53
- "bugs": {
54
- "url": "https://github.com/ricardosoli777/CDP-Edge-Premium/issues"
55
- },
56
- "homepage": "https://github.com/ricardosoli777/CDP-Edge-Premium#readme",
57
- "engines": {
58
- "node": ">=18.0.0"
59
- },
60
- "dependencies": {
61
- "chalk": "^5.3.0",
62
- "commander": "^12.0.0",
63
- "inquirer": "^9.2.0",
64
- "ora": "^8.0.0"
65
- },
66
- "devDependencies": {
67
- "@semantic-release/changelog": "^6.0.3",
68
- "@semantic-release/commit-analyzer": "^13.0.1",
69
- "@semantic-release/github": "^12.0.6",
70
- "@semantic-release/npm": "^13.1.5",
71
- "@semantic-release/release-notes-generator": "^14.1.0",
72
- "@types/node": "^20.0.0",
73
- "semantic-release": "^25.0.3"
74
- }
75
- }
1
+ {
2
+ "name": "cdp-edge",
3
+ "version": "1.3.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": "^14.0.3",
74
+ "inquirer": "^13.4.2",
75
+ "ora": "^9.4.0"
76
+ },
77
+ "devDependencies": {
78
+ "@cloudflare/workers-types": "^4.20260425.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": "^25.6.0",
85
+ "esbuild": "^0.28.0",
86
+ "semantic-release": "^25.0.3",
87
+ "typescript": "^6.0.3"
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=