@agenus-io/recovery 0.0.2
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 +747 -0
- package/dist/index.cjs.js +3 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.mts +77 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.esm.js +3 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.global.js +3 -0
- package/dist/index.global.js.map +1 -0
- package/package.json +68 -0
package/README.md
ADDED
|
@@ -0,0 +1,747 @@
|
|
|
1
|
+
# GomarkePixel
|
|
2
|
+
|
|
3
|
+
Pixel Tracker avançado para Facebook e Google Analytics - Envia eventos para sua própria API via `sendBeacon` (com fallback para `fetch`). Inclui sistema de auto-tracking inteligente com arquitetura orientada a objetos e máxima escalabilidade.
|
|
4
|
+
|
|
5
|
+
## 🚀 Instalação
|
|
6
|
+
|
|
7
|
+
### Via CDN (Recomendado)
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<script src="https://unpkg.com/gomarke-pixel@latest/dist/index.global.js"></script>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Via NPM
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install gomarke-pixel
|
|
17
|
+
# ou
|
|
18
|
+
pnpm add gomarke-pixel
|
|
19
|
+
# ou
|
|
20
|
+
yarn add gomarke-pixel
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 📖 Uso
|
|
24
|
+
|
|
25
|
+
### 🚀 Auto-Tracking Automático - Configure Uma Vez e Esqueça!
|
|
26
|
+
|
|
27
|
+
O GomarkePixel agora funciona de forma **completamente automática**! Você só precisa configurar uma vez e todos os eventos são detectados automaticamente.
|
|
28
|
+
|
|
29
|
+
### Uso Global (CDN) - Auto-Tracking Automático
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<!DOCTYPE html>
|
|
33
|
+
<html>
|
|
34
|
+
<head>
|
|
35
|
+
<script src="https://unpkg.com/gomarke-pixel@latest/dist/index.global.js"></script>
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
<!-- Elementos com data attributes para auto-tracking -->
|
|
39
|
+
<button
|
|
40
|
+
data-add-to-cart
|
|
41
|
+
data-product-id="123"
|
|
42
|
+
data-product-name="iPhone 15"
|
|
43
|
+
data-product-price="8999"
|
|
44
|
+
>
|
|
45
|
+
Adicionar ao Carrinho
|
|
46
|
+
</button>
|
|
47
|
+
|
|
48
|
+
<button data-checkout data-cart-total="8999">Finalizar Compra</button>
|
|
49
|
+
|
|
50
|
+
<form data-lead>
|
|
51
|
+
<input name="email" placeholder="Email" required />
|
|
52
|
+
<input name="name" placeholder="Nome" required />
|
|
53
|
+
<button type="submit">Enviar</button>
|
|
54
|
+
</form>
|
|
55
|
+
|
|
56
|
+
<script>
|
|
57
|
+
// Inicializar o pixel tracker com auto-tracking
|
|
58
|
+
const pixel = new GomarkePixel({
|
|
59
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
60
|
+
apiKey: 'sua-chave-aqui',
|
|
61
|
+
debug: true,
|
|
62
|
+
|
|
63
|
+
// Configuração de auto-tracking - TUDO AUTOMÁTICO! 🚀
|
|
64
|
+
autoTracks: {
|
|
65
|
+
addToCart: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
selector: '[data-add-to-cart]',
|
|
68
|
+
selectorType: 'attribute',
|
|
69
|
+
productDataSelectors: {
|
|
70
|
+
id: '[data-product-id]',
|
|
71
|
+
name: '[data-product-name]',
|
|
72
|
+
price: '[data-product-price]',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
initiateCheckout: {
|
|
76
|
+
enabled: true,
|
|
77
|
+
selector: '[data-checkout]',
|
|
78
|
+
selectorType: 'attribute',
|
|
79
|
+
cartDataSelectors: {
|
|
80
|
+
total: '[data-cart-total]',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
lead: {
|
|
84
|
+
enabled: true,
|
|
85
|
+
selector: 'form[data-lead]',
|
|
86
|
+
selectorType: 'attribute',
|
|
87
|
+
requiredFields: ['email', 'name'],
|
|
88
|
+
},
|
|
89
|
+
scroll: {
|
|
90
|
+
enabled: true,
|
|
91
|
+
scrollThresholds: [25, 50, 75, 90],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Page view é automático, mas você ainda pode usar manualmente se quiser
|
|
97
|
+
// pixel.trackPageView();
|
|
98
|
+
// pixel.trackAddToCart('produto-123', 'Produto Exemplo', 99.90, 'BRL', 'Categoria');
|
|
99
|
+
// pixel.trackPurchase(199.90, 'BRL', 'txn_123');
|
|
100
|
+
</script>
|
|
101
|
+
</body>
|
|
102
|
+
</html>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Uso em Módulos - Auto-Tracking Automático
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
import GomarkePixel from 'gomarke-pixel';
|
|
109
|
+
|
|
110
|
+
const pixel = new GomarkePixel({
|
|
111
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
112
|
+
apiKey: 'sua-chave-aqui',
|
|
113
|
+
debug: true,
|
|
114
|
+
|
|
115
|
+
// Auto-tracking automático - configure uma vez e esqueça! 🚀
|
|
116
|
+
autoTracks: {
|
|
117
|
+
addToCart: {
|
|
118
|
+
enabled: true,
|
|
119
|
+
selector: '.add-to-cart-btn',
|
|
120
|
+
selectorType: 'class',
|
|
121
|
+
productDataSelectors: {
|
|
122
|
+
id: '.product-id',
|
|
123
|
+
name: '.product-name',
|
|
124
|
+
price: '.product-price',
|
|
125
|
+
category: '.product-category',
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
initiateCheckout: {
|
|
129
|
+
enabled: true,
|
|
130
|
+
selector: '.checkout-btn',
|
|
131
|
+
selectorType: 'class',
|
|
132
|
+
trackOnNavigation: true,
|
|
133
|
+
navigationSelectors: ['.checkout-link', '.finalizar-compra'],
|
|
134
|
+
},
|
|
135
|
+
lead: {
|
|
136
|
+
enabled: true,
|
|
137
|
+
selector: 'form.contact-form',
|
|
138
|
+
selectorType: 'class',
|
|
139
|
+
trackOnFieldFocus: true,
|
|
140
|
+
requiredFields: ['email', 'name'],
|
|
141
|
+
validationRules: {
|
|
142
|
+
email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
scroll: {
|
|
146
|
+
enabled: true,
|
|
147
|
+
scrollThresholds: [25, 50, 75, 90],
|
|
148
|
+
trackScrollDepth: true,
|
|
149
|
+
trackTimeOnPage: true,
|
|
150
|
+
},
|
|
151
|
+
viewport: {
|
|
152
|
+
enabled: true,
|
|
153
|
+
selector: '.trackable-element',
|
|
154
|
+
selectorType: 'class',
|
|
155
|
+
trackElementIntersection: true,
|
|
156
|
+
trackElementClicks: true,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// Page view é automático! Os autoTracks detectam tudo sozinhos
|
|
162
|
+
// Não precisa chamar manualmente:
|
|
163
|
+
// await pixel.trackPageView();
|
|
164
|
+
// await pixel.trackAddToCart('produto-123', 'Produto Exemplo', 99.90);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## 🔧 Configuração
|
|
168
|
+
|
|
169
|
+
### Configuração Básica (Sem Auto-Tracking)
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
interface GomarkePixelConfig {
|
|
173
|
+
apiEndpoint: string; // URL da sua API (obrigatório)
|
|
174
|
+
apiKey?: string; // Chave de autenticação
|
|
175
|
+
debug?: boolean; // Ativar logs de debug
|
|
176
|
+
timeout?: number; // Timeout para requests (padrão: 5000ms)
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Configuração com Auto-Tracking Automático
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
interface GomarkePixelConfig {
|
|
184
|
+
apiEndpoint: string;
|
|
185
|
+
apiKey?: string;
|
|
186
|
+
debug?: boolean;
|
|
187
|
+
timeout?: number;
|
|
188
|
+
|
|
189
|
+
// 🚀 AUTO-TRACKING - Configure uma vez e esqueça!
|
|
190
|
+
autoTracks?: {
|
|
191
|
+
addToCart?: {
|
|
192
|
+
enabled?: boolean;
|
|
193
|
+
selector?: string;
|
|
194
|
+
selectorType?:
|
|
195
|
+
| 'class'
|
|
196
|
+
| 'id'
|
|
197
|
+
| 'attribute'
|
|
198
|
+
| 'tag'
|
|
199
|
+
| 'text'
|
|
200
|
+
| 'url'
|
|
201
|
+
| 'data-attribute'
|
|
202
|
+
| 'custom';
|
|
203
|
+
productDataSelectors?: {
|
|
204
|
+
id?: string;
|
|
205
|
+
name?: string;
|
|
206
|
+
price?: string;
|
|
207
|
+
category?: string;
|
|
208
|
+
image?: string;
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
initiateCheckout?: {
|
|
212
|
+
enabled?: boolean;
|
|
213
|
+
selector?: string;
|
|
214
|
+
selectorType?:
|
|
215
|
+
| 'class'
|
|
216
|
+
| 'id'
|
|
217
|
+
| 'attribute'
|
|
218
|
+
| 'tag'
|
|
219
|
+
| 'text'
|
|
220
|
+
| 'url'
|
|
221
|
+
| 'data-attribute'
|
|
222
|
+
| 'custom';
|
|
223
|
+
trackOnNavigation?: boolean;
|
|
224
|
+
navigationSelectors?: string[];
|
|
225
|
+
};
|
|
226
|
+
lead?: {
|
|
227
|
+
enabled?: boolean;
|
|
228
|
+
selector?: string;
|
|
229
|
+
selectorType?:
|
|
230
|
+
| 'class'
|
|
231
|
+
| 'id'
|
|
232
|
+
| 'attribute'
|
|
233
|
+
| 'tag'
|
|
234
|
+
| 'text'
|
|
235
|
+
| 'url'
|
|
236
|
+
| 'data-attribute'
|
|
237
|
+
| 'custom';
|
|
238
|
+
trackOnFieldFocus?: boolean;
|
|
239
|
+
trackOnFieldBlur?: boolean;
|
|
240
|
+
trackOnFieldChange?: boolean;
|
|
241
|
+
requiredFields?: string[];
|
|
242
|
+
validationRules?: {
|
|
243
|
+
email?: RegExp;
|
|
244
|
+
phone?: RegExp;
|
|
245
|
+
minLength?: number;
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
scroll?: {
|
|
249
|
+
enabled?: boolean;
|
|
250
|
+
scrollThresholds?: number[];
|
|
251
|
+
trackScrollDepth?: boolean;
|
|
252
|
+
trackTimeOnPage?: boolean;
|
|
253
|
+
};
|
|
254
|
+
viewport?: {
|
|
255
|
+
enabled?: boolean;
|
|
256
|
+
selector?: string;
|
|
257
|
+
selectorType?:
|
|
258
|
+
| 'class'
|
|
259
|
+
| 'id'
|
|
260
|
+
| 'attribute'
|
|
261
|
+
| 'tag'
|
|
262
|
+
| 'text'
|
|
263
|
+
| 'url'
|
|
264
|
+
| 'data-attribute'
|
|
265
|
+
| 'custom';
|
|
266
|
+
trackElementIntersection?: boolean;
|
|
267
|
+
trackElementClicks?: boolean;
|
|
268
|
+
trackElementHovers?: boolean;
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 📚 API - Eventos de E-commerce
|
|
275
|
+
|
|
276
|
+
### Eventos Principais (Tracks)
|
|
277
|
+
|
|
278
|
+
- `trackPageView(page?: string)`: Track page view
|
|
279
|
+
- `trackPurchase(value, currency, transactionId?, items?)`: Track compra
|
|
280
|
+
- `trackAddToCart(itemId, itemName, value?, currency?, category?, quantity?)`: Adicionar ao carrinho
|
|
281
|
+
- `trackRemoveFromCart(itemId, itemName, value?, currency?, quantity?)`: Remover do carrinho
|
|
282
|
+
- `trackInitiateCheckout(value?, currency?, items?)`: Iniciar checkout
|
|
283
|
+
- `trackViewItem(itemId, itemName, value?, currency?, category?)`: Ver produto
|
|
284
|
+
- `trackSearch(searchTerm, resultsCount?)`: Busca
|
|
285
|
+
- `trackCustomEvent(eventName, eventCategory?, value?, currency?, customParameters?)`: Evento customizado
|
|
286
|
+
|
|
287
|
+
### Auto-Tracking Inteligente
|
|
288
|
+
|
|
289
|
+
O GomarkePixel agora inclui um sistema avançado de auto-tracking que detecta automaticamente interações do usuário:
|
|
290
|
+
|
|
291
|
+
#### AutoTracks Básicos
|
|
292
|
+
|
|
293
|
+
- **AutoAddToCart**: Detecta automaticamente cliques em botões "Adicionar ao Carrinho"
|
|
294
|
+
- **AutoInitiateCheckout**: Detecta automaticamente cliques em botões "Finalizar Compra"
|
|
295
|
+
- **AutoLead**: Detecta automaticamente submissões de formulários de lead
|
|
296
|
+
|
|
297
|
+
#### AutoTracks Avançados
|
|
298
|
+
|
|
299
|
+
- **ScrollTracker**: Rastreia profundidade de scroll e tempo na página
|
|
300
|
+
- **ViewportTracker**: Detecta quando elementos entram/saem do viewport
|
|
301
|
+
|
|
302
|
+
#### Configuração de AutoTracks
|
|
303
|
+
|
|
304
|
+
```javascript
|
|
305
|
+
// Configurar auto-tracking
|
|
306
|
+
const pixel = new GomarkePixel({
|
|
307
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
308
|
+
apiKey: 'sua-chave',
|
|
309
|
+
debug: true,
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
// Auto-tracking de Add to Cart
|
|
313
|
+
await pixel
|
|
314
|
+
.getTrackerFactory()
|
|
315
|
+
.getAutoTrackerFactory()
|
|
316
|
+
.createAddToCartTracker({
|
|
317
|
+
isEnabled: true,
|
|
318
|
+
selector: '.add-to-cart-btn',
|
|
319
|
+
selectorType: 'class',
|
|
320
|
+
productDataSelectors: {
|
|
321
|
+
id: '.product-id',
|
|
322
|
+
name: '.product-name',
|
|
323
|
+
price: '.product-price',
|
|
324
|
+
category: '.product-category',
|
|
325
|
+
},
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
// Auto-tracking de Checkout
|
|
329
|
+
await pixel
|
|
330
|
+
.getTrackerFactory()
|
|
331
|
+
.getAutoTrackerFactory()
|
|
332
|
+
.createInitiateCheckoutTracker({
|
|
333
|
+
isEnabled: true,
|
|
334
|
+
selector: '.checkout-btn',
|
|
335
|
+
selectorType: 'class',
|
|
336
|
+
trackOnNavigation: true,
|
|
337
|
+
navigationSelectors: ['.checkout-link', '.finalizar-compra'],
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
// Auto-tracking de Lead
|
|
341
|
+
await pixel
|
|
342
|
+
.getTrackerFactory()
|
|
343
|
+
.getAutoTrackerFactory()
|
|
344
|
+
.createLeadTracker({
|
|
345
|
+
isEnabled: true,
|
|
346
|
+
selector: 'form.lead-form',
|
|
347
|
+
selectorType: 'class',
|
|
348
|
+
trackOnFieldFocus: true,
|
|
349
|
+
trackOnFieldBlur: true,
|
|
350
|
+
requiredFields: ['email', 'name'],
|
|
351
|
+
});
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Exemplo Completo
|
|
355
|
+
|
|
356
|
+
```javascript
|
|
357
|
+
const pixel = new GomarkePixel({
|
|
358
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
359
|
+
apiKey: 'sua-chave',
|
|
360
|
+
debug: true,
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// Page view automático
|
|
364
|
+
// Track view de produto
|
|
365
|
+
await pixel.trackViewItem(
|
|
366
|
+
'produto-123',
|
|
367
|
+
'iPhone 15',
|
|
368
|
+
8999,
|
|
369
|
+
'BRL',
|
|
370
|
+
'Smartphones'
|
|
371
|
+
);
|
|
372
|
+
|
|
373
|
+
// Adicionar ao carrinho
|
|
374
|
+
await pixel.trackAddToCart(
|
|
375
|
+
'produto-123',
|
|
376
|
+
'iPhone 15',
|
|
377
|
+
8999,
|
|
378
|
+
'BRL',
|
|
379
|
+
'Smartphones',
|
|
380
|
+
1
|
|
381
|
+
);
|
|
382
|
+
|
|
383
|
+
// Iniciar checkout
|
|
384
|
+
await pixel.trackInitiateCheckout(8999, 'BRL', [
|
|
385
|
+
{
|
|
386
|
+
item_id: 'produto-123',
|
|
387
|
+
item_name: 'iPhone 15',
|
|
388
|
+
category: 'Smartphones',
|
|
389
|
+
quantity: 1,
|
|
390
|
+
price: 8999,
|
|
391
|
+
},
|
|
392
|
+
]);
|
|
393
|
+
|
|
394
|
+
// Finalizar compra
|
|
395
|
+
await pixel.trackPurchase(8999, 'BRL', 'txn_123', [
|
|
396
|
+
{
|
|
397
|
+
item_id: 'produto-123',
|
|
398
|
+
item_name: 'iPhone 15',
|
|
399
|
+
category: 'Smartphones',
|
|
400
|
+
quantity: 1,
|
|
401
|
+
price: 8999,
|
|
402
|
+
},
|
|
403
|
+
]);
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## 🛠️ Desenvolvimento
|
|
407
|
+
|
|
408
|
+
### Instalação das Dependências
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
pnpm install
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### Scripts Disponíveis
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
# Desenvolvimento com watch
|
|
418
|
+
pnpm dev
|
|
419
|
+
|
|
420
|
+
# Build para produção
|
|
421
|
+
pnpm build
|
|
422
|
+
|
|
423
|
+
# Linting
|
|
424
|
+
pnpm lint
|
|
425
|
+
pnpm lint:fix
|
|
426
|
+
|
|
427
|
+
# Formatação
|
|
428
|
+
pnpm format
|
|
429
|
+
|
|
430
|
+
# Verificação de tipos
|
|
431
|
+
pnpm type-check
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Estrutura do Projeto
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
src/
|
|
438
|
+
├── index.ts # Ponto de entrada principal
|
|
439
|
+
├── config.ts # Configurações globais
|
|
440
|
+
├── types.ts # Definições de tipos
|
|
441
|
+
├── utils/ # Utilitários
|
|
442
|
+
│ ├── getFingerprint.ts
|
|
443
|
+
│ └── sendEvent.tsx
|
|
444
|
+
├── tracks/ # Sistema de tracking manual
|
|
445
|
+
│ ├── BaseTracker.ts # Classe base para todos os trackers
|
|
446
|
+
│ ├── pageView.ts
|
|
447
|
+
│ ├── purchase.ts
|
|
448
|
+
│ ├── addToCart.ts
|
|
449
|
+
│ ├── initiateCheckout.ts
|
|
450
|
+
│ ├── lead.ts
|
|
451
|
+
│ ├── TrackerFactory.ts # Factory para gerenciar trackers
|
|
452
|
+
│ └── index.ts
|
|
453
|
+
├── autoTracks/ # Sistema de auto-tracking
|
|
454
|
+
│ ├── BaseAutoTracker.ts # Classe base para auto-trackers
|
|
455
|
+
│ ├── autoAddToCart.ts # Auto-tracking de adicionar ao carrinho
|
|
456
|
+
│ ├── autoInitiateCheckout.ts # Auto-tracking de checkout
|
|
457
|
+
│ ├── autoLead.tsx # Auto-tracking de leads
|
|
458
|
+
│ ├── AutoTrackerFactory.ts # Factory para auto-trackers
|
|
459
|
+
│ ├── utils/ # Utilitários para auto-tracking
|
|
460
|
+
│ │ ├── SelectorUtils.ts # Utilitários de seleção DOM
|
|
461
|
+
│ │ └── EventManager.ts # Gerenciador de eventos
|
|
462
|
+
│ ├── advanced/ # Auto-trackers avançados
|
|
463
|
+
│ │ ├── ScrollTracker.ts # Rastreamento de scroll
|
|
464
|
+
│ │ └── ViewportTracker.ts # Rastreamento de viewport
|
|
465
|
+
│ └── index.ts
|
|
466
|
+
└── examples/ # Exemplos de uso
|
|
467
|
+
├── usage-example.ts
|
|
468
|
+
└── autotrack-usage-example.ts
|
|
469
|
+
|
|
470
|
+
dist/ # Arquivos compilados
|
|
471
|
+
├── index.global.js # Versão IIFE para CDN
|
|
472
|
+
├── index.cjs.js # CommonJS
|
|
473
|
+
├── index.esm.js # ES Modules
|
|
474
|
+
├── index.d.ts # Definições TypeScript
|
|
475
|
+
└── index.d.mts # Definições TypeScript (ESM)
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
## ✨ Por que Auto-Tracking?
|
|
479
|
+
|
|
480
|
+
### 🎯 **Configure Uma Vez, Funcione Para Sempre**
|
|
481
|
+
|
|
482
|
+
- **Zero Código Manual**: Não precisa chamar `trackAddToCart()`, `trackLead()`, etc.
|
|
483
|
+
- **Detecção Automática**: Detecta cliques, formulários, scroll, viewport automaticamente
|
|
484
|
+
- **DOM Dinâmico**: Funciona com elementos adicionados via JavaScript/AJAX
|
|
485
|
+
- **Performance Otimizada**: Debouncing, throttling e lazy loading automáticos
|
|
486
|
+
- **Validação Inteligente**: Valida formulários automaticamente
|
|
487
|
+
- **Retry Logic**: Tenta novamente se elementos ainda não carregaram
|
|
488
|
+
|
|
489
|
+
### 🚀 **Exemplo: Antes vs Depois**
|
|
490
|
+
|
|
491
|
+
#### ❌ **Antes (Manual)**
|
|
492
|
+
|
|
493
|
+
```javascript
|
|
494
|
+
// Tinha que chamar manualmente para cada evento
|
|
495
|
+
pixel.trackPageView();
|
|
496
|
+
document.querySelector('.add-to-cart').addEventListener('click', () => {
|
|
497
|
+
pixel.trackAddToCart('produto-123', 'Produto', 99.9);
|
|
498
|
+
});
|
|
499
|
+
document.querySelector('form').addEventListener('submit', () => {
|
|
500
|
+
pixel.trackLead({ email: 'user@email.com' });
|
|
501
|
+
});
|
|
502
|
+
// ... mais código manual para cada interação
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
#### ✅ **Depois (Automático)**
|
|
506
|
+
|
|
507
|
+
```javascript
|
|
508
|
+
// Configure uma vez e esqueça!
|
|
509
|
+
const pixel = new GomarkePixel({
|
|
510
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
511
|
+
autoTracks: {
|
|
512
|
+
addToCart: { enabled: true, selector: '[data-add-to-cart]' },
|
|
513
|
+
lead: { enabled: true, selector: 'form[data-lead]' },
|
|
514
|
+
scroll: { enabled: true },
|
|
515
|
+
},
|
|
516
|
+
});
|
|
517
|
+
// TUDO FUNCIONA AUTOMATICAMENTE! 🎉
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
## 🏗️ Arquitetura Avançada
|
|
521
|
+
|
|
522
|
+
### Sistema de Classes Orientado a Objetos
|
|
523
|
+
|
|
524
|
+
O GomarkePixel foi completamente refatorado para usar uma arquitetura orientada a objetos com máxima escalabilidade:
|
|
525
|
+
|
|
526
|
+
#### Tracks (Tracking Manual)
|
|
527
|
+
|
|
528
|
+
- **BaseTracker**: Classe abstrata base para todos os trackers
|
|
529
|
+
- **TrackerFactory**: Factory pattern para gerenciar instâncias de trackers
|
|
530
|
+
- **PageViewTracker**, **PurchaseTracker**, **AddToCartTracker**, etc.
|
|
531
|
+
|
|
532
|
+
#### AutoTracks (Tracking Automático)
|
|
533
|
+
|
|
534
|
+
- **BaseAutoTracker**: Classe abstrata base para auto-trackers
|
|
535
|
+
- **AutoTrackerFactory**: Factory pattern para gerenciar auto-trackers
|
|
536
|
+
- **SelectorUtils**: Utilitários avançados para seleção DOM
|
|
537
|
+
- **EventManager**: Gerenciador de eventos com debouncing/throttling
|
|
538
|
+
|
|
539
|
+
### Funcionalidades Avançadas
|
|
540
|
+
|
|
541
|
+
#### 🎯 Auto-Tracking Inteligente
|
|
542
|
+
|
|
543
|
+
- **Detecção Automática**: Detecta interações sem configuração manual
|
|
544
|
+
- **DOM Dinâmico**: Suporte a elementos adicionados dinamicamente via MutationObserver
|
|
545
|
+
- **Retry Logic**: Sistema de retry automático para elementos que ainda não carregaram
|
|
546
|
+
- **Debouncing/Throttling**: Otimização de performance para eventos frequentes
|
|
547
|
+
|
|
548
|
+
#### 🔧 Configuração Flexível
|
|
549
|
+
|
|
550
|
+
- **Múltiplos Seletores**: Suporte a class, id, attribute, tag, text, url, data-attribute, custom
|
|
551
|
+
- **Extração de Dados**: Seletores configuráveis para extrair dados de produtos/carrinho
|
|
552
|
+
- **Validação**: Sistema de validação de formulários
|
|
553
|
+
- **Callbacks Customizados**: Funções de callback para processamento customizado
|
|
554
|
+
|
|
555
|
+
#### 📊 Estatísticas e Monitoramento
|
|
556
|
+
|
|
557
|
+
- **Estatísticas Detalhadas**: Contadores de eventos, performance, erros
|
|
558
|
+
- **Debug Avançado**: Logs detalhados para desenvolvimento
|
|
559
|
+
- **Health Checks**: Verificação de saúde dos trackers
|
|
560
|
+
|
|
561
|
+
#### 🚀 Performance
|
|
562
|
+
|
|
563
|
+
- **Lazy Loading**: Carregamento sob demanda de auto-trackers
|
|
564
|
+
- **Memory Management**: Limpeza automática de listeners
|
|
565
|
+
- **Bundle Optimization**: Tree-shaking para reduzir tamanho do bundle
|
|
566
|
+
|
|
567
|
+
## 📦 Build
|
|
568
|
+
|
|
569
|
+
O projeto usa `tsup` para gerar múltiplos formatos:
|
|
570
|
+
|
|
571
|
+
- **IIFE** (`.global.js`): Para uso via CDN
|
|
572
|
+
- **CommonJS** (`.cjs.js`): Para Node.js
|
|
573
|
+
- **ES Modules** (`.esm.js`): Para bundlers modernos
|
|
574
|
+
- **TypeScript** (`.d.ts`): Definições de tipos
|
|
575
|
+
|
|
576
|
+
## 🎯 Exemplos Avançados
|
|
577
|
+
|
|
578
|
+
### Auto-Tracking Completo para E-commerce
|
|
579
|
+
|
|
580
|
+
```javascript
|
|
581
|
+
const pixel = new GomarkePixel({
|
|
582
|
+
apiEndpoint: 'https://sua-api.com/track',
|
|
583
|
+
apiKey: 'sua-chave',
|
|
584
|
+
debug: true,
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
// Configurar todos os auto-trackers
|
|
588
|
+
const autoFactory = pixel.getTrackerFactory().getAutoTrackerFactory();
|
|
589
|
+
|
|
590
|
+
// Auto-tracking de produtos
|
|
591
|
+
await autoFactory.createAddToCartTracker({
|
|
592
|
+
isEnabled: true,
|
|
593
|
+
selector: '[data-add-to-cart]',
|
|
594
|
+
selectorType: 'attribute',
|
|
595
|
+
productDataSelectors: {
|
|
596
|
+
id: '[data-product-id]',
|
|
597
|
+
name: '.product-title',
|
|
598
|
+
price: '.price-value',
|
|
599
|
+
category: '.product-category',
|
|
600
|
+
},
|
|
601
|
+
customDataExtractor: element => ({
|
|
602
|
+
brand: element.dataset.brand,
|
|
603
|
+
variant: element.dataset.variant,
|
|
604
|
+
}),
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
// Auto-tracking de checkout
|
|
608
|
+
await autoFactory.createInitiateCheckoutTracker({
|
|
609
|
+
isEnabled: true,
|
|
610
|
+
selector: '.checkout-button',
|
|
611
|
+
selectorType: 'class',
|
|
612
|
+
trackOnNavigation: true,
|
|
613
|
+
navigationSelectors: ['.checkout-link', '.finalizar-compra'],
|
|
614
|
+
cartDataSelectors: {
|
|
615
|
+
total: '.cart-total',
|
|
616
|
+
currency: '.cart-currency',
|
|
617
|
+
items: '.cart-item',
|
|
618
|
+
},
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
// Auto-tracking de leads
|
|
622
|
+
await autoFactory.createLeadTracker({
|
|
623
|
+
isEnabled: true,
|
|
624
|
+
selector: 'form.contact-form',
|
|
625
|
+
selectorType: 'class',
|
|
626
|
+
trackOnFieldFocus: true,
|
|
627
|
+
trackOnFieldBlur: true,
|
|
628
|
+
trackOnFieldChange: true,
|
|
629
|
+
requiredFields: ['email', 'name'],
|
|
630
|
+
validationRules: {
|
|
631
|
+
email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
632
|
+
phone: /^\(\d{2}\)\s\d{4,5}-\d{4}$/,
|
|
633
|
+
},
|
|
634
|
+
});
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
### Auto-Tracking Avançado
|
|
638
|
+
|
|
639
|
+
```javascript
|
|
640
|
+
// Scroll tracking
|
|
641
|
+
const scrollTracker = new ScrollTracker(
|
|
642
|
+
pixel.config,
|
|
643
|
+
pixel.sessionId,
|
|
644
|
+
pixel.version
|
|
645
|
+
);
|
|
646
|
+
await scrollTracker.initialize({
|
|
647
|
+
isEnabled: true,
|
|
648
|
+
scrollThresholds: [25, 50, 75, 90],
|
|
649
|
+
trackScrollDepth: true,
|
|
650
|
+
trackTimeOnPage: true,
|
|
651
|
+
debounceMs: 300,
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
// Viewport tracking
|
|
655
|
+
const viewportTracker = new ViewportTracker(
|
|
656
|
+
pixel.config,
|
|
657
|
+
pixel.sessionId,
|
|
658
|
+
pixel.version
|
|
659
|
+
);
|
|
660
|
+
await viewportTracker.initialize({
|
|
661
|
+
isEnabled: true,
|
|
662
|
+
selector: '.trackable-element',
|
|
663
|
+
selectorType: 'class',
|
|
664
|
+
trackElementIntersection: true,
|
|
665
|
+
trackElementClicks: true,
|
|
666
|
+
trackElementHovers: true,
|
|
667
|
+
visibilityThreshold: 0.5,
|
|
668
|
+
maxTrackingElements: 100,
|
|
669
|
+
});
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### Monitoramento e Estatísticas
|
|
673
|
+
|
|
674
|
+
```javascript
|
|
675
|
+
// Obter estatísticas dos trackers
|
|
676
|
+
const stats = pixel.getTrackerStats();
|
|
677
|
+
console.log('Estatísticas dos trackers:', stats);
|
|
678
|
+
|
|
679
|
+
// Obter estatísticas dos auto-trackers
|
|
680
|
+
const autoStats = pixel
|
|
681
|
+
.getTrackerFactory()
|
|
682
|
+
.getAutoTrackerFactory()
|
|
683
|
+
.getFactoryStats();
|
|
684
|
+
console.log('Estatísticas dos auto-trackers:', autoStats);
|
|
685
|
+
|
|
686
|
+
// Parar todos os auto-trackers
|
|
687
|
+
await pixel.getTrackerFactory().getAutoTrackerFactory().stopAllAutoTrackers();
|
|
688
|
+
|
|
689
|
+
// Reconstruir todos os auto-trackers (útil para DOM dinâmico)
|
|
690
|
+
await pixel
|
|
691
|
+
.getTrackerFactory()
|
|
692
|
+
.getAutoTrackerFactory()
|
|
693
|
+
.rebuildAllAutoTrackers();
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
## 🚀 Publicação
|
|
697
|
+
|
|
698
|
+
```bash
|
|
699
|
+
# Build antes de publicar
|
|
700
|
+
pnpm build
|
|
701
|
+
|
|
702
|
+
# Publicar no NPM
|
|
703
|
+
npm publish
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
## 🆕 Changelog
|
|
707
|
+
|
|
708
|
+
### v2.0.0 - Refatoração Completa
|
|
709
|
+
|
|
710
|
+
#### ✨ Novas Funcionalidades
|
|
711
|
+
|
|
712
|
+
- **Sistema de Auto-Tracking**: Detecção automática de interações do usuário
|
|
713
|
+
- **Arquitetura Orientada a Objetos**: Classes base e factory patterns
|
|
714
|
+
- **AutoTracks Avançados**: ScrollTracker e ViewportTracker
|
|
715
|
+
- **Sistema de Seletores**: Suporte a múltiplos tipos de seletores
|
|
716
|
+
- **Extração de Dados**: Seletores configuráveis para dados de produtos
|
|
717
|
+
- **Validação de Formulários**: Sistema de validação com regras customizadas
|
|
718
|
+
- **Monitoramento**: Estatísticas detalhadas e health checks
|
|
719
|
+
|
|
720
|
+
#### 🔧 Melhorias Técnicas
|
|
721
|
+
|
|
722
|
+
- **TypeScript**: Tipagem completa e type safety
|
|
723
|
+
- **Performance**: Debouncing, throttling e lazy loading
|
|
724
|
+
- **DOM Dinâmico**: Suporte a elementos adicionados dinamicamente
|
|
725
|
+
- **Retry Logic**: Sistema de retry automático
|
|
726
|
+
- **Memory Management**: Limpeza automática de listeners
|
|
727
|
+
- **Bundle Optimization**: Tree-shaking e otimizações
|
|
728
|
+
|
|
729
|
+
#### 🏗️ Arquitetura
|
|
730
|
+
|
|
731
|
+
- **BaseTracker**: Classe base para trackers manuais
|
|
732
|
+
- **BaseAutoTracker**: Classe base para auto-trackers
|
|
733
|
+
- **TrackerFactory**: Factory para gerenciar trackers
|
|
734
|
+
- **AutoTrackerFactory**: Factory para gerenciar auto-trackers
|
|
735
|
+
- **SelectorUtils**: Utilitários avançados de seleção DOM
|
|
736
|
+
- **EventManager**: Gerenciador de eventos otimizado
|
|
737
|
+
|
|
738
|
+
#### 📊 Monitoramento
|
|
739
|
+
|
|
740
|
+
- **Estatísticas Detalhadas**: Contadores de eventos e performance
|
|
741
|
+
- **Debug Avançado**: Logs detalhados para desenvolvimento
|
|
742
|
+
- **Health Checks**: Verificação de saúde dos trackers
|
|
743
|
+
- **Error Handling**: Tratamento robusto de erros
|
|
744
|
+
|
|
745
|
+
## 📄 Licença
|
|
746
|
+
|
|
747
|
+
MIT
|