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,174 @@
1
+ /**
2
+ * Server Command - Infraestrutura Cloudflare Workers
3
+ */
4
+
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import { promises as fs } from 'fs';
8
+ import { join } from 'path';
9
+
10
+ export async function runServer(dir) {
11
+ console.log(chalk.cyan.bold('\n CDP Edge - Server-Side Tracking\n'));
12
+
13
+ const spinner = ora('Gerando infraestrutura...').start();
14
+
15
+ try {
16
+ // Gerar worker.js
17
+ await generateWorker(dir);
18
+
19
+ // Gerar schema.sql
20
+ await generateSchema(dir);
21
+
22
+ // Gerar wrangler.toml
23
+ await generateWranglerConfig(dir);
24
+
25
+ spinner.succeed(chalk.green('Infraestrutura gerada!'));
26
+
27
+ console.log('\n' + chalk.yellow('Arquivos gerados:'));
28
+ console.log(` ${chalk.gray('├─')} worker.js`);
29
+ console.log(` ${chalk.gray('├─')} schema.sql`);
30
+ console.log(` ${chalk.gray('└─')} wrangler.toml`);
31
+
32
+ console.log(chalk.cyan('\nPróximos passos:'));
33
+ console.log(' 1. Configure suas API tokens no Wrangler:');
34
+ console.log(' wrangler secret put META_ACCESS_TOKEN');
35
+ console.log(' 2. Faça o deploy:');
36
+ console.log(' wrangler deploy');
37
+ console.log(' 3. Configure o schema D1:');
38
+ console.log(' wrangler d1 execute db --file=schema.sql');
39
+
40
+ } catch (error) {
41
+ spinner.fail('Erro ao gerar infraestrutura');
42
+ console.error(error);
43
+ }
44
+ }
45
+
46
+ async function generateWorker(dir) {
47
+ const workerPath = join(dir, 'worker.js');
48
+ await fs.writeFile(workerPath, generateWorkerCode());
49
+ }
50
+
51
+ async function generateSchema(dir) {
52
+ const schemaPath = join(dir, 'schema.sql');
53
+ await fs.writeFile(schemaPath, generateSchemaCode());
54
+ }
55
+
56
+ async function generateWranglerConfig(dir) {
57
+ const configPath = join(dir, 'wrangler.toml');
58
+ await fs.writeFile(configPath, generateWranglerCode());
59
+ }
60
+
61
+ function generateWorkerCode() {
62
+ return `// CDP Edge Quantum Tier - Cloudflare Worker
63
+ // Auto-generated by cdp-edge npx
64
+
65
+ export default {
66
+ async fetch(request, env) {
67
+ const url = new URL(request.url);
68
+ const path = url.pathname;
69
+
70
+ // Endpoint de tracking
71
+ if (path === '/api/tracking') {
72
+ return handleTracking(request, env);
73
+ }
74
+
75
+ // Health check
76
+ if (path === '/health') {
77
+ return new Response(JSON.stringify({ status: 'ok' }), {
78
+ headers: { 'Content-Type': 'application/json' }
79
+ });
80
+ }
81
+
82
+ return new Response('Not Found', { status: 404 });
83
+ }
84
+ };
85
+
86
+ async function handleTracking(request, env) {
87
+ try {
88
+ const body = await request.json();
89
+ const { event, data } = body;
90
+
91
+ // Persistir no D1
92
+ await env.DB.prepare(
93
+ 'INSERT INTO events (event_id, event_type, user_id, data, created_at) VALUES (?, ?, ?, ?, ?)'
94
+ ).bind(data.event_id, event, data.user_id, JSON.stringify(data), Date.now()).run();
95
+
96
+ // Enviar para APIs externas (background)
97
+ if (event === 'Purchase' || event === 'Lead') {
98
+ ctx.waitUntil(sendToPlatforms(event, data, env));
99
+ }
100
+
101
+ return new Response(JSON.stringify({ success: true }), {
102
+ headers: { 'Content-Type': 'application/json' }
103
+ });
104
+ } catch (error) {
105
+ return new Response(JSON.stringify({ error: error.message }), {
106
+ status: 500,
107
+ headers: { 'Content-Type': 'application/json' }
108
+ });
109
+ }
110
+ }
111
+
112
+ async function sendToPlatforms(event, data, env) {
113
+ // Implementar envio para Meta, TikTok, etc.
114
+ // Use Promise.allSettled para resiliência
115
+ }
116
+ `;
117
+ }
118
+
119
+ function generateSchemaCode() {
120
+ return `-- CDP Edge Quantum Tier - D1 Schema
121
+ -- Auto-generated by cdp-edge npx
122
+
123
+ -- Tabela de sessões/identidade
124
+ CREATE TABLE IF NOT EXISTS identities (
125
+ id TEXT PRIMARY KEY,
126
+ user_id TEXT NOT NULL,
127
+ email TEXT,
128
+ phone TEXT,
129
+ created_at INTEGER NOT NULL,
130
+ updated_at INTEGER NOT NULL,
131
+ INDEX idx_user_id (user_id)
132
+ );
133
+
134
+ -- Tabela de leads
135
+ CREATE TABLE IF NOT EXISTS leads (
136
+ id TEXT PRIMARY KEY,
137
+ identity_id TEXT NOT NULL,
138
+ email TEXT,
139
+ phone TEXT,
140
+ name TEXT,
141
+ source TEXT,
142
+ created_at INTEGER NOT NULL,
143
+ FOREIGN KEY (identity_id) REFERENCES identities(id)
144
+ );
145
+
146
+ -- Tabela de eventos
147
+ CREATE TABLE IF NOT EXISTS events (
148
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
149
+ event_id TEXT NOT NULL UNIQUE,
150
+ event_type TEXT NOT NULL,
151
+ user_id TEXT,
152
+ data TEXT,
153
+ created_at INTEGER NOT NULL,
154
+ INDEX idx_event_id (event_id),
155
+ INDEX idx_event_type (event_type),
156
+ INDEX idx_user_id (user_id)
157
+ );
158
+ `;
159
+ }
160
+
161
+ function generateWranglerCode() {
162
+ return `# CDP Edge Quantum Tier - Wrangler Config
163
+ # Auto-generated by cdp-edge npx
164
+
165
+ name = "cdp-edge-worker"
166
+ main = "worker.js"
167
+ compatibility_date = "2024-01-01"
168
+
169
+ [[d1_databases]]
170
+ binding = "DB"
171
+ database_name = "cdp-edge-db"
172
+ database_id = "your-database-id"
173
+ `;
174
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Setup Wizard - Wrapper para invocar CDP Edge Skill
3
+ *
4
+ * O CLI é apenas um disparador. A skill (Master Orchestrator) faz tudo.
5
+ */
6
+
7
+ import inquirer from 'inquirer';
8
+ import chalk from 'chalk';
9
+ import ora from 'ora';
10
+
11
+ export async function runSetupWizard(dir = '.') {
12
+ console.log(chalk.cyan.bold('\n CDP Edge Quantum Tier - Setup Wizard\n'));
13
+
14
+ // === MENSAGEM INICIAL ===
15
+
16
+ console.log(chalk.gray('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
17
+ console.log(chalk.green.bold(' ✅ CDP Edge INSTALADO COM SUCESSO!'));
18
+ console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
19
+
20
+ console.log(chalk.cyan('🎯 O Master Orchestrator controla todo o processo de criação.'));
21
+ console.log(chalk.cyan(' Ele vai:\n'));
22
+ console.log(chalk.cyan(' • Fazer as perguntas necessárias'));
23
+ console.log(chalk.cyan(' • Analisar suas páginas automaticamente'));
24
+ console.log(chalk.cyan(' • Chamar os agentes especialistas'));
25
+ console.log(chalk.cyan(' • Gerar todos os arquivos de tracking'));
26
+ console.log(chalk.cyan(' • Validar o código gerado\n'));
27
+
28
+ // === MENU DE OPÇÃO ===
29
+
30
+ const menu = await inquirer.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'action',
34
+ message: 'O que você deseja fazer?',
35
+ choices: [
36
+ { name: '🚀 Iniciar Master Orchestrator (Configuração Completa)', value: 'start' },
37
+ { name: '📖 Ver documentação', value: 'docs' },
38
+ { name: '❌ Sair', value: 'exit' }
39
+ ]
40
+ }
41
+ ]);
42
+
43
+ if (menu.action === 'exit') {
44
+ console.log(chalk.yellow('\n👋 Até logo!\n'));
45
+ process.exit(0);
46
+ }
47
+
48
+ if (menu.action === 'docs') {
49
+ console.log(chalk.cyan('\n📚 Documentação:'));
50
+ console.log(' Acesse: ' + chalk.underline('docs/guia-cloudflare-iniciante.md'));
51
+ console.log(' Ou visite: ' + chalk.underline('github.com/ricardosoli777/CDP-Edge-Premium'));
52
+ return;
53
+ }
54
+
55
+ if (menu.action === 'start') {
56
+ const spinner = ora('Iniciando Master Orchestrator...').start();
57
+ await sleep(800);
58
+ spinner.succeed(chalk.green('Master Orchestrator iniciado!'));
59
+
60
+ console.log(chalk.gray('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
61
+ console.log(chalk.cyan.bold(' ' + chalk.bold('🧠 MASTER ORCHESTRATOR ATIVO')));
62
+ console.log(chalk.cyan(' Controlando todo o fluxo de criação...'));
63
+ console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
64
+
65
+ // === AQUI INVOCARIA A SKILL ===
66
+ //
67
+ // Em produção, aqui seria:
68
+ //
69
+ // import { spawnMasterOrchestrator } from '../skill-wrapper';
70
+ // await spawnMasterOrchestrator({ dir, platforms: [] });
71
+ //
72
+ // A skill faria:
73
+ // - Perguntar modo (guiado/livre)
74
+ // - Perguntar plataformas
75
+ // - Acessar projeto
76
+ // - Spawnar Page Analyzer Agent
77
+ // - Spawnar Browser Agent
78
+ // - Spawnar Meta Agent, Google Agent, TikTok Agent
79
+ // - Spawnar Server Agent
80
+ // - Gerar todos os arquivos
81
+ // - Validar
82
+
83
+ // === DEMONSTRAÇÃO DO QUE ACONTECE ===
84
+
85
+ console.log(chalk.yellow.bold('\n🔄 MODO DEMONSTRAÇÃO\n'));
86
+ console.log(chalk.gray(' Nesta versão, veja o fluxo que a skill executaria:\n'));
87
+
88
+ const demoFlow = [
89
+ ' [1] Perguntar: Como prefere configurar?',
90
+ ' → Guiado ou Livre',
91
+ ' [2] Perguntar: Quais plataformas de ads usa?',
92
+ ' → Meta, Google, TikTok, LinkedIn, Spotify...',
93
+ ' [3] Acessar: Seu projeto (GitHub ou local)',
94
+ ' [4] Page Analyzer: Analisar páginas',
95
+ ' → Detecta tipo de produto, nicho, formulários',
96
+ ' [5] Browser Agent: Gerar cdpTrack.js',
97
+ ' → Tracking SDK + micro-events',
98
+ ' [6] Meta Agent: Gerar Pixel + CAPI',
99
+ ' [7] Google Agent: Gerar GA4 + Google Ads',
100
+ ' [8] TikTok Agent: Gerar Pixel + Events API',
101
+ ' [9] Server Agent: Gerar Worker + D1',
102
+ ' [10] Validator: Auditar código gerado',
103
+ ' [11] Entregar: Arquivos no seu projeto',
104
+ ' → tracking.config.js, cdpTrack.js, worker.js, schema.sql'
105
+ ];
106
+
107
+ demoFlow.forEach(line => console.log(chalk.cyan(line)));
108
+
109
+ console.log(chalk.gray('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
110
+ console.log(chalk.green.bold(' ✅ SETUP CONCLUÍDO!'));
111
+ console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
112
+
113
+ console.log(chalk.cyan('📁 Arquivos gerados: ' + chalk.underline(dir || '.')));
114
+ console.log(chalk.gray('\nPróximos passos:'));
115
+ console.log(' 1. Configure seus API tokens no Wrangler');
116
+ console.log(' 2. Faça o deploy: ' + chalk.bold('wrangler deploy'));
117
+ console.log(' 3. Configure o domínio no Cloudflare Dashboard');
118
+ }
119
+ }
120
+
121
+ function sleep(ms) {
122
+ return new Promise(resolve => setTimeout(resolve, ms));
123
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Validate Command - Auditoria de tracking existente
3
+ */
4
+
5
+ import inquirer from 'inquirer';
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { promises as fs } from 'fs';
9
+
10
+ export async function runValidate(filePath) {
11
+ console.log(chalk.cyan.bold('\n CDP Edge - Tracking Validator\n'));
12
+
13
+ const input = await inquirer.prompt([
14
+ {
15
+ type: 'input',
16
+ name: 'code',
17
+ message: 'Cole o código de tracking para validar:',
18
+ validate: (value) => value.length > 0 || 'Por favor, forneça o código'
19
+ }
20
+ ]);
21
+
22
+ const spinner = ora('Validando código...').start();
23
+
24
+ try {
25
+ const validation = await validateCode(input.code);
26
+
27
+ spinner.succeed('Validação concluída');
28
+
29
+ console.log('\n' + chalk.yellow('Relatório de Validação:'));
30
+ displayValidationReport(validation);
31
+
32
+ } catch (error) {
33
+ spinner.fail('Erro na validação');
34
+ console.error(error);
35
+ }
36
+ }
37
+
38
+ async function validateCode(code) {
39
+ // Em produção, usaria o Validator Agent para análise profunda
40
+ const issues = [];
41
+ const warnings = [];
42
+
43
+ // Validações básicas
44
+ if (!code.includes('event_id')) {
45
+ issues.push('Falta event_id para deduplicação');
46
+ }
47
+ if (!code.includes('SHA256') && !code.includes('sha256')) {
48
+ warnings.push('Hashing não detectado para PII');
49
+ }
50
+ if (code.includes('dataLayer') || code.includes('gtm')) {
51
+ issues.push('Detectado GTM - considere Cloudflare Workers Quantum Tier');
52
+ }
53
+
54
+ return {
55
+ status: issues.length === 0 ? 'PASS' : 'FAIL',
56
+ score: Math.max(0, 100 - (issues.length * 25) - (warnings.length * 10)),
57
+ issues,
58
+ warnings
59
+ };
60
+ }
61
+
62
+ function displayValidationReport(validation) {
63
+ // Status
64
+ const statusColor = validation.status === 'PASS' ? 'green' : 'red';
65
+ console.log(` Status: ${chalk[statusColor].bold(validation.status)}`);
66
+ console.log(` Score: ${chalk.cyan(validation.score)}/100`);
67
+
68
+ // Issues
69
+ if (validation.issues.length > 0) {
70
+ console.log('\n' + chalk.red.bold('❌ Problemas Críticos:'));
71
+ validation.issues.forEach(issue => console.log(` ${chalk.red('├─')} ${issue}`));
72
+ }
73
+
74
+ // Warnings
75
+ if (validation.warnings.length > 0) {
76
+ console.log('\n' + chalk.yellow.bold('⚠️ Avisos:'));
77
+ validation.warnings.forEach(warning => console.log(` ${chalk.yellow('├─')} ${warning}`));
78
+ }
79
+
80
+ // Sucesso
81
+ if (validation.issues.length === 0 && validation.warnings.length === 0) {
82
+ console.log('\n' + chalk.green.bold('✅ Código validado com sucesso!'));
83
+ }
84
+ }
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CDP Edge CLI - Main Entry
3
+ * Sistema multi-agente para tracking digital Quantum Tier
4
+ */
5
+
6
+ export { runSetupWizard } from './commands/setup.js';
7
+ export { runAnalyze } from './commands/analyze.js';
8
+ export { runServer } from './commands/server.js';
9
+ export { runValidate } from './commands/validate.js';
10
+ export { runInfra } from './commands/infra.js';
11
+
12
+ export const version = '1.0.0';
@@ -0,0 +1,217 @@
1
+ # CDP Edge - Setup CI/CD e Versionamento Automático
2
+
3
+ ## Fluxo Escolhido
4
+
5
+ Escolha **UMA** das opções:
6
+
7
+ | Opção | Versão | Quando usar |
8
+ |-------|--------|------------|
9
+ | **semantic-release** | Automática | Commits convencionais, time pequeno |
10
+ | **Manual workflow** | Controlada | Quer aprovar cada release |
11
+
12
+ ---
13
+
14
+ ## PASSO 1: Criar Conta e Token no npm
15
+
16
+ ```bash
17
+ # 1. Criar conta em https://www.npmjs.com/signup
18
+
19
+ # 2. Login
20
+ npm login
21
+
22
+ # 3. Criar token de automação
23
+ # Vá em: https://www.npmjs.com/settings/tokens
24
+ # - Clique "Create New Token"
25
+ # - Nome: "GitHub Actions"
26
+ # - Tipo: "Automation"
27
+ # - Copie o token gerado
28
+ ```
29
+
30
+ ---
31
+
32
+ ## PASSO 2: Configurar Secrets no GitHub
33
+
34
+ Vá no repositório: `Settings` → `Secrets and variables` → `Actions` → `New repository secret`
35
+
36
+ **Adicione:**
37
+
38
+ | Nome | Valor |
39
+ |------|-------|
40
+ | `NPM_TOKEN` | Token do passo 1 |
41
+ | `GITHUB_TOKEN` | Já existe automaticamente (não precisa criar) |
42
+
43
+ ---
44
+
45
+ ## PASSO 3: Configurar o Workflow
46
+
47
+ ### Opção A: semantic-release (Automática)
48
+
49
+ ```bash
50
+ # 1. Adicionar dependências
51
+ npm install -D semantic-release @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/github @semantic-release/npm @semantic-release/release-notes-generator
52
+
53
+ # 2. O arquivo .releaserc.json já está criado
54
+ # 3. O workflow .github/workflows/release.yml já está criado
55
+ # 4. Commit e push
56
+ git add .
57
+ git commit -m "ci: add semantic-release automation"
58
+ git push
59
+ ```
60
+
61
+ **Como usar:**
62
+
63
+ ```bash
64
+ # Nova feature
65
+ git commit -m "feat: add Reddit support"
66
+
67
+ # Bugfix
68
+ git commit -m "fix: correct TikTok endpoint"
69
+
70
+ # Breaking change
71
+ git commit -m "feat!: remove GTM support"
72
+ # ou
73
+ git commit -m "feat: add new API
74
+
75
+ BREAKING CHANGE: requires Node 20+"
76
+ ```
77
+
78
+ Ao fazer push no `main`, o release é automático!
79
+
80
+ ---
81
+
82
+ ### Opção B: Manual Workflow
83
+
84
+ ```bash
85
+ # 1. O arquivo .github/workflows/publish.yml já está criado
86
+ # 2. Commit e push
87
+ git add .
88
+ git commit -m "ci: add manual publish workflow"
89
+ git push
90
+ ```
91
+
92
+ **Como usar:**
93
+
94
+ 1. Vá em: `Actions` → `Publish to npm`
95
+ 2. Clique `Run workflow`
96
+ 3. Escolha o tipo: `patch`, `minor` ou `major`
97
+ 4. Clique `Run workflow`
98
+
99
+ ---
100
+
101
+ ## PASSO 4: Configurar Conventional Commits (Opcional mas recomendado)
102
+
103
+ ```bash
104
+ # Instalar commitlint
105
+ npm install -D @commitlint/cli @commitlint/config-conventional
106
+
107
+ # Criar commitlint.config.js
108
+ echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
109
+
110
+ # Adicionar ao package.json scripts
111
+ # "prepare": "husky install"
112
+ # "commitlint": "commitlint --edit"
113
+
114
+ # Instalar husky
115
+ npm install -D husky
116
+ npx husky install
117
+ npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
118
+ ```
119
+
120
+ Agora commits inválidos são bloqueados!
121
+
122
+ ---
123
+
124
+ ## Fluxo Completo de Desenvolvimento
125
+
126
+ ```
127
+ Desenvolvimento
128
+
129
+ git commit -m "feat: nova funcionalidade"
130
+
131
+ git push origin main
132
+
133
+ GitHub Actions detecta push
134
+
135
+ ┌─────────┐
136
+ │ semantic-│ (se Opção A)
137
+ │ release │──→ Calcula versão
138
+ └─────────┘
139
+
140
+ ┌─────────┐
141
+ │ CI/CD │──→ Build + Test
142
+ └─────────┘
143
+
144
+ ┌─────────┐
145
+ │ Publish │──→ npm publish
146
+ │ npm │
147
+ └─────────┘
148
+
149
+ ┌─────────┐
150
+ │GitHub │──→ Criar Release
151
+ │ Release │ + Changelog
152
+ └─────────┘
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Verificação
158
+
159
+ ```bash
160
+ # Ver releases criados
161
+ npm view cdp-edge versions
162
+
163
+ # Ver changelog
164
+ # Vá em: https://github.com/seu-usuario/cdp-edge/releases
165
+ ```
166
+
167
+ ---
168
+
169
+ ## Solução de Problemas
170
+
171
+ ### Erro: "401 Unauthorized"
172
+ → Verifique se `NPM_TOKEN` está correto no GitHub Secrets
173
+
174
+ ### Erro: "403 Forbidden"
175
+ → Verifique se o nome do pacote está disponível no npm
176
+
177
+ ### Release não aparece
178
+ → Verifique se o workflow falhou em `Actions`
179
+
180
+ ---
181
+
182
+ ## Dicas Avançadas
183
+
184
+ ### Pre-release (beta, alpha)
185
+
186
+ ```bash
187
+ git commit -m "feat: add beta feature
188
+
189
+ Release: 1.1.0-beta.1"
190
+ ```
191
+
192
+ ### Ignorar commits no release
193
+
194
+ ```
195
+ # .releaserc.json
196
+ {
197
+ "branches": ["main"],
198
+ "tagFormat": "v${version}",
199
+ "plugins": [
200
+ "@semantic-release/commit-analyzer",
201
+ {
202
+ "preset": "conventionalcommits",
203
+ "releaseRules": [
204
+ { "type": "chore", "scope": "deps", "release": "patch" }
205
+ ]
206
+ }
207
+ ]
208
+ }
209
+ ```
210
+
211
+ ### Multiple publish channels
212
+
213
+ Use scopes para diferentes canais:
214
+ ```bash
215
+ npm publish --tag beta # @beta
216
+ npm publish --tag next # @next
217
+ ```