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,368 @@
|
|
|
1
|
+
{
|
|
2
|
+
"metadata": {
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"created_at": "2026-03-28T14:00:00.000Z",
|
|
5
|
+
"updated_at": "2026-03-28T14:00:00.000Z",
|
|
6
|
+
"maintained_by": "Intelligence Agent (CDP Edge Quantum Tier)",
|
|
7
|
+
"purpose": "Fonte única da verdade para versões de API em todo o ecossistema CDP Edge"
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
"meta": {
|
|
11
|
+
"platform": "meta",
|
|
12
|
+
"name": "Meta (Facebook)",
|
|
13
|
+
"documentation": "https://developers.facebook.com/docs/marketing-api/conversions-api/",
|
|
14
|
+
"changelog": "https://developers.facebook.com/docs/graph-changelog/",
|
|
15
|
+
|
|
16
|
+
"versions": {
|
|
17
|
+
"pixel": {
|
|
18
|
+
"current": "v22.0",
|
|
19
|
+
"minimum_supported": "v21.0",
|
|
20
|
+
"recommended": "v22.0",
|
|
21
|
+
"deprecated": ["v20.0", "v21.0"],
|
|
22
|
+
"deprecated_cutoff": {
|
|
23
|
+
"v20.0": "2024-01-01T00:00:00.000Z",
|
|
24
|
+
"v21.0": "2024-06-01T00:00:00.000Z"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
"capi": {
|
|
29
|
+
"current": "v22.0",
|
|
30
|
+
"minimum_supported": "v21.0",
|
|
31
|
+
"recommended": "v22.0",
|
|
32
|
+
"endpoint_pattern": "https://graph.facebook.com/{VERSION}/{PIXEL_ID}/events",
|
|
33
|
+
"authentication": "Bearer token (META_ACCESS_TOKEN)",
|
|
34
|
+
"rate_limits": {
|
|
35
|
+
"requests_per_hour": 200,
|
|
36
|
+
"events_per_batch": 10,
|
|
37
|
+
"batches_per_hour": 20
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
"messenger": {
|
|
42
|
+
"current": "v22.0",
|
|
43
|
+
"minimum_supported": "v21.0",
|
|
44
|
+
"recommended": "v22.0",
|
|
45
|
+
"whatsapp_cloud_api": "v22.0"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
"google": {
|
|
51
|
+
"platform": "google",
|
|
52
|
+
"name": "Google (GA4 + Google Ads)",
|
|
53
|
+
"versions": {
|
|
54
|
+
"ga4": {
|
|
55
|
+
"current": "latest",
|
|
56
|
+
"minimum_supported": "v2",
|
|
57
|
+
"recommended": "latest",
|
|
58
|
+
"endpoint_pattern": "https://www.google-analytics.com/mp/collect?measurement_id={MEASUREMENT_ID}&api_secret={SECRET}",
|
|
59
|
+
"authentication": "API Secret (GA4_API_SECRET)"
|
|
60
|
+
},
|
|
61
|
+
"google_ads": {
|
|
62
|
+
"current": "latest",
|
|
63
|
+
"minimum_supported": "v2",
|
|
64
|
+
"recommended": "latest",
|
|
65
|
+
"uet_tag": "latest"
|
|
66
|
+
},
|
|
67
|
+
"consent_mode": {
|
|
68
|
+
"current": "v2",
|
|
69
|
+
"minimum_supported": "v2",
|
|
70
|
+
"required_parameters": [
|
|
71
|
+
"ad_storage",
|
|
72
|
+
"analytics_storage",
|
|
73
|
+
"ad_user_data",
|
|
74
|
+
"ad_personalization"
|
|
75
|
+
],
|
|
76
|
+
"default_values": {
|
|
77
|
+
"ad_storage": "denied",
|
|
78
|
+
"analytics_storage": "denied",
|
|
79
|
+
"ad_user_data": "denied",
|
|
80
|
+
"ad_personalization": "denied"
|
|
81
|
+
},
|
|
82
|
+
"flags": {
|
|
83
|
+
"url_passthrough": true,
|
|
84
|
+
"wait_for_update": 500
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
"tiktok": {
|
|
91
|
+
"platform": "tiktok",
|
|
92
|
+
"name": "TikTok (Pixel + Events API)",
|
|
93
|
+
"documentation": "https://ads.tiktok.com/marketing_api/docs?id=1740465605569281",
|
|
94
|
+
"versions": {
|
|
95
|
+
"pixel": {
|
|
96
|
+
"current": "v1.3",
|
|
97
|
+
"minimum_supported": "v1.2",
|
|
98
|
+
"recommended": "v1.3",
|
|
99
|
+
"deprecated": [
|
|
100
|
+
"v1.2"
|
|
101
|
+
],
|
|
102
|
+
"deprecated_cutoff": {
|
|
103
|
+
"v1.2": "2024-03-01T00:00:00.000Z"
|
|
104
|
+
},
|
|
105
|
+
"endpoint_pattern": "https://analytics.tiktok.com/v1/pixel"
|
|
106
|
+
},
|
|
107
|
+
"events_api": {
|
|
108
|
+
"current": "v1.3",
|
|
109
|
+
"minimum_supported": "v1.2",
|
|
110
|
+
"recommended": "v1.3",
|
|
111
|
+
"endpoint_pattern": "https://business-api.tiktok.com/open_api/{VERSION}/event/track/",
|
|
112
|
+
"authentication": "Bearer token (TIKTOK_ACCESS_TOKEN)",
|
|
113
|
+
"rate_limits": {
|
|
114
|
+
"requests_per_minute": 10,
|
|
115
|
+
"events_per_batch": 5,
|
|
116
|
+
"batches_per_minute": 2
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
"pinterest": {
|
|
123
|
+
"platform": "pinterest",
|
|
124
|
+
"name": "Pinterest (Tag + Conversions API)",
|
|
125
|
+
"documentation": "https://developers.pinterest.com/docs/conversions/",
|
|
126
|
+
"versions": {
|
|
127
|
+
"tag": {
|
|
128
|
+
"current": "3.0",
|
|
129
|
+
"minimum_supported": "2.0",
|
|
130
|
+
"recommended": "3.0",
|
|
131
|
+
"endpoint_pattern": "https://s.pinimg.com/ct/core.js",
|
|
132
|
+
"enhanced_match": {
|
|
133
|
+
"supports_email_hashing": true,
|
|
134
|
+
"supports_phone_hashing": true,
|
|
135
|
+
"auto_hash_by_pixel": true
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"conversions_api": {
|
|
139
|
+
"current": "v5",
|
|
140
|
+
"minimum_supported": "v4.0",
|
|
141
|
+
"recommended": "v5",
|
|
142
|
+
"deprecated": [
|
|
143
|
+
"v4"
|
|
144
|
+
],
|
|
145
|
+
"deprecated_cutoff": {
|
|
146
|
+
"v4": "2024-01-01T00:00:00.000Z"
|
|
147
|
+
},
|
|
148
|
+
"endpoint_pattern": "https://api.pinterest.com/v5/ad_accounts/{AD_ACCOUNT_ID}/events",
|
|
149
|
+
"authentication": "Bearer token (PINTEREST_ACCESS_TOKEN)",
|
|
150
|
+
"rate_limits": {
|
|
151
|
+
"requests_per_hour": 100,
|
|
152
|
+
"events_per_batch": 10,
|
|
153
|
+
"batches_per_hour": 10
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
"reddit": {
|
|
160
|
+
"platform": "reddit",
|
|
161
|
+
"name": "Reddit (Pixel + Conversions API)",
|
|
162
|
+
"documentation": "https://ads.reddit.com/help/article/reddit-pixel",
|
|
163
|
+
"versions": {
|
|
164
|
+
"pixel": {
|
|
165
|
+
"current": "v2",
|
|
166
|
+
"minimum_supported": "v1.0",
|
|
167
|
+
"recommended": "v2",
|
|
168
|
+
"endpoint_pattern": "https://www.redditstatic.com/ads/v2.js",
|
|
169
|
+
"advanced_matching": {
|
|
170
|
+
"supports_email_hashing": true,
|
|
171
|
+
"auto_hash_by_pixel": true,
|
|
172
|
+
"supports_external_id": true
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"conversions_api": {
|
|
176
|
+
"current": "v2.0",
|
|
177
|
+
"minimum_supported": "v1.0",
|
|
178
|
+
"recommended": "v2.0",
|
|
179
|
+
"deprecated": [
|
|
180
|
+
"v1.0"
|
|
181
|
+
],
|
|
182
|
+
"deprecated_cutoff": {
|
|
183
|
+
"v1.0": "2024-06-01T00:00:00.000Z"
|
|
184
|
+
},
|
|
185
|
+
"endpoint_pattern": "https://ads-api.reddit.com/api/{VERSION}/conversions/events/{AD_ACCOUNT_ID}",
|
|
186
|
+
"authentication": "Bearer token (REDDIT_ACCESS_TOKEN)",
|
|
187
|
+
"rate_limits": {
|
|
188
|
+
"requests_per_minute": 5,
|
|
189
|
+
"events_per_batch": 10,
|
|
190
|
+
"batches_per_minute": 1
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
"linkedin": {
|
|
197
|
+
"platform": "linkedin",
|
|
198
|
+
"name": "LinkedIn (Insight Tag + Conversions API)",
|
|
199
|
+
"documentation": "https://learn.microsoft.com/en-us/linkedin/marketing/conversions-api/",
|
|
200
|
+
"versions": {
|
|
201
|
+
"insight_tag": {
|
|
202
|
+
"current": "v2",
|
|
203
|
+
"minimum_supported": "v1",
|
|
204
|
+
"recommended": "v2",
|
|
205
|
+
"endpoint_pattern": "https://snap.licdn.com/li.lms-analytics/insight.beta.min.js",
|
|
206
|
+
"consent_mode_required": true,
|
|
207
|
+
"data_attributes": [
|
|
208
|
+
"conversion_id",
|
|
209
|
+
"text",
|
|
210
|
+
"currency",
|
|
211
|
+
"value"
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
"conversions_api": {
|
|
215
|
+
"current": "v2",
|
|
216
|
+
"minimum_supported": "v1",
|
|
217
|
+
"recommended": "v2",
|
|
218
|
+
"endpoint_pattern": "https://api.linkedin.com/rest/attributionConversions/{VERSION}",
|
|
219
|
+
"authentication": "Bearer token (LINKEDIN_ACCESS_TOKEN)",
|
|
220
|
+
"rate_limits": {
|
|
221
|
+
"requests_per_second": 10,
|
|
222
|
+
"events_per_batch": 100
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
"bing": {
|
|
229
|
+
"platform": "bing",
|
|
230
|
+
"name": "Microsoft Advertising (UET Tag + Clarity)",
|
|
231
|
+
"documentation": "https://learn.microsoft.com/en-us/advertising/guides/event-tracking",
|
|
232
|
+
"versions": {
|
|
233
|
+
"uet_tag": {
|
|
234
|
+
"current": "latest",
|
|
235
|
+
"minimum_supported": "v1",
|
|
236
|
+
"recommended": "latest",
|
|
237
|
+
"endpoint_pattern": "https://bat.bing.com/bat.js",
|
|
238
|
+
"enhanced_conversions": {
|
|
239
|
+
"supports_email_hashing": true,
|
|
240
|
+
"supports_phone_hashing": true,
|
|
241
|
+
"requires_sha256": true
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
"clarity": {
|
|
245
|
+
"current": "latest",
|
|
246
|
+
"minimum_supported": "v1",
|
|
247
|
+
"recommended": "latest",
|
|
248
|
+
"endpoint_pattern": "https://clarity.ms/tag/s/{CLARITY_PROJECT_ID}/clarity.js"
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
"youtube": {
|
|
254
|
+
"platform": "youtube",
|
|
255
|
+
"name": "YouTube Ads (Video Campaigns)",
|
|
256
|
+
"documentation": "https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps",
|
|
257
|
+
"versions": {
|
|
258
|
+
"video_campaigns": {
|
|
259
|
+
"current": "latest",
|
|
260
|
+
"minimum_supported": "v1",
|
|
261
|
+
"recommended": "latest",
|
|
262
|
+
"campaign_types": ["TrueView In-Stream", "Bumper Ads", "Non-skip In-Stream", "Video Discovery"],
|
|
263
|
+
"click_ids": ["gclid", "wbraid", "gbraid"],
|
|
264
|
+
"conversion_window_vtc_days": 7
|
|
265
|
+
},
|
|
266
|
+
"iframe_api": {
|
|
267
|
+
"current": "latest",
|
|
268
|
+
"endpoint_pattern": "https://www.youtube.com/embed/{VIDEO_ID}?enablejsapi=1",
|
|
269
|
+
"events": ["video_start", "video_progress", "video_complete"],
|
|
270
|
+
"milestones_percent": [25, 50, 75, 100]
|
|
271
|
+
},
|
|
272
|
+
"customer_match": {
|
|
273
|
+
"current": "latest",
|
|
274
|
+
"hash_required": true,
|
|
275
|
+
"hash_algorithm": "SHA-256",
|
|
276
|
+
"accepted_fields": ["email", "phone", "first_name", "last_name"]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
|
|
281
|
+
"spotify": {
|
|
282
|
+
"platform": "spotify",
|
|
283
|
+
"name": "Spotify Ads (Pixel + Conversions API)",
|
|
284
|
+
"documentation": "https://advertising-api.spotify.com/docs/",
|
|
285
|
+
"versions": {
|
|
286
|
+
"pixel": {
|
|
287
|
+
"current": "v1",
|
|
288
|
+
"minimum_supported": "v1",
|
|
289
|
+
"recommended": "v1",
|
|
290
|
+
"endpoint_pattern": "Spotify Pixel SDK (custom)"
|
|
291
|
+
},
|
|
292
|
+
"conversions_api": {
|
|
293
|
+
"current": "v1",
|
|
294
|
+
"minimum_supported": "v1",
|
|
295
|
+
"recommended": "v1",
|
|
296
|
+
"endpoint_pattern": "https://advertising-api.spotify.com/conversion/v1/accounts/{ACCOUNT_ID}/events",
|
|
297
|
+
"authentication": "Bearer token (SPOTIFY_ACCESS_TOKEN)",
|
|
298
|
+
"rate_limits": {
|
|
299
|
+
"requests_per_minute": 30,
|
|
300
|
+
"events_per_batch": 10
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
"validation_rules": {
|
|
307
|
+
"deprecation_policy": "APIs marcadas como deprecated devem ser atualizadas IMEDIATAMENTE",
|
|
308
|
+
"minimum_version_policy": "Versões abaixo do minimum_supported NÃO são suportadas",
|
|
309
|
+
"recommended_version_policy": "Usar sempre a recommended version para máxima compatibilidade",
|
|
310
|
+
"endpoint_validation": "Endpoints devem seguir exatamente o padrão especificado",
|
|
311
|
+
"authentication_validation": "Tokens devem ser obtidos via wrangler secret (NUNCA hardcoded)",
|
|
312
|
+
"rate_limit_policy": "Respeitar rate_limits para evitar bloqueios"
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
"migration_guidelines": {
|
|
316
|
+
"meta_v20_to_v22": {
|
|
317
|
+
"breaking_changes": [],
|
|
318
|
+
"new_parameters": [],
|
|
319
|
+
"deprecated_parameters": [],
|
|
320
|
+
"migration_steps": [
|
|
321
|
+
"Atualizar endpoint de /v20.0/ para /v22.0/",
|
|
322
|
+
"Verificar novos parâmetros obrigatórios",
|
|
323
|
+
"Testar em ambiente de sandbox"
|
|
324
|
+
]
|
|
325
|
+
},
|
|
326
|
+
|
|
327
|
+
"tiktok_v1.2_to_v1.3": {
|
|
328
|
+
"breaking_changes": [],
|
|
329
|
+
"new_parameters": [],
|
|
330
|
+
"deprecated_parameters": [],
|
|
331
|
+
"migration_steps": [
|
|
332
|
+
"Atualizar endpoint de /v1.2/ para /v1.3/",
|
|
333
|
+
"Verificar compatibilidade de event names",
|
|
334
|
+
"Atualizar rate limits"
|
|
335
|
+
]
|
|
336
|
+
},
|
|
337
|
+
|
|
338
|
+
"pinterest_v4_to_v5": {
|
|
339
|
+
"breaking_changes": ["ad_account_id agora obrigatório na URL"],
|
|
340
|
+
"new_parameters": ["external_data", "action_source"],
|
|
341
|
+
"deprecated_parameters": [],
|
|
342
|
+
"migration_steps": [
|
|
343
|
+
"Adicionar ad_account_id ao endpoint",
|
|
344
|
+
"Atualizar estrutura de payload",
|
|
345
|
+
"Verificar novos campos obrigatórios"
|
|
346
|
+
]
|
|
347
|
+
},
|
|
348
|
+
|
|
349
|
+
"reddit_v1.0_to_v2.0": {
|
|
350
|
+
"breaking_changes": ["URL mudou de /api/v1.0/ para /api/v2.0/"],
|
|
351
|
+
"new_parameters": ["conversion_type", "ip_address", "user_agent"],
|
|
352
|
+
"deprecated_parameters": [],
|
|
353
|
+
"migration_steps": [
|
|
354
|
+
"Atualizar todos os endpoints para v2.0",
|
|
355
|
+
"Adicionar novos campos de user data",
|
|
356
|
+
"Verificar compatibilidade de event names"
|
|
357
|
+
]
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
"last_updated_by": {
|
|
362
|
+
"agent": "Intelligence Agent",
|
|
363
|
+
"session_id": "CDP_2026-03-27_implementation",
|
|
364
|
+
"timestamp": "2026-03-27T00:00:00.000Z"
|
|
365
|
+
},
|
|
366
|
+
|
|
367
|
+
"next_review_date": "2026-04-27T00:00:00.000Z"
|
|
368
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze Command - Análise de páginas
|
|
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 runAnalyze(dir) {
|
|
11
|
+
console.log(chalk.cyan.bold('\n CDP Edge - Page Analyzer\n'));
|
|
12
|
+
|
|
13
|
+
const spinner = ora('Analisando arquivos...').start();
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
// Busca arquivos HTML/JS no diretório
|
|
17
|
+
const files = await findProjectFiles(dir);
|
|
18
|
+
|
|
19
|
+
spinner.succeed(`Encontrados ${files.length} arquivos`);
|
|
20
|
+
|
|
21
|
+
// Análise dos eventos detectados
|
|
22
|
+
const events = await analyzeEvents(files);
|
|
23
|
+
|
|
24
|
+
console.log('\n' + chalk.yellow('Eventos detectados:'));
|
|
25
|
+
console.log(formatEventAnalysis(events));
|
|
26
|
+
|
|
27
|
+
} catch (error) {
|
|
28
|
+
spinner.fail('Erro na análise');
|
|
29
|
+
console.error(error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function findProjectFiles(dir) {
|
|
34
|
+
// Em produção, faria glob real dos arquivos
|
|
35
|
+
return ['index.html', 'checkout.html', 'thankyou.html'];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function analyzeEvents(files) {
|
|
39
|
+
// Em produção, analisaria cada arquivo com o Page Analyzer Agent
|
|
40
|
+
return {
|
|
41
|
+
leads: 2,
|
|
42
|
+
purchases: 1,
|
|
43
|
+
views: 3,
|
|
44
|
+
custom: 0
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function formatEventAnalysis(events) {
|
|
49
|
+
return Object.entries(events)
|
|
50
|
+
.map(([type, count]) => ` ${chalk.cyan(type)}: ${count}`)
|
|
51
|
+
.join('\n');
|
|
52
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infra Command - Guia de setup Cloudflare
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
|
|
7
|
+
export async function runInfra() {
|
|
8
|
+
console.log(chalk.cyan.bold('\n CDP Edge - Guia de Infraestrutura Cloudflare\n'));
|
|
9
|
+
|
|
10
|
+
const guide = `
|
|
11
|
+
|
|
12
|
+
${chalk.yellow.bold('🚀 Setup do Zero ao Deploy')}
|
|
13
|
+
|
|
14
|
+
${chalk.cyan.bold('PASSO 1: Criar Conta Cloudflare')}
|
|
15
|
+
1. Acesse https://dash.cloudflare.com/sign-up
|
|
16
|
+
2. Crie uma conta gratuita
|
|
17
|
+
3. Adicione seu domínio (opcional para testes)
|
|
18
|
+
|
|
19
|
+
${chalk.cyan.bold('PASSO 2: Instalar Wrangler CLI')}
|
|
20
|
+
npm install -g wrangler
|
|
21
|
+
wrangler login
|
|
22
|
+
|
|
23
|
+
${chalk.cyan.bold('PASSO 3: Criar D1 Database')}
|
|
24
|
+
wrangler d1 create cdp-edge-db
|
|
25
|
+
# Copie o database_id gerado
|
|
26
|
+
|
|
27
|
+
${chalk.cyan.bold('PASSO 4: Criar Worker')}
|
|
28
|
+
wrangler init cdp-edge-worker
|
|
29
|
+
# Responda às perguntas do wizard
|
|
30
|
+
|
|
31
|
+
${chalk.cyan.bold('PASSO 5: Configurar Secrets')}
|
|
32
|
+
wrangler secret put META_ACCESS_TOKEN
|
|
33
|
+
wrangler secret put TIKTOK_ACCESS_TOKEN
|
|
34
|
+
wrangler secret put GA4_MEASUREMENT_ID
|
|
35
|
+
|
|
36
|
+
${chalk.cyan.bold('PASSO 6: Aplicar Schema D1')}
|
|
37
|
+
wrangler d1 execute cdp-edge-db --file=schema.sql
|
|
38
|
+
|
|
39
|
+
${chalk.cyan.bold('PASSO 7: Deploy')}
|
|
40
|
+
wrangler deploy
|
|
41
|
+
|
|
42
|
+
${chalk.cyan.bold('PASSO 8: Configurar Domínio')}
|
|
43
|
+
# No dashboard Cloudflare:
|
|
44
|
+
# 1. Workers & Pages → Routes → Add Route
|
|
45
|
+
# 2. Exemplo: seu-dominio.com/api/tracking/*
|
|
46
|
+
# 3. Aponte para o worker criado
|
|
47
|
+
|
|
48
|
+
${chalk.green.bold('✅ Pronto! Seu tracking Quantum Tier está ativo.')}
|
|
49
|
+
|
|
50
|
+
${chalk.gray('Para mais detalhes, consulte docs/guia-cloudflare-iniciante.md')}
|
|
51
|
+
`;
|
|
52
|
+
|
|
53
|
+
console.log(guide);
|
|
54
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDP Edge Install Command
|
|
3
|
+
* Instala o CDP Edge em qualquer projeto de cliente
|
|
4
|
+
*
|
|
5
|
+
* Uso: cdp-edge install [dir] [--name "Nome do Projeto"] [--cursor]
|
|
6
|
+
*
|
|
7
|
+
* O que faz:
|
|
8
|
+
* 1. Copia os arquivos do CDP Edge para <dir>/cdp-edge/
|
|
9
|
+
* 2. Cria <dir>/.claude/commands/cdp.md → habilita /cdp no Claude Code
|
|
10
|
+
* 3. Cria <dir>/CLAUDE.md → auto-ativação opcional
|
|
11
|
+
* 4. Cria <dir>/.cursorrules → Cursor IDE (flag --cursor)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import fs from 'fs';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import { fileURLToPath } from 'url';
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
|
|
19
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
20
|
+
|
|
21
|
+
// Raiz do pacote CDP Edge (2 níveis acima de dist/commands/)
|
|
22
|
+
const CDP_EDGE_ROOT = path.resolve(__dirname, '..', '..');
|
|
23
|
+
|
|
24
|
+
export async function runInstall(targetDir = '.', options = {}) {
|
|
25
|
+
const projectName = options.name || path.basename(path.resolve(targetDir));
|
|
26
|
+
const target = path.resolve(targetDir);
|
|
27
|
+
|
|
28
|
+
console.log(chalk.cyan.bold('\n CDP Edge — Install\n'));
|
|
29
|
+
console.log(chalk.gray(`Projeto: ${chalk.white(projectName)}`));
|
|
30
|
+
console.log(chalk.gray(`Destino: ${chalk.white(target)}\n`));
|
|
31
|
+
|
|
32
|
+
// 1. Garantir que o diretório alvo existe
|
|
33
|
+
if (!fs.existsSync(target)) {
|
|
34
|
+
fs.mkdirSync(target, { recursive: true });
|
|
35
|
+
console.log(chalk.green(`✔ Diretório criado: ${target}`));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// 2. Copiar arquivos CDP Edge para <target>/cdp-edge/
|
|
39
|
+
const cdpEdgeDest = path.join(target, 'cdp-edge');
|
|
40
|
+
const foldersToInstall = [
|
|
41
|
+
'extracted-skill',
|
|
42
|
+
'server-edge-tracker',
|
|
43
|
+
'templates',
|
|
44
|
+
'docs',
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
let installedFromSource = false;
|
|
48
|
+
const missingFolders = [];
|
|
49
|
+
|
|
50
|
+
for (const folder of foldersToInstall) {
|
|
51
|
+
const src = path.join(CDP_EDGE_ROOT, folder);
|
|
52
|
+
const dest = path.join(cdpEdgeDest, folder);
|
|
53
|
+
|
|
54
|
+
if (fs.existsSync(src)) {
|
|
55
|
+
copyDir(src, dest);
|
|
56
|
+
console.log(chalk.green(`✔ Copiado: cdp-edge/${folder}/`));
|
|
57
|
+
installedFromSource = true;
|
|
58
|
+
} else {
|
|
59
|
+
missingFolders.push(folder);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!installedFromSource) {
|
|
64
|
+
// Pacote instalado via npm sem os arquivos de código-fonte
|
|
65
|
+
console.log(chalk.yellow('\n⚠ Arquivos de skill não encontrados no pacote npm.'));
|
|
66
|
+
console.log(chalk.yellow(' Clone o repositório completo manualmente:'));
|
|
67
|
+
console.log(chalk.cyan('\n git clone https://github.com/ricardosoli777/CDP-Edge-Premium cdp-edge\n'));
|
|
68
|
+
} else if (missingFolders.length > 0) {
|
|
69
|
+
console.log(chalk.yellow(`\n⚠ Pastas não encontradas (ignoradas): ${missingFolders.join(', ')}`));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 3. Criar .claude/commands/cdp.md → habilita /cdp no Claude Code
|
|
73
|
+
const commandSrc = path.join(CDP_EDGE_ROOT, 'templates', 'install', '.claude', 'commands', 'cdp.md');
|
|
74
|
+
const commandDest = path.join(target, '.claude', 'commands', 'cdp.md');
|
|
75
|
+
|
|
76
|
+
if (fs.existsSync(commandDest)) {
|
|
77
|
+
console.log(chalk.yellow('⚠ .claude/commands/cdp.md já existe — não sobrescrito.'));
|
|
78
|
+
} else {
|
|
79
|
+
fs.mkdirSync(path.dirname(commandDest), { recursive: true });
|
|
80
|
+
if (fs.existsSync(commandSrc)) {
|
|
81
|
+
fs.copyFileSync(commandSrc, commandDest);
|
|
82
|
+
} else {
|
|
83
|
+
// Fallback inline
|
|
84
|
+
fs.writeFileSync(commandDest,
|
|
85
|
+
'Leia o arquivo `cdp-edge/extracted-skill/tracking-events-generator/agents/master-orchestrator.md` e ative o Master Orchestrator exibindo a mensagem de boas-vindas completa.\n',
|
|
86
|
+
'utf8'
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
console.log(chalk.green('✔ Criado: .claude/commands/cdp.md → /cdp habilitado'));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 4. Criar CLAUDE.md na raiz (auto-ativação ao abrir sessão)
|
|
93
|
+
const claudeMdSrc = path.join(CDP_EDGE_ROOT, 'templates', 'install', 'CLAUDE.md');
|
|
94
|
+
const claudeMdDest = path.join(target, 'CLAUDE.md');
|
|
95
|
+
|
|
96
|
+
if (fs.existsSync(claudeMdDest)) {
|
|
97
|
+
console.log(chalk.yellow('⚠ CLAUDE.md já existe — não sobrescrito.'));
|
|
98
|
+
} else {
|
|
99
|
+
let content;
|
|
100
|
+
if (fs.existsSync(claudeMdSrc)) {
|
|
101
|
+
content = fs.readFileSync(claudeMdSrc, 'utf8');
|
|
102
|
+
content = content.replace('[NOME DO PROJETO]', projectName);
|
|
103
|
+
} else {
|
|
104
|
+
content = generateClaudeMd(projectName);
|
|
105
|
+
}
|
|
106
|
+
fs.writeFileSync(claudeMdDest, content, 'utf8');
|
|
107
|
+
console.log(chalk.green('✔ Criado: CLAUDE.md'));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// 5. Criar .cursorrules (flag --cursor)
|
|
111
|
+
if (options.cursor) {
|
|
112
|
+
const cursorDest = path.join(target, '.cursorrules');
|
|
113
|
+
if (fs.existsSync(cursorDest)) {
|
|
114
|
+
console.log(chalk.yellow('⚠ .cursorrules já existe — não sobrescrito.'));
|
|
115
|
+
} else {
|
|
116
|
+
const content = fs.readFileSync(claudeMdDest, 'utf8');
|
|
117
|
+
fs.writeFileSync(cursorDest, content, 'utf8');
|
|
118
|
+
console.log(chalk.green('✔ Criado: .cursorrules (Cursor IDE)'));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 6. Resumo final
|
|
123
|
+
console.log(chalk.gray('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
124
|
+
console.log(chalk.green.bold(' CDP Edge instalado!'));
|
|
125
|
+
console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
|
|
126
|
+
console.log(chalk.cyan('Próximos passos:\n'));
|
|
127
|
+
console.log(` 1. Abra o projeto no Claude Code:`);
|
|
128
|
+
console.log(chalk.bold(` claude ${target}`));
|
|
129
|
+
console.log(` 2. Digite ${chalk.bold('/cdp')} para ativar o Master Orchestrator\n`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
133
|
+
|
|
134
|
+
function copyDir(src, dest) {
|
|
135
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
136
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
137
|
+
const srcPath = path.join(src, entry.name);
|
|
138
|
+
const destPath = path.join(dest, entry.name);
|
|
139
|
+
if (entry.isDirectory()) {
|
|
140
|
+
copyDir(srcPath, destPath);
|
|
141
|
+
} else {
|
|
142
|
+
fs.copyFileSync(srcPath, destPath);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function generateClaudeMd(projectName) {
|
|
148
|
+
return `# ${projectName} — CDP Edge Quantum Tracking
|
|
149
|
+
|
|
150
|
+
## Ativação automática do CDP Edge
|
|
151
|
+
|
|
152
|
+
**Ao iniciar esta sessão, execute imediatamente:**
|
|
153
|
+
|
|
154
|
+
1. Leia o arquivo: \`cdp-edge/extracted-skill/tracking-events-generator/agents/master-orchestrator.md\`
|
|
155
|
+
2. Ative o **Master Orchestrator** exibindo a mensagem de boas-vindas
|
|
156
|
+
3. Aguarde as instruções do usuário para iniciar o setup
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Comandos rápidos
|
|
161
|
+
|
|
162
|
+
| Comando | O que faz |
|
|
163
|
+
|---|---|
|
|
164
|
+
| \`/cdp\` | Ativa o Master Orchestrator |
|
|
165
|
+
| \`/cdp setup\` | Inicia o wizard de configuração completo |
|
|
166
|
+
| \`/cdp status\` | Verifica saúde do projeto atual |
|
|
167
|
+
`;
|
|
168
|
+
}
|