@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 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