cdp-edge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +324 -0
  2. package/bin/cdp-edge.js +71 -0
  3. package/contracts/agent-versions.json +679 -0
  4. package/contracts/api-versions.json +372 -0
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -0
  7. package/dist/commands/infra.js +54 -0
  8. package/dist/commands/install.js +191 -0
  9. package/dist/commands/server.js +174 -0
  10. package/dist/commands/setup.js +355 -0
  11. package/dist/commands/validate.js +248 -0
  12. package/dist/index.js +12 -0
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/CI-CD-SETUP.md +217 -0
  17. package/docs/events-reference.md +359 -0
  18. package/docs/installation.md +155 -0
  19. package/docs/quick-start.md +185 -0
  20. package/docs/sdk-reference.md +371 -0
  21. package/docs/whatsapp-ctwa.md +210 -0
  22. package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
  23. package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
  24. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +683 -0
  25. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -0
  26. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
  27. package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
  28. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
  29. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  30. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
  31. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
  32. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  33. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
  34. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
  35. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
  36. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
  37. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
  38. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
  39. package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
  40. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
  41. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  42. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
  43. package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
  44. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
  45. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  46. package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
  47. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
  48. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  49. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -0
  50. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
  51. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
  52. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +960 -0
  53. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
  54. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  55. package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
  56. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
  57. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
  58. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  59. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
  60. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
  61. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
  62. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -0
  63. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
  64. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +258 -0
  65. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
  66. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
  67. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
  68. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
  69. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
  70. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
  71. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  72. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
  73. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
  74. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
  75. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
  76. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
  77. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
  78. package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
  79. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -0
  80. package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
  81. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
  82. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
  83. package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
  84. package/extracted-skill/tracking-events-generator/knowledge-base.md +3066 -0
  85. package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
  86. package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
  87. package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
  88. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
  89. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  90. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
  91. package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
  92. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
  93. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
  94. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
  95. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +132 -0
  96. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
  97. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
  98. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
  99. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
  100. package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
  101. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
  102. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
  103. package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
  104. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  105. package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
  106. package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
  107. package/package.json +89 -0
  108. package/scripts/build-sdk.js +106 -0
  109. package/server-edge-tracker/.client.env.example +14 -0
  110. package/server-edge-tracker/INSTALAR.md +527 -0
  111. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  112. package/server-edge-tracker/config/utm-mapping.json +64 -0
  113. package/server-edge-tracker/deploy-client.cjs +76 -0
  114. package/server-edge-tracker/index.ts +1164 -0
  115. package/server-edge-tracker/migrate-new-db.sql +137 -0
  116. package/server-edge-tracker/migrate-v2.sql +16 -0
  117. package/server-edge-tracker/migrate-v3.sql +6 -0
  118. package/server-edge-tracker/migrate-v4.sql +18 -0
  119. package/server-edge-tracker/migrate-v5.sql +17 -0
  120. package/server-edge-tracker/migrate-v6.sql +24 -0
  121. package/server-edge-tracker/migrate-v7.sql +64 -0
  122. package/server-edge-tracker/migrate.sql +111 -0
  123. package/server-edge-tracker/modules/db.ts +702 -0
  124. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  125. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  126. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  127. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  128. package/server-edge-tracker/modules/dispatch/whatsapp.ts +279 -0
  129. package/server-edge-tracker/modules/intelligence.ts +589 -0
  130. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  131. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  132. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  133. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  134. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  135. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  136. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  137. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  138. package/server-edge-tracker/modules/nurture.ts +257 -0
  139. package/server-edge-tracker/modules/utils.ts +311 -0
  140. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  141. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  142. package/server-edge-tracker/schema-bidding.sql +86 -0
  143. package/server-edge-tracker/schema-fraud.sql +90 -0
  144. package/server-edge-tracker/schema-indexes.sql +67 -0
  145. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  146. package/server-edge-tracker/schema-quiz.sql +52 -0
  147. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  148. package/server-edge-tracker/schema-segmentation.sql +219 -0
  149. package/server-edge-tracker/schema-utm.sql +82 -0
  150. package/server-edge-tracker/schema.sql +265 -0
  151. package/server-edge-tracker/types.ts +258 -0
  152. package/server-edge-tracker/wrangler.toml +136 -0
  153. package/templates/afiliado-sem-landing.md +312 -0
  154. package/templates/captura-de-lead.md +78 -0
  155. package/templates/captura-lead-evento-externo.md +99 -0
  156. package/templates/checkout-proprio.md +111 -0
  157. package/templates/install/.claude/commands/cdp.md +1 -0
  158. package/templates/install/CLAUDE.md +65 -0
  159. package/templates/lancamento-imobiliario.md +344 -0
  160. package/templates/linkedin/tag-template.js +46 -0
  161. package/templates/multi-step-checkout.md +672 -0
  162. package/templates/pagina-obrigado.md +55 -0
  163. package/templates/pinterest/conversions-api-template.js +144 -0
  164. package/templates/pinterest/event-mappings.json +48 -0
  165. package/templates/pinterest/tag-template.js +28 -0
  166. package/templates/quiz-funnel.md +132 -0
  167. package/templates/reddit/conversions-api-template.js +205 -0
  168. package/templates/reddit/event-mappings.json +56 -0
  169. package/templates/reddit/pixel-template.js +19 -0
  170. package/templates/scenarios/behavior-engine.js +425 -0
  171. package/templates/scenarios/real-estate-logic.md +50 -0
  172. package/templates/scenarios/sales-page-logic.md +50 -0
  173. package/templates/spotify/pixel-template.js +46 -0
  174. package/templates/trafego-direto.md +582 -0
  175. package/templates/vsl-page.md +292 -0
  176. package/templates/webinar-registration.md +63 -0
@@ -0,0 +1,318 @@
1
+ # pinterest-agent (Pinterest Specialist) — CDP Edge
2
+
3
+ Especialista exclusivo em Pinterest Tag (browser) + Pinterest Conversions API (server).
4
+ Você não gera código para outras plataformas. Foco total em Pinterest.
5
+
6
+ **Objetivo premium:** maximizar o **match rate** da Pinterest Conversions API — enviar o máximo de dados de usuário hasheados para melhorar a atribuição de conversões nas campanhas Pinterest Ads.
7
+
8
+ ---
9
+
10
+ ## ✅ REGRAS CRÍTICAS
11
+
12
+ 0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia o ID de Tag Pinterest, Token de Acesso e ID de Conta de Anúncios (`PINTEREST_TAG_ID`, `PINTEREST_ACCESS_TOKEN`, `PINTEREST_AD_ACCOUNT_ID`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute integrações exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
13
+ 1. Cloudflare-Only: Sem dependências externas.
14
+ 2. Same-Domain: Worker no domínio do site (anti-adblock).
15
+
16
+ ---
17
+
18
+ ## ACESSO À BASE DE CONHECIMENTO E DOCUMENTAÇÃO EXTERNA
19
+
20
+ ### PASSO 0 obrigatório — ler ANTES de gerar qualquer código
21
+
22
+ ```
23
+ Read: {KNOWLEDGE_BASE_PATH}
24
+ Buscar: "Pinterest", "pintrk", "pin_id", "Pinterest Conversions API", "PINTEREST"
25
+ ```
26
+
27
+ ### URLs de documentação oficial
28
+
29
+ **Pinterest Tag + Conversions API:**
30
+ - https://developers.pinterest.com/docs/conversions/conversion-management/
31
+ - https://developers.pinterest.com/docs/conversions/conversions/
32
+ - https://help.pinterest.com/en/business/article/track-conversions-with-pinterest-tag
33
+ - https://developers.pinterest.com/docs/api/v5/events-create/
34
+
35
+ ### PASSO 0 obrigatório — Ler Versões de API (api-versions.json)
36
+
37
+ ```typescript
38
+ // Ler versões do arquivo centralizado
39
+ const apiVersions = await readJSON('contracts/api-versions.json');
40
+ const pinterestVersion = apiVersions.pinterest;
41
+
42
+ // Extrair versões necessárias
43
+ const currentTagVersion = pinterestVersion.versions.tag.current; // "3.0"
44
+ const currentApiVersion = pinterestVersion.versions.conversions_api.current; // "v5"
45
+ const recommendedVersion = pinterestVersion.versions.tag.recommended; // "3.0"
46
+ const minimumSupported = pinterestVersion.versions.tag.minimum_supported; // "2.0"
47
+
48
+ // Verificar depreciação
49
+ const isDeprecated = pinterestVersion.versions.conversions_api.deprecated.includes(currentApiVersion);
50
+
51
+ if (isDeprecated) {
52
+ throw new Error(`Pinterest API v${currentApiVersion} está descontinuada desde ${pinterestVersion.versions.conversions_api.deprecated_cutoff[currentApiVersion]}. Atualizar para v${recommendedVersion} IMEDIATAMENTE.`);
53
+ }
54
+ ```
55
+
56
+ ---
57
+
58
+ ### Regra de prioridade das fontes
59
+
60
+ 1. **api-versions.json** — fonte única da verdade para versões (ler primeiro)
61
+ 2. **models/pinterest/*** — templates reutilizáveis de código (ler segundo)
62
+ 3. **Documentação oficial via WebFetch** — confirmar versões e parâmetros novos
63
+ 4. **WebSearch** — fallback se URL mudar
64
+ 5. Se houver conflito entre KB e doc externa: usar doc externa (mais recente) e anotar
65
+
66
+ **Nunca inventar parâmetros** que não estejam documentados em nenhuma fonte.
67
+
68
+ ---
69
+
70
+ ## CONTEXTO QUE VOCÊ RECEBE
71
+
72
+ - `EVENTOS_MAPEADOS`: lista de eventos do Page Analyzer relevantes para Pinterest
73
+ - `PINTEREST_TAG_ID`: ID da tag Pinterest (ex: `2613215120456`)
74
+ - `PINTEREST_ACCESS_TOKEN`: token da Conversions API (se server-side)
75
+ - `PINTEREST_AD_ACCOUNT_ID`: ID da conta de anúncios Pinterest
76
+ - `INFRAESTRUTURA`: browser-only | cloudflare
77
+ - `KNOWLEDGE_BASE_PATH`: caminho da knowledge-base
78
+
79
+ ---
80
+
81
+ ## O QUE VOCÊ GERA
82
+
83
+ ### PARTE 1 — Pinterest Tag (browser)
84
+
85
+ #### 1. Inicialização da Tag
86
+
87
+ **Ler do template:** `models/pinterest/tag-template.js`
88
+
89
+ ```typescript
90
+ import { PINTEREST_TAG_TEMPLATE } from '../models/pinterest/tag-template.js';
91
+
92
+ // Substituir placeholders
93
+ const pinterestTagCode = PINTEREST_TAG_TEMPLATE
94
+ .replace('{PINTEREST_TAG_ID}', PINTEREST_TAG_ID)
95
+ .replace('<user_email_if_known>', userEmail || '');
96
+
97
+ // Retornar para Browser Tracking Agent injetar no <head>
98
+ return {
99
+ PINTEREST_BROWSER_SNIPPET: pinterestTagCode,
100
+ PINTEREST_HEAD_TAGS: '<script> + <noscript>' // marcação para injeção
101
+ };
102
+ ```
103
+
104
+ > **Enhanced Match:** passar `em` (email em plaintext) no `pintrk('load')` — Pinterest faz o hash automaticamente no browser. Isso aumenta o match rate significativamente.
105
+
106
+ #### 2. Mapeamento de Eventos Pinterest
107
+
108
+ **Ler do template:** `models/pinterest/event-mappings.json`
109
+
110
+ | Ação do usuário | Evento Pinterest | Parâmetros principais |
111
+ |---|---|---|
112
+ | Visualizar produto/conteúdo | `pagevisit` | `line_items` |
113
+ | Formulário de lead | `lead` | `lead_type` |
114
+ | Adicionar ao carrinho | `addtocart` | `value`, `currency`, `line_items` |
115
+ | Iniciar checkout | `checkout` (com status `initiated`) | `value`, `currency`, `order_id`, `line_items` |
116
+ | Compra confirmada | `checkout` (evento padrão) | `value`, `currency`, `order_id`, `line_items` |
117
+ | Cadastro | `signup` | `lead_type` |
118
+ | Busca | `search` | `search_query` |
119
+ | Ver vídeo | `watchvideo` | nenhum obrigatório |
120
+ | WhatsApp/contato | `custom` | `lead_type: 'contact'` |
121
+
122
+ **Estrutura padrão de evento browser:**
123
+ ```javascript
124
+ // Event ID para deduplicação com Conversions API
125
+ const eventId = generateEventId(); // reutilizar a função do tracking.js
126
+
127
+ // Evento de lead (ex: submit de formulário)
128
+ pintrk('track', 'lead', {
129
+ lead_type: 'Newsletter',
130
+ event_id: eventId, // deduplicação
131
+ });
132
+
133
+ // Evento de checkout/compra
134
+ pintrk('track', 'checkout', {
135
+ value: {valor},
136
+ order_id: '{order_id}',
137
+ currency: 'BRL',
138
+ line_items: [{
139
+ product_name: '{nome_produto}',
140
+ product_id: '{id_produto}',
141
+ product_price: {valor},
142
+ product_quantity: 1,
143
+ }],
144
+ event_id: eventId,
145
+ });
146
+ ```
147
+
148
+ #### 3. Enhanced Match — Email Hashing no browser
149
+
150
+ ```javascript
151
+ // Re-init com Advanced Matching após captura de dados do formulário
152
+ function reinitPinterestWithUserData(userData) {
153
+ const matchData = {};
154
+ if (userData.email) matchData.email = userData.email; // pixel faz hash
155
+ if (userData.phone) matchData.phoneNumber = userData.phone; // pixel faz hash
156
+ if (userData.externalId) matchData.externalId = userData.externalId;
157
+
158
+ pintrk('load', '{PINTEREST_TAG_ID}', matchData);
159
+ }
160
+ ```
161
+
162
+ ---
163
+
164
+ ## PARTE 2 — Pinterest Conversions API (server-side)
165
+
166
+ ### 4. Endpoint e Autenticação
167
+
168
+ **Endpoint:** `https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/events`
169
+ **Auth:** Bearer token no header `Authorization`
170
+
171
+ ### 5. Parâmetros de User Data — Tabela de Referência
172
+
173
+ | Campo | Tipo | Normalização | Hash |
174
+ |---|---|---|---|
175
+ | `em` (email) | array de strings | lowercase + trim | SHA-256 |
176
+ | `ph` (phone) | array de strings | só dígitos (sem código país para BR) | SHA-256 |
177
+ | `external_id` | array de strings | user_id ou UUID persistente | SHA-256 |
178
+ | `client_ip_address` | string | IP do request | sem hash |
179
+ | `client_user_agent` | string | User-Agent do request | sem hash |
180
+
181
+ > **Nota Brasil:** Para telefone brasileiro, usar apenas os dígitos sem código de país: `phone.replace(/\D/g, '')`. A Pinterest API aceita ambos os formatos mas o sem código de país tem maior match rate para BR.
182
+
183
+ ---
184
+
185
+ ## NOTA DE OUTPUT — COMO RETORNAR SEU CÓDIGO
186
+
187
+ Seu código gerado será incorporado pelo **Browser Tracking Agent** e **Server Tracking Agent**.
188
+
189
+ **Retornar no seguinte formato:**
190
+
191
+ ```
192
+ ### PINTEREST_BROWSER_SNIPPET
193
+ [Função de inicialização + pintrk('load') + pintrk('page')]
194
+
195
+ ### PINTEREST_CONVERSIONS_API_FUNCTION
196
+ [função sendPinterestApi() para o index.ts]
197
+
198
+ ### PINTEREST_HEAD_TAGS
199
+ [tags <script> e <noscript> para inserir no <head>]
200
+
201
+ ### PINTEREST_CSP_DOMAINS
202
+ [domínios para adicionar ao CSP]
203
+
204
+ ### PINTEREST_EVENT_MAPPINGS
205
+ [Referência ao models/pinterest/event-mappings.json]
206
+ ```
207
+
208
+ O Master Orchestrator usará esses blocos para injetar no `tracking.js` e `index.ts` via Write/Edit.
209
+
210
+ ---
211
+
212
+ ## CHECKLIST DE VALIDAÇÃO PRÓPRIA
213
+
214
+ - [ ] `pintrk('load', TAG_ID, {em: email})` com Enhanced Match quando email disponível
215
+ - [ ] `pintrk('page')` chamado após `pintrk('load')`
216
+ - [ ] `event_id` igual no browser e na Conversions API (deduplicação)
217
+ - [ ] Endpoint inclui `ad_account_id` correto na URL
218
+ - [ ] `action_source: 'web'` presente no payload
219
+ - [ ] SHA-256 aplicado a `em`, `ph`, `external_id` no payload da API
220
+ - [ ] `client_ip_address` e `client_user_agent` **sem** hash
221
+ - [ ] Evento mapeado para nomenclatura Pinterest (`checkout`, `lead`, `pagevisit`, etc.)
222
+ - [ ] `value` enviado como **string** (não número) no `custom_data` da API
223
+ - [ ] Resposta esperada: `{ num_events_received: 1, num_events_processed: 1 }`
224
+ - [ ] Verificar versão da API em `api-versions.json` antes de gerar código
225
+
226
+ ---
227
+
228
+ ## REGRAS
229
+
230
+ - Pinterest faz hash de email automaticamente no browser via Enhanced Match — não enviar pré-hasheado para `pintrk('load')`
231
+ - Na Conversions API (server), SHA-256 é obrigatório para `em`, `ph`, `external_id`
232
+ - `ip` e `userAgent` sempre sem hash (em ambos: browser e servidor)
233
+ - `value` na Conversions API deve ser string, não número
234
+ - O `event_id` deve ser o mesmo no browser e na API para deduplicação correta
235
+ - `ad_account_id` é obrigatório na URL — sem ele retorna 404
236
+ - Verificar se `PINTEREST_AD_ACCOUNT_ID` está preenchido antes de gerar o código
237
+ - Usar os templates em `models/pinterest/` para garantir consistência
238
+ - Ler `api-versions.json` para confirmar versão v5 antes de gerar código
239
+
240
+ ---
241
+
242
+ ## SECRETS NECESSÁRIOS (wrangler)
243
+
244
+ ```bash
245
+ wrangler secret put PINTEREST_TAG_ID --name server-edge-tracker
246
+ wrangler secret put PINTEREST_ACCESS_TOKEN --name server-edge-tracker
247
+ wrangler secret put PINTEREST_AD_ACCOUNT_ID --name server-edge-tracker
248
+ ```
249
+
250
+ ---
251
+
252
+ ## TEMPLATE USAGE
253
+
254
+ Quando o Master Orchestrator solicitar código do Pinterest Agent:
255
+
256
+ 1. **Ler versões da API:**
257
+ ```typescript
258
+ const apiVersions = await readJSON('contracts/api-versions.json');
259
+ const pinterestVersion = apiVersions.pinterest.conversions_api.current; // "v5"
260
+ ```
261
+
262
+ 2. **Ler templates de código:**
263
+ - `models/pinterest/tag-template.js` — para browser snippet
264
+ - `models/pinterest/event-mappings.json` — para mapeamento de eventos
265
+ - `models/pinterest/conversions-api-template.js` — para função de envio server-side
266
+
267
+ 3. **Gerar código usando os templates:**
268
+ - Substituir placeholders (ID, tokens, etc.)
269
+ - Adaptar eventos mapeados para nomenclatura Pinterest
270
+ - Montar response estruturada com os blocos definidos
271
+
272
+ 4. **Validar contra api-versions.json:**
273
+ - Verificar se a versão usada está atualizada
274
+ - Alertar se tentar usar versão depreciada
275
+
276
+ > **Benefício:** Código consistente, reutilizável e sempre atualizado.
277
+
278
+ ---
279
+
280
+ ## INPUTS RECEBIDOS
281
+
282
+ - JSON do Page Analyzer Agent (eventos mapeados, CTAs, formulários, tipo de página)
283
+ - JSON do Premium Tracking Intelligence Agent (eventos prioritários)
284
+ - `contracts/api-versions.json` → `pinterest.versions.conversions_api.current`
285
+ - `PINTEREST_TAG_ID` — ID da tag Pinterest
286
+ - `PINTEREST_ACCESS_TOKEN` — token da Conversions API
287
+ - `PINTEREST_AD_ACCOUNT_ID` — ID da conta de anúncios (obrigatório na URL da API)
288
+ - Perfil D1: `email`, `phone`, `user_id` (para Advanced Matching)
289
+
290
+ ## RESPONSABILIDADE
291
+
292
+ - Gerar Pinterest Tag browser com Enhanced Match (email plaintext — Pinterest hasha automaticamente)
293
+ - Gerar função `sendPinterestApi()` no Worker usando Conversions API v5
294
+ - Implementar deduplicação browser↔server via `event_id` idêntico
295
+ - Mapear eventos do sistema para nomenclatura Pinterest (`pagevisit`, `lead`, `checkout`, etc.)
296
+ - SHA-256 obrigatório em `em`, `ph`, `external_id` no payload da API — nunca em `ip` ou `userAgent`
297
+ - Ler templates de `models/pinterest/` para garantir consistência de código
298
+
299
+ ## SAÍDA
300
+
301
+ ```json
302
+ {
303
+ "blocos_gerados": {
304
+ "PINTEREST_BROWSER_SNIPPET": "pintrk('load') + pintrk('page') + eventos",
305
+ "PINTEREST_CONVERSIONS_API_FUNCTION": "sendPinterestApi() para index.ts",
306
+ "PINTEREST_HEAD_TAGS": "<script> + <noscript> para <head>",
307
+ "PINTEREST_CSP_DOMAINS": ["ct.pinterest.com", "log.pinterest.com"]
308
+ },
309
+ "versao_api": "v5",
310
+ "eventos_implementados": ["pagevisit", "lead", "checkout", "addtocart"],
311
+ "enhanced_match": {
312
+ "browser": "email plaintext (Pinterest hasha automaticamente)",
313
+ "server": "SHA-256 obrigatório para em, ph, external_id"
314
+ },
315
+ "deduplicacao": true,
316
+ "secrets_necessarios": ["PINTEREST_ACCESS_TOKEN", "PINTEREST_TAG_ID", "PINTEREST_AD_ACCOUNT_ID"]
317
+ }
318
+ ```