cdp-edge 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +367 -0
- package/bin/cdp-edge.js +61 -0
- package/contracts/api-versions.json +368 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +168 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +123 -0
- package/dist/commands/validate.js +84 -0
- package/dist/index.js +12 -0
- package/docs/CI-CD-SETUP.md +217 -0
- package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
- package/docs/events-reference.md +359 -0
- package/docs/installation.md +155 -0
- package/docs/quick-start.md +185 -0
- package/docs/sdk-reference.md +371 -0
- package/docs/whatsapp-ctwa.md +209 -0
- package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +594 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +412 -0
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
- package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +264 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2077 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1419 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +667 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +224 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +61 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +52 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +109 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +365 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +643 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +62 -0
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +900 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1922 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +109 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +703 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +110 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +255 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1157 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1432 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +310 -0
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +250 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +313 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1752 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +383 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +111 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +267 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +69 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +76 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +699 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +422 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +641 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +368 -0
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
- package/extracted-skill/tracking-events-generator/knowledge-base.md +2894 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
- package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +68 -0
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
- package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
- package/package.json +75 -0
- package/server-edge-tracker/INSTALAR.md +328 -0
- package/server-edge-tracker/migrate-new-db.sql +137 -0
- package/server-edge-tracker/migrate-v2.sql +16 -0
- package/server-edge-tracker/migrate-v3.sql +6 -0
- package/server-edge-tracker/migrate-v4.sql +18 -0
- package/server-edge-tracker/migrate-v5.sql +17 -0
- package/server-edge-tracker/migrate-v6.sql +24 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/schema.sql +265 -0
- package/server-edge-tracker/worker.js +2574 -0
- package/server-edge-tracker/wrangler.toml +85 -0
- package/templates/afiliado-sem-landing.md +312 -0
- package/templates/captura-de-lead.md +78 -0
- package/templates/captura-lead-evento-externo.md +99 -0
- package/templates/checkout-proprio.md +111 -0
- package/templates/install/.claude/commands/cdp.md +1 -0
- package/templates/install/CLAUDE.md +65 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +673 -0
- package/templates/pagina-obrigado.md +55 -0
- package/templates/pinterest/conversions-api-template.js +144 -0
- package/templates/pinterest/event-mappings.json +48 -0
- package/templates/pinterest/tag-template.js +28 -0
- package/templates/quiz-funnel.md +68 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +46 -0
- package/templates/scenarios/behavior-engine.js +402 -0
- package/templates/scenarios/real-estate-logic.md +50 -0
- package/templates/scenarios/sales-page-logic.md +50 -0
- package/templates/spotify/pixel-template.js +46 -0
- package/templates/trafego-direto.md +582 -0
- package/templates/vsl-page.md +292 -0
- package/templates/webinar-registration.md +63 -0
|
@@ -0,0 +1,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
|
+
```
|
|
Binary file
|