@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
@@ -0,0 +1,293 @@
1
+ import { P as PixelEvent, b as PixelItem, S as StorageService, B as BrowserMetadataService, c as BaseEventBuilder, A as AttributionService, U as UrlContextService } from './index-BxT2d-TK.mjs';
2
+ import { ao as CommerceProduct, ai as CommerceCartItem, ag as CommerceCalculateValueFrom, al as CommerceEnrichmentSource, C as CommerceConfig, am as CommerceEventEnrichmentConfig, aw as normalizeCalculateValueFrom, an as CommerceMappingsConfig } from './pixel-_BSDpx4M.mjs';
3
+
4
+ interface DispatcherService {
5
+ dispatch(event: PixelEvent): void;
6
+ subscribe(listener: (event: PixelEvent) => void): () => void;
7
+ clear(): void;
8
+ getListenerCount(): number;
9
+ getLastEvent(): PixelEvent | null;
10
+ }
11
+
12
+ type ProductCatalogOptions = {
13
+ readonly defaultCurrency?: string;
14
+ };
15
+ type ProductCatalogSnapshot = {
16
+ readonly products: CommerceProduct[];
17
+ readonly count: number;
18
+ };
19
+ /**
20
+ * Catálogo de produtos configurados em `config.commerce.catalog`.
21
+ * Isolado por instância — sem estado global / module-level.
22
+ * Não acessa DOM, Transport nem altera payloads de eventos.
23
+ */
24
+ declare class ProductCatalog {
25
+ private readonly productsById;
26
+ private readonly productsBySku;
27
+ private readonly orderedIds;
28
+ constructor(products?: readonly CommerceProduct[] | undefined, options?: ProductCatalogOptions);
29
+ list(): CommerceProduct[];
30
+ getById(id: string): CommerceProduct | null;
31
+ getBySku(sku: string): CommerceProduct | null;
32
+ hasProduct(id: string): boolean;
33
+ getSnapshot(): ProductCatalogSnapshot;
34
+ private indexProducts;
35
+ private normalizeProduct;
36
+ private cloneProduct;
37
+ }
38
+
39
+ type CommerceStateOptions = {
40
+ /**
41
+ * Quando `false`, `upsertItem` só atualiza itens já presentes
42
+ * (não adiciona novos productIds). Default: `true`.
43
+ */
44
+ readonly allowDynamicItems?: boolean;
45
+ };
46
+ type CommerceStateSnapshot = {
47
+ /**
48
+ * Estado vivo do carrinho (runtime).
49
+ * Não confundir com `commerce.cart.initialItems` da config.
50
+ */
51
+ readonly selectedItems: CommerceCartItem[];
52
+ readonly count: number;
53
+ };
54
+ /**
55
+ * Estado em memória do cart da instância.
56
+ * Inicializado com `config.commerce.cart.initialItems`.
57
+ * Não persiste, não acessa DOM/Transport e não dispara eventos.
58
+ */
59
+ declare class CommerceState {
60
+ private readonly itemsByProductId;
61
+ private readonly allowDynamicItems;
62
+ constructor(initialItems?: readonly CommerceCartItem[] | undefined, options?: CommerceStateOptions);
63
+ getSelectedItems(): CommerceCartItem[];
64
+ hasItem(productId: string): boolean;
65
+ getItem(productId: string): CommerceCartItem | null;
66
+ /**
67
+ * Insere ou atualiza item.
68
+ * - Sem `productId` → no-op
69
+ * - `selected === false` → remove se existir / não adiciona
70
+ * - `quantity <= 0` → remove
71
+ * - `allowDynamicItems === false` e item novo → no-op
72
+ */
73
+ upsertItem(item: CommerceCartItem): void;
74
+ removeItem(productId: string): void;
75
+ /**
76
+ * Atualiza quantidade. `quantity <= 0` remove o item.
77
+ */
78
+ updateQuantity(productId: string, quantity: number): void;
79
+ clear(): void;
80
+ getSnapshot(): CommerceStateSnapshot;
81
+ private seed;
82
+ private seedItem;
83
+ private normalizeQuantity;
84
+ private cloneItem;
85
+ }
86
+
87
+ /**
88
+ * Calcula value/currency a partir de items resolvidos.
89
+ * Não conhece DOM, detectors, Transport nem Dispatcher.
90
+ * Não muta o input.
91
+ */
92
+ type ResolvedCommerceItem = {
93
+ productId?: string;
94
+ sku?: string;
95
+ productName?: string;
96
+ price?: number;
97
+ quantity?: number;
98
+ currency?: string;
99
+ category?: string;
100
+ variant?: string;
101
+ brand?: string;
102
+ type?: string;
103
+ metadata?: Record<string, unknown>;
104
+ };
105
+ type OrderCalculationInput = {
106
+ items?: ResolvedCommerceItem[];
107
+ value?: number;
108
+ currency?: string;
109
+ defaultCurrency?: string;
110
+ };
111
+ type OrderCalculationResult = {
112
+ items: ResolvedCommerceItem[];
113
+ value?: number;
114
+ currency?: string;
115
+ };
116
+ declare class OrderCalculator {
117
+ calculate(input: OrderCalculationInput): OrderCalculationResult;
118
+ private sumValue;
119
+ /**
120
+ * Ordem: currency manual → primeiro item com currency → defaultCurrency.
121
+ * Multi-currency: determinístico — usa o primeiro item com currency
122
+ * (não normaliza conversão entre moedas nesta etapa).
123
+ */
124
+ private resolveCurrency;
125
+ private cloneItem;
126
+ }
127
+
128
+ type CommerceEventType = 'ADD_TO_CART' | 'REMOVE_FROM_CART' | 'INITIATE_CHECKOUT' | 'PURCHASE' | 'VIEW_CONTENT' | 'ADD_PAYMENT_INFO';
129
+ type ExtractedProductInput = {
130
+ productId?: string;
131
+ productName?: string;
132
+ price?: number;
133
+ quantity?: number;
134
+ currency?: string;
135
+ sku?: string;
136
+ };
137
+ type CommerceResolverInput = {
138
+ eventType: CommerceEventType;
139
+ payload?: Record<string, unknown>;
140
+ extractedProduct?: ExtractedProductInput;
141
+ enrichmentSource?: CommerceEnrichmentSource;
142
+ items?: Array<{
143
+ productId?: string;
144
+ id?: string;
145
+ sku?: string;
146
+ name?: string;
147
+ productName?: string;
148
+ price?: number;
149
+ quantity?: number;
150
+ currency?: string;
151
+ category?: string;
152
+ }>;
153
+ };
154
+ type CommerceResolverResult = {
155
+ data: Record<string, unknown>;
156
+ items?: ResolvedCommerceItem[];
157
+ value?: number;
158
+ currency?: string;
159
+ };
160
+ type CommerceResolverOptions = {
161
+ catalog: ProductCatalog;
162
+ state: CommerceState;
163
+ calculator: OrderCalculator;
164
+ defaultCurrency?: string;
165
+ calculateValueFrom?: CommerceCalculateValueFrom;
166
+ };
167
+ /**
168
+ * Combina payload + extracted + state + catalog + defaults.
169
+ * Não dispara eventos, não escreve em CommerceState, não conhece DOM/Transport.
170
+ *
171
+ * Prioridade de merge por campo:
172
+ * manual payload > extractedProduct > commerce state > catalog > defaults
173
+ */
174
+ declare class CommerceResolver {
175
+ private readonly catalog;
176
+ private readonly state;
177
+ private readonly calculator;
178
+ private readonly defaultCurrency?;
179
+ private readonly calculateValueFrom;
180
+ constructor(options: CommerceResolverOptions);
181
+ resolve(input: CommerceResolverInput): CommerceResolverResult;
182
+ private resolveAddToCart;
183
+ /**
184
+ * Escolhe o item principal do cart runtime:
185
+ * 1. único item → esse
186
+ * 2. múltiplos → preferir catalog.type === 'main'
187
+ * 3. senão → primeiro do cart
188
+ * 4. cart vazio → null
189
+ */
190
+ private resolvePrimaryCartItem;
191
+ private resolveRemoveFromCart;
192
+ private resolveCheckoutLike;
193
+ private resolveViewContent;
194
+ /**
195
+ * null = payload não trouxe items (usar state conforme calculateValueFrom)
196
+ * [] = payload trouxe items vazios
197
+ */
198
+ private readPayloadItems;
199
+ private resolveItemsSource;
200
+ private enrichItem;
201
+ private toPixelItem;
202
+ private normalizeLooseItem;
203
+ private lookupIdBySku;
204
+ private lookupProductBySku;
205
+ }
206
+
207
+ type CommerceEnrichmentEvent = 'pageView' | 'viewContent' | 'lead' | 'addToCart' | 'removeFromCart' | 'initiateCheckout' | 'addPaymentInfo' | 'purchase';
208
+ type PageViewCommercePayload = {
209
+ readonly value?: number;
210
+ readonly currency?: string;
211
+ readonly items?: PixelItem[];
212
+ readonly contentId?: string;
213
+ readonly contentName?: string;
214
+ };
215
+ /**
216
+ * Serviço compartilhado de commerce (root config).
217
+ * Usado por Core (PAGE_VIEW) e Conversion sem dependência circular
218
+ * entre os módulos.
219
+ */
220
+ declare class CommerceService {
221
+ readonly enabled: boolean;
222
+ readonly config: CommerceConfig;
223
+ readonly catalog: ProductCatalog;
224
+ readonly state: CommerceState;
225
+ private readonly resolver;
226
+ constructor(config: CommerceConfig | undefined);
227
+ getEnrichment(event: CommerceEnrichmentEvent): CommerceEventEnrichmentConfig;
228
+ isEnabled(): boolean;
229
+ isEnrichmentEnabled(event: CommerceEnrichmentEvent): boolean;
230
+ getEnrichmentSource(event: CommerceEnrichmentEvent): CommerceEnrichmentSource;
231
+ /**
232
+ * Resolve payload de commerce para um evento conversion.
233
+ * Retorna null quando enrichment está desabilitado (caller usa payload original).
234
+ */
235
+ resolveForEvent(event: CommerceEnrichmentEvent, eventType: 'ADD_TO_CART' | 'REMOVE_FROM_CART' | 'INITIATE_CHECKOUT' | 'PURCHASE' | 'VIEW_CONTENT' | 'ADD_PAYMENT_INFO', payload?: Record<string, unknown>): Record<string, unknown> | null;
236
+ /**
237
+ * Payload de commerce para PAGE_VIEW quando enrichment.pageView.enabled.
238
+ * Não depende de ConversionEngine.
239
+ */
240
+ resolvePageViewEnrichment(): PageViewCommercePayload | null;
241
+ getResolver(): CommerceResolver;
242
+ getCalculateValueFrom(): ReturnType<typeof normalizeCalculateValueFrom>;
243
+ getMappings(): CommerceMappingsConfig | undefined;
244
+ }
245
+
246
+ interface FingerprintService {
247
+ getFingerprint(): string | null;
248
+ ensureFingerprint(): string;
249
+ }
250
+
251
+ interface SessionData {
252
+ readonly sessionId: string;
253
+ readonly lastActivityAt: number;
254
+ readonly createdAt: number;
255
+ }
256
+ type EnsureSessionResult = {
257
+ readonly sessionId: string;
258
+ readonly expired: boolean;
259
+ readonly previousSessionId?: string;
260
+ readonly created: boolean;
261
+ };
262
+ interface SessionService {
263
+ getSessionId(): string | null;
264
+ getSessionData(): SessionData | null;
265
+ getLastActivityAt(): number | null;
266
+ isExpired(ttlMs: number): boolean;
267
+ ensureSession(ttlMs: number): EnsureSessionResult;
268
+ ensureSessionId(): string;
269
+ touchActivity(): void;
270
+ renew(): string;
271
+ clear(): void;
272
+ }
273
+
274
+ interface VisitorService {
275
+ getVisitorId(): string | null;
276
+ ensureVisitorId(): string;
277
+ clearVisitorId(): void;
278
+ }
279
+
280
+ type PixelRuntimeServices = {
281
+ readonly storage: StorageService;
282
+ readonly visitor: VisitorService;
283
+ readonly session: SessionService;
284
+ readonly fingerprint: FingerprintService;
285
+ readonly dispatcher: DispatcherService;
286
+ readonly browserMetadata: BrowserMetadataService;
287
+ readonly eventBuilder: BaseEventBuilder;
288
+ readonly attribution: AttributionService;
289
+ readonly commerce: CommerceService;
290
+ readonly urlContext: UrlContextService;
291
+ };
292
+
293
+ export { CommerceResolver as C, type DispatcherService as D, type EnsureSessionResult as E, type FingerprintService as F, OrderCalculator as O, type PixelRuntimeServices as P, type ResolvedCommerceItem as R, type SessionService as S, type VisitorService as V, type SessionData as a, CommerceService as b, CommerceState as c, ProductCatalog as d, type CommerceEnrichmentEvent as e, type CommerceEventType as f, type CommerceResolverInput as g, type CommerceResolverOptions as h, type CommerceResolverResult as i, type CommerceStateOptions as j, type CommerceStateSnapshot as k, type ExtractedProductInput as l, type OrderCalculationInput as m, type OrderCalculationResult as n, type PageViewCommercePayload as o, type ProductCatalogOptions as p, type ProductCatalogSnapshot as q };
@@ -0,0 +1,293 @@
1
+ import { P as PixelEvent, b as PixelItem, S as StorageService, B as BrowserMetadataService, c as BaseEventBuilder, A as AttributionService, U as UrlContextService } from './index-B8u_3PGG.js';
2
+ import { ao as CommerceProduct, ai as CommerceCartItem, ag as CommerceCalculateValueFrom, al as CommerceEnrichmentSource, C as CommerceConfig, am as CommerceEventEnrichmentConfig, aw as normalizeCalculateValueFrom, an as CommerceMappingsConfig } from './pixel-DNGbAN5C.js';
3
+
4
+ interface DispatcherService {
5
+ dispatch(event: PixelEvent): void;
6
+ subscribe(listener: (event: PixelEvent) => void): () => void;
7
+ clear(): void;
8
+ getListenerCount(): number;
9
+ getLastEvent(): PixelEvent | null;
10
+ }
11
+
12
+ type ProductCatalogOptions = {
13
+ readonly defaultCurrency?: string;
14
+ };
15
+ type ProductCatalogSnapshot = {
16
+ readonly products: CommerceProduct[];
17
+ readonly count: number;
18
+ };
19
+ /**
20
+ * Catálogo de produtos configurados em `config.commerce.catalog`.
21
+ * Isolado por instância — sem estado global / module-level.
22
+ * Não acessa DOM, Transport nem altera payloads de eventos.
23
+ */
24
+ declare class ProductCatalog {
25
+ private readonly productsById;
26
+ private readonly productsBySku;
27
+ private readonly orderedIds;
28
+ constructor(products?: readonly CommerceProduct[] | undefined, options?: ProductCatalogOptions);
29
+ list(): CommerceProduct[];
30
+ getById(id: string): CommerceProduct | null;
31
+ getBySku(sku: string): CommerceProduct | null;
32
+ hasProduct(id: string): boolean;
33
+ getSnapshot(): ProductCatalogSnapshot;
34
+ private indexProducts;
35
+ private normalizeProduct;
36
+ private cloneProduct;
37
+ }
38
+
39
+ type CommerceStateOptions = {
40
+ /**
41
+ * Quando `false`, `upsertItem` só atualiza itens já presentes
42
+ * (não adiciona novos productIds). Default: `true`.
43
+ */
44
+ readonly allowDynamicItems?: boolean;
45
+ };
46
+ type CommerceStateSnapshot = {
47
+ /**
48
+ * Estado vivo do carrinho (runtime).
49
+ * Não confundir com `commerce.cart.initialItems` da config.
50
+ */
51
+ readonly selectedItems: CommerceCartItem[];
52
+ readonly count: number;
53
+ };
54
+ /**
55
+ * Estado em memória do cart da instância.
56
+ * Inicializado com `config.commerce.cart.initialItems`.
57
+ * Não persiste, não acessa DOM/Transport e não dispara eventos.
58
+ */
59
+ declare class CommerceState {
60
+ private readonly itemsByProductId;
61
+ private readonly allowDynamicItems;
62
+ constructor(initialItems?: readonly CommerceCartItem[] | undefined, options?: CommerceStateOptions);
63
+ getSelectedItems(): CommerceCartItem[];
64
+ hasItem(productId: string): boolean;
65
+ getItem(productId: string): CommerceCartItem | null;
66
+ /**
67
+ * Insere ou atualiza item.
68
+ * - Sem `productId` → no-op
69
+ * - `selected === false` → remove se existir / não adiciona
70
+ * - `quantity <= 0` → remove
71
+ * - `allowDynamicItems === false` e item novo → no-op
72
+ */
73
+ upsertItem(item: CommerceCartItem): void;
74
+ removeItem(productId: string): void;
75
+ /**
76
+ * Atualiza quantidade. `quantity <= 0` remove o item.
77
+ */
78
+ updateQuantity(productId: string, quantity: number): void;
79
+ clear(): void;
80
+ getSnapshot(): CommerceStateSnapshot;
81
+ private seed;
82
+ private seedItem;
83
+ private normalizeQuantity;
84
+ private cloneItem;
85
+ }
86
+
87
+ /**
88
+ * Calcula value/currency a partir de items resolvidos.
89
+ * Não conhece DOM, detectors, Transport nem Dispatcher.
90
+ * Não muta o input.
91
+ */
92
+ type ResolvedCommerceItem = {
93
+ productId?: string;
94
+ sku?: string;
95
+ productName?: string;
96
+ price?: number;
97
+ quantity?: number;
98
+ currency?: string;
99
+ category?: string;
100
+ variant?: string;
101
+ brand?: string;
102
+ type?: string;
103
+ metadata?: Record<string, unknown>;
104
+ };
105
+ type OrderCalculationInput = {
106
+ items?: ResolvedCommerceItem[];
107
+ value?: number;
108
+ currency?: string;
109
+ defaultCurrency?: string;
110
+ };
111
+ type OrderCalculationResult = {
112
+ items: ResolvedCommerceItem[];
113
+ value?: number;
114
+ currency?: string;
115
+ };
116
+ declare class OrderCalculator {
117
+ calculate(input: OrderCalculationInput): OrderCalculationResult;
118
+ private sumValue;
119
+ /**
120
+ * Ordem: currency manual → primeiro item com currency → defaultCurrency.
121
+ * Multi-currency: determinístico — usa o primeiro item com currency
122
+ * (não normaliza conversão entre moedas nesta etapa).
123
+ */
124
+ private resolveCurrency;
125
+ private cloneItem;
126
+ }
127
+
128
+ type CommerceEventType = 'ADD_TO_CART' | 'REMOVE_FROM_CART' | 'INITIATE_CHECKOUT' | 'PURCHASE' | 'VIEW_CONTENT' | 'ADD_PAYMENT_INFO';
129
+ type ExtractedProductInput = {
130
+ productId?: string;
131
+ productName?: string;
132
+ price?: number;
133
+ quantity?: number;
134
+ currency?: string;
135
+ sku?: string;
136
+ };
137
+ type CommerceResolverInput = {
138
+ eventType: CommerceEventType;
139
+ payload?: Record<string, unknown>;
140
+ extractedProduct?: ExtractedProductInput;
141
+ enrichmentSource?: CommerceEnrichmentSource;
142
+ items?: Array<{
143
+ productId?: string;
144
+ id?: string;
145
+ sku?: string;
146
+ name?: string;
147
+ productName?: string;
148
+ price?: number;
149
+ quantity?: number;
150
+ currency?: string;
151
+ category?: string;
152
+ }>;
153
+ };
154
+ type CommerceResolverResult = {
155
+ data: Record<string, unknown>;
156
+ items?: ResolvedCommerceItem[];
157
+ value?: number;
158
+ currency?: string;
159
+ };
160
+ type CommerceResolverOptions = {
161
+ catalog: ProductCatalog;
162
+ state: CommerceState;
163
+ calculator: OrderCalculator;
164
+ defaultCurrency?: string;
165
+ calculateValueFrom?: CommerceCalculateValueFrom;
166
+ };
167
+ /**
168
+ * Combina payload + extracted + state + catalog + defaults.
169
+ * Não dispara eventos, não escreve em CommerceState, não conhece DOM/Transport.
170
+ *
171
+ * Prioridade de merge por campo:
172
+ * manual payload > extractedProduct > commerce state > catalog > defaults
173
+ */
174
+ declare class CommerceResolver {
175
+ private readonly catalog;
176
+ private readonly state;
177
+ private readonly calculator;
178
+ private readonly defaultCurrency?;
179
+ private readonly calculateValueFrom;
180
+ constructor(options: CommerceResolverOptions);
181
+ resolve(input: CommerceResolverInput): CommerceResolverResult;
182
+ private resolveAddToCart;
183
+ /**
184
+ * Escolhe o item principal do cart runtime:
185
+ * 1. único item → esse
186
+ * 2. múltiplos → preferir catalog.type === 'main'
187
+ * 3. senão → primeiro do cart
188
+ * 4. cart vazio → null
189
+ */
190
+ private resolvePrimaryCartItem;
191
+ private resolveRemoveFromCart;
192
+ private resolveCheckoutLike;
193
+ private resolveViewContent;
194
+ /**
195
+ * null = payload não trouxe items (usar state conforme calculateValueFrom)
196
+ * [] = payload trouxe items vazios
197
+ */
198
+ private readPayloadItems;
199
+ private resolveItemsSource;
200
+ private enrichItem;
201
+ private toPixelItem;
202
+ private normalizeLooseItem;
203
+ private lookupIdBySku;
204
+ private lookupProductBySku;
205
+ }
206
+
207
+ type CommerceEnrichmentEvent = 'pageView' | 'viewContent' | 'lead' | 'addToCart' | 'removeFromCart' | 'initiateCheckout' | 'addPaymentInfo' | 'purchase';
208
+ type PageViewCommercePayload = {
209
+ readonly value?: number;
210
+ readonly currency?: string;
211
+ readonly items?: PixelItem[];
212
+ readonly contentId?: string;
213
+ readonly contentName?: string;
214
+ };
215
+ /**
216
+ * Serviço compartilhado de commerce (root config).
217
+ * Usado por Core (PAGE_VIEW) e Conversion sem dependência circular
218
+ * entre os módulos.
219
+ */
220
+ declare class CommerceService {
221
+ readonly enabled: boolean;
222
+ readonly config: CommerceConfig;
223
+ readonly catalog: ProductCatalog;
224
+ readonly state: CommerceState;
225
+ private readonly resolver;
226
+ constructor(config: CommerceConfig | undefined);
227
+ getEnrichment(event: CommerceEnrichmentEvent): CommerceEventEnrichmentConfig;
228
+ isEnabled(): boolean;
229
+ isEnrichmentEnabled(event: CommerceEnrichmentEvent): boolean;
230
+ getEnrichmentSource(event: CommerceEnrichmentEvent): CommerceEnrichmentSource;
231
+ /**
232
+ * Resolve payload de commerce para um evento conversion.
233
+ * Retorna null quando enrichment está desabilitado (caller usa payload original).
234
+ */
235
+ resolveForEvent(event: CommerceEnrichmentEvent, eventType: 'ADD_TO_CART' | 'REMOVE_FROM_CART' | 'INITIATE_CHECKOUT' | 'PURCHASE' | 'VIEW_CONTENT' | 'ADD_PAYMENT_INFO', payload?: Record<string, unknown>): Record<string, unknown> | null;
236
+ /**
237
+ * Payload de commerce para PAGE_VIEW quando enrichment.pageView.enabled.
238
+ * Não depende de ConversionEngine.
239
+ */
240
+ resolvePageViewEnrichment(): PageViewCommercePayload | null;
241
+ getResolver(): CommerceResolver;
242
+ getCalculateValueFrom(): ReturnType<typeof normalizeCalculateValueFrom>;
243
+ getMappings(): CommerceMappingsConfig | undefined;
244
+ }
245
+
246
+ interface FingerprintService {
247
+ getFingerprint(): string | null;
248
+ ensureFingerprint(): string;
249
+ }
250
+
251
+ interface SessionData {
252
+ readonly sessionId: string;
253
+ readonly lastActivityAt: number;
254
+ readonly createdAt: number;
255
+ }
256
+ type EnsureSessionResult = {
257
+ readonly sessionId: string;
258
+ readonly expired: boolean;
259
+ readonly previousSessionId?: string;
260
+ readonly created: boolean;
261
+ };
262
+ interface SessionService {
263
+ getSessionId(): string | null;
264
+ getSessionData(): SessionData | null;
265
+ getLastActivityAt(): number | null;
266
+ isExpired(ttlMs: number): boolean;
267
+ ensureSession(ttlMs: number): EnsureSessionResult;
268
+ ensureSessionId(): string;
269
+ touchActivity(): void;
270
+ renew(): string;
271
+ clear(): void;
272
+ }
273
+
274
+ interface VisitorService {
275
+ getVisitorId(): string | null;
276
+ ensureVisitorId(): string;
277
+ clearVisitorId(): void;
278
+ }
279
+
280
+ type PixelRuntimeServices = {
281
+ readonly storage: StorageService;
282
+ readonly visitor: VisitorService;
283
+ readonly session: SessionService;
284
+ readonly fingerprint: FingerprintService;
285
+ readonly dispatcher: DispatcherService;
286
+ readonly browserMetadata: BrowserMetadataService;
287
+ readonly eventBuilder: BaseEventBuilder;
288
+ readonly attribution: AttributionService;
289
+ readonly commerce: CommerceService;
290
+ readonly urlContext: UrlContextService;
291
+ };
292
+
293
+ export { CommerceResolver as C, type DispatcherService as D, type EnsureSessionResult as E, type FingerprintService as F, OrderCalculator as O, type PixelRuntimeServices as P, type ResolvedCommerceItem as R, type SessionService as S, type VisitorService as V, type SessionData as a, CommerceService as b, CommerceState as c, ProductCatalog as d, type CommerceEnrichmentEvent as e, type CommerceEventType as f, type CommerceResolverInput as g, type CommerceResolverOptions as h, type CommerceResolverResult as i, type CommerceStateOptions as j, type CommerceStateSnapshot as k, type ExtractedProductInput as l, type OrderCalculationInput as m, type OrderCalculationResult as n, type PageViewCommercePayload as o, type ProductCatalogOptions as p, type ProductCatalogSnapshot as q };
@@ -0,0 +1,19 @@
1
+ import { P as PixelConfig } from './pixel-DNGbAN5C.js';
2
+ import { P as PixelLogger } from './PixelLogger-B21lEjep.js';
3
+ import { P as PixelRuntimeServices } from './types-D3kJ9bfT.js';
4
+
5
+ type PixelRuntimeContext = {
6
+ readonly config: PixelConfig;
7
+ readonly logger: PixelLogger;
8
+ readonly services: PixelRuntimeServices;
9
+ };
10
+
11
+ type ModuleName = 'privacy' | 'core' | 'behavior' | 'conversion' | 'transport' | 'integrations' | 'diagnostics';
12
+
13
+ interface PixelModule {
14
+ readonly name: ModuleName;
15
+ init(context: PixelRuntimeContext): void | Promise<void>;
16
+ destroy?(): void | Promise<void>;
17
+ }
18
+
19
+ export type { ModuleName as M, PixelModule as P, PixelRuntimeContext as a };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Contratos de Core UrlContext — captura, gestão e propagação de params de URL.
3
+ * `sid` público ≠ `session_id` interno do Pixel.
4
+ */
5
+ type UrlContextMode = 'allowlist' | 'all_except';
6
+ type UrlContextSource = 'url' | 'cookie' | 'storage' | 'generated'
7
+ /** Valor definido após o init via API pública (ex.: oid no checkout). */
8
+ | 'manual';
9
+ type UrlContextWriteStrategy = 'replaceState' | 'none';
10
+ type UrlContextLinkDecorationStrategy = 'on_click' | 'on_init' | 'both';
11
+ type UrlManagedParamMode = 'read_only' | 'write_only' | 'read_write';
12
+ type UrlQueryParamsConfig = {
13
+ enabled?: boolean;
14
+ mode?: UrlContextMode;
15
+ allowlist?: string[];
16
+ denylist?: string[];
17
+ mergeDefaultDenylist?: boolean;
18
+ };
19
+ type UrlManagedParamGeneratorConfig = {
20
+ type: 'public_id';
21
+ prefix?: string;
22
+ };
23
+ type UrlManagedParamCookieConfig = {
24
+ enabled?: boolean;
25
+ name?: string;
26
+ domain?: 'auto' | string;
27
+ path?: string;
28
+ sameSite?: 'Lax' | 'Strict' | 'None';
29
+ secure?: boolean;
30
+ maxAgeMs?: number;
31
+ };
32
+ type UrlManagedParamPersistenceConfig = {
33
+ enabled?: boolean;
34
+ strategy?: 'storage' | 'cookie' | 'localStorage_cookie';
35
+ storageKey?: string;
36
+ cookie?: UrlManagedParamCookieConfig;
37
+ };
38
+ type UrlManagedParamConfig = {
39
+ key: string;
40
+ param: string;
41
+ mode?: UrlManagedParamMode;
42
+ writeStrategy?: UrlContextWriteStrategy;
43
+ generator?: UrlManagedParamGeneratorConfig;
44
+ persistence?: UrlManagedParamPersistenceConfig;
45
+ decorateLinks?: boolean;
46
+ };
47
+ type UrlForwardParamsConfig = {
48
+ enabled?: boolean;
49
+ mode?: UrlContextMode;
50
+ allowlist?: string[];
51
+ denylist?: string[];
52
+ mergeDefaultDenylist?: boolean;
53
+ };
54
+ type UrlLinkDecorationConfig = {
55
+ enabled?: boolean;
56
+ strategy?: UrlContextLinkDecorationStrategy;
57
+ selector?: string;
58
+ allowedDomains?: '*' | string[];
59
+ excludedDomains?: string[];
60
+ mergeDefaultExcludedDomains?: boolean;
61
+ excludeSelectors?: string[];
62
+ mergeDefaultExcludeSelectors?: boolean;
63
+ preserveExisting?: boolean;
64
+ overwriteExisting?: boolean;
65
+ decorateHashLinks?: boolean;
66
+ decorateMailto?: boolean;
67
+ decorateTel?: boolean;
68
+ };
69
+ type UrlContextConfig = {
70
+ enabled?: boolean;
71
+ queryParams?: UrlQueryParamsConfig;
72
+ managedParams?: UrlManagedParamConfig[];
73
+ forwardParams?: UrlForwardParamsConfig;
74
+ linkDecoration?: UrlLinkDecorationConfig;
75
+ };
76
+ /** Payload interno (camelCase) anexado pelo EventBuilder. */
77
+ type UrlContextPayload = {
78
+ managed?: Record<string, string>;
79
+ forwarded?: Record<string, string>;
80
+ source?: Record<string, UrlContextSource>;
81
+ };
82
+ type UrlContextSnapshot = {
83
+ queryParams: Record<string, string>;
84
+ urlContext: UrlContextPayload;
85
+ };
86
+
87
+ export type { UrlContextConfig as U, UrlContextSnapshot as a, UrlContextLinkDecorationStrategy as b, UrlContextMode as c, UrlContextPayload as d, UrlContextSource as e, UrlContextWriteStrategy as f, UrlForwardParamsConfig as g, UrlLinkDecorationConfig as h, UrlManagedParamConfig as i, UrlManagedParamMode as j, UrlQueryParamsConfig as k };