@beworke/pixel 0.1.0-rc.1 → 0.1.0-rc.10

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 (189) hide show
  1. package/CHANGELOG.md +303 -4
  2. package/README.md +90 -128
  3. package/RELEASE_CANDIDATE.md +218 -101
  4. package/dist/Pixel-BnN86r4X.d.ts +797 -0
  5. package/dist/Pixel-BoUGqCbP.d.mts +797 -0
  6. package/dist/{StorageFactory-CAkJJqVD.d.ts → StorageFactory-BfCArzMM.d.ts} +2 -2
  7. package/dist/{StorageFactory-BhpbB6Jj.d.mts → StorageFactory-C0prtNR7.d.mts} +2 -2
  8. package/dist/browser/index.cjs.js +3 -0
  9. package/dist/browser/index.cjs.js.map +1 -0
  10. package/dist/browser/index.d.mts +71 -0
  11. package/dist/browser/index.d.ts +71 -0
  12. package/dist/browser/index.esm.js +3 -0
  13. package/dist/browser/index.esm.js.map +1 -0
  14. package/dist/browser/pixel.buygoods-checkout.global.js +4 -0
  15. package/dist/browser/pixel.buygoods-checkout.global.js.map +1 -0
  16. package/dist/browser/pixel.buygoods-landing.global.js +4 -0
  17. package/dist/browser/pixel.buygoods-landing.global.js.map +1 -0
  18. package/dist/browser/pixel.global.js +4 -0
  19. package/dist/browser/pixel.global.js.map +1 -0
  20. package/dist/config/index.cjs.js +1 -1
  21. package/dist/config/index.cjs.js.map +1 -1
  22. package/dist/config/index.d.mts +16 -5
  23. package/dist/config/index.d.ts +16 -5
  24. package/dist/config/index.esm.js +1 -1
  25. package/dist/config/index.esm.js.map +1 -1
  26. package/dist/events/index.cjs.js +1 -1
  27. package/dist/events/index.cjs.js.map +1 -1
  28. package/dist/events/index.d.mts +2 -1
  29. package/dist/events/index.d.ts +2 -1
  30. package/dist/events/index.esm.js +1 -1
  31. package/dist/events/index.esm.js.map +1 -1
  32. package/dist/examples/html-script/README.md +21 -55
  33. package/dist/examples/html-script/RELEASE_CANDIDATE.md +39 -26
  34. package/dist/examples/html-script/add-payment-info/README.md +3 -3
  35. package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-autocomplete.html +107 -96
  36. package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-disabled.html +107 -96
  37. package/dist/examples/html-script/add-payment-info/example-add-payment-info-card-fields.html +106 -95
  38. package/dist/examples/html-script/add-payment-info/example-add-payment-info-data-track.html +114 -95
  39. package/dist/examples/html-script/add-payment-info/example-add-payment-info-dedupe.html +106 -95
  40. package/dist/examples/html-script/add-payment-info/example-add-payment-info-manual.html +97 -95
  41. package/dist/examples/html-script/add-payment-info/example-add-payment-info-rules-card.html +106 -95
  42. package/dist/examples/html-script/add-payment-info/example-add-payment-info-security.html +106 -95
  43. package/dist/examples/html-script/add-to-cart/README.md +9 -6
  44. package/dist/examples/html-script/add-to-cart/example-add-to-cart-attribute.html +133 -119
  45. package/dist/examples/html-script/add-to-cart/example-add-to-cart-auto.html +146 -130
  46. package/dist/examples/html-script/add-to-cart/example-add-to-cart-click.html +144 -127
  47. package/dist/examples/html-script/add-to-cart/example-add-to-cart-dedupe.html +133 -119
  48. package/dist/examples/html-script/add-to-cart/example-add-to-cart-link.html +590 -0
  49. package/dist/examples/html-script/add-to-cart/example-add-to-cart-manual.html +124 -116
  50. package/dist/examples/html-script/add-to-cart/example-add-to-cart-order-bump.html +133 -119
  51. package/dist/examples/html-script/add-to-cart/example-add-to-cart-text.html +147 -130
  52. package/dist/examples/html-script/behavior/example-behavior-engagement.html +489 -0
  53. package/dist/examples/html-script/behavior/example-behavior-heartbeat.html +350 -0
  54. package/dist/examples/html-script/behavior/example-behavior-runtime-intelligence.html +433 -0
  55. package/dist/examples/html-script/behavior/example-behavior-viewport.html +397 -0
  56. package/dist/examples/html-script/{example-behavior.html → behavior/example-behavior.html} +23 -17
  57. package/dist/examples/html-script/buygoods/example-buygoods-checkout.html +50 -0
  58. package/dist/examples/html-script/buygoods/ladding.html +184 -0
  59. package/dist/examples/html-script/example-basic.html +1 -1
  60. package/dist/examples/html-script/example-checkout-commerce.html +826 -0
  61. package/dist/examples/html-script/example-conversion.html +42 -49
  62. package/dist/examples/html-script/example-global-factory-classic.html +45 -0
  63. package/dist/examples/html-script/example-global-factory.html +40 -0
  64. package/dist/examples/html-script/example-integration.html +45 -51
  65. package/dist/examples/html-script/example-landing-commerce.html +416 -0
  66. package/dist/examples/html-script/example-runtime-diagnostics.html +108 -0
  67. package/dist/examples/html-script/example-transport.html +70 -63
  68. package/dist/examples/html-script/full-funnel/README.md +64 -0
  69. package/dist/examples/html-script/full-funnel/checkout.html +118 -0
  70. package/dist/examples/html-script/full-funnel/downsell.html +60 -0
  71. package/dist/examples/html-script/full-funnel/landing.html +153 -0
  72. package/dist/examples/html-script/full-funnel/thank-you.html +87 -0
  73. package/dist/examples/html-script/full-funnel/upsell.html +66 -0
  74. package/dist/examples/html-script/initiate-checkout/README.md +6 -6
  75. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-attribute.html +135 -122
  76. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-auto.html +143 -128
  77. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-click.html +144 -128
  78. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-manual.html +127 -120
  79. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-snapshot.html +136 -123
  80. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-submit.html +144 -131
  81. package/dist/examples/html-script/initiate-checkout/example-initiate-checkout-text.html +146 -130
  82. package/dist/examples/html-script/internal-checkout/example-cardioclear-checkout.html +103 -0
  83. package/dist/examples/html-script/internal-checkout/example-slimsoda-checkout.html +103 -0
  84. package/dist/examples/html-script/lead/README.md +9 -7
  85. package/dist/examples/html-script/lead/example-lead-trigger-attribute.html +107 -94
  86. package/dist/examples/html-script/lead/example-lead-trigger-auto.html +118 -103
  87. package/dist/examples/html-script/lead/example-lead-trigger-click.html +118 -102
  88. package/dist/examples/html-script/release-candidate.html +219 -107
  89. package/dist/examples/html-script/remove-from-cart/README.md +4 -4
  90. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-attribute.html +134 -121
  91. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-css.html +134 -121
  92. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-dedupe.html +141 -128
  93. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-manual.html +125 -118
  94. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-multi.html +135 -122
  95. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-state.html +136 -123
  96. package/dist/examples/html-script/remove-from-cart/example-remove-from-cart-text.html +139 -124
  97. package/dist/examples/html-script/search/README.md +1 -1
  98. package/dist/examples/html-script/search/example-search-attribute.html +107 -99
  99. package/dist/examples/html-script/search/example-search-button-sync.html +107 -99
  100. package/dist/examples/html-script/search/example-search-dedupe.html +107 -99
  101. package/dist/examples/html-script/search/example-search-input.html +108 -99
  102. package/dist/examples/html-script/search/example-search-manual.html +98 -96
  103. package/dist/examples/html-script/search/example-search-submit.html +107 -99
  104. package/dist/examples/html-script/search/example-search-text.html +112 -99
  105. package/dist/examples/html-script/url-context/example-url-context-allowed-domains.html +92 -0
  106. package/dist/examples/html-script/url-context/example-url-context-landing.html +110 -0
  107. package/dist/examples/html-script/url-context/example-url-context-upsell.html +105 -0
  108. package/dist/examples/html-script/url-context/example-url-context.html +205 -0
  109. package/dist/examples/html-script/view-content/README.md +1 -1
  110. package/dist/examples/html-script/view-content/example-view-content-attribute.html +126 -118
  111. package/dist/examples/html-script/view-content/example-view-content-css.html +126 -118
  112. package/dist/examples/html-script/view-content/example-view-content-dedupe.html +126 -118
  113. package/dist/examples/html-script/view-content/example-view-content-empty.html +126 -118
  114. package/dist/examples/html-script/view-content/example-view-content-manual.html +117 -115
  115. package/dist/examples/html-script/view-content/example-view-content-product-card.html +126 -118
  116. package/dist/examples/html-script/view-content/example-view-content-text.html +131 -121
  117. package/dist/examples/release-candidate/README.md +2 -1
  118. package/dist/examples/v2/README.md +16 -13
  119. package/dist/index-B8u_3PGG.d.ts +460 -0
  120. package/dist/index-BxT2d-TK.d.mts +460 -0
  121. package/dist/index.cjs.js +1 -1
  122. package/dist/index.cjs.js.map +1 -1
  123. package/dist/index.d.mts +23 -361
  124. package/dist/index.d.ts +23 -361
  125. package/dist/index.esm.js +1 -1
  126. package/dist/index.esm.js.map +1 -1
  127. package/dist/pixel-DNGbAN5C.d.ts +871 -0
  128. package/dist/pixel-_BSDpx4M.d.mts +871 -0
  129. package/dist/pixel-default-config-BMYaqs7i.d.ts +21 -0
  130. package/dist/pixel-default-config-DLRya1tl.d.mts +21 -0
  131. package/dist/pixel-settings-D-t9zQb4.d.ts +40 -0
  132. package/dist/pixel-settings-DGxl0MVm.d.mts +40 -0
  133. package/dist/runtime/index.cjs.js +1 -1
  134. package/dist/runtime/index.cjs.js.map +1 -1
  135. package/dist/runtime/index.d.mts +19 -26
  136. package/dist/runtime/index.d.ts +19 -26
  137. package/dist/runtime/index.esm.js +1 -1
  138. package/dist/runtime/index.esm.js.map +1 -1
  139. package/dist/services/index.cjs.js +1 -1
  140. package/dist/services/index.cjs.js.map +1 -1
  141. package/dist/services/index.d.mts +14 -6
  142. package/dist/services/index.d.ts +14 -6
  143. package/dist/services/index.esm.js +1 -1
  144. package/dist/services/index.esm.js.map +1 -1
  145. package/dist/types-B-Nzagpk.d.mts +19 -0
  146. package/dist/types-D0KVsgzs.d.mts +293 -0
  147. package/dist/types-D3kJ9bfT.d.ts +293 -0
  148. package/dist/types-Dfi9C49l.d.ts +19 -0
  149. package/dist/url-context-Ck2LK18V.d.mts +87 -0
  150. package/dist/url-context-Ck2LK18V.d.ts +87 -0
  151. package/dist/v2/global.global.js +1 -1
  152. package/dist/v2/global.global.js.map +1 -1
  153. package/dist/v2/index.cjs.js +1 -1
  154. package/dist/v2/index.cjs.js.map +1 -1
  155. package/dist/v2/index.d.mts +26 -6
  156. package/dist/v2/index.d.ts +26 -6
  157. package/dist/v2/index.esm.js +1 -1
  158. package/dist/v2/index.esm.js.map +1 -1
  159. package/docs/public/README.md +80 -0
  160. package/docs/public/api/exports.md +55 -0
  161. package/docs/public/api/pixel.md +86 -0
  162. package/docs/public/configuration/commerce.md +44 -0
  163. package/docs/public/configuration/modules.md +63 -0
  164. package/docs/public/configuration/overview.md +85 -0
  165. package/docs/public/configuration/transport.md +127 -0
  166. package/docs/public/events/catalog.md +67 -0
  167. package/docs/public/getting-started/installation.md +87 -0
  168. package/docs/public/getting-started/quick-start.md +142 -0
  169. package/docs/public/getting-started/react-nextjs.md +78 -0
  170. package/docs/public/getting-started/script-tag.md +94 -0
  171. package/docs/public/guides/funnel-checkout.md +52 -0
  172. package/docs/public/guides/funnel-downsell.md +53 -0
  173. package/docs/public/guides/funnel-full.md +64 -0
  174. package/docs/public/guides/funnel-landing.md +70 -0
  175. package/docs/public/guides/funnel-thank-you.md +48 -0
  176. package/docs/public/guides/funnel-upsell.md +72 -0
  177. package/docs/public/limitations.md +33 -0
  178. package/docs/public/privacy/limitations.md +33 -0
  179. package/docs/public/release-candidate/validation.md +42 -0
  180. package/docs/public/troubleshooting.md +56 -0
  181. package/package.json +38 -20
  182. package/dist/index-DUfFzniE.d.mts +0 -274
  183. package/dist/index-DUfFzniE.d.ts +0 -274
  184. package/dist/pixel-CbeF25mD.d.mts +0 -555
  185. package/dist/pixel-CbeF25mD.d.ts +0 -555
  186. package/dist/pixel-default-config-1VgLFOiL.d.mts +0 -5
  187. package/dist/pixel-default-config-Bxb-Vdd8.d.ts +0 -5
  188. package/dist/types-CTpRvFKZ.d.ts +0 -71
  189. package/dist/types-DGlBdsAy.d.mts +0 -71
package/CHANGELOG.md CHANGED
@@ -1,8 +1,307 @@
1
- # @agenus-io/pixel
1
+ # @beworke/pixel
2
2
 
3
- ## Unreleased
3
+ ## 0.1.0-rc.10 — presets BuyGoods (landing + checkout)
4
4
 
5
- ### Release Candidate (0.0.15)
5
+ ### Added
6
+
7
+ - Bundles drop-in sem configuração: `dist/browser/pixel.buygoods-landing.global.js` e `dist/browser/pixel.buygoods-checkout.global.js`
8
+ - Subpaths `@beworke/pixel/buygoods-landing` e `@beworke/pixel/buygoods-checkout`
9
+ - Landing gera `subid4` e decora todos os links com `subid4` + UTMs / params da URL
10
+ - Checkout sobe para `window.top` (Funnel Pixels / iframe), só lê `subid4`, dispara PAGE_VIEW, ADD_TO_CART (email+phone), ADD_PAYMENT_INFO (`#submit`) e HEARTBEAT
11
+ - `pixelId` e o restante da config são internos — o integrador só inclui o `<script>`
12
+
13
+ ## 0.1.0-rc.9 — app.source livre, platform e payload `app`
14
+
15
+ ### Added
16
+
17
+ - `app.source` aceita os valores conhecidos (`pageus`, `gomarke`, `bemony`, `custom`) **e qualquer outra string** (ex.: `hwaffiliate`)
18
+ - `app.platform` (default `''`; conhecido: `buygoods`; string livre ok)
19
+ - Payload HTTP inclui `app` (`source`, `target`, `platform`, `environment`) no evento e no batch; os mesmos campos também vão em `meta`
20
+ - Exemplo BuyGoods (`apps/playground-html/buygoods`) sobe o Pixel do iframe de Funnel Pixels para `window.top`
21
+
22
+ ### Changed
23
+
24
+ - Checkout BuyGoods dispara `PAGE_VIEW` no init e desliga `INITIATE_CHECKOUT`
25
+
26
+ ## 0.1.0-rc.8 — factory, browser bootstrap, global callable
27
+
28
+ ### Added
29
+
30
+ - `createPixel()` no entry principal (instâncias independentes)
31
+ - Subpath `@beworke/pixel/browser` (`bootstrapPixel`, getters, destroy, `PixelBootstrapError`)
32
+ - Bundle `dist/browser/pixel.global.js` com `window.Pixel(settings)` callable
33
+ - Compatibilidade: `window.PixelV2` ganha `createPixel` / `bootstrap` / `getInstance` / `destroy`
34
+ - Pacote `@beworke/pixel-react` (`PixelProvider` / `usePixel`)
35
+ - `SDK_VERSION` centralizada e validada contra `package.json`
36
+ - `PixelSettings` (input público parcial) + `resolvePixelConfig()` no construtor de `Pixel`
37
+ - AutoTrack `selector` aceita `trigger: 'hover'` e `'visible'`; `viewContent` default liga os 3 em `[data-track="view_content"]`. `data-trigger` no HTML restringe o modo (`click` / `hover` / `visible`); sem o atributo, dispara nos 3
38
+ - `PixelConfigurationError` para `pixelId` inválido
39
+
40
+ ### Fixed
41
+
42
+ - `REMOVE_FROM_CART` usa a mesma janela de 500ms do `ADD_TO_CART` — add → remove → add → remove do mesmo produto volta a disparar
43
+ - `force: true` durante pending destrói a instância anterior (generation token)
44
+ - `window.PixelV2` continua disponível quando `window.Pixel` estrangeiro bloqueia o global
45
+
46
+ ## 0.1.0-rc.6 — Public RC docs on npm + install fix
47
+
48
+ ### Fixed
49
+
50
+ - README npm com links **GitHub** (npm não hospeda páginas `.md` individuais)
51
+ - `docs/public/` incluído no tarball npm → `node_modules/@beworke/pixel/docs/public/`
52
+ - Instalação documentada: `npm install @beworke/pixel@rc` (público, sem token)
53
+ - `publish:rc` publica tags `rc` e `latest` juntas
54
+
55
+ ## Unreleased — Etapa 20 Runtime Intelligence
56
+
57
+ ### Added
58
+
59
+ - `modules.behavior.rateLimit` — limitador interno por instância (sliding window, critical bypass para IDLE/ACTIVITY/VISIBLE/HIDDEN/EXIT_INTENT)
60
+ - `modules.behavior.buffer` — agregação interna de sinais (drop_oldest / drop_newest / compress_similar; flush por size/age/hidden/destroy)
61
+ - `modules.behavior.stateMachine` — estados explícitos (NOT_INITIALIZED → … → DESTROYED) com tabela de transições e histórico limitado
62
+ - `modules.behavior.sessionSummary` — resumo consolidado da sessão com `emitOnHidden` / `emitOnDestroy` / `minimumSessionMs`
63
+ - `BehaviorRuntimeCoordinator` — pipeline SignalBus → RateLimit → Buffer → StateMachine → Accumulator → Dispatcher
64
+ - Evento tipado `BEHAVIOR_SESSION_SUMMARY` (categoria `ENGAGEMENT`) + `ApiEventType`
65
+ - Diagnostics: `behavior.rateLimit`, `behavior.buffer`, `behavior.stateMachine`, `behavior.sessionSummary`
66
+ - Health `degraded` isolado (high drop rate, buffer full, invalid transitions)
67
+ - Exemplo `examples/html-script/behavior/example-behavior-runtime-intelligence.html`
68
+ - Testes `src/modules/behavior/runtime-intelligence.test.ts` (38 casos)
69
+
70
+ ### Notes
71
+
72
+ - Pacote permanece em `0.1.0-rc.5` (sem bump)
73
+ - Behavior Runtime Evolution **17–20 concluída**
74
+ - Próxima etapa oficial: 21 — Commerce lifecycle
75
+
76
+ ## Unreleased — Hardening 19.1 (gate Etapa 20)
77
+
78
+ ### Fixed
79
+
80
+ - `ApiEventType` agora inclui `ENGAGEMENT_UPDATE` e `ENGAGEMENT_SUMMARY` (contrato HTTP reconhece os eventos; o cast em `EventPayloadBuilder` deixou de mascarar a ausência)
81
+ - Ordem de init do Behavior Runtime reordenada para `bus → Engagement → trackers → Heartbeat`: o Engagement passa a receber os sinais iniciais (`HIDDEN`/`VISIBLE` da inicialização do `VisibilityTracker` e `HEARTBEAT` de `fireImmediately`)
82
+ - `EngagementEngine.init()` faz `reset()` do `BehaviorSignalBus` próprio no reinit (apenas quando `ownsBus`); subscriptions voltam a funcionar após destroy/reinit
83
+ - Playground `example-behavior-engagement.html`: `destroy()` ocorre antes de `unsubscribe()` (captura `ENGAGEMENT_SUMMARY`); painel preserva o último snapshot; reinit mostra o summary anterior sem duplicar listener
84
+
85
+ ### Added
86
+
87
+ - `src/transport/engagement-transport.test.ts` — contrato HTTP (ApiEventType/EventPayloadBuilder/batch) + guard de compilação
88
+ - Testes de regressão em `engagement.test.ts`: ownership do SignalBus (bus próprio reinit / bus injetado não resetado / duplicate init / duplicate destroy) e ordem de init (HIDDEN/VISIBLE inicial, HEARTBEAT imediato, reinit sem vazamento)
89
+
90
+ ### Notes
91
+
92
+ - Pacote permanece em `0.1.0-rc.5` (sem bump); 630 testes passando | 2 skipped
93
+ - Etapa 20 — Runtime Intelligence liberada
94
+
95
+ ## Unreleased — Etapa 19 Engagement Runtime
96
+
97
+ ### Added
98
+
99
+ - `modules.behavior.engagement` — contrato oficial (`enabled`, `evaluationIntervalMs`, `emitOnChange`, `minScoreDelta`, `emitSummaryOnDestroy`, `weights`, `penalties`, `thresholds`; defaults seguros, `enabled: false`)
100
+ - `EngagementEngine` real: consome `BehaviorSignalBus`, produz score determinístico `0..100` via `ManagedScheduler` (sem `setInterval`), com componentes/pesos/penalidades/níveis
101
+ - Componentes: `EngagementSignalAccumulator`, `EngagementScoreCalculator`, `EngagementLevelResolver`, `EngagementEmissionPolicy`, `EngagementSummaryBuilder`
102
+ - Eventos tipados `ENGAGEMENT_UPDATE` / `ENGAGEMENT_SUMMARY` (categoria `ENGAGEMENT`)
103
+ - `resolveEngagementConfig` / `normalizeEngagementConfig` (clamp de intervalo/delta, normalização de pesos para somar 1, clamp de penalidades, validação de thresholds)
104
+ - Diagnostics: `getDebugSnapshot().behavior.engagement` (score/level/contadores/signalCounts, sanitizado) e `configuredEngines` inclui `engagement`
105
+ - Health `degraded` isolado quando o engine opcional tem drift excessivo ou falha de cálculo
106
+ - `ScrollTracker`/`ClickTracker` publicam `SCROLL`/`CLICK`/`RAGE_CLICK` no `BehaviorSignalBus`; `HeartbeatEngine` publica `HEARTBEAT`
107
+ - Exemplo `examples/html-script/behavior/example-behavior-engagement.html`
108
+ - Testes `src/modules/behavior/engagement.test.ts` (48 casos, incl. Hardening 19.1)
109
+
110
+ ### Changed
111
+
112
+ - Diagnostics: `configuredEngines` reporta `engagement` (antes: `engagement(stub)`)
113
+
114
+ ### Breaking
115
+
116
+ - `modules.behavior.engagement` migrou do shape legado (`weights.{scroll,click,time}`, `thresholds.{low,medium}`) para o contrato da Etapa 19. Sem migration layer (config legada nunca esteve wired a runtime)
117
+ - Tipos públicos `EngagementWeights` / `EngagementThresholds` mudaram de shape; adicionado `EngagementPenalties`
118
+
119
+ ### Notes
120
+
121
+ - Pacote permanece em `0.1.0-rc.5` (sem bump)
122
+ - Próxima etapa oficial: 20 — Runtime Intelligence
123
+
124
+ ## Unreleased — Hardening 18.1 (gate Etapa 19)
125
+
126
+ ### Fixed
127
+
128
+ - Viewport MutationObserver rescan: `cleanupDisconnectedElements` agora ocorre **antes** de `scanAndObserve` — evita regressão com `maxObservedElements` quando A é removido e B é adicionado na mesma batch
129
+ - Dispatcher: falha de um listener não interrompe os demais nem propaga ao produtor; log sanitizado `DISPATCHER_LISTENER_FAILED` (sem payload/PII)
130
+
131
+ ### Added
132
+
133
+ - Testes explícitos Hardening 18.1: limites, SSR, IntersectionObserver/MutationObserver failures, mutation burst, isolamento Dispatcher ↔ Viewport/Heartbeat
134
+
135
+ ### Notes
136
+
137
+ - Pacote permanece em `0.1.0-rc.5` (sem bump)
138
+ - Etapa 19 — Engagement liberada após gate 18.1
139
+
140
+ ## Unreleased — Etapa 18 Viewport Runtime
141
+
142
+ ### Added
143
+
144
+ - `modules.behavior.trackers.viewport` — config aditiva (`targets[]`, `rootMargin`, `observeMutations`, `mutationDebounceMs`, `maxObservedElements`; defaults seguros, `enabled: false`)
145
+ - `ViewportTracker` real com `IntersectionObserver` + `MutationObserver` (DOM dinâmico)
146
+ - Eventos tipados `VIEWPORT_ENTER` / `VIEWPORT_EXIT` (categoria `ENGAGEMENT`)
147
+ - `ViewportObserverFactory`, `ViewportTargetRegistry`, `ViewportStateStore`, `normalizeViewportConfig`, `describeViewportElement`
148
+ - `BehaviorSignalBus.createSignal()` — geração de ID de sinal por instância (sem estado module-level)
149
+ - Diagnostics: `getDebugSnapshot().behavior.viewport` + separação `configuredTrackers` (Scroll/Click/Idle/Visibility/ExitIntent/Viewport) vs `configuredEngines` (Heartbeat/Engagement)
150
+ - Health `degraded` quando `viewport.enabled === true` e `IntersectionObserver` indisponível
151
+ - Exemplo `examples/html-script/example-behavior-viewport.html`
152
+ - Testes `src/modules/behavior/viewport.test.ts`
153
+
154
+ ### Changed
155
+
156
+ - `getDebugSnapshot().behavior` passa a expor `configuredTrackers` e `configuredEngines` separados (antes: apenas `configuredTrackers` misturando trackers e engines)
157
+ - `IdleTracker` / `VisibilityTracker` passam a usar `signalBus.createSignal()` em vez de sequência interna do bus
158
+
159
+ ### Breaking
160
+
161
+ - **Removido** o contrato stub de `trackers.viewport` (`selector`, `selectorType`, `visibilityThreshold`) — substituído integralmente por `targets[]` + `rootMargin`/`observeMutations`/`mutationDebounceMs`/`maxObservedElements`. Sem migration layer (stub nunca esteve wired em produção).
162
+
163
+ ### Notes
164
+
165
+ - Viewport mede visibilidade de elementos e publica via Dispatcher; **não** chama Transport/Queue/Sender
166
+ - Sem polling como fallback: se `IntersectionObserver` está indisponível, o tracker fica `available: false` e não observa nada
167
+ - `SignalBus` deixa de ter `signalSeq` module-level; cada instância de `BehaviorSignalBus` gera seus próprios IDs via `createSignal()`
168
+ - Pacote permanece em `0.1.0-rc.5` (sem bump de versão)
169
+
170
+ ## Unreleased — Etapa 17 Heartbeat Runtime
171
+
172
+ ### Added
173
+
174
+ - `modules.behavior.heartbeat` — config aditiva (defaults seguros, `enabled: false`)
175
+ - `HeartbeatEngine` + `ManagedScheduler` + `BehaviorSignalBus` + `HeartbeatPolicy` / `HeartbeatSnapshotBuilder`
176
+ - Evento tipado `BEHAVIOR_HEARTBEAT` (categoria `ENGAGEMENT`)
177
+ - Diagnostics: `getDebugSnapshot().behavior.heartbeat`
178
+ - Exemplo `examples/html-script/example-behavior-heartbeat.html`
179
+ - Testes `src/modules/behavior/heartbeat.test.ts`
180
+
181
+ ### Changed (contrato Heartbeat consolidado)
182
+
183
+ - Removido `trackers.heartbeat` e qualquer fallback/legacy
184
+ - `engagement` movido para `modules.behavior.engagement` (irmão de `trackers`)
185
+ - Adicionado `hiddenIntervalMs` ao contrato oficial de Heartbeat
186
+
187
+ ### Notes
188
+
189
+ - Heartbeat mede presença e publica via Dispatcher; **não** chama Transport/Queue/Sender
190
+ - Scheduler usa `intervalMs` (visível) ou `hiddenIntervalMs` (escondido); `emitWhenHidden` controla emissão
191
+ - Sequence reinicia a cada `init`
192
+ - Intervalo mínimo normalizado: 1000ms
193
+
194
+ ## 0.1.0-rc.5 — Runtime Diagnostics (Etapa 16)
195
+
196
+ ### Added
197
+
198
+ - `pixel.getDebugSnapshot()` — snapshot oficial read-only, imutável e sanitizado
199
+ - Módulo `diagnostics` (`RuntimeDiagnosticsModule` + `DebugSnapshotService`)
200
+ - Redaction de secrets/PII em snapshots
201
+ - Health evaluator (`healthy` / `degraded` / `unhealthy` / `unknown`)
202
+ - Exemplo `examples/html-script/example-runtime-diagnostics.html`
203
+ - Testes `src/diagnostics/diagnostics.test.ts`
204
+
205
+ ### Notes
206
+
207
+ - `subscribeDebug` **não** implementado propositalmente (sem polling/timers); snapshot sob demanda apenas
208
+ - Sem alteração no pipeline de eventos / Transport / Conversion
209
+ - Hardening: sanitização ampliada; `modules[].id` (evita colisão com PII `name`); testes hardening
210
+
211
+ ## 0.1.0-rc.4 — Etapa 15B Validation Hardening
212
+
213
+ ### Added
214
+
215
+ - `PIXEL_V2_VALIDATION_MATRIX.md` — matriz oficial de validação integrada
216
+ - `PIXEL_V2_STAGE_15B_REPORT.md` — relatório da Etapa 15B
217
+ - Playground `examples/html-script/full-funnel/` (landing → checkout → upsell/downsell → thank-you)
218
+ - Scripts: `validate:15b`, `test:integration`, `test:transport`, `test:full-funnel`, `test:chaos`
219
+ - Teste de matriz de módulos `stage-15b-module-matrix.test.ts`
220
+
221
+ ### Changed
222
+
223
+ - Documentação alinhada ao runtime real (Transport/Integrations implementados; Privacy stub; Behavior P1 pendente)
224
+ - Roadmap oficial 16–22 documentado (sem implementação)
225
+ - Hierarquia documental registrada em ARCHITECTURE / README / BACKLOG
226
+
227
+ ### Fixed
228
+
229
+ - Referências “Transport futuro” / Dispatcher sem consumidor real
230
+ - Checklist RC inconsistente
231
+ - `examples/v2` / html-script RELEASE notes apontando rc.3 onde cabia rc.4
232
+ - Full-funnel: `commerce.catalog` + `cart.initialItems[{ productId }]`; `paymentMethod: CREDIT_CARD`; `order_id` antes do init
233
+ - Docs: status **1–15B concluídas** (sem “15B em andamento”)
234
+
235
+ ## 0.1.0-rc.4 — Core UrlContext
236
+
237
+ ### Added
238
+
239
+ - Core UrlContext module
240
+ - `query_params` / `url_context` on events
241
+ - managed URL params (public `sid`)
242
+ - forward params + link decoration
243
+ - denylist for sensitive params
244
+ - HTML examples for landing/checkout/upsell/allowedDomains
245
+
246
+ ### Changed
247
+
248
+ - Event builder enriches centrally when `urlContext` enabled
249
+
250
+ ### Fixed / Hardening (15A finalização)
251
+
252
+ - Decode seguro de query/cookie (`safeDecodeURIComponent`) — URI malformada não quebra init
253
+ - Link decorator idempotente (sem `sid=a&sid=a`); colapsa duplicados
254
+ - Preserva href relativo e ordem `?query#hash`
255
+ - Snapshot / payload com cópias congeladas (sem mutação externa nem refs compartilhadas)
256
+ - Cache de exclude domains/selectors no decorator (perf em milhares de links)
257
+ - `resolveUrlContextConfig` clona nested arrays/objects (defaults imutáveis)
258
+ - `dispose()` alias em engine/service
259
+
260
+ ### Security
261
+
262
+ - Denylisted params not captured/forwarded
263
+ - Public `sid` ≠ internal `session_id`
264
+
265
+ ## 0.1.0-rc.3 — Global Commerce Config + Hardening 14B/14C
266
+
267
+ ### Changed
268
+
269
+ - Commerce global no root de `PixelConfig` (`config.commerce`)
270
+ - `commerce.checkout` → `commerce.cart`
271
+ - `selectedItems` na config → `commerce.cart.initialItems`
272
+ - Auto detectors usam `auto.detectors[event].sources[]`
273
+ - `calculateValueFrom: 'selected_items'` → `'cart'`
274
+ - Novo: `commerce.enrichment` por evento (`pageView`, `viewContent`, `lead`, …)
275
+ - Novo: `commerce.cart.mode` inclui `landing_page` e `checkout`
276
+ - Exemplos HTML, Next.js, docs e `example-landing-commerce.html` migrados
277
+ - Removidos aliases públicos `CommerceItem` / `CommerceCheckoutMode` e literais `selected_items` / `event_items` do tipo oficial
278
+
279
+ ### Fixed
280
+
281
+ - Enrichment respeita `commerce.enabled` e `enrichment[event].enabled`
282
+ - `FormSource` respeita escopo (`selector` / `formSelector`) em todos os triggers
283
+ - `PaymentSource` respeita `formSelector` real do campo
284
+ - Docs normalizadas — removidos resíduos de contratos antigos
285
+ - **14C:** `ADD_TO_CART` sem `productId` usa item principal de `commerce.cart` (initialItems/runtime) quando enrichment permite
286
+
287
+ ### Breaking
288
+
289
+ - Removido `modules.conversion.commerce`
290
+ - Removidos `selector`, `selectorForm`, `cardDetection`, `autoDispatch`, `paymentMethod` no nível do detector — use apenas dentro de `sources[]`
291
+
292
+ ### 0.1.0-rc.2 — Etapa 14 Auto Sources Contract
293
+
294
+ - **Breaking (contrato auto):** detectors passam a usar `sources: AutoTrackSource[]`
295
+ - Removidos do nível do detector: `selector`, `selectorType`, `selectorForm`, `paymentMethod`, `cardDetection`, `autoDispatch`
296
+ - Types: `selector` | `form` | `payment` | `lifecycle` | `url`
297
+ - Múltiplas sources independentes por evento (ex.: ADD_TO_CART form + click)
298
+ - `AutoTrackerFactory` cria um detector por source
299
+ - Novo `LifecycleAutoDetector` (INITIATE_CHECKOUT on ready)
300
+ - Payment via `type: 'payment'` → `CardDetector`
301
+ - Defaults: todos os detectors com `sources: []`
302
+ - Exemplos / RC / Next checkout migrados
303
+
304
+ ### Release Candidate (0.1.0-rc.1 / 0.0.15)
6
305
 
7
306
  - Etapas 12A–12N Commerce + AutoTrack + docs/release readiness
8
307
  - Etapa 13A — validação consumidor real (`PixelV2` + Transport Event/Batch)
@@ -156,7 +455,7 @@
156
455
  - **Configuração Dinâmica**: Atualização de configuração em runtime
157
456
  - **Múltiplos Seletores**: Suporte a class, id, attribute, tag, text, url, data-attribute, custom
158
457
  - **Extração de Dados**: Seletores configuráveis para extrair dados de produtos/carrinho
159
- - **Validação**: Sistema de validação de formulários com regras customizadas
458
+ - **Validação**: Sistema de validação de formulários com regras customizáveis
160
459
  - **Callbacks Customizados**: Funções de callback para processamento customizado
161
460
 
162
461
  #### 📊 **Monitoramento e Estatísticas**
package/README.md CHANGED
@@ -1,163 +1,125 @@
1
- # Pixel v2
1
+ # Pixel v2 (`@beworke/pixel`)
2
2
 
3
- SDK de analytics e conversão para web — arquitetura modular v2.
3
+ SDK de analytics e conversão para web — implemente funis (landing, checkout, upsell, thank-you) em React, Next.js, SPA ou HTML puro **sem conhecer a arquitetura interna**.
4
4
 
5
- **Documentação:** [`ARCHITECTURE.md`](./ARCHITECTURE.md) · [`README_LEGACY_AUDIT.md`](./README_LEGACY_AUDIT.md) · [`RELEASE_CANDIDATE.md`](./RELEASE_CANDIDATE.md)
5
+ A versão publicada está em `package.json`. Instale a tag `@rc` para receber a release candidate atual.
6
6
 
7
- ## Arquitetura
7
+ ## Instalação (npm — sem token)
8
8
 
9
- ```txt
10
- Pixel → PixelRuntime → Services → Modules → BaseEventBuilder → Dispatcher
11
- ├── TransportModule → API própria
12
- └── IntegrationsModule → PAGE_VIEW browser (Meta / Google / TikTok)
9
+ Pacote **público**. Qualquer dev instala **sem login** no npm:
10
+
11
+ ```bash
12
+ npm install @beworke/pixel@rc
13
13
  ```
14
14
 
15
- Attribution é independente: `AttributionService` → `event.identifiers` → Transport/API.
15
+ > **Importante:** `npm install @beworke/pixel` sem tag usa `latest`. Use `@rc` até alinhar tags.
16
16
 
17
- O legado `GomarkePixel` (v1) foi **removido na Etapa 11**.
17
+ ## Documentação pública
18
18
 
19
- ## Instalação
19
+ O **npm não hospeda** arquivos `.md` como site (URLs tipo `npmjs.com/.../installation.md` **não existem**).
20
20
 
21
- ```bash
22
- pnpm add @agenus-io/pixel
21
+ | Onde ler | Link |
22
+ |----------|------|
23
+ | **GitHub (recomendado no browser)** | [docs/public/README.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/README.md) |
24
+ | **Após `npm install`** | `node_modules/@beworke/pixel/docs/public/` |
25
+
26
+ | Guia | GitHub |
27
+ |------|--------|
28
+ | Instalação | [getting-started/installation.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/getting-started/installation.md) |
29
+ | Quick start | [getting-started/quick-start.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/getting-started/quick-start.md) |
30
+ | API Pixel | [api/pixel.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/api/pixel.md) |
31
+ | Eventos | [events/catalog.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/events/catalog.md) |
32
+ | Configuração | [configuration/overview.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/configuration/overview.md) |
33
+ | Funis | [guides/funnel-full.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/guides/funnel-full.md) |
34
+ | Privacidade (RC) | [privacy/limitations.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/privacy/limitations.md) |
35
+ | Limitações | [limitations.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/limitations.md) |
36
+
37
+ Repositório: https://github.com/beworke-apps/Pixel-Global
38
+
39
+ ## Três níveis de uso
40
+
41
+ ### HTML simples (script tag)
42
+
43
+ Carregar o bundle **apenas registra** `window.Pixel`. Nada é inicializado até `Pixel(settings)` resolver. Top-level `await` exige `type="module"` (ou um IIFE/`then`).
44
+
45
+ ```html
46
+ <script src="https://unpkg.com/@beworke/pixel@rc/dist/browser/pixel.global.js"></script>
47
+ <script type="module">
48
+ const pixel = await Pixel({
49
+ identity: { pixelId: 'pix_YOUR_ID' },
50
+ });
51
+ pixel.lead({ email: 'user@example.com' });
52
+ </script>
23
53
  ```
24
54
 
25
- Tarball local (RC):
55
+ `Pixel(settings)` usa o bootstrap (uma instância por `window`). `window.PixelV2` permanece como compatibilidade / API de baixo nível.
26
56
 
27
- ```bash
28
- npm pack
29
- npm install ./agenus-io-pixel-0.0.15.tgz
30
- npm run validate:rc-package
57
+ ### NPM com factory
58
+
59
+ `createPixel` cria **instâncias independentes** (não é singleton).
60
+
61
+ ```typescript
62
+ import { createPixel } from '@beworke/pixel';
63
+
64
+ const pixel = await createPixel({
65
+ identity: { pixelId: 'pix_YOUR_ID' },
66
+ });
67
+
68
+ pixel.lead({ email: 'user@example.com' });
31
69
  ```
32
70
 
33
- ## Uso (ESM / CJS)
71
+ A classe continua disponível:
34
72
 
35
- ```ts
36
- import { Pixel, DEFAULT_PIXEL_CONFIG } from '@agenus-io/pixel';
73
+ ```typescript
74
+ import { Pixel } from '@beworke/pixel';
37
75
 
38
76
  const pixel = new Pixel({
39
- ...DEFAULT_PIXEL_CONFIG,
40
- identity: {
41
- ...DEFAULT_PIXEL_CONFIG.identity,
42
- pixelId: 'pix_123',
43
- },
44
- transport: {
45
- ...DEFAULT_PIXEL_CONFIG.transport,
46
- apiEndpoint: 'https://sua-api.example.com',
47
- },
48
- modules: {
49
- ...DEFAULT_PIXEL_CONFIG.modules,
50
- core: {
51
- ...DEFAULT_PIXEL_CONFIG.modules.core,
52
- enabled: true,
53
- pageView: {
54
- ...DEFAULT_PIXEL_CONFIG.modules.core.pageView,
55
- enabled: true,
56
- trackInitialPageView: true, // PAGE_VIEW no init — não há pixel.pageView()
57
- },
58
- },
59
- conversion: {
60
- ...DEFAULT_PIXEL_CONFIG.modules.conversion,
61
- enabled: true,
62
- manual: {
63
- ...DEFAULT_PIXEL_CONFIG.modules.conversion.manual,
64
- purchase: { enabled: true },
65
- },
66
- },
67
- transport: {
68
- ...DEFAULT_PIXEL_CONFIG.modules.transport,
69
- enabled: true,
70
- mockSender: { enabled: false },
71
- sender: { mode: 'http' },
72
- },
73
- },
77
+ identity: { pixelId: 'pix_YOUR_ID' },
74
78
  });
75
-
76
79
  await pixel.init();
77
- pixel.purchase({ orderId: '1', value: 99.9, currency: 'BRL' });
78
- await pixel.destroy();
79
80
  ```
80
81
 
81
- ```js
82
- const { Pixel, DEFAULT_PIXEL_CONFIG } = require('@agenus-io/pixel');
83
- ```
82
+ ### Browser avançado
84
83
 
85
- ## CDN (bundle global)
84
+ `bootstrapPixel` gerencia **uma instância por `window`**. Para trocar a configuração, destrua explicitamente ou use `force`. Chamadas concorrentes compartilham a configuração da primeira chamada.
86
85
 
87
- ```html
88
- <script src="https://unpkg.com/@agenus-io/pixel@latest/dist/v2/global.global.js"></script>
89
- <script>
90
- const { Pixel, DEFAULT_PIXEL_CONFIG } = window.PixelV2;
91
- const pixel = new Pixel({
92
- ...DEFAULT_PIXEL_CONFIG,
93
- identity: { ...DEFAULT_PIXEL_CONFIG.identity, pixelId: 'pix_123' },
94
- transport: {
95
- ...DEFAULT_PIXEL_CONFIG.transport,
96
- apiEndpoint: 'https://sua-api.example.com',
97
- },
98
- modules: {
99
- ...DEFAULT_PIXEL_CONFIG.modules,
100
- core: {
101
- ...DEFAULT_PIXEL_CONFIG.modules.core,
102
- enabled: true,
103
- pageView: {
104
- ...DEFAULT_PIXEL_CONFIG.modules.core.pageView,
105
- enabled: true,
106
- trackInitialPageView: true,
107
- },
108
- },
109
- },
110
- });
111
- pixel.init();
112
- </script>
86
+ ```typescript
87
+ import { bootstrapPixel } from '@beworke/pixel/browser';
88
+
89
+ const pixel = await bootstrapPixel(
90
+ {
91
+ identity: { pixelId: 'pix_YOUR_ID' },
92
+ },
93
+ {
94
+ waitForConsent: () => window.consentGranted === true,
95
+ }
96
+ );
113
97
  ```
114
98
 
115
- Nome global oficial: **`PixelV2`**.
99
+ React: use [`@beworke/pixel-react`](../pixel-react/README.md) (`PixelProvider` / `usePixel`).
116
100
 
117
- ## Package exports
101
+ ## Métodos públicos
118
102
 
119
- | Export | Descrição |
103
+ | Método | Descrição |
120
104
  |--------|-----------|
121
- | `@agenus-io/pixel` | `Pixel`, `DEFAULT_PIXEL_CONFIG`, `PixelConfig` |
122
- | `@agenus-io/pixel/global` | IIFE `window.PixelV2` |
123
- | `@agenus-io/pixel/v2` | Alias do entry principal |
124
- | `@agenus-io/pixel/config` | Tipos e defaults de configuração |
125
- | `@agenus-io/pixel/events` | Eventos tipados |
126
- | `@agenus-io/pixel/services` | Services (attribution, session, etc.) |
127
- | `@agenus-io/pixel/runtime` | Runtime e bootstrap |
128
- | `@agenus-io/pixel/logger` | Logger |
105
+ | `init()` / `destroy()` / `isInitialized()` | Ciclo de vida |
106
+ | `getDebugSnapshot()` | Snapshot read-only (dev/QA) |
107
+ | `purchase`, `lead`, `addToCart`, `removeFromCart` | Conversão |
108
+ | `initiateCheckout`, `addPaymentInfo`, `viewContent`, `search` | Conversão |
129
109
 
130
- ## Playgrounds
110
+ Detalhes: [api/pixel.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/api/pixel.md)
131
111
 
132
- Exemplos oficiais em `examples/html-script/` (copiados para `dist/examples/html-script/` no build):
112
+ Métodos internos de playground (`@internal`) **não** são API pública.
133
113
 
134
- - `release-candidate.html` — consumidor real (`window.PixelV2` + Transport)
135
- - `RELEASE_CANDIDATE.md` — como testar o playground RC
136
- - `example-basic.html`, `example-behavior.html`, `example-conversion.html`, …
137
- - pastas por evento: `lead/`, `add-to-cart/`, …
114
+ ## Limitações do RC
138
115
 
139
- Índice: [`examples/html-script/README.md`](./examples/html-script/README.md)
140
- Release notes: [`RELEASE_CANDIDATE.md`](./RELEASE_CANDIDATE.md)
116
+ - O bundle **não** auto-inicializa; a aplicação controla quando chamar `Pixel(settings)` / `init()`
117
+ - Consent gate opcional no bootstrap — a aplicação decide quando há consentimento suficiente
118
+ - Não declarar GDPR/LGPD/CCPA compliant com este RC
119
+ - Sem eventos dedicados upsell/downsell — use `VIEW_CONTENT` + `PURCHASE`
141
120
 
142
- ## Scripts
121
+ Lista: [limitations.md](https://github.com/beworke-apps/Pixel-Global/blob/main/packages/pixel/docs/public/limitations.md)
143
122
 
144
- ```bash
145
- pnpm build # dist/
146
- pnpm test # testes v2
147
- pnpm type-check # tsc --noEmit
148
- pnpm test:smoke:real # smoke Event/Batch (skip sem .env)
149
- pnpm validate:rc-package # instalação limpa do .tgz
150
- ```
123
+ ## Contribuidores
151
124
 
152
- ## Migração v1 → v2
153
-
154
- | v1 (removido) | v2 |
155
- |---------------|-----|
156
- | `GomarkePixel` | `Pixel` |
157
- | `window.gomarkePixel` | `window.PixelV2` |
158
- | `dist/index.global.js` | `dist/v2/global.global.js` |
159
- | `src/core/**` | `modules/core` + `transport` |
160
- | `src/behavior/**` | `modules/behavior` |
161
- | `src/conversion/**` | `modules/conversion` |
162
- | `getTrackingCookies` | `AttributionService` |
163
- | `loadFacebookPixel` / `loadGoogleTag` | `IntegrationEngine` browser destinations |
125
+ Arquitetura interna: [PLAN_PIXEL/ARCHITECTURE.md](https://github.com/beworke-apps/Pixel-Global/blob/main/PLAN_PIXEL/ARCHITECTURE.md) · Playgrounds: `apps/playground-html/` no monorepo.